Playlist de vidéos Arduino: https://www.youtube.com/playlist?list=PL5h7NsxkT9YNiPHjexrj3NEB4Hb8Mhouj
Bonjour! Dans cette vidéo nous allons terminer la programmation du robot multifonctions Arduino. J’espère que vous aimerez la vidéo 😀
Procurez-vous le robot ici:
Vérifiez vos branchements:
https://TommyDesrochers.com/review-kit-robot-multifonctions-pour-arduino/
Programme créé dans la vidéo:
#include <IRremote.h> #include <Servo.h> //DÉCLARATION DES VARIABLES EN LIEN AVEC LE CHOIX DU MODE --------------------------------------------------------------------------------------------------------- DÉCLARATION DES VARIABLES EN LIEN AVEC LE CHOIX DU MODE int choixMode = 0; int choixModeUltrason = 1; int choixModeSuiveur = 2; //DÉCLARATIONS EN LIEN AVEC LES MOTEURS --------------------------------------------------------------------------------------------------------------- DÉCLARATIONS EN LIEN AVEC LES MOTEURS const int moteurGaucheA = 5; const int moteurGaucheR = 6; const int moteurDroitA = 11; const int moteurDroitR = 10; char valSerie; //DÉCLARATIONS EN LIEN AVEC L'INFRAROUGE -------------------------------------------------------------------------------------------------------------- DÉCLARATIONS EN LIEN AVEC L'INFRAROUGE const int irPin = 2; //Pin du récepteur IR //Constantes associées aux boutons de la manette const long irAvancer = 0x00FF629D; const long irReculer = 0x00FF02FD; const long irDroite = 0x00FFC23D; const long irGauche = 0x00FF22DD; const long irArreter = 0x00FFa25D; const long irModeSuiveur = 0x00FF9867; const long irModeUltrason = 0x00FFE21D; IRrecv irrecv(irPin); //Objet recevant les signaux à décoder decode_results irResultat; //Contient le résultat du décodage //DÉCLARATIONS EN LIEN AVEC LE CAPTEUR DE DISTANCE ET LE SERVOMOTEUR -------------------------------------------------------------------------------- DÉCLARATIONS EN LIEN AVEC LE CAPTEUR DE DISTANCE ET LE SERVOMOTEUR const int echoPin = 13; const int triggerPin = 12; int distanceAvant; int distanceDroite; int distanceGauche; float intervalle; Servo myservo; //Création de l'objet servo const int delay_time = 250; //Temps accordé au servo pour la mesure de la distance de chaque côté //DÉCLARATIONS EN LIEN AVEC LES CAPTEURS DE LUMINOSITÉ -------------------------------------------------------------------------------------------- DÉCLARATIONS EN LIEN AVEC LES CAPTEURS DE LUMINOSITÉ const int capteurGauche = 7; const int capteurCentre = 4; const int capteurDroit = 3; bool etatCapteurGauche; bool etatCapteurCentre; bool etatCapteurDroit; //SETUP --------------------------------------------------------------------------------------------------------------------------------------------- SETUP void setup() { //Initialisation de la communication série Serial.begin(9600); //Initialisation des broches des moteurs pinMode(moteurGaucheA, OUTPUT); pinMode(moteurGaucheR, OUTPUT); pinMode(moteurDroitA, OUTPUT); pinMode(moteurDroitR, OUTPUT); digitalWrite(moteurGaucheA, LOW); digitalWrite(moteurGaucheR, LOW); digitalWrite(moteurDroitA, LOW); digitalWrite(moteurDroitR, LOW); //Initialisation du décodage infrarouge irrecv.enableIRIn(); //Initialisation du capteur de distance et du servomoteur pinMode(echoPin, INPUT); pinMode(triggerPin, OUTPUT); myservo.attach(9); myservo.write(90); //Initialisation des capteurs de couleur pinMode(capteurGauche, INPUT); pinMode(capteurCentre, INPUT); pinMode(capteurDroit, INPUT); } //FONCTIONS POUR LES MOTEURS ------------------------------------------------------------------------------------------------------------------------ FONCTIONS POUR LES MOTEURS void avancer() { digitalWrite(moteurGaucheA, HIGH); digitalWrite(moteurGaucheR, LOW); digitalWrite(moteurDroitA, HIGH); digitalWrite(moteurDroitR, LOW); } void gauche() { digitalWrite(moteurGaucheA, LOW); digitalWrite(moteurGaucheR, LOW); digitalWrite(moteurDroitA, HIGH); digitalWrite(moteurDroitR, LOW); } void droite() { digitalWrite(moteurGaucheA, HIGH); digitalWrite(moteurGaucheR, LOW); digitalWrite(moteurDroitA, LOW); digitalWrite(moteurDroitR, LOW); } void reculer() { digitalWrite(moteurGaucheA, LOW); digitalWrite(moteurGaucheR, HIGH); digitalWrite(moteurDroitA, LOW); digitalWrite(moteurDroitR, HIGH); } void arreter() { digitalWrite(moteurGaucheA, LOW); digitalWrite(moteurGaucheR, LOW); digitalWrite(moteurDroitA, LOW); digitalWrite(moteurDroitR, LOW); } void pivoterGauche() { digitalWrite(moteurGaucheA, LOW); digitalWrite(moteurGaucheR, HIGH); digitalWrite(moteurDroitA, HIGH); digitalWrite(moteurDroitR, LOW); } void pivoterDroite() { digitalWrite(moteurGaucheA, HIGH); digitalWrite(moteurGaucheR, LOW); digitalWrite(moteurDroitA, LOW); digitalWrite(moteurDroitR, HIGH); } //FONCTIONS POUR LE MODE ULTRASON -------------------------------------------------------------------------------------------------------------- FONCTIONS POUR LE MODE ULTRASON void mesurerDistanceAvant() { myservo.write(90); delay(delay_time); digitalWrite(triggerPin, LOW); delayMicroseconds(2); digitalWrite(triggerPin, HIGH); //Envoie d'une onde sonore delayMicroseconds(10); digitalWrite(triggerPin, LOW); intervalle = pulseIn(echoPin, HIGH); //Réception de l'écho intervalle = intervalle/5.8/10; //Conversion de la différence de temps entre l'envoie de l'onde sonore et la réception de l'écho en distance (cm) Serial.println("Distance avant:"); Serial.println(intervalle); distanceAvant = intervalle; //Arrondissement de la distance } void mesurerDistanceGauche() { myservo.write(180); delay(delay_time); digitalWrite(triggerPin, LOW); delayMicroseconds(2); digitalWrite(triggerPin, HIGH); //Envoie d'une onde sonore delayMicroseconds(10); digitalWrite(triggerPin, LOW); intervalle = pulseIn(echoPin, HIGH); //Réception de l'écho intervalle = intervalle/5.8/10; //Conversion de la différence de temps entre l'envoie de l'onde sonore et la réception de l'écho en distance (cm) Serial.println("Distance gauche:"); Serial.println(intervalle); distanceGauche = intervalle; } void mesurerDistanceDroite() { myservo.write(0); delay(delay_time); digitalWrite(triggerPin, LOW); delayMicroseconds(2); digitalWrite(triggerPin, HIGH); //Envoie d'une onde sonore delayMicroseconds(10); digitalWrite(triggerPin, LOW); intervalle = pulseIn(echoPin, HIGH); //Réception de l'écho intervalle = intervalle/5.8/10; //Conversion de la différence de temps entre l'envoie de l'onde sonore et la réception de l'écho en distance (cm) Serial.println("Distance droite:"); Serial.println(intervalle); distanceDroite = intervalle; } void modeUltrason() { mesurerDistanceAvant(); if(distanceAvant < 25) //Si la distance avant est de moins de 25cm { arreter(); mesurerDistanceGauche(); delay(delay_time); mesurerDistanceDroite(); delay(delay_time); if(distanceGauche < 15 && distanceDroite < 15) //Si la distance à gauche et la distance à droite sont de moins de 15cm { reculer(); delay(500); pivoterGauche(); delay(250); } else if(distanceGauche > distanceDroite) //Si la distance gauche est plus grande que la distance droite { pivoterGauche(); delay(250); } else if(distanceGauche <= distanceDroite) //Si la distance gauche est plus petite ou égale à la distance droite { pivoterDroite(); delay(250); } } else //Si la distance avant est de plus de 25cm { avancer(); } } void commandeSerie() { if(Serial.available()) { valSerie = Serial.read(); choixMode = 0; if(valSerie == 'w') avancer(); else if(valSerie == 'a') gauche(); else if(valSerie == 's') reculer(); else if(valSerie == 'd') droite(); else if(valSerie == 'q') arreter(); else if(valSerie == 'z') pivoterGauche(); else if(valSerie == 'x') pivoterDroite(); else if(valSerie == '1') choixMode = choixModeUltrason; else if(valSerie == '2') choixMode = choixModeSuiveur; } } void modeSuiveur() { etatCapteurGauche = digitalRead(capteurGauche); etatCapteurCentre = digitalRead(capteurCentre); etatCapteurDroit = digitalRead(capteurDroit); if(etatCapteurCentre) //Si le capteur du centre détecte du noir { if ((etatCapteurGauche) && (!etatCapteurDroit)) //S'il y a du noir à gauche et du blanc à droite, tourner à gauche gauche(); else if ((!etatCapteurGauche) && (etatCapteurDroit)) //S'il y a du blanc à gauche et du noir à droite, tourner à droite droite(); else //Si les conditions plus haut ne s'appliquent pas, continuer tout droit avancer(); } else //Si le capteur du centre détecte du blanc { if ((etatCapteurGauche) && (!etatCapteurDroit)) //S'il y a du noir à gauche et du blanc à droite, tourner à gauche gauche(); else if ((!etatCapteurGauche) && (etatCapteurDroit)) //S'il y a du blanc à gauche et du noir à droite, tourner à droite droite(); else //Si les conditions plus hautdne s'appliquent pas, reculer reculer(); } } void lireInfrarouge() { if (irrecv.decode(&irResultat)) //Réception d'un signal IR { irrecv.resume(); //Accepter les nouveaux résultats IR if((irResultat.value < 0xFFF000) && (irResultat.value > 0xFF0000)) //Filtrage des mauvaises détections IR { choixMode = 0; if (irResultat.value == irAvancer) //Avancer avancer(); else if (irResultat.value == irReculer) //Reculer reculer(); else if (irResultat.value == irDroite) //Tourner à droite droite(); else if (irResultat.value == irGauche) //Tourner à gauche gauche(); else if (irResultat.value == irArreter) //Arrêter arreter(); else if(irResultat.value == irModeSuiveur) choixMode = choixModeSuiveur; else if(irResultat.value == irModeUltrason) choixMode = choixModeUltrason; irResultat.value = 0; } } } //BOUCLE --------------------------------------------------------------------------------------------------------------------------------------- BOUCLE void loop() { commandeSerie(); lireInfrarouge(); if(choixMode == choixModeUltrason) { modeUltrason(); } else if(choixMode == choixModeSuiveur) { modeSuiveur(); } }