Aller au contenu


Roms

Inscrit(e) (le) 06 mai 2017
Déconnecté Dernière activité juin 28 2017 10:27
-----

Messages que j'ai postés

Dans le sujet : Salut à tous!

14 mai 2017 - 09:21

Bienvenu 


Dans le sujet : Robot autonome

13 mai 2017 - 02:33

Merci pour tous vos conseils et je pense avoir compris  :yahoo:  mais le cerveau a chauffé  :crazy:

#include<Servo.h>
Servo myservo;
long duration;
long distance;
int pos;

#define trigPin 13
#define echoPin 12
#define led A5
#define led2 A4
#define led3 A3
#define ROUGE B110    // définition du code couleur rouge
#define BLEU B011     // définition du code couleur bleu
#define BLANC B000    // définition du code couleur blanc
#define ETEINT B111   // définition du code couleur pour éteindre les leds

void allumerLED(int couleur){
        digitalWrite(led, couleur & B001);        // Association du code couleur avec les pins de sortie des leds
        digitalWrite(led2, couleur & B010);
        digitalWrite(led3, couleur & B100);
}

void capteurULT(){
        digitalWrite(trigPin, LOW);               //  Vérification de la présence d'un obstacle
        delayMicroseconds(2); 
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(10); 
        digitalWrite(trigPin, LOW);
        duration = pulseIn(echoPin, HIGH);
        distance = (duration/2) / 29.1;
}

void setup(){   
  myservo.attach(3);          // Servomoteur surla broche 3
  pinMode(trigPin, OUTPUT);   // trigPin est une sortie
  pinMode(echoPin, INPUT);    // echoPin est une sortie
  pinMode(led, OUTPUT);       // led est une sortie 
  pinMode(led2, OUTPUT);      // led2 est une sortie
  pinMode(led3, OUTPUT);      // led3 est une sortie
  digitalWrite(led,HIGH);     // A5 au niveau haut   
  digitalWrite(led2,HIGH);    // A4 au niveau haut
  digitalWrite(led3,HIGH);    // A3 au niveau haut
}

void loop(){

  int x = 2;
  for (int pos = 20; pos > 19; pos = pos + x){  // Incrémentation et décrementation
  if (pos == 160) x = -2;                       // entre 20 et 160 avec un pas = 2
  delay(10);
    
  myservo.write(pos);               // Action du servomoteur
  delay(10);                       
  capteurULT();                     // Détection d'obstacle
         
        if (distance < 25) {        // Limite détection obstacle 25 cm ;
         
          if ( pos <= 110) {        // Limite pour l'affichage BLANC
             
              if ( pos <= 70) {     // Limite pour l'affichage BLEU 
              allumerLED(ROUGE);    // Affichage ROUGE entre 70 et 110
              delay(10);}   
              else {
              allumerLED(BLEU);
              delay(10);}}
         
          else {
          allumerLED(BLANC);
          delay(10);}}
       
        else {
        allumerLED(ETEINT);
        delay(10);}}
 
 }

Peut-on se servir de ce programme pour faire un robot suiveur ? 

 

Au lieu d'allumer des leds on actionne des moteurs et un autre servomoteur pour la direction du robot type voiture.


Dans le sujet : Robot autonome

12 mai 2017 - 12:58

Proposition : traiter l'aller et le retour dans la même boucle For(...) ajouterait une légère touche d'élégance :ok:

Pourquoi pas par contre quel est le principe ? 

 

Je ne vois pas comment faire. 


Dans le sujet : Robot autonome

12 mai 2017 - 08:00

Et le résultat fonctionne? 

Oui très bien. 


Dans le sujet : Robot autonome

11 mai 2017 - 08:08

Bonjour, 

 

Désolé de répondre tardivement mais beaucoup de travail en ce moment. 

 

J'ai réussi à programmer le servomoteur et le capteur ultrason (type radar). 

 

J'ai fais 2 erreurs : 

 

  • mauvaise connexion des broches (merci au conseil de Arobasseb) 
  • ma boucle if ne fonctionnait pas correctement, j'ai donc changé de méthode.

Ce qui nous donne : 

#include<Servo.h>

Servo myservo;
int pos = 0;
#define trigPin 13
#define echoPin 12
#define led A5
#define led2 A4
#define led3 A3


void setup()
{
  Serial.begin(9600);
  myservo.attach(3);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
}

void loop(){
     
  for(pos = 20; pos < 160; pos += 2)   
  {                                   
  myservo.write(pos);               
  delay(10);                       
  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;
  delay(10);
  
      if (distance < 20) {        // Limite 20 cm ;
        if ( pos <= 90) {
        digitalWrite(led,HIGH);     // Led Rouge
        digitalWrite(led2,HIGH);
        digitalWrite(led3,LOW);
        delay(10);}   
        else {
        digitalWrite(led,LOW);        // Led White
        digitalWrite(led2,LOW);
        digitalWrite(led3,LOW);
        delay(10);
        }
        }
      else {
        digitalWrite(led,HIGH);        // Led White
        digitalWrite(led2,HIGH);
        digitalWrite(led3,HIGH);
        delay(10);
        }
  } 
  for(pos = 160; pos>=20; pos-=2)      
  {                                
  myservo.write(pos);              
  delay(10);                       
  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;
  delay(10);

      if (distance < 20) {        // Limite 20 cm ;
        if ( pos <= 90) {
        digitalWrite(led,HIGH);     // Led Rouge
        digitalWrite(led2,HIGH);
        digitalWrite(led3,LOW);
        delay(10);}   
        else {
        digitalWrite(led,LOW);        // Led White
        digitalWrite(led2,LOW);
        digitalWrite(led3,LOW);
        delay(10);
        }
        }
      else {
        digitalWrite(led,HIGH);        // Led White
        digitalWrite(led2,HIGH);
        digitalWrite(led3,HIGH);
        delay(10);
        }  
}
}