(→Schéma Fritzing) |
(→Schéma Fritzing) |
||
Ligne 22 : | Ligne 22 : | ||
===Explication=== | ===Explication=== | ||
===Schéma Fritzing=== | ===Schéma Fritzing=== | ||
- | [[Fichier:Roomba_bb.jpg]] | + | [[Fichier:Roomba_bb.jpg|750px]] |
===Code=== | ===Code=== |
Sommaire |
Utilisation de la carte arduino uno et du shield motor afin de réaliser un robot autonome capable de se déplacer librement et d'eviter des obstacles.
// variable hc sr04 const int trigPin = 6; const int echoPin =7; // variable moteur droit const int vitesseMotD=3; const int sensMotD=12; const int freinMotD=9; const int intensiteMotD = A0; // variable moteur gauche const int vitesseMotG=11; const int sensMotG=13; const int freinMotG=8; const int intensiteMotG = A1; // variable pour rotation int a=0; int sens = random(0,2); // variable temps pour analyse blocage int time2 =0; void setup() { Serial.begin (115200); // initialisation HC SR04 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); // intialisation moteur droit pinMode (vitesseMotD,OUTPUT); pinMode (freinMotD,OUTPUT); pinMode (sensMotD,OUTPUT); // initialisation moteur gauche pinMode (vitesseMotG,OUTPUT); pinMode (freinMotG,OUTPUT); pinMode (sensMotG,OUTPUT); // conditions initiales : moteurs a l arret stopMot(); } void loop() { long time = millis(); Serial.print("temps ecoule :"); Serial.println(time); long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1; if (distance < 20) { //Serial.println("Mur detecte"); stopMot(); delay(100); // 5 secondes temps arbitraire rotation(); delay(300); } else { //Serial.println("aucun mur detecte"); if (analogRead(intensiteMotD)>155 || analogRead(intensiteMotG)>155){ Serial.println("Moteur bloque!"); reculer(); delay(500); rotation(); delay(500); } else if (time2>2000 && (analogRead(intensiteMotD)>130 || analogRead(intensiteMotG)>130)){ reculer(); delay(500); rotation(); delay(500); time2 = 0; } else if (analogRead(intensiteMotD)>130 || analogRead(intensiteMotG)>130){ time2= millis();// temps pour analyse blocage } else { avancer(); } } if (distance >= 30000 || distance <= 0){ //Serial.println("Out of range"); stopMot(); } else { // Serial.print("Distance: ["); //Serial.print(distance); //Serial.println(" cm"); } delay(200); } void stopMot() { //moteur Droit digitalWrite(vitesseMotD,LOW); digitalWrite(sensMotD,LOW); digitalWrite(freinMotD,LOW); //moteur Gauche digitalWrite(vitesseMotG,LOW); digitalWrite(sensMotG,LOW); digitalWrite(freinMotG,LOW); } void avancer(){ digitalWrite(sensMotD,LOW); // sens 1 digitalWrite(sensMotG,HIGH); // sens 1 analogWrite(vitesseMotG,255); // vitesse max analogWrite(vitesseMotD,253); // vitesse modere // afficher l'intensite Serial.print("intensite moteur gauche : "); Serial.println(analogRead(intensiteMotG)); Serial.print("intensite moteur droit : "); Serial.println(analogRead(intensiteMotD)); Serial.println(" "); } void rotation(){ if (a%=5){ sens = random(0,2); // 2 exclus } //Serial.print("sens est :"); //Serial.println(sens); a=a+1; digitalWrite(sensMotD,sens); // sens est high(1) ou low(0) digitalWrite(sensMotG,sens); analogWrite(vitesseMotG,255); // vitesse max analogWrite(vitesseMotD,255); // vitesse modere } void reculer(){ digitalWrite(sensMotD,HIGH); // sens 1 digitalWrite(sensMotG,LOW); // sens 1 analogWrite(vitesseMotG,255); // vitesse max analogWrite(vitesseMotD,253); // vitesse modere }
chercher ici : http://wikidebrouillard.org/index.php/Catégorie:Arduino
Robot ménager Roomba
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique