Etape 5: programmation
Ce qu’il fait
- Le programme conduira votre robot vers l’avant jusqu'à ce qu’un des moustaches rencontre quelque chose, il sera ensuite inverser pour 500 millisecondes puis tourner au hasard à gauche ou à droite pendant une période de 300 à 1500 millisecondes avant de continuer vers l’avant de rencontrer un autre obstacle.
Pour ceux qui souhaitent simplement s’y aller y a deux options.
Option 1 - téléchargement et décompression
- Télécharger le fichier zip joint (07_SERB_Whiskers.zip)
- Décompressez-le dans votre répertoire de sketch Arduino (par défaut /My Documents/Arduino /)
- Lancer l’environnement Arduino et charge le croquis (_SERB_Whiskers)
- Télécharger et commencer à jouer
Option 2 - copie et collage
- Copiez le code de l’Arduino par en dessous
- Collez-le dans l’environnement de développement Arduino.
- Télécharger et commencer à jouer
Annexe 1 - Arduino Code (_SERB_Whiskers)
/ *** * Arduino contrôlée Servo Robot (serbe) - évitement Whisker ** pour plus de détails, visitez : http://www.oomlout.com/serb **** comportement : utilise deux fils moustaches, de tomber sur les obstacles et ** changer de direction en conséquence. Il interroge le ** moustaches et quand on se trouve pour être déclenchement il ** inversera pour 500 millisecondes alors ** tourner au hasard à gauche ou à droite pour un temps aléatoire ** entre 300 et 1500 millisecondes **** câblage:--Arduino contrôlée Servo Robot--** droit Servo Signal - Broche 9 ** Signal de Servo gauche - broche 10 **--Whisker câblage--** droite whisker - broche 6 ** laissé whisker - broche 7 ** favori commun - sol **** licence : Ce travail est licencié sous Creative Commons ** Attribution-Share Alike 3.0 Unported License. À ** consulter un exemplaire de cette licence, visitez ** http://creativecommons.org/licenses/by-sa/3.0/ ** ou envoyer une lettre à Creative Commons, 171 Second ** Street, Suite 300, San Francisco, California 94105, ** USA. *** *** / / /---/ / DÉBUT de WHISKER préambule #define RIGHTWHISKER 6 //the épingle la moustache droite est attachée au #define LEFTWHISKER 7 //the épingle la moustache gauche est attachée à / /---/ / début d’ARDUINO contrôlée SERVO ROBOT (Serbes) préambule #include < Servo.h > #define LEFTSERVOPIN 10 //The broche le Servo de gauche est raccordé au #define RIGHTSERVOPIN 9 //The broche le Servo de droite est raccordé au #define MAXSPEED 30 //due à la façon dont vitesse maximale de rotation continue servos //work est atteinte à une valeur de //lower beaucoup à 90 (cette valeur changera //depending sur vos servos) (pour les servos de parallaxe) //20 vous donnera toute la gamme 10 rend très //controllable mais un peu slowServo leftServo ; Servo rightServo ; int leftSpeed ; définit la vitesse du robot (servos gauche) //a pourcentage entre - MAXSPEED et MAXSPEEDint rightSpeed ; définit la vitesse du robot (les deux servos) //a pourcentage entre - MAXSPEED et MAXSPEEDint vitesse = 100 ; utilisé pour le contrôle simple (goForward etc.) //a pourcentage compris entre 0 et MAXSPEED / / fin de ce préambule des programmes / /---void setup() {beginSerial (9600); //Starts le serbSetup() de port série ; //adds les servos et prépare tous //SERB liés whiskerSetup() variables;} / * * La boucle principale * envoie le robot vers l’avant puis vérifie ses moustaches, si on est pressé * le robot va inverser puis tourner et tête vers l’avant une fois de plus * / void loop() {goForward() ; //sends les checkWhiskers() vers l’avant du robot ; //checks pour voir si un cheveu est enfoncé} //---//START WHISKER ROUTINESvoid whiskerSetup() {pinMode (entrée, RIGHTWHISKER); //Sets goupille de la moustache droite à être une entrée pinMode (entrée, LEFTWHISKER); //Sets goupille de la moustache gauche à être une entrée digitalWrite (RIGHTWHISKER HIGH); interne du //Sets la broche moustache droite pullup //resistor (cela signifie que le code pin est élevé lorsque //there aucun signal n’est attaché et lectures //when faible est un signal négatif attaché digitalWrite (LEFTWHISKER, HIGH); interne du //Sets la broche de gauche favori pullup //resistor}void checkWhiskers() {if(!digitalRead(RIGHTWHISKER)){reverseAndTurn();} //if la moustache droite est actionné //then inverse et tourner si ()! digitalRead(LEFTWHISKER)){reverseAndTurn();} //if la moustache gauche est enfoncé //then inverse et tour} void reverseAndTurn() {goBackward() ; //goes delay(500) vers l’arrière ; //for la moitié d’un deuxième turnRandom(300,1500) //turns au hasard pendant une période entre 300 et 1500 millisecondes} //END de WHISKER ROUTINES / /---/ /---/ / début d’ARDUINO contrôlée SERVO ROBOT (Serbes) ROUTINES / * * met en place votre arduino pour régler votre Serbes utilisant l’inclus * routines * / void serbSetup() {setSpeed(speed) ; pinMode (LEFTSERVOPIN SORTIE) ; définit la servocommande gauche signal Broche //to sortie pinMode (RIGHTSERVOPIN, sortie) ; définit le servo de droite signal Broche //to sortie leftServo.attach(LEFTSERVOPIN) ; attache gauche servo rightServo.attach(RIGHTSERVOPIN) ; attache droite servo goStop();} / * * définit la vitesse du robot entre 0-(stopped) et 100-(pleine vitesse) * NOTE : vitesse ne changera pas la vitesse actuelle, vous devez changer de vitesse * puis appeler une des méthodes aller avant que des changements se produisent. * / void setSpeed (int newSpeed) {si (newSpeed > = 100) {newSpeed = 100;} //if vitesse est supérieure à 100 //make il if 100 (newSpeed < = 0) {newSpeed = 0;} //if vitesse est inférieure que de faire de 0 //it 0 Vitesse = newSpeed * MAXSPEED / 100 ; //scales la vitesse //between 0 et MAXSPEED} / * * définit la vitesse de la rightServo de robots entre-100-(reversed) et 100-(forward) * NOTE : les appels à cette routine prendront effet immédiatement * / void setSpeedRight (int newSpeed) {si (newSpeed > = 100) {newSpeed = 100;} //if vitesse est supérieure à 100 //make il if 100 (newSpeed < = -100) {newSpeed = -100;} //if vitesse est inférieure à -100 font //it -100 rightSpeed = newSpeed * MAXSPEED / 100 ; //scales la vitesse d’être //between - MAXSPEED et MAXSPEED rightServo.write (90 - rightSpeed); //sends la nouvelle valeur à l’asservissement} / * * définit la vitesse de la leftServo de robots entre-100-(reversed) et 100-(forward) * NOTE : les appels à cette routine prendront effet immédiatement * / void setSpeedLeft (int newSpeed) {si (newSpeed > = 100) {newSpeed = 100;} //if vitesse est supérieure à 100 //make il if 100 (newSpeed < = -100) {newSpeed = -100;} Si la vitesse est inférieure à-100 //make il leftSpeed-100 = newSpeed * MAXSPEED / 100 ; //scales la vitesse d’être //between - MAXSPEED et MAXSPEED leftServo.write (90 + leftSpeed) ; envoie la nouvelle valeur à l’asservissement} / * * tourne le robot au hasard à gauche ou à droite pour un laps de temps aléatoire entre * minTime (millisecondes) et maxTime (millisecondes) * / void turnRandom (int minTime, maxTime int) {int choix = random(2) ; nombre de //Random à décider //between gauche (1) et droite (0) int turnTime = random(minTime,maxTime) ; nombre de //Random pour la pause //time if(choice == 1) {goLeft();} //If nombre aléatoire = 1 puis tournez //left else {goRight();} //If nombre aléatoire = 0 puis tourner //right delay(turnTime) ; //delay pour temps aléatoire} / * * envoie le robot envoie * / void goForward() {leftServo.write (90 + vitesse); rightServo.write (90 - vitesse);} / * * envoie le robot en arrière * / void goBackward() {leftServo.write (90 - vitesse); rightServo.write (90 + speed);} / * * envoie le robot à droite * / void goRight() {leftServo.write (90 + vitesse); rightServo.write (90 + speed);} / * * envoie le robot gauche * / void goLeft() {leftServo.write (90 - vitesse); rightServo.write (90 - vitesse);} / * * s’arrête le robot * / void goStop() {leftServo.write(90) ; rightServo.write(90);} FIN D’ARDUINO CONTRÔLÉE SERVO ROBOT (SERBES) ROUTINES / /---