Aller au contenu


Photo
- - - - -

Mon robot éviteur d'obstacles ne bouge pas


17 réponses à ce sujet

#1 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris

Posté 05 mars 2013 - 09:37

Voila, j'ai un probleme sur le robot que je viens de construire.DSC_0170.JPG DSC_0171.JPG

Le robot se mouvoit a l'aide de deux moteur pas a pascelui la et se repere a l'aide de deux capteurs Ultrasoniques Celui la.

Pour l'instant, ce robot, doit juste être capable d’éviter les obstacles. Ensuite, je pourrais éventuellement rajouter des étages pour ajouter d'autres fonctions comme le retour a une base par exemple.

J'ai donc essayer le robot et la rien. Le robot ne bouge pas a pars une impulsion (un pas ?) par seconde et par moteur et le moniteur série ( qui me donne la distance des deux capteurs) n'affiche que la valeur de la distance gauche, l'autre reste égal a 0. moniteur serie.png

J'ai testé tous les composants séparément avec des codes (test) et il fonctionne tous correctement donc pas de soucis de ce coté la.
Je me demande donc si le problème vient du robot en lui même ( alimentation,branchement,...) ou du code.

Voici le code ( debugé a l'aide de R1D1 :D/>/> ) :
#define trigPinD 2
#define echoPinD 3
#define trigPinG 4
#define echoPinG 5

//declare variables for the motor pins
int motorPin1D = 6;    // Blue   - 28BYJ48 pin 1
int motorPin2D = 7;    // Pink   - 28BYJ48 pin 2
int motorPin3D = 8;    // Yellow - 28BYJ48 pin 3
int motorPin4D = 9;    // Orange - 28BYJ48 pin 4
int motorPin1G = 10;    // Blue   - 28BYJ48 pin 1
int motorPin2G = 11;    // Pink   - 28BYJ48 pin 2
int motorPin3G = 12;    // Yellow - 28BYJ48 pin 3
int motorPin4G = 13;    // Orange - 28BYJ48 pin 4
                                            // Red    - 28BYJ48 pin 5 (VCC)
                        

int motorSpeed = 1200;  //variable to set stepper speed
int lookupD[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
int lookupG[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
//////////////////////////////////////////////////////////////////////////////
void setup() {
  //declare the motor pins as outputs
  pinMode(trigPinD, OUTPUT);
  pinMode(echoPinD, INPUT);
  pinMode(trigPinG, OUTPUT);
  pinMode(echoPinG, INPUT);
  pinMode(motorPin1D, OUTPUT);
  pinMode(motorPin2D, OUTPUT);
  pinMode(motorPin3D, OUTPUT);
  pinMode(motorPin4D, OUTPUT);
  pinMode(motorPin1G, OUTPUT);
  pinMode(motorPin2G, OUTPUT);
  pinMode(motorPin3G, OUTPUT);
  pinMode(motorPin4G, OUTPUT);
  Serial.begin(9600);
}

//////////////////////////////////////////////////////////////////////////////
void loop(){
 int durationD, distanceD;
  digitalWrite(trigPinD, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPinD, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPinD, LOW);
  durationD = pulseIn(echoPinD, HIGH);
  distanceD = (durationD/2) / 29.1;
   Serial.print(distanceD);
   Serial.println(" cm droit");
   
    int durationG, distanceG;
  digitalWrite(trigPinG, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPinG, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPinG, LOW);
  durationG = pulseIn(echoPinG, HIGH);
  distanceG = (durationG/2) / 29.1;
   Serial.print(distanceG);
   Serial.println(" cm gauch e");
   
   
   if (distanceG < 10 ){
   clockwiseG();
   anticlockwiseD();
   }
   else if ( distanceD < 10 ){
   anticlockwiseG();
   clockwiseD();
   }
   else {
   clockwiseD();
   clockwiseG();
   }
   
}

//////////////////////////////////////////////////////////////////////////////
//set pins to ULN2003 high in sequence from 1 to 4
//delay "motorSpeed" between each pin setting (to determine speed)
void anticlockwiseD(){

  for(int iD = 0; iD < 8; iD++)
  {
    setOutputD(iD);
    delayMicroseconds(motorSpeed);
  }
  }

void clockwiseD(){

  for(int iD = 7; iD >= 0; iD--)
  {
    setOutputD(iD);
    delayMicroseconds(motorSpeed);
  }
}
  
  void anticlockwiseG(){

  for(int iG = 0; iG < 8; iG++)
  {
    setOutputG(iG);
    delayMicroseconds(motorSpeed);
  }
}

void clockwiseG(){

  for(int iG = 7; iG >= 0; iG--)
  {
    setOutputG(iG);
    delayMicroseconds(motorSpeed);
  }
  
}

void setOutputD(int out){

  digitalWrite(motorPin1D, bitRead(lookupD[out], 0));
  digitalWrite(motorPin2D, bitRead(lookupD[out], 1));
  digitalWrite(motorPin3D, bitRead(lookupD[out], 2));
  digitalWrite(motorPin4D, bitRead(lookupD[out], 3));
}

 void setOutputG(int out){

  digitalWrite(motorPin1G, bitRead(lookupG[out], 0));
  digitalWrite(motorPin2G, bitRead(lookupG[out], 1));
  digitalWrite(motorPin3G, bitRead(lookupG[out], 2));
  digitalWrite(motorPin4G, bitRead(lookupG[out], 3));
}

PS: J'ai essayer ce code avec seulement un moteur et un capteur. Le resultat fut un peut mieux car il tournais ( très doucement et en s’arrêtant de façons aléatoire )et réagissait un peut mieux a la détection des obstacles.

#2 geek maxou

geek maxou

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 663 messages
  • Gender:Male
  • Location:Pas-de-Calais 62

Posté 05 mars 2013 - 09:45

Je pense que tu devrais éviter de re-créer a chaque fois un post ^^
Sinon tu n'a plus de problème lors de la compilation de ton code ?
Tu n'a pas de problème de poid ? (Ton robot^^)

A.R.M.I

Autonomous Robotics Mechanics Intelligent


#3 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris

Posté 05 mars 2013 - 10:27

Je pense que tu devrais éviter de re-créer a chaque fois un post ^^


Désolé mais c'est car les autres était plein de code super long et peut pratique a lire. A propos, est il possible de supprimer un sujet ?

Sinon tu n'a plus de problème lors de la compilation de ton code ?


Nop, tout a été débugé avec l'aide précieuse de R1D1 ;)

Tu n'a pas de problème de poid ? (Ton robot^^)


Non plus, lors des tests des moteurs il se déplaçait sans soucis.

#4 ChristianR

ChristianR

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Male
  • Location:Isère (38)

Posté 05 mars 2013 - 10:35

Est ce que la masse de l'Arduino est bien reliée aux GND des 2 moteurs et 2 capteurs ?
Christian

#5 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris

Posté 05 mars 2013 - 10:42

Est ce que la masse de l'Arduino est bien reliée aux GND des 2 moteurs et 2 capteurs ?


Oui, et le tout est alimenté via USB ( qui serat ensuite remplacé par un boitier de 4 piles ou bien une batterie 9,6 V )

#6 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris

Posté 05 mars 2013 - 10:43

D'ailleurs, une question, j'ai une assez grosse batterie 9,6 V dont je ne connait pas le nombre d’ampères délivrer. Sachant que mon multimètre donne des résultats plus qu’approximatifs, j'aimerais savoir comment connaitre l’ampérage ( même approximatif ) de ma batterie.

J’aimerais aussi savoir quel est le nombre d’ampères maximum que l'arduino peut supporter.

Merci :)

#7 ChristianR

ChristianR

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Male
  • Location:Isère (38)

Posté 06 mars 2013 - 09:36

L'USB d'un ordinateur délivre peu de courant, ce n'est pas fait pour entraîner des moteurs.
Une batterie est incontournable.
Arduino = 40mA max par pin.
Christian

#8 Microrupteurman

Microrupteurman

    Pilier du forum

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

Posté 06 mars 2013 - 11:16

Je t'invite a revoir ton code pour tes capteur US, il y a bien plus performant et plus simple !!



#include "Ultrasonic.h"

Ultrasonic Hsr1 (12,11);    // pin trig et echo ou l'inverse !

void setup() {
Serial.begin(9600);

}

void loop()
{
  

   int Dhsr1 =Hsr1.Ranging (CM);

  Serial.print(Dhsr1);
    
  delay(100);
}




 
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 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris

Posté 06 mars 2013 - 12:37

L'USB d'un ordinateur délivre peu de courant, ce n'est pas fait pour entraîner des moteurs.
Une batterie est incontournable.
Arduino = 40mA max par pin.


Je vais alimenter avec une batterie le tout par la prise 2,1 mm. Je vais aussi alimenter directement les contrôleur depuis cette batterie sans passer par l'arduino pour qu'il puissent puisez plus de puissance.

Le truc c'est que j'ai plein de batteries mais elles m’ont l'air trop puissantes ( batterie de grosse voiture RC ) pour l'arduino. Donc un boitier de 4 piles cela suffiras vous pensez ? Sachant qu'il sera remplis de piles rechargeable donc cela donneras 4x1.2 = 4.8 volts ce qui est encore moins que les 5v de L'USB. Sinon, j'ai des batteries LIPOs 11,1 V 20C ou 25C.

Je t'invite a revoir ton code pour tes capteur US, il y a bien plus performant et plus simple !!


Ah, merci, je me souviens que tu me l'avais déjà donné mais je le retrouver pas. Je vais revoir mon code avec ce nouveau moyen de mesure. :)

#10 Microrupteurman

Microrupteurman

    Pilier du forum

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

Posté 06 mars 2013 - 02:06

Pas de souci pour les lipo, j'utilise une 3s 5A 30c,mais je passe par un regulateur par securité.

 
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 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris

Posté 06 mars 2013 - 04:12

Pas de souci pour les lipo, j'utilise une 3s 5A 30c,mais je passe par un regulateur par securité.


Ok, mais si je n'ai pas de régulateur c'est vraiment grave ?

#12 Microrupteurman

Microrupteurman

    Pilier du forum

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

Posté 06 mars 2013 - 04:39

Theoriquement, non.

 
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 !
 


#13 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 959 messages
  • Gender:Male
  • Location:Anglet

Posté 06 mars 2013 - 10:21

Désolé mais c'est car les autres était plein de code super long et peut pratique a lire. A propos, est il possible de supprimer un sujet ?


Dis moi quels sont tes sujets que tu veux que je supprime et je le fait...

Bonne continuation !

Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#14 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris

Posté 07 mars 2013 - 12:38

Bon, je revient avec des nouvelles toutes fraiches.

Je me suis rendu compte qu'il y avait une manière plus simple de contrôler mes moteurs grâce aux exemples de librairie arduino.
J'ai donc revu mon code avec un de ces exemple ( motorspeed). J'ai donc, grâce a cela, crue que j'avais résolut le problème des moteurs qui ne tourne pas car il tournais belle est bien tout les deux. J'ai donc ensuite rajouter le code permettant de récupére la distance des deux capteurs et la, plus rien, les moteurs se sont remis a ne pas tourner et le moniteur série a affiché 0 cm pour les deux distances.

Je me disais que c’était peut être lié a l'alimentation qui été trop faible mais j'ai ensuite essayer en alimentant les contrôleur séparément en 5V et toujours rien, pas plus de mouvement...

Quelqu'un a t'il une idée ?


Voila le code qui arrive a faire tourner correctement mes moteurs:
 int motorSpeedgauche = 50;
int motorSpeeddroit = 50 ;
const int trigPinD = 2;
const int echoPinD = 3;
const int trigPinG = 4;
const int echoPinG = 5;

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution



// initialize the stepper library on pins 8 through 11:
Stepper myStepperdroit(stepsPerRevolution, 10,11,12,13);   
Stepper mySteppergauche(stepsPerRevolution, 6,7,8,9); 

int stepCount = 0;  // number of steps the motor has taken

void setup() 
{
  Serial.begin(9600);
}

void loop() {
  if (motorSpeeddroit > 0) 
  
  {
    myStepperdroit.setSpeed(motorSpeeddroit);
    // step 1/100 of a revolution:
    myStepperdroit.step(stepsPerRevolution/100);
  }
    

  if (motorSpeedgauche > 0) 
  
  {
    mySteppergauche.setSpeed(motorSpeedgauche);
    // step 1/100 of a revolution:
    mySteppergauche.step(stepsPerRevolution/100);
  } 
}


#15 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris

Posté 18 mars 2013 - 07:23

Un idée quelqu'un ?

Sa fait dejas le 2eme robot que je construit et qui ne marche pas... :(

#16 geek maxou

geek maxou

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 663 messages
  • Gender:Male
  • Location:Pas-de-Calais 62

Posté 18 mars 2013 - 07:26

Un idée quelqu'un ?

Sa fait dejas le 2eme robot que je construit et qui ne marche pas... :(/>

Je ne suis pas assez qualifier en Arduino pour t'aider, mais ne te décourage pas ! :) Tu peux le faire ! :D

GeekMaxou

A.R.M.I

Autonomous Robotics Mechanics Intelligent


#17 ChristianR

ChristianR

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Male
  • Location:Isère (38)

Posté 18 mars 2013 - 08:47

Voila le code qui arrive a faire tourner correctement mes moteurs


Met plutôt ton code complet qui ne marche pas si tu veux qu'on puisse t'aider.
Avec un petit dessin du montage c'est encore mieux.
Christian

#18 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 959 messages
  • Gender:Male
  • Location:Anglet

Posté 19 mars 2013 - 01:14

Un idée quelqu'un ?

Sa fait dejas le 2eme robot que je construit et qui ne marche pas... :(/>/>


Ah mais je pensais que tu avais réussis à régler le problème de l'autre ! pas que tu avais abandonné !
En tout cas ne te décourage pas ! J'ai récupéré de comparateur dernièrement =) Je les ais mis de côté en pensant à toi ;)/> Dès que je finis les robots pour la coupe de france je fais en sorte de trouver pourquoi ce que je t'avais proposé ne marche pas chez toi et comment le débugger !

Pour le robot arduino par contre là c'est pas trop mon domaine ... Je peux t'aider sur l'algo et la logique mais je n'ai pas la bonne syntaxe et il y a pas mal de fonction que je ne connais pas ^^ Mais je suis sûr que pas mal de gens du forum vont t'aider ! Et puis si tu regarde bien malgré les embuches sur ta route tu progresse à ton rythme au fur et à mesure et tu apprends beaucoup de chose =)
En tout cas à bientôt !

Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 




Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users