(→Liste du matériel) |
(→Code) |
||
Ligne 24 : | Ligne 24 : | ||
===Code=== | ===Code=== | ||
<pre> | <pre> | ||
- | + | // 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 | ||
+ | } | ||
- | |||
</pre> | </pre> | ||
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
quelles peuvent être les applications technologique de ce montage, ou est-ce qu'on retrouve des programme qui y ressemble ?
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique