Projet 10 Robot Suiveur de Lumière

Description
Nous avons présenté comment utiliser différents capteurs et modules.
Dans cette leçon, nous combinons les connaissances matérielles – module photorésistance, commande moteur, pour construire un robot suiveur de lumière !
Il suffit d’utiliser 2 modules photorésistance pour détecter l’intensité lumineuse des deux côtés du robot. Lire la valeur analogique pour faire tourner les 2 moteurs, et ainsi faire fonctionner le robot tank.
La logique spécifique du robot suiveur de lumière est présentée dans le tableau ci-dessous :

Nous créons un organigramme basé sur le tableau logique ci-dessus, comme indiqué ci-dessous :

Schéma de Connexion

Attention :
Le bloc terminal 4 broches est marqué avec la sérigraphie 1234. Le fil rouge du moteur arrière droit est connecté à la borne 1, le fil noir est relié à la borne 2. Le fil rouge du moteur avant gauche est attaché à la borne 3, le fil noir est relié au port 4.
Photorésistance gauche |
Capteur Shield |
|
|---|---|---|
- |
→ |
G(GND) |
+ |
→ |
V(VCC) |
S |
→ |
A1 |
Photorésistance droite |
Capteur Shield |
|
- |
→ |
G(GND) |
+ |
→ |
V(VCC) |
S |
→ |
A2 |
Code de Test
/*
keyestudio Mini Tank Robot V2.1
leçon 10
Tank suiveur de lumière
http://www.keyestudio.com
*/
#define light_L_Pin A1 //définir la broche du photorésistance gauche
#define light_R_Pin A2 //définir la broche du photorésistance droit
#define ML_Ctrl 13 //définir la broche de contrôle de direction du moteur gauche
#define ML_PWM 11 //définir la broche de contrôle PWM du moteur gauche
#define MR_Ctrl 12 //définir la broche de contrôle de direction du moteur droit
#define MR_PWM 3 //définir la broche de contrôle PWM du moteur droit
int left_light;
int right_light;
void setup(){
Serial.begin(9600);
pinMode(light_L_Pin, INPUT);
pinMode(light_R_Pin, INPUT);
pinMode(ML_Ctrl, OUTPUT);
pinMode(ML_PWM, OUTPUT);
pinMode(MR_Ctrl, OUTPUT);
pinMode(MR_PWM, OUTPUT);
}
void loop(){
left_light = analogRead(light_L_Pin);
right_light = analogRead(light_R_Pin);
Serial.print("left_light_value = ");
Serial.println(left_light);
Serial.print("right_light_value = ");
Serial.println(right_light);
if (left_light > 650 && right_light > 650) //la valeur détectée par le photorésistance, avancer
{
Car_front();
}
else if (left_light > 650 && right_light <= 650) //la valeur détectée par le photorésistance, tourner à gauche
{
Car_left();
}
else if (left_light <= 650 && right_light > 650) //la valeur détectée par le photorésistance, tourner à droite
{
Car_right();
}
else //autres situations, arrêter
{
Car_Stop();
}
}
void Car_front()
{
digitalWrite(MR_Ctrl,LOW);
analogWrite(MR_PWM,200);
digitalWrite(ML_Ctrl,LOW);
analogWrite(ML_PWM,200);
}
void Car_left()
{
digitalWrite(MR_Ctrl,LOW);
analogWrite(MR_PWM,200);
digitalWrite(ML_Ctrl,HIGH);
analogWrite(ML_PWM,200);
}
void Car_right()
{
digitalWrite(MR_Ctrl,HIGH);
analogWrite(MR_PWM,200);
digitalWrite(ML_Ctrl,LOW);
analogWrite(ML_PWM,200);
}
void Car_Stop()
{
digitalWrite(MR_Ctrl,LOW);
analogWrite(MR_PWM,0);
digitalWrite(ML_Ctrl,LOW);
analogWrite(ML_PWM,0);
}
//****************************************************************
Résultat du Test
Téléchargez le code sur la carte de développement keyestudio V4.0, le commutateur DIP est basculé à l’extrémité droite et l’alimentation est activée, le robot intelligent suit la lumière pour se déplacer.