0
Offline
Newbie
Karma: 0
Posts: 38
Arduino rocks
|
 |
« on: February 22, 2010, 06:30:07 am » |
Bonjour, j'ai un gros problème, avec 4 servos moteur sur une arduino Duemilanove, ça ne fonctionne pas !!! Je veu les controler a distance via Xbee. Avec une LED ça fonctionne, mais pas avec les servos ! Pourriez vous me passer un bout de code qui fonctionne svp, parceque la je suis vraiment perdu et que je doit rendre le projet la semaine prochaine :'(
merci beaucoup !!!
|
|
|
|
|
Logged
|
|
|
|
|
France
Online
Edison Member
Karma: 12
Posts: 1801
There is an Arduino for that
|
 |
« Reply #1 on: February 22, 2010, 06:53:47 am » |
Si on regarde tes anciens post tu alimentais ta carte avec une pile de 9V. Ta configuration avec 4 servos elle est alimentée comment? Parce que un servo cela consomme quelques centaines de milliampères donc si tu mulitplies par 4 lorsqu'ils sont activés il faut fournir près d'un ampère. Donc les piles de 9V il faut oublier.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 38
Arduino rocks
|
 |
« Reply #2 on: February 22, 2010, 07:16:48 am » |
Alors la carte est alimentée en 9V. Et les servos sont alimentés avec 4 piles AA 1.5V, avec une diode pour baisser la tension a 5.4V. J'ai branché mes servos sur les ports 5,6,9,10 de l'arduino. avec un code simple sans liaison série, les 4 servos tournent. Mais vaec le code de la liason série, ça ne fonctionne pas. Personne n'aurait quelques lignes de code pour moi ? Voila mon code : #include <Servo.h>
#define LTSERVOPIN 10 #define RTSERVOPIN 9 #define LBSERVOPIN 6 #define RBSERVOPIN 5
Servo LTServo; Servo RTServo; Servo LBServo; Servo RBServo; int speed = 100; //sets the speed of the robot (both servos) a percentage between 0 and 100 int ledState; int MotorState;
void setup() { // Initialisation liaison série Serial.begin(9600); pinMode(13,OUTPUT); // LED en SORTIE SetSpeed(speed); // Sélection d'\une vitesse pinMode(LTSERVOPIN, OUTPUT); // Servo Gauche Haut en SORTIE pinMode(RTSERVOPIN, OUTPUT); // Servo Droit Haut en SORTIE pinMode(LBSERVOPIN, OUTPUT); // Servo Gauche Bas en SORTIE pinMode(RBSERVOPIN, OUTPUT); // Servo Droit Bas en SORTIE LTServo.attach(LTSERVOPIN); // Attache le Servo Gauche Haut RTServo.attach(RTSERVOPIN); // Attache le Servo Droit Haut LBServo.attach(LBSERVOPIN); // Attache le Servo Gauche Bas RBServo.attach(RBSERVOPIN); // Attache le Servo Droit Bas GoStop(); // Stop des Servos }
void loop() {
// test if a new value has been received if (Serial.available()) { // update without any control char valeur = Serial.read();
if (valeur == 'Z') { // TOUCHE Z ledState = HIGH; MotorState = 'Forward'; } else{ ledState = LOW; MotorState = 'Stop'; } digitalWrite(13,ledState);
switch (MotorState) { case 'Forward': GoForward(); break; case 'Stop': GoStop(); break; } }
}
void SetSpeed(int NewSpeed){ if(NewSpeed >= 100) {NewSpeed = 100;} // Si la vitesse > 100 alors on lui attribue 100 if(NewSpeed <= 0) {NewSpeed = 0;} // Si la vitesse < 0 alors on lui attribue 0 speed = NewSpeed * 0.9; // Dimensionne la vitesse entre 0 et 100 }
/* * Fait avancer le robot */ void GoForward(){ LTServo.write(180); RTServo.write(180); LBServo.write(180); RBServo.write(180); }
/* * Fait reculer le robot */ void GoBackward(){ LTServo.write(90 - speed); RTServo.write(90 + speed); LBServo.write(90 - speed); RBServo.write(90 + speed); } /* * Fait pivoter à droite le robot */ void GoRight(){ LTServo.write(90 + speed); RTServo.write(90 + speed); LBServo.write(90 + speed); RBServo.write(90 + speed); }
/* * Fait pivoter à gauche le robot */ void GoLeft(){ LTServo.write(90 - speed); RTServo.write(90 - speed); LBServo.write(90 - speed); RBServo.write(90 - speed); }
/* * Stop le robot */ void GoStop(){ LTServo.write(90); RTServo.write(90); LBServo.write(90); RBServo.write(90); }
|
|
|
|
« Last Edit: February 22, 2010, 08:42:51 am by ordinateur »
|
Logged
|
|
|
|
|
France
Online
Edison Member
Karma: 12
Posts: 1801
There is an Arduino for that
|
 |
« Reply #3 on: February 22, 2010, 10:44:51 am » |
ça ne fonctionne pas Ca veut dire quoi: La led ne s'allume pas? Les moteurs font n'importe quoi? Si la LED ne s'allume pas c'est que le code envoyé n'est pas reconnu. Tu envoies bien un Z (majuscule) à partir de la console. Il me semble que la console dans l'IDE arduino envoie des chaines (donc avec un retour chariot à la fin) cela ne t'embrouillerait pas. Tu pourrais essayer avec hyperterminal ou un soft de terminal quelconque.
|
|
|
|
|
Logged
|
|
|
|
|
France
Online
Edison Member
Karma: 12
Posts: 1801
There is an Arduino for that
|
 |
« Reply #4 on: February 22, 2010, 10:52:46 am » |
En fait reconnaitre Z pour avancer et n'importe quoi pour arreter c'est prendre le risque de voir ton robot s'arreter si il reçoit Z+(retour chariot) par exemple. Il est préférable de dire si je reçoit Z j'avance si je reçoit X j'arrete si je reçoit autre chose j'ignore. Comme ça il n'y a pas de perturbation par des réceptions de caractères inattendues if (valeur == 'Z') { // TOUCHE Z ledState = HIGH; MotorState = 'Forward'; } if (valeur == 'X'){ ledState = LOW; MotorState = 'Stop'; }
|
|
|
|
« Last Edit: February 22, 2010, 10:57:28 am by fdufnews »
|
Logged
|
|
|
|
|
Geneva
Online
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #5 on: February 22, 2010, 12:32:48 pm » |
Mets nous le code qui fonctionne et ce que tu rajoute ensuite lorsque ça ne fonctionne plus.
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 38
Arduino rocks
|
 |
« Reply #6 on: February 22, 2010, 12:37:31 pm » |
OK donc, en faite c'est assez bizzare puisque mon code fonctionne. Lorsque je branche mes 4 moteurs (sur les memes pins 5,6,9,10) et SEULEMENT les moteurs, ça fonctionne nickel (j'utilise Processing qui envoi le "Z" par sérial) et donc, ça fonctionne. Je précise que le Z uniquement était pour des tests, je met habituellement : soit Z ; soit S ; soit Q ; soit D sinon il se passe rien Mais le problème, c'est que lorsque je connecte mon écran et mes capteurs sur les pins 0,1,2,3,4,7,8 sur l'arduino, ça ne fonctionne plus  étrange non ?
|
|
|
|
|
Logged
|
|
|
|
|
France
Online
Edison Member
Karma: 12
Posts: 1801
There is an Arduino for that
|
 |
« Reply #7 on: February 22, 2010, 01:39:22 pm » |
Tu es certain que ton alimentation (le 5V arduino) ne s'écroule pas?
Si tu donnais toutes les informations en une fois on pourrait t'aider plus vite
|
|
|
|
« Last Edit: February 22, 2010, 01:41:03 pm by fdufnews »
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 38
Arduino rocks
|
 |
« Reply #8 on: February 22, 2010, 01:44:44 pm » |
Dsl, mais j'oubli de mettre toutes les informations  Pour mes tests, l'arduino est connectée au cable USB de l'ordinateur, donc tension fixe. Et les 4 piles de 1.5V fonctionnent et sont casi pleines. Le problème bizzare c'est que ça ne fonctionne pas quand tout est branché !
|
|
|
|
|
Logged
|
|
|
|
|
France
Online
Edison Member
Karma: 12
Posts: 1801
There is an Arduino for that
|
 |
« Reply #9 on: February 22, 2010, 01:52:04 pm » |
D'accord mais quand tout est branché. L'écran, les capteurs, .... ils sont bien alimentés par le 5V de l'arduino? Tout cela consomme combien?
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 38
Arduino rocks
|
 |
« Reply #10 on: February 22, 2010, 02:12:38 pm » |
Oui ils sont branchés sur le 5V... et je n'ai jamais pensé a la consommation de ceux-la... je vérifie ça ce soir, merci du conseil 
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 38
Arduino rocks
|
 |
« Reply #11 on: February 22, 2010, 03:52:07 pm » |
Alors, après test, le problème ne vient pas d'une sous alimentation :-/
|
|
|
|
|
Logged
|
|
|
|
|
France
Online
Edison Member
Karma: 12
Posts: 1801
There is an Arduino for that
|
 |
« Reply #12 on: February 23, 2010, 03:20:20 am » |
Mais le problème, c'est que lorsque je connecte mon écran et mes capteurs sur les pins 0,1,2,3,4,7,8 sur l'arduino, ça ne fonctionne plus Tu parles des broches logiques ou analogiques. Si c'est les broches logiques, tu as un conflit sur la liaison série qui utilise les I/O logiques 0 et 1
|
|
|
|
« Last Edit: February 23, 2010, 05:08:13 am by fdufnews »
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 38
Arduino rocks
|
 |
« Reply #13 on: February 23, 2010, 05:22:39 am » |
la, je parle des pins logique ! Comment régler ce conflit ?
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 38
Arduino rocks
|
 |
« Reply #14 on: February 23, 2010, 05:57:55 am » |
J'ai simplement déconnecté ce que j'avai branché sur les pins digital 0 et 1 (les 2 premiers...) et apparement ça a l'air de fonctionner. Ces pins ne seraient-ils pas utilisés par la carte pour envoyer/recevoir les signaux ou quelque chose du genre ? C'est dommage, du coup je perd 2 pins...
|
|
|
|
|
Logged
|
|
|
|
|
|