Salut a tous ,
voila donc je viens de réaliser dernièrement un robot éviteur d'obstacle , j'ai utiliser un capteur Ultrason ,un servo pour le balayage du capteur ,un châssis Magician acheter sur internet avec 2 moteurs , un L293D et le tout basé sur une carte Arduino Mega2560. Il marche très bien et prochainement je vous ferais une vidéo de celui ci avec des explications et bien sur le code source
Mais en attendant j'ai besoin de vous car je voudrais rendre ce robot un peu plus Sympa en lui rajoutant le contrôle par une télécommande infrarouge (télécommande de télévision).
Donc dans un premier temps je vais rendre ce robot seulement contrôlable par la télécommande IR , je vais enlever le capteur US et le servo de balayage. Quand j'aurais réussis je mettrais ces 2 options au robot : Autonome(capteur US) et contrôlable (Télécommandé).
J'ai donc commencé a bossé sur la partie Programmation de mon robot puisqu'il est déjà tout prêt. J'utilise un capteur IR (voir image jointe) et une télécommande de télévision que j'ai trouvé. J'ai donc utiliser ce code pour recevoir les données de ma télécommande et les convertir en nombre Décimale :
#include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, DEC); irrecv.resume(); // Receive the next value } delay(100); }
J'ai ouvert le moniteur et noter les touches que j'avais besoin en l'occurrence : les 4 touches fléchés pour les directions du robot et le bouton central OK pour l'arrêt du robot.
Après cela j'ai essayé le code du robot :
#include <IRremote.h> #include <IRremoteInt.h> //declaration des moteurs + L293D #define motor1Pin1 3 #define motor1Pin2 4 #define motor2Pin1 6 #define motor2Pin2 7 #define enable1 2 #define enable2 5 //declaration des mouvements + codes telecommande en DEC #define AVANT 2155813095 #define ARRIERE 2155831965 #define GAUCHE 2155840125 #define DROITE 2155844205 #define STOP 2155848285 unsigned long ircode; // Variable servant à mémoriser le code reçu void setup() { //reglage des moteurs en mode sortie pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(motor2Pin1, OUTPUT); pinMode(motor2Pin2, OUTPUT); ir.begin(); //commencer la reception IR } void loop() { while (ir.available()) // tant que le capteur est disponible ... { // Lire et mémoriser le code dans la variable ircode ircode = ir.read(); if (ircode == AVANT) avant(); if (ircode == ARRIERE) arriere(); if (ircode == GAUCHE) gauche(); if (ircode == DROITE) droite(); else if (ircode == STOP) arret(); } } void avant() //aller en avant { digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); digitalWrite(motor2Pin1, HIGH); digitalWrite(motor2Pin2, LOW); } void arriere() //aller en arriere { digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, HIGH); digitalWrite(motor2Pin1, LOW); digitalWrite(motor2Pin2, HIGH); } void gauche() //aller a droite { digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); digitalWrite(motor2Pin1, LOW); digitalWrite(motor2Pin2, HIGH); } void droite() //aller a gauche { digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, HIGH); digitalWrite(motor2Pin1, HIGH); digitalWrite(motor2Pin2, LOW); } void arret() //stop/arret { digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, LOW); digitalWrite(motor2Pin1, LOW); digitalWrite(motor2Pin2, LOW); }
mais celui me donne une erreur :