Minnow
#1
Posté 01 mars 2012 - 09:07
voila je suis au stade de la conception de mon premier robot
je compte faire un robot que j'ameliorerais par la suite
pour commencer je voudrais que mon robot evite les obstacle je n'est pas encore regarder comment programer mais je pence (j'espert) que ce ne sera pas trop difficile.
j'ais regardé ce qui existais comme carte et capteur voila ce que j'en ais conclut
-j'ais remarquer que les carte arduino étaient les plus recomandées je partirais donc sur une arduino uno ou une arduino duemilanove mais je ne connait pas la difference entre ses deux carte mis a par que la uno est plus récente que la duemilanove mais à par sa quel sont les autre difference... si il y en a?
-pour le capteur faudrait-il plutot des capteur a ultrason ou infrarouge les capteur a utrason me paraisse mieux ils ont une plus grande marge de captage (hum je pence pas que sa se dise comme sa) mais il son moin préci (bon c'est vrais pour ce que je vais en faire je n'ais pas besoin de quelque chose de suppert precis )
-ensuite les moteur c'est la question qui me pause le plus de problème
j'ais lut que pour que un robot sache ou il se trouve il faut des moteur codeur (bien sur ce ne sera pas pour tous de suite ) et tand qu'à faire qui sont déjà sur une plateforme je me pencherais plutot sur sa : www.robotshop.com/ca/chassis-robotique-debutant-v2-dagu-2.html
mais bien sur si vous avais quelque chose d'autre en tête je suis preneur de toute vos proposition .
si non avais vous d'autre capteur a me proposer?
sa vaux le coup de metre un deuxième capteur de distance pour que si le robot capte un mur proche avec chaque capteur lui faire faire un plus grand virage voir demi tour ( pour pas qu'il reste bloqué dans un coin trop longtemps)
merci d'avance pour vos réponce
ps : je vien de penser qu'il faudrais que je me presente je ferais sa quand j'aurais plus de temps
ps : je n'ais pas trouvé (cherché) le correcteur d'orthographe j'ais fait du mieu que je pouvais
#2
Posté 01 mars 2012 - 10:36
On dit un cone .ils ont une plus grande marge de captage
Ton chassis va allé, pour commencer...
POur les capteur Ultrason, c'est bon. et il son precis, tout depend de ce que tu veux prendre.
Si tu veux elargir encore plus le cone du capteur US, tu peut le monté sur un servo.
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
Posté 01 mars 2012 - 11:56
il ne manque pas un contrôleur de moteur? Sinon il y a des tutoriaux pas mal sur ce site(dans l'onglet "tutoriels").
#4
Posté 02 mars 2012 - 01:03
Ca sert a connecter tes moteur sur l'arduino, il existe un model a 15€ de dfr(1A) qui est pas mal, sinon je connais un site ou il y en a un a 6€.
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
Posté 02 mars 2012 - 06:27
c'est pour combien d'A?
#6
Posté 02 mars 2012 - 06:49
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
Posté 02 mars 2012 - 07:30
bon je vais prendre celui la je pence que le moteur doit y être compatible point de vu tension
mais le problème c'est qu'ils ne donnent pas beaucoup d'information sur les moteur ils parlent aussi de codeur mais je crois qu'il n'y a que les disque des codeur donc sa ne sert à rien et plutot que de recommander une deuxième fois je voudrais avoir votre avis et si ils fournissent que les disque si il faut que je prenne plutot des encodeur sans disque (si sa existe) ou achetter l'encodeur complet
si non
je pense que si je met un servo moteur il faut aussi un encodeur (peut être que je me trompe)Si tu veux elargir encore plus le cone du capteur US, tu peut le monté sur un servo.
se serais plus rapide avec deux capteur
en fait je compte en metre deux pour la simple raison que si il vois un mur que avec un capteur il varie un petit peut sa trajectoire mais si il se retrouve dans un coin il ne va pas beaucoup bougé alors que si il capte un mur avec les deux capteur il fait demis tour se qui le débloquera (donc pas besoin d'attendre a chaque fois qu'il capte un mur que le servo moteur tourne
A+
ps : je vais surement avoir encore d'autre question sa me parais encore un peut flou mais sa se précise vite
#8
Posté 02 mars 2012 - 07:48
Non, le servo se controlle en degrés, il y a tout ce qu'il faut dedans.je pense que si je met un servo moteur il faut aussi un encodeur (peut être que je me trompe)
C'est vrai que les moteur d'origine du chassis vont vite etre en sous regime, vu que tu veux faire un robot evolutif, mieux vaut partir sur une bonne base. Tu ^peut faire ton chassis si tu veux, en bois en pvc ou alu....
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
Posté 02 mars 2012 - 08:03
par la suite je changerais surement de moteur je récupèrerais les encodeur pour les metre sur les nouveau moteur et comme le robot evoluras je pense que à un moment ou un autre j'aurais besoin d'un moteur donc les anciens feront surement l'affaire...
#10
Posté 03 mars 2012 - 12:30
je voulais avoir votre avis si il n'y avais pas un moyen plus simple de le faire
et je pense qu'il y à un problème dans la déclaration de la variable "aleatoire" car elle est mise comme les autre qui definisse un pin à la variable
donc voici mon programe :
int vitesseM1 = 3; //la carte controleur de moteur int vitesseM2 = 5; //à 6 entrées les deux première serve à réglé la vitesse int broche1M1 = 0; //les suivante corspondent au deux broche d'un moteur int broche2M1 = 1; //donc si le courant passe dans une broche et que l'autre broche int broche1M2 = 6; //est en mode 0V le moteur tourne et si on inverce les deux broche int broche2M2 = 7; //le moteur tourne dans l'autre sens int distance = analogRead(0); //lecture du capteur de distance int aleatoire = 0; //initialisation d'une variable void setup() { pinMode (vitesseM1, OUTPUT); pinMode (vitesseM2, OUTPUT); //met les pin moteur en pinMode (broche1M1, OUTPUT); //mode sortie pinMode (broche2M1, OUTPUT); pinMode (broche1M2, OUTPUT); pinMode (broche2M2, OUTPUT); } void loop() { if (distance <= 10) { //ce mode aléatoire sert à aleatoire = random(2); //se que le robot ne tourne // pas toujours dans le même sens if (aleatoire == 0) { //fait tourné le robot vers la droite analogWrite (vitesseM1, 160); digitalWrite (broche1M1, LOW); digitalWrite (broche2M1, HIGH); analogWrite (vitesseM2, 160); digitalWrite (broche1M2, HIGH); digitalWrite (broche2M2, LOW); delay (1500); } else { //fait touné le robot vers la gauche analogWrite (vitesseM1, 160); digitalWrite (broche1M1, HIGH); digitalWrite (broche2M1, LOW); analogWrite (vitesseM2, 160); digitalWrite (broche1M2, LOW); digitalWrite (broche2M2, HIGH); delay (1500); } } else { //fait avancé le robot tout droit analogWrite (vitesseM1, 200); digitalWrite (broche1M1, LOW); digitalWrite (broche2M1, HIGH); analogWrite (vitesseM2, 200); digitalWrite (broche1M2, LOW); digitalWrite (broche2M2, HIGH); } }
comme vous avez pu le voir je vais prendre que un capteur pour commencé mais j'en rajouterais surement un un jour
je ferais se weekend le progame pour pouvoir controller mon robot avec l'ordinateur et pour que le robot menvois des information
il faut aussi que je regarde les différent capteur qui existe et faire ma commande mais je pense que avant de la faire je vais encore avoire d'autre question
à bientôt
guppyxxx
#11
Posté 03 mars 2012 - 04:20
dans ce code j'ai voulu mettre des touche de clavier mais je ne sait pas top comment sa marche
j'ai vu le codage ASCII mais je ne sait pas si sa marche et si c'est compatible avec arduino (surement que si mais je préfaire demandé et faut-il que je dise que je code avec ASCII (comme une librairie je crois)
voici mon nouveau code :
int vitesseM1 = 3; //la carte controleur de moteur int vitesseM2 = 5; //à 6 entrées les deux première serve à réglé la vitesse int broche1M1 = 4; //les suivante corspondent au deux broche d'un moteur int broche2M1 = 8; //donc si le courant passe dans une broche et que l'autre broche int broche1M2 = 6; //est en mode 0V le moteur tourne et si on inverce les deux broche int broche2M2 = 7; //le moteur tourne dans l'autre sens int distance = analogRead(0); //lecture du capteur de distance int aleatoire = 0; //initialisation d'une variable int valComp = 0; int modeAuto = 0; void arret() //permet de ne pas avoir tout à réécrire juste à marquer le mot qui se trouve après "void" ici "arret" { analogWrite (vitesseM1, 0); digitalWrite (broche1M1, LOW); digitalWrite (broche2M1, LOW); analogWrite (vitesseM2, 0); digitalWrite (broche1M2, LOW); digitalWrite (broche2M2, LOW); } void avance (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> //de même pour "avance" mais on peut changer la vitesse des moteur { analogWrite (vitesseM1, a); digitalWrite (broche1M1, LOW); digitalWrite (broche2M1, HIGH); analogWrite (vitesseM2, <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />; digitalWrite (broche1M2, LOW); digitalWrite (broche2M2, HIGH); } void arriere (char a, char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> { analogWrite (vitesseM1, a); digitalWrite (broche1M1, HIGH); digitalWrite (broche2M1, LOW); analogWrite (vitesseM2, <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />; digitalWrite (broche1M2, HIGH); digitalWrite (broche2M2, LOW); } void droite (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> //droite { analogWrite (vitesseM1, a); digitalWrite (broche1M1, LOW); digitalWrite (broche2M1, HIGH); analogWrite (vitesseM2, <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />; digitalWrite (broche1M2, HIGH); digitalWrite (broche2M2, LOW); } void gauche (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> //gauche { analogWrite (vitesseM1, 160); digitalWrite (broche1M1, HIGH); digitalWrite (broche2M1, LOW); analogWrite (vitesseM2, 160); digitalWrite (broche1M2, LOW); digitalWrite (broche2M2, HIGH); } void setup() { pinMode (vitesseM1, OUTPUT); pinMode (vitesseM2, OUTPUT); //met les pin moteur en pinMode (broche1M1, OUTPUT); //mode sortie pinMode (broche2M1, OUTPUT); pinMode (broche1M2, OUTPUT); pinMode (broche2M2, OUTPUT); Serial.begin(9600); //conection pc } void loop() { if (Serial.available() > 0) //regarde si un message est envoyé depuis l'ordinateur { valComp = Serial.read(); if (valComp == 97) //la touche "a" est appuyé { modeAuto = 1; //le mode est automatique } else if (valComp == 109) //la touche "m" est appuyé { modeAuto = 0; //le mode est manuel } } if (distance <= 10) { //ce mode aléatoire sert à aleatoire = random(2); //se que le robot ne tourne // pas toujours dans le même sens if (aleatoire == 0) { //fait tourné le robot vers la droite droite(160,160); delay (1500); } else { //fait touné le robot vers la gauche gauche(160,160); delay (1500); } } else if (modeAuto == 0) { switch(valComp) { case '24': //la touche "flèche haut" est appuyé avance (100,100); Serial.print('avance'); //envoie "avance" à l'ordinateur break; case '25': //touche "flèche bas" arriere (100,100); Serial.print('recule'); //envoie "recule" break; case '26': //"flèche droite" droite (50,50); Serial.print('tourne à droite'); //"tourne à droite" break; case '27': //"flèche gauche" gauche (50,50); Serial.print('tourne à gauche'); //"tourne à gauche" break; case '0': //si aucune touche n'est appuyé arret(); Serial.print('arret'); //"arret" } } else if (modeAuto == 1) //mode auto toujours tout droit { avance(160,160); } else //au cas ou... { arret(); } }
voilà si vous avez des remarque des question nésité pas
et aussi si vous avez d'autre chose que je pourais rajouté... je commence à ne plus avoir d'idée sauf mocuper des codeur (hum sa va être dur)
A+
#12
Posté 03 mars 2012 - 04:27
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
Posté 03 mars 2012 - 05:17
sur le blog je vois qui n'y a pas de librairie mise dans le code mais par contre il utilise des lettre et non le ASCII donc je ne sait pas comment on fait quand on veut inséré les flèche du clavier (c'est un peu optionel car je pourrais le faire avec zqsd mais je préfert quand même les flèches)
avez vous une idée de comment sont symbolisé les flèche
aller je tente la plus probable mais je voudrais être sur de celle là :
UP
DOWN
LEFT
RIGHT
merci
edit
j'ai oublié
comment on fait si on code " aucune touche n'est appuyé "
encore merci
#15
Posté 03 mars 2012 - 06:54
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 !
#16
Posté 03 mars 2012 - 07:10
le signal c'est un signal numérique ou analogique
merci
ps : donc pas besoin de module entre les deux?
#17
Posté 03 mars 2012 - 07:16
Tu saura juste que ton robot, s'est par exemple deplacé de 400 "cran", que tu peut convertir en cm.
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 !
#18
Posté 04 mars 2012 - 06:38
#include <IRremote.h>
Voici le lien: http://dl.free.fr/loh2Cv6gU le fichier et en WinRar donc décompresse le fichier
, et rajoute le dans ton logiciel Arduino dans la parti libraires
merci pour le blog j'avais vu un bout à un endroit (la partie qui minteresse les touches qui sont appuyé)
sur le blog je vois qui n'y a pas de librairie mise dans le code mais par contre il utilise des lettre et non le ASCII donc je ne sait pas comment on fait quand on veut inséré les flèche du clavier (c'est un peu optionel car je pourrais le faire avec zqsd mais je préfert quand même les flèches)
avez vous une idée de comment sont symbolisé les flèche
Exemple avec un programme.
#include <IRremote.h> #define DEBUG int IR_RECEIVER = 2; // Pin d'entrée du signal IR IRrecv ir_receiver(IR_RECEIVER); // Objet gérant la réception du signal decode_results result; // Résultat /* Initialisation */ void setup() { ir_receiver.enableIRIn(); // Active le module IR #ifdef DEBUG Serial.begin(9600); Serial.write("Mode Debug : On"); Serial.println(); #endif } /* Boucle principale */ void loop() { if (ir_receiver.decode(&result)) // Si le module IR reçoit des données { #ifdef DEBUG Serial.print("IR Remote Signal Detected : "); Serial.print(result.value, DEC); Serial.print(" | "); Serial.println(result.value, HEX); #endif ir_receiver.resume(); // Attend la prochaine valeur } }
Pour obtenir les changement de l’impression de la télécommande envoyer sur le serial
monitor du logiciel Arduino .
Donc comme se si:
Serial.print(result.value, DEC);en mais ten le DEC donc on obtiens un code comme se si: 16586983
ou
Serial.print(result.value, HEX);ou en mais ten le HEX donc on obtiens un code comme se si: FD708F
ou
Serial.print(result.value, BIN);ou le BIN donc on obtiens un code comme se si: 111111011000100001110111
Il s'agit simplement de façons différentes d’afficher la même valeur
Soit en Décimale (DEC)
Soit en Hexadécimale (HEX)
Soit en Binaire (BIN)
@Cordialement.
#19
Posté 04 mars 2012 - 08:13
en fait tu utilise une télécomande IR donc c'est pour sa que tu utilise la librairie "IRremote"
mais je ne comptais pas avoir de télécomande mais envoyé des touche de clavié avec mon ordinateur (mais vu que je croyais que sa pouvais se faire en regardant ton blog
mais vu que maintenant j'ai remarqué que tu utilisais une télécommande je ne suis pas sur que sa marche...)
si non j'ais vu que sur une page du site arduino celle ci ils disaient qu'il n'y avais pas besoin de mettre 'DEC' que sa se faisait automatiquement (peut être que je me trompe mais sa serais utile car tapé xfois 'DEC'...
je me demande maintenant si il faut que je fasse un programe pour mon ordinateur pour qu'il déchiffre les informations envoyé depuis l'arduino car '01' en DEC et '01'en bit ne veut pas dire la même chose
bon j'ai voulut regardé combien sa me couterais les piece pour ce robot ... 94euro !!! bon ok les frais de port sont comprit mais j'ais quand même regardé se qui restais dans mon grenier pour voir si je ne pouvais pas faire un peut de récupe et je trouve une vieille chaine hifi je la démonte et je trouve deux moteur qui servais à faire tourné le lecteur cassette mais problème ce moteur à quatre patte :
-une patte +
-une patte -
-une patte A
-une patte B
la patte A est relié à la patte '-'par un condensateur où il est ecrit I03Z
si quelqu'un avais une idée..
je vous tien au courant dès que j'ai de nouvelle info
A+
guppyxxx
#20
Posté 04 mars 2012 - 08:53
Exemple de code:
int EN1 = 6; int EN2 = 5; int IN1 = 7; int IN2 = 4; void Motor1(int pwm, boolean reverse) { analogWrite(EN1,pwm); //mais un contrôle PWM, 0 pour l'arrêter, et 255 pour une vitesse maximale if(reverse) { digitalWrite(IN1,HIGH); } else { digitalWrite(IN1,LOW); } } void Motor2(int pwm, boolean reverse) { analogWrite(EN2,pwm); if(reverse) { digitalWrite(IN2,HIGH); } else { digitalWrite(IN2,LOW); } } void setup() { int i; for(i=5;i<=8;i++) //Pour Arduino Blindage pinMode(i, OUTPUT); //set pin 4,5,6,7 au mode de sortie Serial.begin(9600); } void loop() { int x,delay_en; char val; while(1) { val = Serial.read(); if(val!=-1) { switch(val) { case 'w'://avancé tout droit Motor1(100,true); Motor2(100,true); break; case 'x'://reculer Motor1(100,false); Motor2(100,false); break; case 'a'://tourner à gauche Motor1(100,false); Motor2(100,true); break; case 'd'://tourner à droite Motor1(100,true); Motor2(100,false); break; case 's'://stop Motor1(0,false); Motor2(0,false); break; } } }
j'ai mis des casse c'est plus simple
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users