Niveau : 3° Discipline : Technologie
Objectif : Commander le robot mobile à l’aide d’une télécommande universelle récupérée.
Matériel :
- robot mobile commander par Arduino
- IR receiver (kit de communication Snootlab)
- Télécommande
Code :
#include <IRremote.h> #define DELAI 200 int RECV_PIN = 11; // entree IR IRrecv irrecv(RECV_PIN); decode_results results; //robot moteur capteur //branchement capteur const int capdpin = 6; const int capgpin = 7; //branchement commandes pont H const int com1pin = 2; const int com2pin = 4; const int com3pin = 3; const int com4pin = 5; #define droite 0xFF8877 // fleche droite #define gauche 0xFF9867 // fleche gauche //variable pour mémoriser la valeur lue int valg = 0; int vald = 0; //variable pour le pivotement int pivo; //configure les entrées et sorties void setup(){ Serial.begin(9600); pinMode (capdpin, INPUT); pinMode (capgpin, INPUT); pinMode (com1pin, OUTPUT); pinMode (com2pin, OUTPUT); pinMode (com3pin, OUTPUT); pinMode (com4pin, OUTPUT); irrecv.enableIRIn(); // Start the receiver } //test et commande void loop(){ //test capteur droit vald = digitalRead(capdpin); //test capteur gauche valg = digitalRead(capgpin); if (vald == LOW || valg == LOW){ recul (); } else { avance (); } receive_ir(); } void receive_ir(){ if (irrecv.decode(&results)) { Serial.println(results.value, HEX); if (results.value == droite) { pivo = 1; pivot(); } if (results.value == gauche) { pivo = 2; pivot(); } irrecv.resume();//attente prochaine commande } } void avance ()//fonction avance { //robot avance gauche digitalWrite(com2pin, HIGH); digitalWrite(com4pin, LOW); //robot avance droite digitalWrite(com1pin, HIGH); digitalWrite(com3pin, LOW); delay (DELAI); } void recul ()//fonction de recul { //arret du robot digitalWrite(com2pin, LOW); digitalWrite(com4pin, LOW); digitalWrite(com1pin, LOW); digitalWrite(com3pin, LOW); delay (DELAI); //robot recul gauche et droit digitalWrite(com2pin, LOW); digitalWrite(com4pin, HIGH); digitalWrite(com1pin, LOW); digitalWrite(com3pin, HIGH); delay (2*DELAI); } void pivot(){ if (pivo == 1) { //robot pivote droite digitalWrite(com2pin, LOW); digitalWrite(com4pin, LOW); digitalWrite(com1pin, LOW); digitalWrite(com3pin, HIGH); } else {//robot pivote gauche digitalWrite(com2pin, LOW); digitalWrite(com4pin, HIGH); digitalWrite(com1pin, LOW); digitalWrite(com3pin, LOW); } delay (5*DELAI); }