
prototype bras robot
#4
Posté 26 août 2012 - 02:35

sympa... j'aimerai pas qu'il me mette une claque

Pour le code, plus tu en mangera et plus ce sera digeste. (c'était mon conseil à deux francs du jour

en tous cas bonne continuation et merci pour le partage (même si j'aurais aimé en voir un peu plus.. circuits, code..)

#6
Posté 28 août 2012 - 02:26
Je suis du même avisLes mouvements sont un poil brutaux mais c'est pas mal du tout


Si mon commentaire vous a plus laissez nous un avis !
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!
#9
Posté 29 août 2012 - 11:21
#include <Servo.h> Servo servo1, servo2, servo3; // create servo void setup() { servo1.attach(1); // attaches the servo on pin x to the servo object servo2.attach(2); servo3.attach(3); } void loop() { servo1.write(0); servo2.write(0); servo3.write(0); // tell servo to go to position delay(50); servo1.write (180); servo2.write (180); servo3.write (180); delay(50); }
#10
Posté 29 août 2012 - 12:09

Tu laisses un delay de 50 (millisecondes me semble-t-il) après chaque ordre : pour l'angle zéro, ça ne pose pas vraiment de problème pour peu que ton bras ne soit pas trop loin de cet angle. Par contre, tu demandes ensuite à chaque servo de faire un demi-tour (à paritr de la position zéro) et tu ne lui laisses que 50 ms pour atteindre la position. Ce qui équivaut à demander une vitesse de 10 tr / seconde. C'est quand même beaucoup !
Je te conseille de tester différents temps et d'en choisir un qui permette un mouvement un peu plus lent (surtout qu'il y a l'inertie du bras qui vient s'ajouter aux forces subies à l'horizontale) tout en conservant une durée raisonnable.
#11
Posté 29 août 2012 - 12:36
pour ce faire, il faut utiliser une boucle "for" :
#include <Servo.h> Servo servo1, servo2, servo3; // create servo void setup() { servo1.attach(1); // attaches the servo on pin x to the servo object servo2.attach(2); servo3.attach(3); int vitesse = 10; // petit chiffre => petite vitesse void loop() { for (int i = 0; i >= 180; i++) { servo1.write(i); servo2.write(i); servo3.write(i); // tell servo to go to position delay(vitesse); } delay(50); for (int i = 180; i <= 0; i--) { servo1.write (i); servo2.write (i); servo3.write (i); delay(vitesse); } delay(50); }je n'ai pas testé, mais ça ne doit pas être loin de ça...
ensuite pour un mouvement rapide, tu met "vitesse=1" et pour un mouvement lent "vitesse=500"
... bon dev.

#13
Posté 29 août 2012 - 11:29
int vitesse = 10 for (int i = 0; i >= 180; i++) { servo1.write(i); delay(vitesse); }
on oublie le reste du programme et on va juste regarder ce qui se passe ici :
La première ligne crée une variable de type Entier ("int") dont le nom sera "vitesse" et à laquelle on attribue la valeur 10 (millisecondes).
La seconde ligne désigne une boucle "for" suivi de trois arguments entre parenthèses qui indiquent :
1- la valeur de départ (à partir de combien doit-on compter ?)
2- la valeur d'arrivée (jusqu'à combien doit-on compter ?)
3- la valeur du pas (de combien doit-on avancer à chaque tour ?)
dans l'exemple,
1- on crée une variable (de type entier nommée "i" qui vaut 0 au départ ("int i = 0")
2- on fera tourner la boucle jusqu'à ce que la variable "i" soit égale ou suppérieure à 180 ("i >= 180")
3- on fait progresser i de 1 à chaque tour ("i++")
il important de savoir que "i++" c'est une façon raccourcie pour dire "i = i + 1" (on dit qu'on incrémente i) et que de la même manière,
"i--" signifie "i = i - 1" (ici, on décrémente i)
La boucle fera donc 181 tours (de 0 à 180) et à chaque fois, la variable "i" changera (0, 1, 2... etc... 179, 180, 181)
Ouf ! maintenant que l'on a compris ça voyons ce qui va se passer dans cette boucle (qui va faire 181 tours) :
"servo1.write(i);"
- Le servo1 se place à l'angle valant "i" (c'est à dire qu'il va passer successivement par tous les degrès de 0 à 180)
puis, on peut lire : "delay(vitesse);"
- le robot va faire une pause de "vitesse" millisecondes (pour chaque tour de boucle, soit 181 fois au total)
(pour info, 181x10ms = 1.8seconde... le bras devrait mettre environ 2 secondes par mouvement... et donc 4 secondes pour un aller retour)
voilà voilà... la seconde boucle for fait la même chose, sauf qu'au lieu d'aller de 0 à 180 en faisant "i=i+1", il va aller de 180 à 0 en faisant "i=i-1".

#14
Posté 30 août 2012 - 09:50
Ouf ! maintenant que l'on a compris ça voyons ce qui va se passer dans cette boucle
(qui va faire 181 tours):
Qui va faire zéros tours.
La boucle initialise la variable i, puis teste la condition. Est-ce que i est supérieur ou égal à 180 ? Non, i = 0. La condition est fausse, les instructions ne sont pas exécutées.
Il faut bien comprendre que les instructions sont éxecutées si et seulement si la condition est vraie !
Un code qui fonctionne serait donc :
int vitesse = 10 for (int i = 0; i <= 180; i++) { servo1.write(i); delay(vitesse); }La boucle va s'exécuter pour i = 0, i=1 ... i=180, soit bien 181 fois.
L'erreur est là :
La seconde ligne désigne une boucle "for" suivi de trois arguments entre parenthèses qui indiquent :
1- la valeur de départ (à partir de combien doit-on compter ?)2- la valeur d'arrivée (jusqu'à combien doit-on compter ?)La condition de rebouclage !
3- la valeur du pas (de combien doit-on avancer à chaque tour ?)
En effet, il est possible de tester à peu prêt n'importe quoi à cet endroit (il faut s'assurer que la condition puisse être invalidée un jour si on veut pouvoir soirtir de la boucle). Par exemple :
#include <iostream> int main(int argc, char ** argv) { int j = 0; std::cout << "Hello !" << std::endl; for (int i = 0; j < 64 ; i++) { j = i*i; std::cout << "i = " << i << " j = " << j << std::endl; } std::cout << "Fin !" << std::endl; return 0; }Et en prime, un lien vers le Wikibooks C/C++, partie sur les boucles.
#15
Posté 30 août 2012 - 12:48

... nan... j'avoue :

Je vais laisser le dev en lua et me remettre sérieusement au C, parce que je commence à tout mélanger.

#19
Posté 30 janvier 2013 - 12:20

Il n'y a plus qu'à le voir en mouvement ! =)
Concernant la board : Je ne connais pas donc je n'ai aucun avis mais au vu de ce qui est dit c'est vrai qu'elle pourrait être intéressante...
Bonne continuation ! =)
Si mon commentaire vous a plus laissez nous un avis !
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!
Répondre à ce sujet

1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users