Aller au contenu


Photo
- - - - -

Mon premier robot Arduino


83 réponses à ce sujet

#1 inovasong

inovasong

    Membre

  • Membres
  • 56 messages

Posté 12 avril 2012 - 12:41

Bonjour,

Voila c'est partis je me lance dans la construction de mon premier robot sous arduino.
Apres la découverte de cette carte (voir présentation) je suis super motivé pour monter un robot sur une base de plateforme mobile 2 roues avec plusieurs capteurs et fonction pour une autonomie certaine.

Je vous propose donc de m'accompagner au long de ce projet a travers les différentes étapes, commandes des pièces, montage, problèmes, programmation et surtouts je compte sur votre aide précieuse car sans vous je ne pourrais pas je pense terminer ce projet, puis pourquoi pas continuer en faisant évoluer le robot ...


J'ai déjà une Arduino UNO REV3 et une Mega, je pense plutôt utiliser la mega sur le robot car la UNO me sert pour autre chose pour le moment

Voici une liste inachevée des articles que je compte commander.
-plateforme mobile 2 roues --- Evidement!
-2 codeurs --- Pour les différents calcules de positions et rotation
-Ball caster --- Avec bille plastique pour épargner mon carrelage.

Voici mes premières interrogations
Est ce que ce contrôleur peut convenir pour le châssis que j'ai choisi ?
Platine de commande

Quelle alimentation ?
Je pensais utiliser une pile 9V pour la mega avec ce Boîtier coupleur de 1 pile 9V
Et ce boîtier de 4 piles AA pour les moteurs

Quel capteur pour faire de l'évitement d'obstacle ?
Quelle capteur pour de la détection de franchissement ? Sous entendu comme du suivit de ligne mais la je voudrai détecter le franchissement car le carrelage est parfait :lol: .

Bon c'est déjà un bon début mais plein d’autres questions à suivre.
Merci de votre attention.
@+

#2 dydyouaki

dydyouaki

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 792 messages
  • Gender:Male

Posté 12 avril 2012 - 11:01

salut a toi ,

pour le contrôleur je ne suis pas du tout caler , attends un peu et d'autres te répondrons.

Pour les capteurs d'évitement d'obstacle tu peut utiliser soit des capteurs US (Ultrasons) soit des capteur IR (infrarouge) comme les capteurs Sharp par exemple.

Pour l'alimentation de ta carte Arduino , si tu utilise une pile 9V il te faut le connecteur qui se branche a la Arduino ici mais tu peux trouver moins cher ;)

j'espère t'avoir aider un peu.

A + et bonne chance.

Cordialement Dylan.
Merci a tous
Cordialement Dylan.

#3 inovasong

inovasong

    Membre

  • Membres
  • 56 messages

Posté 12 avril 2012 - 12:24

Bonjour,
Merci de ta réponse Dylan

Pour le contrôleur ainsi que pour l'alimentation des moteurs je vais effectivement attendre l'avis des plus barbus.

Pour l'alimentation de l'arduino, c'est moins chère mais la solution avec le boitier me plaît bien, il y a un interrupteur, c'est propre et ca sera bien fixé sur la plateforme. Apres je pensais raccorder une prise prise jack de type barillet sur le boitier 9V directement et pouvoir ainsi débrancher l'arduino plus facilement pour la maintenance et les modifications.

Pour avoir utilisé des capteurs ultrason sur le NXT mais pas d'infrarouge. Quel sont les grandes différences pour le control la programmation et surtout la qualité de l'information perçu?




Pour ce qui est des différents capteurs de ligne je pensai à ca
Et pour le capteur d’évitement quel distance choisir j'ai trouvé un 20cm <> 150cm est ce que ca suffit?

#4 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 12 avril 2012 - 03:07

Salut !

Quel sont les grandes différences pour le control la programmation et surtout la qualité de l'information perçu?

Pour la programmation sous arduino je ne sais pas. Par contre, il y a des différences physiques entre ces types de capteurs. Par exemple, les rayons infrarouges sont absorbés par des surfaces noires. Après, le réfléchissement des rayons peut être différent en fonction des surfaces.
Souvent, les deux types de capteurs sont combinés pour avoir plus d'informations.

Bon bidouillage !

#5 inovasong

inovasong

    Membre

  • Membres
  • 56 messages

Posté 12 avril 2012 - 07:07

Merci pour tes précisions Francky.

Donc pour l'instant je vais me contenter de capteur a ultrason, si ca passe dans le budget je vais pendre 1 US et 2 IR.

Toujours en rade pour le contrôleur de moteurs donc je vais me lancer dans une recherche plus active.

Petit recap rapide:

1x plateforme mobile - Lien
2x codeurs odométrie - Lien
1x ball caster plastique - Lien
1x boîtier coupleur 1 pile 9V - Lien
1x prise jack - Lien
1x boîtier coupleur 6 piles 1,5 - Lien - A déterminé avec le contrôleur
1x Contrôleur pour moteur CC - Lien - Reste à déterminer si c'est le bon.
2x Capteur IR - Lien
1x Capteur US - Lien


Il me reste à trouver des petits files pour relier tout ça, mais je pense que je ne suis pas si loin de la vérité.
Manque t'il quelque chose ?
Avez vous des liens ou conseilles pour affiner ma sélection ?
Savez vous où trouver des entretoises pour l'arduino ou pour les capteurs et aussi où trouver des supports pour ces derniers .

Merci

#6 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 13 avril 2012 - 04:35

Salut ça me semble pas mal ^^

Après, je ne connais pas ton contrôleur de moteur donc je ne peux pas trop te conseiller là dessus ^^
Sinon il existe des CI qui intègrent des ponts en H (L298, L293D, ...). Après tout dépend du courant que tes moteurs vont consommés.

Par contre, j'avoue que quelque chose m'intrigue : qu'est-ce qu'une ball caster ? J'ai cherché l'autre jour sur internet et au vu de ce que j'ai trouvé j'ai conclu que c'était une simple roulette. Mais si tu la prends alors que tu commandes une plateforme mobile je ne vois plus l'utilité... Donc je suppose que c'est autre chose, d'où ma question ! :)

#7 inovasong

inovasong

    Membre

  • Membres
  • 56 messages

Posté 13 avril 2012 - 08:27

Bonjour,


Merci pour le contrôleur, j’avoue que j’ai beaucoup de lacunes concernant l’alimentation des moteurs, pont en H ou diode de roue libre sont des choses un peux vague pour moi donc je continu ma recherches et ma documentation pour comprendre et apprendre, mais je pense que je vais partir sur une carte Arduino avec contrôleur intégré, pour une solution de simplicité dans un premier temps et surtouts pour une question de connectivité.

Pour le Ball caster effectivement c'est bien une simple roulette, mais avec une bille. Elle est nécessaire pour les plateformes a deux roues, et il y en a bien une de fourni avec le kit suivant Lien mais elle est en métal et comme je veux préserver mon carrelage des rayures je préfère utiliser un Ball caster en plastique

En espérant avoir répondu à ta question a propos de mon choix.

Je vous ferais part du choix de contrôleur CC pour le moteur et après passe à la commande.

Cordialement

#8 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 14 avril 2012 - 06:35

Bonjour,


En espérant avoir répondu à ta question a propos de mon choix.

Oui merci ^^

Merci pour le contrôleur, j’avoue que j’ai beaucoup de lacunes concernant l’alimentation des moteurs, pont en H ou diode de roue libre sont des choses un peux vague pour moi donc je continu ma recherches et ma documentation pour comprendre et apprendre, mais je pense que je vais partir sur une carte Arduino avec contrôleur intégré, pour une solution de simplicité dans un premier temps et surtouts pour une question de connectivité.

N'hésites pas à poser des questions ;)


Bon bidouillage !

#9 inovasong

inovasong

    Membre

  • Membres
  • 56 messages

Posté 14 avril 2012 - 09:29

Bonjour,

N'hésites pas à poser des questions ;)


Et bien voila, deux question ce posent a moi.
Que choisir entre un contrôleur qui utilise des commandes PWM et un contrôleur qui utilise une liaison série TTL ? Si j'ais bien compris je ne pourrais pas faire d'accélération progressive en liaison série, mais est ce bien utile ? Je lorgne sur ce contrôleur la. Si je ne me trompe pas ce contrôleur devrait fonctionner avec les moteurs de la plateforme, merci de confirmer.

Et enfin j'ai un doute sur le câblage de cette carte, j'ais du mal à comprendre si je dois connecter la batterie sur JP13 ou JP12 ? Est ce que je ne doit pas avoir une masse commune et est ce que je dois brancher le GND et le 5V de JP8 sur l'arduino?

Image IPB


Si vous avez des liens pour me permettre de mieux comprendre le fonctionnement merci par avance.

#10 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 14 avril 2012 - 02:14

Bonjour,

Je ne connais pas de micro contrôleur qui utilise de liaison série donc je ne sais pas comment ça fonctionne désolé :/

Par contre, si j'ai bien compris la documentation de ta carte (déjà je pense que tu le sais déjà mais je précise quand même : elle ne marche qu'avec des données séries) :
- il y a 10 vitesses différentes entre l'arrêt et la vitesse maximale (donc tu peux quand même faire une accélération progressive). D'ailleurs, d'après la documentation, le rapport cyclique de 11% à chaque changement de vitesse (donc tu as le même type d'effet qu'avec une PWM).
- concernant le câblage voilà ce qu'ils précisent : (pour avoir les mêmes références de l'image voir ici)

1) Power Headers
2) UART Interface Header
3) Motor Connection Headers
4) Extra Interface Pins
5) Power Switch
6) Status LEDs

Donc, partie 1 tu mets le + Vcc (entre 5 et 16V continus) et la masse (qui doit normalement être commune).
Pour la partie 2, voilà ce qui est précisé :

Power may be applied to the Serial Controlled Dual Motor Driver in one of two different locations: the two-pin JST
header that's on-board, or by using the GND and VCC header pins along the side of the board.

Si j'ai bien compris ce sont les pattes pour transmettre les ordres en format série (soit tu utilises les deux pattes JST soit tu utilises GND et VCC).
La partie 3 c'est pour relier tes moteurs.
La 4 je ne sais pas trop, c'est précisé "extra interface pins". Je suppose que ce n'est pas obligatoire de les utiliser.
La 5 c'est pour mettre en route la carte.
Et la 6 ce sont des LEDs de statut.

Voilà, j'ai essayé de répondre à tes questions mais je te le précise : mes interprétations ne sont peut être pas justes. Je ne sais pas si c'est une carte si simple que ça à utiliser... Enfin, ça c'est à toi de voir ^^

#11 inovasong

inovasong

    Membre

  • Membres
  • 56 messages

Posté 21 avril 2012 - 10:08

Bonjour tout le monde,

Voila toute les pièces ou presque sont bien arrivé il me manque un capteur infrarouge que je devrais recevoir lundi prochain. J'ai commandé le dimanche sur trois site web différents et le grand gagnant est robot shop (reçu le mercredi) suivit le lextronic et arobose (réception le Vendredi).

Le montage partiel a bien avancé j'ai déjà installé les moteurs, les capteurs odometrique, capteur IR, capteur US et l'Arduino Méga plus carte méga I/O sensor. Tous ca installé a l'arrache pour faire mes premiers test.

Pour le driver CC le câblage est plutôt simple à moins que je me sois trompé mais en tous les cas ca marche plutôt bien, voici un petit schéma si ca peux aider quelqu'un.
Image IPB

Hésitez pas à me dire ci j'ais oublié de câbler quelque ‘chose


Et deux petites photos pour la route
Image IPB
Image IPB


Il me reste plein de capteurs à installer mais je vais pour le moment commencer la programmation des moteurs dans un premier temps, a plus tard pour la suite.

#12 swolf

swolf

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 626 messages
  • Gender:Male

Posté 21 avril 2012 - 02:41

Salut! Belle réalisations, c'est propre! par contre la deuxième photo ne s'affiche pas chez moi...
Notre blog, à FJprod et moi: http://2froblog.wordpress.com/

#13 inovasong

inovasong

    Membre

  • Membres
  • 56 messages

Posté 22 avril 2012 - 09:43

Merci swolf,


Voila le montage est terminé il ne manque que le capteur infrarouge sur le côté gauche, tous les éléments (sauf les capteurs IR) fonctionnent sans problèmes le pilotage des moteur fonctionne aussi.

Voici 4 photos pour vous montrer l'avancement du travail.
Image IPB
Image IPB
Image IPB
Image IPB

Place à la programmation pure et dure.

Question:
Comment gérer l'anti rebond associé a une interruption de program, je m'explique j'ais utilisé les broche 18 et 19 qui correspondent aux interruptions 3 et 4, mais comme le delay ne fonctionne pas dans une interruption est-ce qu'il y a une autre méthode?

Merci et @+

#14 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 22 avril 2012 - 10:27

Salut !

Question:
Comment gérer l'anti rebond associé a une interruption de program, je m'explique j'ais utilisé les broche 18 et 19 qui correspondent aux interruptions 3 et 4, mais comme le delay ne fonctionne pas dans une interruption est-ce qu'il y a une autre méthode?


Tu peux mettre en mémoire le temps auquel ton interruption est intervenu. A la prochaine interruption, tu regardes si la dernière interruption n'est pas trop rapproché dans le temps.

++
Black Templar

Mon site internet : http://ferdinandpiette.com/


#15 inovasong

inovasong

    Membre

  • Membres
  • 56 messages

Posté 23 avril 2012 - 11:41

Bonjour, merci Black Templar.

J'ai un autre problème j'utilise 3 interruption de programmes une pour une roue codeuse et deux autres pour des détecteurs de chocs mais la quand j'utilise le code ci dessous l’interruption des bumper s'activent alors que je ne sollicite pas les capteurs je ne comprends pas mais apparemment ca viendrait du contrôleur de moteur car quand je le débranche je n'ai plus ce problème, que faire?, ou chercher ?

#include <SimpleTimer.h> // http://arduino.cc/playground/Code/SimpleTimer
 
SimpleTimer timer;                 // Timer pour échantillonnage
unsigned int tick_codeuse = 0;     // Compteur de tick de la codeuse
int cmd = 0;                       // Commande du moteur
const int frequence_echantillonnage = 5;  // Fréquence d'exécution de l'asservissement
 
/* Routine d'initialisation */
void setup() {
    Serial.begin(9600);         // Initialisation port COM 
    Serial2.begin(115200);         // Initialisation port COM 2
    attachInterrupt(4, bump_R, CHANGE);    // Interruption sur tick de la codeuse  (interruption 0 = pin2 arduino mega)
    attachInterrupt(5, bump_L, CHANGE);    // Interruption bumper gauche
    attachInterrupt(0, compteur, CHANGE);    // Interruption bumper Droite
    
    timer.setInterval(1000/frequence_echantillonnage, asservissement);  // Interruption pour calcul du PID et asservissement
}
 
/* Fonction principale */
void loop(){
    timer.run();
  delay(10);
  Serial2.write('2');//moteur gauche
  Serial2.write('r');// reverse
  Serial2.write('3'); // vitesse
  Serial2.write('\r');
  delay(10);
}
 
/* Interruption sur tick de la codeuse */
void compteur(){
    tick_codeuse++;  // On incrémente le nombre de tick de la codeuse
}
void bump_R(){
    Serial.println("bumpR");
}
 void bump_L(){
    Serial.println("bumpL");
}
/* Interruption pour calcul du PID */
void asservissement()
{
    // Réinitialisation du nombre de tick de la codeuse
   //tick_codeuse=0;
 
    // DEBUG
    Serial.println(tick_codeuse);
}


#16 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 23 avril 2012 - 11:58

Tiens, ce code me dit quelque chose ;)

J'ai un autre problème j'utilise 3 interruption de programmes une pour une roue codeuse et deux autres pour des détecteurs de chocs mais la quand j'utilise le code ci dessous l'interruption des bumper s'activent alors que je ne sollicite pas les capteurs je ne comprends pas mais apparemment ca viendrait du contrôleur de moteur car quand je le débranche je n'ai plus ce problème, que faire?, ou chercher ?


C'est vraiment étrange car le programme à l'air bon. As-tu la doc de ton contrôleur ? Il n'utilise pas les pin 18 et 19 ??

EDIT : J'ai trouvé ça sur le site d'Arduino :

The Arduino Mega has three additional serial ports: Serial1 on pins 19 (RX) and 18 (TX), Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX).

Essaye d'utiliser les interruptions 2 et 3 (pin 20 et 21 de la méga) pour voir si ça résout le problème ?

Mon site internet : http://ferdinandpiette.com/


#17 inovasong

inovasong

    Membre

  • Membres
  • 56 messages

Posté 23 avril 2012 - 12:33

Tiens, ce code me dit quelque chose ;)

Hehehehehe :D


Bon après plusieurs tests que ce soit sur les pins 18 19 20 21 c'est le même problème, mon contrôleur est le suivant Lien, et j'utilise donc bien le port com 2, j'ai branché le tx le rx et le GND car dans la doc il est conseillé de ne pas envoyer de +5V et enfin j'utilise une alimentation différente pour les moteurs.

Pour le moment j'ais contourné le problème en utilisant une autre instance de SimpleTimer qui contrôle la valeur des capteurs de choc, il est vrais que c'est très étrange à moins que je me soit totalement trompé sur le câblage.

#18 inovasong

inovasong

    Membre

  • Membres
  • 56 messages

Posté 24 avril 2012 - 05:22

Bonjour,

Savez-vous s’il est possible de faire un PID ou juste une PI sur un système de control moteur communication Série (soit 10 seuils de vitesse) ?

J'ais tenté qq essai déjà uniquement avec une roue avec ce doc (Merci Black Templar) mais sans succès.

#19 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 24 avril 2012 - 05:25

Savez-vous s'il est possible de faire un PID ou juste une PI sur un système de control moteur communication Série (soit 10 seuils de vitesse) ?


Tout à fait, ta commande n'est plus comprise entre 0 et 255, mais entre 0 et 10 du coup.
Il faut donc que tu normalises ta commande pour l'avoir entre 0 et 10 ! (divises ta commande par 25.5)

Par contre, vu que tu n'as que 10 choix de vitesses (et non plus 255), ça risque d'être plus dur à stabiliser. Ton système risque d'osciller plus.

++
Black Templar

Mon site internet : http://ferdinandpiette.com/


#20 inovasong

inovasong

    Membre

  • Membres
  • 56 messages

Posté 24 avril 2012 - 05:56

Tout à fait, ta commande n'est plus comprise entre 0 et 255, mais entre 0 et 10 du coup.
Il faut donc que tu normalises ta commande pour l'avoir entre 0 et 10 ! (divises ta commande par 25.5)

Par contre, vu que tu n'as que 10 choix de vitesses (et non plus 255), ça risque d'être plus dur à stabiliser. Ton système risque d'osciller plus.

++
Black Templar



Ok je vais modifier mon code pour arriver a un résultat satisfaisant surtouts avec uniquement 10 dents sur ma roue codeuse qui est directement sur l'arbre de la roue ca va être dur, mais dès que je suis satisfait je vous fais parvenir un bout de code



Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users