Étape 6: codage
Code est ci-dessous
Code a expliqué :
Les servos continues prennent une entrée comme servos normal de données, mais plutôt interpréter ces données comme un angle, ils interprètent ces données comme une vitesse. Pour les servos plus continus l’angle (90) est stop, (0) est pleine vitesse inversée et (180) est pleine vitesse vers l’avant. La voiture de l’exemple utilisé continus servos utilisés (95) pour arrêter, (0) pour revers pleine vitesse et (190) à pleine vitesse vers l’avant. Vous devrez peut-être prendre cela en compte et modifier votre code basé sur votre choix de servo. Dans l’exemple de code vers l’avant est (75) et (115). C’est parce que les servos sont montés en miroir les uns aux autres. Donc avec impatience l’un est l’autre au verso.
Les capteurs sont lues dans le code. Ils donneront une valeur comprise entre 0-1023. Lorsque la valeur retournée est faible le capteur voit une couleur claire (blanc). Lorsque la valeur de retour est élevée le capteur voit une couleur sombre (noir). Le code utilise « k » qui est une constante de l’accordage. « k » est la coupure de la déterminer si la couleur est noire. Cela peut être réglé selon hors d’éclairage de l’environnement et de la réflectivité de surface. La voiture de l’exemple utilise une coupe large de 500.
Il y a 3 capteurs sur la voiture. Droite, à gauche et centre. Le concept général de cet algorithme est que la voiture essaie de toujours garder les capteurs de la droite et à gauche de chaque côté de la ligne et le centre sur la ligne proprement dite.
- Si la droite et la gauche voient blanc et le centre voit noir, que la voiture se met en marche.
- Si le centre de droit et de voient en noir et la gauche voit blanc la voiture avis un virage à droite et tourne à droite.
Si la gauche et au centre de voir en noir et le droit voit blanc la voiture avis un virage à gauche et tourne à gauche.
- Si le centre voit droit du tout, il réalise un fail safe, qu’il est hors de la piste et soutient pendant 8 secondes pour retourner à la piste.
La série print out sont uniquement pour les essais et le réglage de la valeur « k » si nécessaire. Ils ne servent aucun fonction pour le rendement réel de la voiture elle-même.
#include
Servo servoLeft ; Définir servoRight de Servo servo gauche ; Définir le servo de droite int k = 500 ; Étalonnage de blanc/noir coupé
void setup() {servoLeft.attach(10); / / Set servo gauche à broche numérique 10 servoRight.attach(9); / / Set servo droit au numérique pin 9 Serial.begin(9600);}
void loop() {/ / lecture de l’entrée sur la broche analogique 0: int sensorleft = analogRead(A0) ; int sensorright = analogRead(A1) ; int sensorcenter = analogRead(A2); / / droite
Si (sensorleft < k & & sensorright < k & & sensorcenter > k) {}
servoLeft.write(75) ; ta servoRight.write(115) ; }
gauche
Si (sensorleft > k & & sensorright < k & & sensorcenter > k) {}
servoLeft.write(55) ; servoRight.write(90) gauche ; } / / droite
Si (sensorleft < k & & sensorright > k & & sensorcenter > k) {}
servoLeft.write(100) ; Righ servoRight.write(135) ; }
sécurité hors piste
Si (sensorcenter < k) {}
servoLeft.write(100) ; re servoRight.write(90) ; Delay(800) ; }
Serial.Print(sensorleft) ; Serial.Print("") ; Serial.Print(sensorright) ; Serial.Print("") ; Serial.Print(sensorcenter) ; Serial.Print("") ;
}