Pages: [1] 2   Go Down
Author Topic: 4 servos : fonctionne pas  (Read 2375 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 38
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3447
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 38
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :
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
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3447
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
ç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
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3447
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Code:
   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
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3230
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

0
Offline Offline
Newbie
*
Karma: 0
Posts: 38
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-sad
étrange non ?
Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3447
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 38
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dsl, mais j'oubli de mettre toutes les informations smiley
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
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3447
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 38
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 38
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Alors, après test, le problème ne vient pas d'une sous alimentation  :-/
Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3447
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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 Offline
Newbie
*
Karma: 0
Posts: 38
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la, je parle des pins logique !
Comment régler ce conflit ?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 38
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1] 2   Go Up
Jump to: