Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 193

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 197

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338
[ Wikidébrouillard ] Robot autonome de type Roomba

Robot autonome de type Roomba

De Wikidebrouillard.

(Liste du matériel)
(Présentation du projet Arduino)
 
(8 versions intermédiaires masquées)
Ligne 1 : Ligne 1 :
{{avertissement}}
{{avertissement}}
-
{{vidéo|numérovidéo = <videoflash type="mediaspip" num ="1">http://mediaspip.ptitdeb.infini.fr/IMG/mp4/montage_petits_debs.mp4|400|300</videoflash>}}
+
{{vidéo|numérovidéo = <videoflash type="mediaspip" num ="1">http://mediaspip.ptitdeb.infini.fr/IMG/mp4/arduino-encoded.mp4|400|300</videoflash>}}
==Présentation du projet Arduino==
==Présentation du projet Arduino==
Ligne 7 : Ligne 7 :
==Liste du matériel==
==Liste du matériel==
 +
* 2 Interrupteurs (facultatif)
* [[Image:MCC.jpg|50px]]Deux [[Machine à Courant Continu]] avec leur roues.
* [[Image:MCC.jpg|50px]]Deux [[Machine à Courant Continu]] avec leur roues.
* [[Une Roulette pivotante sur bille d'acier]]
* [[Une Roulette pivotante sur bille d'acier]]
Ligne 21 : Ligne 22 :
==réalisation du projet==
==réalisation du projet==
===Explication===
===Explication===
 +
Attention : Ce tutoriel nécessite de posséder un shield Motor de la marque Arduino!
 +
 +
L'utilisation de la carte arduino Uno combinée au shield Motor Arduino permet facilement de contrôler les deux moteurs à courant continus.
 +
On utilise un capteur à ultrasons HC-SR04 qui permet de détecter les murs.
 +
En fonction de retour de ce capteur, on contrôle les moteurs de différente facon(avancer, reculer, pivoter).
 +
Si un mur est détecté, le robot recule et pivote tant qu'il n'y a plus de mur dans le champs de vision du robot.
 +
On mesure également l'intensité de chaque moteur. Si le robot est bloqué, les moteurs sont alors en surintensité. Dans ce cas, le robot recule et pivote.
 +
===Schéma Fritzing===
===Schéma Fritzing===
 +
[[Fichier:Roomba_bb.jpg|750px]]
 +
===Code===
===Code===
<pre>
<pre>
-
mettre le code entre ces deux balises
+
// variable hc sr04
-
//attention à bien documenter le cod
+
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
 +
}
-
e !
 
</pre>
</pre>
Ligne 36 : Ligne 183 :
==Liens avec le quotidien==
==Liens avec le quotidien==
-
quelles peuvent être les applications technologique de ce montage, ou est-ce qu'on retrouve des programme qui y ressemble ?
+
Robot ménager Roomba
[[Catégorie:Arduino]]
[[Catégorie:Arduino]]

Version actuelle en date du 21 janvier 2014 à 11:40

Article incomplet en cours de rédaction
Modèle:Vidéo

Sommaire

Présentation du projet Arduino

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.

Liste du matériel

réalisation du projet

Explication

Attention : Ce tutoriel nécessite de posséder un shield Motor de la marque Arduino!

L'utilisation de la carte arduino Uno combinée au shield Motor Arduino permet facilement de contrôler les deux moteurs à courant continus. On utilise un capteur à ultrasons HC-SR04 qui permet de détecter les murs. En fonction de retour de ce capteur, on contrôle les moteurs de différente facon(avancer, reculer, pivoter). Si un mur est détecté, le robot recule et pivote tant qu'il n'y a plus de mur dans le champs de vision du robot. On mesure également l'intensité de chaque moteur. Si le robot est bloqué, les moteurs sont alors en surintensité. Dans ce cas, le robot recule et pivote.

Schéma Fritzing

Code

// 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
}

Liens avec d'autres projets arduino

chercher ici : http://wikidebrouillard.org/index.php/Catégorie:Arduino

Pour aller plus loin

Liens avec le quotidien

Robot ménager Roomba

Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraits
AR
CO

Robot autonome de type Roomba

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique