Aller au contenu


Photo
- - - - -

Déplacement autonome avec Arduino ?


  • Veuillez vous connecter pour répondre
31 réponses à ce sujet

#21 zouillex

zouillex

    Nouveau membre

  • Membres
  • 9 messages

Posté 12 septembre 2012 - 12:15

C'est toi ca Jep?:
http://www.bricobidules.com/index.php?post/2012/02/28/Un-robot-qui-%C3%A9vite-les-obstacles

Je me suis bien inspiré de ce projet pour pouvoir avancer.

const int moteurDroite = 6; // PWM Pin Moteur droite
const int moteurGauche = 5; // PWM Pin Moteur gauche

#22 Ulmo

Ulmo

    Nouveau membre

  • Membres
  • 32 messages

Posté 12 septembre 2012 - 01:04

Pour un seul et même programme court, j'ai changé l'adressage des commandes PWM de la carte driver motor:

exemple, pour une PWM unique de 160 (sur 255max) :

int PWM_moteur_gauche : 3 u = 0v
int PWM_moteur_droit : 6 u = 3.6v

puis :
int PWM_moteur_gauche : 3 u = 0v
int PWM_moteur_droit : 5 u = 3.6v



etc..., jusqu'à démontrer que jamais il n'y a de tension sur les sortie 11 et 3, à partir du moment ou la commande est inférieure à 255 (ou HIGH).


Je peux quand même contrôler chaque moteur en utilisant les broche PWM fonctionnant.
Les 3 et 11 fonctionnent qu'en analogique.

#23 zouillex

zouillex

    Nouveau membre

  • Membres
  • 9 messages

Posté 12 septembre 2012 - 01:22

Si tu veux exclure tout bug externe, fais tes test sur des leds et non le moteur.
Au moins, la carte moteur n'est pas dans le circuit

#24 Jep31

Jep31

    Nouveau membre

  • Membres
  • 43 messages
  • Gender:Male
  • Location:Toulouse France

Posté 12 septembre 2012 - 02:26

C'est toi ca Jep?:
http://www.bricobidules.com/index.php?post/2012/02/28/Un-robot-qui-%C3%A9vite-les-obstacles

Je me suis bien inspiré de ce projet pour pouvoir avancer.

const int moteurDroite = 6; // PWM Pin Moteur droite
const int moteurGauche = 5; // PWM Pin Moteur gauche


Non le mien c'est celui là:
Un robot à deux roues motrices.

Jepbot
http://www.youtube.com/watch?v=qpm1Q6tVdhs&feature=plcp


Voilà l'initialisation des moteurs:

//Initialisation moteurs

//Pins des PWM de la base roulante
int pinPwmd = 5;    
int pinPwmg = 6;    

//Pins de sens de la base roulante
int sensAvantGauche = 7; 
int sensArriereGauche = 8;
int sensAvantDroit = 4;
int sensArriereDroit = 12;

// Variables Moteurs
int pwmG;
int pwmD;

void initialisationMoteur(){

  //Configuration pins en sortie
  pinMode(pinPwmd, OUTPUT); 
  pinMode(pinPwmg, OUTPUT); 
  pinMode(sensAvantGauche, OUTPUT); 
  pinMode(sensArriereGauche, OUTPUT); 
  pinMode(sensAvantDroit, OUTPUT); 
  pinMode(sensArriereDroit, OUTPUT); 

}

Pour envoyer la commande un simple:

analogWrite(pinPwmd,valeurd);
 analogWrite(pinPwmg,valeurg);


#25 Ulmo

Ulmo

    Nouveau membre

  • Membres
  • 32 messages

Posté 12 septembre 2012 - 03:35

Si tu veux exclure tout bug externe, fais tes test sur des leds et non le moteur.
Au moins, la carte moteur n'est pas dans le circuit


je ne teste pas la carte moteur mais la tension de sortie des broches PWM, qui sont entre 0 et 5V max.

#26 Ulmo

Ulmo

    Nouveau membre

  • Membres
  • 32 messages

Posté 12 septembre 2012 - 11:45

J'ai appris que les broches 3 et 11 sont liées au Timer2, qu'utilise la bibliothèque de la télécommande IR.

#27 zouillex

zouillex

    Nouveau membre

  • Membres
  • 9 messages

Posté 13 septembre 2012 - 10:46

je ne teste pas la carte moteur mais la tension de sortie des broches PWM, qui sont entre 0 et 5V max.

On est d'accord que le PWM n'envoie pas de courant continu, mais une série d’impulsions a 5v.
Corrigez moi si je me trompe

#28 Ulmo

Ulmo

    Nouveau membre

  • Membres
  • 32 messages

Posté 13 septembre 2012 - 09:34

Ben oui, une série d'impulsion, mais à une fréquence assez élevée pour que le Voltmètre mesure la moyenne.

#29 Ulmo

Ulmo

    Nouveau membre

  • Membres
  • 32 messages

Posté 01 octobre 2012 - 10:57

J'ai placé un deuxième capteur US.
Les deux (gauche, droite, à l'avant) me renvoient bien la distance mesurée, et une mesure fausse de l'ordre de 4000 cm qui apparaît à droite puis à gauche. Ceci à fréquence régulière. Hm? Vous avez une idée ?

#30 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 375 messages
  • Gender:Male
  • Location:Cholet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 02 octobre 2012 - 01:08

J'ai placé un deuxième capteur US.
Les deux (gauche, droite, à l'avant) me renvoient bien la distance mesurée, et une mesure fausse de l'ordre de 4000 cm qui apparaît à droite puis à gauche. Ceci à fréquence régulière. Hm? Vous avez une idée ?


si cette erreur vient depuis l'ajout du deuxième capteur US et si en plus tu utilise un capteur US identique il est possible que tes capteurs US se parasitent entre eux... C'est à dire qu'ils reçoivent les éco des ultrasons de l'autre capteur en plus du leur. Essaye de les éloigner l'un de l'autre ou de baisser la tension d'alimentation de tes capteurs =) (tu perdras en porté maximales mais du cout tu perdras de même les echos parasites des autres capteurs ! )

à 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 !

 

Les réalisations de Mike118  

 

 

 


#31 Ulmo

Ulmo

    Nouveau membre

  • Membres
  • 32 messages

Posté 07 octobre 2012 - 03:29

Mes capteurs US sont réglés nickel, un fil était mal connecté :s

Maintenant, j'ai monté une tête suiveuse composée d'un servomoteur qui actionne la rotation de la tourelle.
Cette tourelle est surmontée de deux capteurs sharp IR.(http://www.arobose.com/shop/capteurs-robot/36-module-capteur-de-distance-infrarouge-sharp-gp2d12.html)
La tourelle suit ma main, mais de manière peu fluide.

Voic mon code issu d'un "exemple arduino":

[#include <Servo.h>

Servo myservo_A; // create servo object to control a servo
// a maximum of eight servo objects can be created
Servo myservo_P;

int pos = 90; // variable to store the servo position

double eye_G = A0;//detecteur IR gauche
double eye_D = A1;
int Distance_G;
int Distance_D;
int val = 0;
int val_1 = 0;


void setup()
{
Serial.begin(57600);
myservo_P.attach(4); // attaches the servo on pin 4 to the servo object
myservo_A.attach(5);

}

void loop()
{

myservo_A.write(170);
Distance_G = analogRead(A0);
//Serial.print("Gauche : ");
//Serial.println(Distance_G);
Distance_D = analogRead(A1);
//Serial.print("Droite : ");
//Serial.println(Distance_D);
delay(10);




if (Distance_G > Distance_D)
{
myservo_P.write(pos);
pos = pos + 1;
delay(10);
}
if (Distance_D > Distance_G)
{
myservo_P.write(pos);
pos = pos - 1;
delay(10);
}




}
]

J'ai essayé d'agir sur les delay, mais le meilleur réglage que j'ai pu faire est celui du code ci dessus.

Je demande pas une solution clef en main, ça me plait de chercher (et trouver!) le code qui fonctionne parfaitement.

J'ai pensé à désensibiliser les capteurs, leurs mesures n'étant pas parfaitement stables.

Mais surtout, avant tout, sont ce de bons capteurs ?

#32 Mic*

Mic*

    Habitué

  • Membres
  • PipPip
  • 229 messages
  • Gender:Male
  • Location:Sarthe
  • Interests:électronique, jardin, promenade,bricolage

Posté 25 octobre 2012 - 11:11

J'ai une chenille qui tourne légèrement moins vite que l'autre. Les encodeurs sont ils une solution à ceci ?

Les encodeurs pourraient aussi me servir à contourner un obstacle pour revenir sur la trajectoire prévue plutôt que de se détourner de l'obstacle, n'est ce pas ?

Pour l'instant, mon Rover5 se déplace sans se taper dans les murs ou autre obstacle. Y a plus qu'à lui coller des balayettes, un réservoir pour la poussière.. :)



J'ai fait un robot avec deux moteurs, j'ai eu le même problème et je l'ai résolu avec du pseudo PWM gr^ce à une boucle For Next genre:

for m = 1 to 500
m1 on
delayµicroSeconde 4
m2 on
next m
en clair à chaque boucle le moteur 2 fait une pause de 4 micro seconde à ajuster à la louche suivant tes moteurs, c'est économique et ça marche pas mal
vois l'exemple de code en BASIC en bas de la page ici: Mon lien




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

0 members, 0 guests, 0 anonymous users