Aller au contenu


Photo
- - - - -

1er robot 2 roues


26 réponses à ce sujet

#1 Pilote

Pilote

    Membre

  • Membres
  • 39 messages
  • Gender:Male
  • Location:NANTES

Posté 21 février 2012 - 12:16

Bonjour,

pour un premier essai, j'ai construit ce petit robot, basé sur une carte romeo...

Image IPB

le capteur US est monté sur un servo pour balayage
le tout (mesure de distance et commande servo) est geré par ce morceau de code , testé et opérationnel :

#include "URMSerial.h"   
#include "Servo.h"  
URMSerial urm;   
Servo myservo; //objet servo controle un servo  
int pos = 0;    // variable to store the servo position
int distance;  
  
void setup() {   
    Serial.begin(9600); // initialisation de la connexion Arduino / PC  
    urm.begin(9,10,9600); // initialisation du capteur sur les pattes 9 et 10 à la vitesse 9600  
myservo.attach(11);
}  
  
void loop()   
{  
   // mise à jour de la distance  
   urm.requestMeasurementOrTimeout(1, distance);  
   // on en fait ce qu'on veut, l'afficher par exemple  
   Serial.print("Distance : ");  
   Serial.println(distance);  
   delay(50);   

  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
} 

ensuite les 2 moteurs sont gérés par ce code, aussi testé et opérationnel

//Standard PWM DC control

int E1 = 5;     //M1 Speed Control
int E2 = 6;     //M2 Speed Control
int M1 = 4;    //M1 Direction Control
int M2 = 7;    //M1 Direction Control

///For previous Romeo, please use these pins.
//int E1 = 6;     //M1 Speed Control
//int E2 = 9;     //M2 Speed Control
//int M1 = 7;    //M1 Direction Control
//int M2 = 8;    //M1 Direction Control


void stop(void)                    //Stop
        {
          digitalWrite(E1,LOW);   
          digitalWrite(E2,LOW);      
        }   
void advance(char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />          //Move forward
        {
          analogWrite (E1,a);      //PWM Speed Control
          digitalWrite(M1,HIGH);    
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
          digitalWrite(M2,HIGH);
        }  
void back_off (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />          //Move backward
        {
          analogWrite (E1,a);
          digitalWrite(M1,LOW);   
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
          digitalWrite(M2,LOW);
}
void turn_L (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />             //Turn Left
        {
          analogWrite (E1,a);
          digitalWrite(M1,LOW);    
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
          digitalWrite(M2,HIGH);
        }
void turn_R (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />             //Turn Right
        {
          analogWrite (E1,a);
          digitalWrite(M1,HIGH);    
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
          digitalWrite(M2,LOW);
        }
void setup(void) 
{ 
    int i;
    for(i=4;i<=7;i++)
    pinMode(i, OUTPUT);  
    Serial.begin(9600);      //Set Baud Rate
} 
void loop(void) 
{ 
     char val = Serial.read();
     if(val!=-1)
       {
          switch(val)
           {
             case '2'://Move Forward
                     advance (100,100);   //move forward in max speed
                     break;
             case '1'://Move Backward
                     back_off (100,100);   //move back in max speed
                     break;
             case '3'://Turn Left
                     turn_L (50,50);
                     break;       
             case '4'://Turn Right
                     turn_R (50,50);
                     break;          
            }     
          delay(500); 
       }
      else stop();  
}


maintenant, j'aimerai me servir des distances lues par le capteur pour gerer les moteurs...
et là, je bute!

pouvez-vous m'aider?

en vous remerciant

@+

#2 Microrupteurman

Microrupteurman

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 210 messages
  • Gender:Male
  • Location:Aquitaine,Gironde

Posté 21 février 2012 - 12:59

void loop ()
{

If (distane < 20)   // si la distance indiqué par le capteur us est inferieur a 20cm ....
{
          analogWrite (E1,a); 
          digitalWrite(M1,LOW);    
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;     
          digitalWrite(M2,LOW); 
}

Ce bout de code est operationel

 
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter :  https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/

Besoin d'une impression 3D grand format ? Contactez moi !
 


#3 Pilote

Pilote

    Membre

  • Membres
  • 39 messages
  • Gender:Male
  • Location:NANTES

Posté 21 février 2012 - 01:53

void loop ()
{

If (distane < 20)   // si la distance indiqué par le capteur us est inferieur a 20cm ....
{
          analogWrite (E1,a); 
          digitalWrite(M1,LOW);    
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;     
          digitalWrite(M2,LOW); 
}

Ce bout de code est operationel


un grand merci, à toi...je pensais bien qu'il fallait rajouter une condition mais comment et où surtout...
dans le cas de ton morceau de code, le robot s'arrête à 20 cm de l'obstacle, si je comprends bien

est-ce qu'il y a un moyen de lire une distance et d'envoyer une commande au serial monitor?
genre le capteur lit 10 ou 20cm et envoie "2(recule)" ou "3(tourne droite)" ou "4(tourne gauche)" (commande moteur par le serial moniteur)
J'aimerai garder la possibilité de le contrôler avec le clavier

@+

#4 Microrupteurman

Microrupteurman

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 210 messages
  • Gender:Male
  • Location:Aquitaine,Gironde

Posté 21 février 2012 - 02:11

est-ce qu'il y a un moyen de lire une distance et d'envoyer une commande au serial monitor?
genre le capteur lit 10 ou 20cm et envoie "2(recule)" ou "3(tourne droite)" ou "4(tourne gauche)" (commande moteur par le serial moniteur)
J'aimerai garder la possibilité de le contrôler avec le clavier

@+


Oui tu peux, tu print ta distance "Serial.println(distance)" tu le met tout en haut de ta boucle, sous void loop () et tu garde la partie de code qui te permet de communiquer avec ton bot.
Comme ca tu aura tout le temps ta valeur 'distance' sur le serial et tu pourra commander ton robot, c'est ce que j'ai fait il a quelque jour.

 
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter :  https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/

Besoin d'une impression 3D grand format ? Contactez moi !
 


#5 Pilote

Pilote

    Membre

  • Membres
  • 39 messages
  • Gender:Male
  • Location:NANTES

Posté 22 février 2012 - 04:37

bonjour Microrupteurman,

arrgh! je ne comprends pas...
Peut-être pourrais-tu me montrer le morceau de code où tu fais çà?

D'ailleurs (je viens de m'en rendre compte! :blush: ) je te remercie déjà pour le code de la partie "lecture capteur URM37"
mais il ne fonctionne pour moi, qu'avec la version 0.18 d'Arduino, pas 1.0... d'ailleurs l'auteur de la library "URM37" le précisait

@+

#6 Microrupteurman

Microrupteurman

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 210 messages
  • Gender:Male
  • Location:Aquitaine,Gironde

Posté 22 février 2012 - 04:52

Telecharge la version 23 d'arduino.

void loop()    
{   
   // mise à jour de la distance   
   urm.requestMeasurementOrTimeout(1, distance);   
   // on en fait ce qu'on veut, l'afficher par exemple   
   Serial.print("Distance : ");   
   Serial.println(distance);   
   delay(50);

C'est dans ton code.

Voila un bout a moi, qui vient d'un bout a seb

void loop() 
{ 
int x,delay_en; 
char val; 
while(1) 
{ 
   capteurIR_D =  analogRead(0);
   capteurIR_G = analogRead (1);
   Serial.print("IR_D=");
   Serial.print (capteurIR_D, DEC );  // envoi continuellement les telemesure du capteur infra rouge
   Serial.print("\n");
   Serial.print("IR_G=");
   Serial.print (capteurIR_G,DEC);
   Serial.print("\n");
   delay(300);
   
   
val = Serial.read(); 
if(val!=-1) 
{ 
switch(val) 
{ 
case 'z'://avance
Motor1(vitesse,true);  
Motor2(vitesse,true); 
 
break; 
case 'w'://recule 
Motor1(vitesse,false); 
Motor2(vitesse,false); 
break; 
case 'q'://tourne a gauche
Motor1(vitesse,false); 
Motor2(vitesse,true); 
break;       
case 's'://tourne a droite
Motor1(vitesse,true); 
Motor2(vitesse,false); 
break;   
case 'a'://stop 
Motor1(0,false); 
Motor2(0,false); 
break; 
case '+' :   // chaque + augmente la vitesse de 10point et l'affiche sur le serial.monitor
(vitesse +=10);
Serial.print("vitesse =");
Serial.print (vitesse, DEC);
Serial.print("\n");
break;
case'-':
(vitesse -=10);
Serial.print("vitesse =");
Serial.print (vitesse, DEC);
Serial.print("\n");
break;

}      
 }        
  }

}

 
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter :  https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/

Besoin d'une impression 3D grand format ? Contactez moi !
 


#7 Pilote

Pilote

    Membre

  • Membres
  • 39 messages
  • Gender:Male
  • Location:NANTES

Posté 22 février 2012 - 06:33

salut
c'est vrai la version 23 fonctionne aussi!

donc voici mon code (soyez sympa, je ne comprends pas encore tout :blink: )

#include "URMSerial.h"   
#include "Servo.h"  

URMSerial urm;   
Servo myservo; //objet servo controle un servo

int pos = 0;    // variable pour stocker la position d'asservissement
int distance;  
int E1 = 5;     //M1 Speed Control  //Standard PWM DC control
int E2 = 6;     //M2 Speed Control
int M1 = 4;    //M1 Direction Control
int M2 = 7;    //M1 Direction Control
  


void setup() {   
    Serial.begin(9600); // initialisation de la connexion Arduino / PC  
    urm.begin(9,10,9600); // initialisation du capteur sur les pattes 9 et 10 à la vitesse 9600  
myservo.attach(11);
}  
  
void loop()   
{  
     
   urm.requestMeasurementOrTimeout(1, distance);// mise à jour de la distance  
     
   Serial.print("Distance : "); // affichage de la distance 
   Serial.println(distance);  
   delay(50);   

  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
{
if (distance < 10) //si distance inférieure à 10 cm
{
          analogWrite (E1,a); 
          digitalWrite(M1,HIGH);    
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;     
          digitalWrite(M2,LOW); 
}
} 


void stop(void)                    //Stop
        {
          digitalWrite(E1,LOW);   
          digitalWrite(E2,LOW);      
        }   
void advance(char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />          //Move forward
        {
          analogWrite (E1,a);      //PWM Speed Control
          digitalWrite(M1,HIGH);    
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
          digitalWrite(M2,HIGH);
        }  
void back_off (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />          //Move backward
        {
          analogWrite (E1,a);
          digitalWrite(M1,LOW);   
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
          digitalWrite(M2,LOW);
}
void turn_L (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />             //Turn Left
        {
          analogWrite (E1,a);
          digitalWrite(M1,LOW);    
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
          digitalWrite(M2,HIGH);
        }
void turn_R (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />             //Turn Right
        {
          analogWrite (E1,a);
          digitalWrite(M1,HIGH);    
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
          digitalWrite(M2,LOW);
        }
void setup(void) 
{ 
    int i;
    for(i=4;i<=7;i++)
    pinMode(i, OUTPUT);  
    Serial.begin(9600);      //Set Baud Rate
} 
void loop(void) 
{ 
     char val = Serial.read();
     if(val!=-1)
       {
          switch(val)
           {
             case '2'://Move Forward
                     advance (100,100);   //move forward in max speed
                     break;
             case '1'://Move Backward
                     back_off (100,100);   //move back in max speed
                     break;
             case '3'://Turn Left
                     turn_L (50,50);
                     break;       
             case '4'://Turn Right
                     turn_R (50,50);
                     break;          
            }     
          delay(500); 
       }
      else stop();  
}

donc je compile, et comme le monde n'est pas parfait...

"in function 'void loop()' :
error : 'a' was not declared in this scope

rester zen

quelqu'un peut m'expliquer?
merci d'avance

@+

#8 Microrupteurman

Microrupteurman

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 210 messages
  • Gender:Male
  • Location:Aquitaine,Gironde

Posté 22 février 2012 - 06:37

Tu as deux "void loop" et "void setup" ca peut pas marcher.

 
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter :  https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/

Besoin d'une impression 3D grand format ? Contactez moi !
 


#9 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 22 février 2012 - 08:33

Bien vue microrupteurman2.

Oui vue comme ça , c'est pas près de fonctionné , bon ça arrive con ton veux fusionné des codes entre heu.

En tout cas j'aime bien ton prototype ( ton robot )

#10 Microrupteurman

Microrupteurman

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 210 messages
  • Gender:Male
  • Location:Aquitaine,Gironde

Posté 22 février 2012 - 08:50

#include "URMSerial.h"    
#include "Servo.h"   
 
URMSerial urm;    
Servo myservo; //objet servo controle un servo 
 
int pos = 0;    // variable pour stocker la position d'asservissement 
int distance;   
int E1 = 5;     //M1 Speed Control  //Standard PWM DC control 
int E2 = 6;     //M2 Speed Control 
int M1 = 4;    //M1 Direction Control 
int M2 = 7;    //M1 Direction Control 


void setup(void)  
{  
    int i; 
    for(i=4;i<=7;i++) 
    pinMode(i, OUTPUT);   
    Serial.begin(9600);      //Set Baud Rate 
    urm.begin(9,10,9600); 
}  
void loop(void)  
{  
     urm.requestMeasurementOrTimeout(1, distance);
     char val = Serial.read(); 
     Serial.print("Distance : "); // affichage de la distance  
     Serial.println(distance);   
     delay(50);    

     if(val!=-1) 
       { 
          switch(val) 
           { 
             case '2'://Move Forward 
                     advance (100,100);   //move forward in max speed 
                     break; 
             case '1'://Move Backward 
                     back_off (100,100);   //move back in max speed 
                     break; 
             case '3'://Turn Left 
                     turn_L (50,50); 
                     break;        
             case '4'://Turn Right 
                     turn_R (50,50); 
                     break;           
            }      
          delay(500);  
       } 
      else stop();   
}

void stop(void)                    //Stop 
        { 
          digitalWrite(E1,LOW);    
          digitalWrite(E2,LOW);       
        }    
void advance(char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />          //Move forward 
        { 
          analogWrite (E1,a);      //PWM Speed Control 
          digitalWrite(M1,HIGH);     
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;     
          digitalWrite(M2,HIGH); 
        }   
void back_off (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />          //Move backward 
        { 
          analogWrite (E1,a); 
          digitalWrite(M1,LOW);    
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;     
          digitalWrite(M2,LOW); 
} 
void turn_L (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />             //Turn Left 
        { 
          analogWrite (E1,a); 
          digitalWrite(M1,LOW);     
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;     
          digitalWrite(M2,HIGH); 
        } 
void turn_R (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />             //Turn Right 
        { 
          analogWrite (E1,a); 
          digitalWrite(M1,HIGH);     
          analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;     
          digitalWrite(M2,LOW); 
        } 

Essaye ca.

 
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter :  https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/

Besoin d'une impression 3D grand format ? Contactez moi !
 


#11 Pilote

Pilote

    Membre

  • Membres
  • 39 messages
  • Gender:Male
  • Location:NANTES

Posté 22 février 2012 - 09:34

Merci Seb, mais ce n'est qu'un début...j'aimerai rajouter des capteurs IR et des leds par la suite
caractérisques de mon bot:
base DFRobot avec motoreducteurs 6V + carte romeo + capteur US URM37 + servomoteur TowerPro

@ Microrupteurman ; voilà! j'ai modifié le code, un seul void setup, un seul void loop...j'ai rajouté la partie "commande par le capteur" mais j'ai toujours la même erreur :

"in function 'void loop()' :
error : 'a' was not declared in this scope


#include "URMSerial.h"   
#include "Servo.h"  
URMSerial urm;   
Servo myservo; //objet servo controle un servo

int pos = 0;    // variable pour stocker la position d'asservissement
int distance;  
int E1 = 5;     //M1 Speed Control  //Standard PWM DC control
int E2 = 6;     //M2 Speed Control
int M1 = 4;    //M1 Direction Control
int M2 = 7;    //M1 Direction Control
  
void setup()
{   
Serial.begin(9600); // initialisation de la connexion Arduino / PC  
urm.begin(9,10,9600); // initialisation du capteur sur les pattes 9 et 10 à la vitesse 9600  
myservo.attach(11);
int i;
for(i=4;i<=7;i++)
pinMode(i, OUTPUT);  
Serial.begin(9600);      //Set Baud Rate
}  
  
void loop()   
{  
urm.requestMeasurementOrTimeout(1, distance);// mise à jour de la distance  
     
Serial.print("Distance : "); // affichage de la distance 
Serial.println(distance);  
delay(50);   

for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
{                                  // in steps of 1 degree 
myservo.write(pos);              // tell servo to go to position in variable 'pos' 
delay(15);                       // waits 15ms for the servo to reach the position 
} 
for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
{                                
myservo.write(pos);              // tell servo to go to position in variable 'pos' 
delay(15);                       // waits 15ms for the servo to reach the position 
} 
{
if (distance < 10) //si distance inférieure à 10 cm
{
analogWrite (E1,a); 
digitalWrite(M1,HIGH);    
analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;     
digitalWrite(M2,LOW); 
}
void stop(void)                    //Stop
{
digitalWrite(E1,LOW);   
digitalWrite(E2,LOW);      
}   
void advance(char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />          //Move forward
{
analogWrite (E1,a);      //PWM Speed Control
digitalWrite(M1,HIGH);    
analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
digitalWrite(M2,HIGH);
}  
void back_off (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />          //Move backward
{
analogWrite (E1,a);
digitalWrite(M1,LOW);   
analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
digitalWrite(M2,LOW);
}
void turn_L (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />             //Turn Left
{
analogWrite (E1,a);
digitalWrite(M1,LOW);    
analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
digitalWrite(M2,HIGH);
}
void turn_R (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />             //Turn Right
{
analogWrite (E1,a);
digitalWrite(M1,HIGH);    
analogWrite (E2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;    
digitalWrite(M2,LOW);
}
{ 
char val = Serial.read();
if(val!=-1)
{
switch(val)
{
case '2'://Move Forward
advance (100,100);   //move forward in max speed
break;
case '1'://Move Backward
back_off (100,100);   //move back in max speed
break;
case '3'://Turn Left
turn_L (50,50);
break;       
case '4'://Turn Right
turn_R (50,50);
break;          
}     
delay(500); 
}
else stop();  
}

} 




#12 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 22 février 2012 - 10:25

Oui c'est normale tu a oublier de mètre
void advance(char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />

c'est pour cela que tu a une erreur , car ton erreur dit

"in function 'void loop()' :
error : 'a' was not declared in this scope



Qui veux dire

»dans« void loop () 'fonction:
d'erreur: 'a' n'a pas été déclaré dans cette portée



#13 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 22 février 2012 - 11:01

La vraie erreur est que tu définis des fonction, a l'interieur d'une fonction. En l'occurence, tu définis la fonction "stop" par exemple dans la fonction loop. Donc normal que ca ne marche pas.


Malédiction du Créatif :
Plus vous avez d’idées et moins vous arrivez à les structurer.


#14 Pilote

Pilote

    Membre

  • Membres
  • 39 messages
  • Gender:Male
  • Location:NANTES

Posté 23 février 2012 - 10:34

Salut!

Merci pour le coup de main les gars...
bon! je reprends à zéro

au début je voulais :

Démarrage robot // alimentation carte ON, alimentation moteur ON
1 - avance rapide // moteur1 vitesse 100, moteur2 vitesse 100
2 - le servo balaye de 0 à 180°
3 - le capteur US lit les distances > 10cm
4 - la led RGB est allumée verte
5 - le capteur US lit une distance < 10cm
6 - le robot tourne à droite // moteur1 vitesse 100, moteur2 vitesse 20
7 - la led RGB est allumée rouge pour chaque distance lue < 10cm
8 - le capteur US lit une distance > 10cm
9 - la led RGB est allumée verte
10 - avance rapide


c'est très loin de ce que j'ai dans mon code...
je ne devrai pas coller bêtement des morceaux de code mais je voulais contrôler le fonctionnement du capteur et des moteurs

Déjà, j'ai un peu de mal à comprendre le ( char a,char B ) des commandes moteur

ensuite pour la structure, je pensais mettre les points de 1 à 10 dans la fonction Loop
je me trompe?

@+ et encore merci!

#15 Pilote

Pilote

    Membre

  • Membres
  • 39 messages
  • Gender:Male
  • Location:NANTES

Posté 01 mars 2012 - 08:11

Bonjour,

j'ai profité d'une entorse pour revoir mon code.
Retours dans les bouquins et les notes de stage Arduino...
J'ai aussi suivi tes conseils Jbot

#include "URMSerial.h"   
#include "Servo.h"  
URMSerial urm;   
Servo myservo; //objet servo controle un servo

int pos = 0;    // variable pour stocker la position d'asservissement
int distance;  
int E1 = 5;     //M1 Speed Control  //Standard PWM DC control
int E2 = 6;     //M2 Speed Control
int M1 = 4;    //M1 Direction Control
int M2 = 7;    //M1 Direction Control


void setup()
{   
Serial.begin(9600); // initialisation de la connexion Arduino / PC  
urm.begin(9,10,9600); // initialisation du capteur sur les pattes 9 et 10 à la vitesse 9600  
myservo.attach(11);
int i;
for(i=4;i<=7;i++)
pinMode(i, OUTPUT);  
Serial.begin(9600);      //Set Baud Rate
}  
  
void loop()   
{  
urm.requestMeasurementOrTimeout(1, distance);// mise à jour de la distance  
     
Serial.print("Distance : "); // affichage de la distance 
Serial.println(distance);  
delay(50);   

for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
{                                  // in steps of 1 degree 
myservo.write(pos);              // tell servo to go to position in variable 'pos' 
delay(15);                       // waits 15ms for the servo to reach the position 
} 
for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
{                                
myservo.write(pos);              // tell servo to go to position in variable 'pos' 
delay(15);                       // waits 15ms for the servo to reach the position 
} 


if (distance >= 10) //si distance supérieure à 10 cm 
{
analogWrite (E1,100);      
digitalWrite(M1,HIGH);    
analogWrite (E2,100);    
digitalWrite(M2,HIGH);
}  
else (distance < 10); //si distance inférieure à 10 cm
{
analogWrite (E1,50); 
digitalWrite(M1,HIGH);    
analogWrite (E2,50);     
digitalWrite(M2,LOW); 
delay(15);
}
}


çà compile bien, çà upload bien aussi, mais le robot tourne en rond sans commencer par avancer tout droit, alors que le capteur envoie bien les distances

Si vous avez une piste, je suis preneur!
Merci

@+

#16 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 01 mars 2012 - 01:28

Déjà pour commencé tu déclare 2 foie dans la parti void setup()

Serial.begin(9600); //Set Baud Rate

Bon se n'est pas le problème c'est évidant.

Toujours dans la parti void setup ()

tu mes ton for comme se si:

for(i=4;i<=7;i++)

Remplace le comme se si:

for(int i=4;i<=8;i++)

Je ne garanti rien.

Fait un teste , et tien nous au courent.

#17 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 01 mars 2012 - 01:42

Aucun rapport :P

Par contre ceci est mal écrit :

>> else (distance < 10); //si distance inférieure à 10 cm

Il faudrait soit mettre

>> else //si distance inférieure à 10 cm

soit

>> else if(distance < 10) //si distance inférieure à 10 cm

au choix.


Malédiction du Créatif :
Plus vous avez d’idées et moins vous arrivez à les structurer.


#18 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 01 mars 2012 - 04:59

Salut jbot , oui je c'est que c'est en Aucun rapport.

Je les mémé stipulé en écrie

Bon se n'est pas le problème c'est évidant Image IPB.



#19 Pilote

Pilote

    Membre

  • Membres
  • 39 messages
  • Gender:Male
  • Location:NANTES

Posté 01 mars 2012 - 08:14

salut

merci à tous les deux
@ Seb : à force de lire et relire ce code, je ne vois même plus les doublons :wacko:
@Jbot : Cool ! J'essaye et vous tiens au jus!!

çà sent bon! je le sens bien...

je suis en pleine modification technique du bot: ajout d'un capteur IR, d'un module LDR et de 2 leds RGB...
j'ai aussi changé la batterie d'alim moteur pour une Lipo 7,4V et module lipo/alarme voltmètre ( lien )

@+ ;)

#20 Pilote

Pilote

    Membre

  • Membres
  • 39 messages
  • Gender:Male
  • Location:NANTES

Posté 03 mars 2012 - 03:21

Bonjour,

C'EST BON !!!
Il roule, détecte, tourne...après quelques réglages de vitesse, çà serait parfait ou presque...

Car j'ai cependant encore un souci ; le temps de détection du capteur et de réaction du bot est tellement long qu'il fini par se cogner partout

Quels paramêtres puis-je modifier pour remédier à çà?
J'ai modifié les "delay" et les vitesses en les mettant presque au minimum mais rien ni fait
j'ai aussi modifié la vitesse de connexion de 9200 Bauds à 19600 Bauds >> idem

j'espère que l'ajout du capteur IR l'aidera un peu, mais si vous savez comment améliorer l'affaire, je ne suis pas contre! :blush:

@+



Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users