Etape 5: Programmation de l’Arduino
Charger le programme suivant dans l’Arduino.Le programme peut être téléchargé ici :
http://www.zagrosrobotics.com/files/Mag_Light_Follower_04062013.INO
Ce programme utilise un programme de terminal pour communiquer avec le robot. Vous pouvez utiliser le Serial Monitor dans l’environnement de développement Arduino. Vous pouvez également utiliser Hyperterminal ou Realterm (qui sera plus facile à utiliser).
Le programme comprend des fonctions de base de contrôle moteur :
« f » - vers l’avant
« b » - vers l’arrière
« l » - rotation gauche
« r » - rotation droite
de ' - stop
Ces commande peut être utilisée pour définir le sens de vos moteurs.
La nouvelle commande « g » qui a été ajouté au programme pour ce projet nous dira au robot pour commencer à chercher la source de lumière.
Les broches d’entrée analogiques 0 et 1 va lire la valeur analogique des photodétecteurs et convertir à un entier de valeur comprise entre 0 et 255.
Chaque moteur a un sens et une valeur PWM (vitesse). La valeur PWM sont limitées entre 0 et 255.
################################### Arduino code ###############################
Suivant l’exemple de la ligne 06/04/2013
int pwm_a = 10 ; Commande PWM pour moteurs sorties 1 et 2 est sur la broche numérique 10
int pwm_b = 11 ; Commande PWM pour moteurs sorties 3 et 4 est sur la broche numérique 11
int dir_a = 12 ; commande de direction pour moteurs sorties 1 et 2 est sur la broche numérique 12
int dir_b = 13 ; commande de direction pour moteurs sorties 3 et 4 est sur la broche numérique 13
int incomingByte = 0 ; pour les données entrantes de série
int encoderCount = 0 ;
int encoderOld = 0 ;
int encoderState = 0 ;
int sensorState = 0 ;
int lightsensor_left = 0 ;
int lightsensor_right = 0 ;
int temp_var = 0 ;
gain d’int = 2 ; système de contrôle de gain var
const int encoderPin = 2 ;
const int sensorPin = 3 ;
void setup()
{
pinMode (pwm_a, sortie) ; Broches de contrôle pour être sorties
pinMode (pwm_b, sortie) ;
pinMode (dir_a, sortie) ;
pinMode (dir_b, sortie) ;
analogWrite (pwm_a, 0) ; les deux moteurs de fonctionner à la valeur (100/255 = 39) % rapport cyclique (lent)
analogWrite (pwm_b, 0) ;
Serial.Begin(115200) ;
Serial.Print ("Zagros Robotics, Inc.") ;
Serial.Print ("magicien adepte lumière Demo 4/6/2013\n") ;
}
void loop()
{
Serial.Print ("Zagros Robotics, Inc.") ;
Si (Serial.available() > 0) {}
lire les octets entrants :
incomingByte = Serial.read() ;
}
lire les capteurs de lumière
lightsensor_left=analogRead(0) ;
lightsensor_right=analogRead(1) ;
Serial.println(lightsensor_left) ;
Serial.println(lightsensor_right) ;
Switch(incomingByte)
{
de l’affaire ":
digitalWrite (dir_a, basse) ;
analogWrite (pwm_a, 0) ;
digitalWrite (dir_b, basse) ;
analogWrite (pwm_b, 0) ;
Serial.println("Stop\n") ;
incomingByte ='* ' ;
rupture ;
case « f » :
digitalWrite (dir_a, basse) ;
analogWrite (pwm_a, 255) ;
digitalWrite (dir_b, basse) ;
analogWrite (pwm_b, 255) ;
Serial.println("Forward\n") ;
incomingByte ='* ' ;
rupture ;
case « b » :
digitalWrite (dir_a, HIGH) ;
analogWrite (pwm_a, 255) ;
digitalWrite (dir_b, HIGH) ;
analogWrite (pwm_b, 255) ;
Serial.println("Backward\n") ;
incomingByte ='* ' ;
rupture ;
case « l » :
digitalWrite (dir_a, basse) ;
analogWrite (pwm_a, 255) ;
digitalWrite (dir_b, HIGH) ;
analogWrite (pwm_b, 255) ;
Serial.println ("rotation Left\n") ;
incomingByte ='* ' ;
rupture ;
case « r » :
digitalWrite (dir_a, HIGH) ;
analogWrite (pwm_a, 255) ;
digitalWrite (dir_b, basse) ;
analogWrite (pwm_b, 255) ;
Serial.println ("rotation Left\n") ;
incomingByte ='* ' ;
rupture ;
case « g »: //follow la lumière
gain = 3 ;
temp_var = (lightsensor_left - lightsensor_right) * gain ;
Si (temp_var > 0)
{
digitalWrite (dir_a, HIGH) ;
digitalWrite (dir_b, basse) ;
Serial.println ("rotation Left\n") ;
}
d’autre
{
digitalWrite (dir_a, basse) ;
digitalWrite (dir_b, HIGH) ;
Serial.println ("rotation Right\n") ;
}
Serial.println(temp_var) ;
temp_var=ABS(temp_var) ;
if(temp_var > 255)
{
temp_var = 255 ;
}
analogWrite (pwm_a, temp_var) ;
analogWrite (pwm_b, temp_var) ;
rupture ;
case « v » :
Serial.println ("Version 04042013a\n") ;
incomingByte ='* ' ;
rupture ;
Delay(500) ;
}
} / / fin de boucle