dimanche 31 juillet 2011

Pololu

Voici mes premiers essais avec le châssis Pololu équipé de 2 moteurs 5 Vcc.



Le châssis utilisé est le Pololu RRC04A.

Les moteurs
Afin de faire fonctionner un moteur dans les deux sens, il faut un pont en H. Du coup pour faire tourner les 2 moteurs j'utilise 8 transistors BC548 activés avec 4 sorties de l'Arduino.

Il existe des composants qui facilitent tout ce travail, comme celui-ci. Un petit tuto est présent ici. Ce composant me permettrait de virer ce gros paquet de fils. ;-)

Sur mon montage, les LED permettent de vérifier le bon fonctionnement avant de brancher les moteurs.

Lors des premiers tests, l'Arduino plantait au bout du premier ou deuxième changement de sens de rotation. J'ai rajouté des diodes sur les sorties pour éviter les retours de tensions des moteurs, d'où la mini plaque de proto.

Le châssis
Le châssis est petit et il est impossible de faire tenir la carte Arduino Uno et ma plaque de prototypage. J'ai du  ressortir l'Arduino Mini pour tout faire tenir dessus.

L'alimentation est assurée par une pile 9V que j'ai placée sous la plaque de prototypage.

Le résultat


Le programme de base fait avancer le robot pendant une seconde, puis reculer. Ce n'est pas tout à fait ce que fait le robot, y a encore beaucoup de boulot. ^^'

Le programme

const int mDroitAvantPin =  2;
const int mDroitArrierePin =  3;
const int mGaucheAvantPin =  5;
const int mGaucheArrierePin =  4;

long previousMillis = 0;
int sens = 1;

void setup() {
  pinMode(mDroitAvantPin, OUTPUT);    
  pinMode(mDroitArrierePin, OUTPUT);  
  pinMode(mGaucheAvantPin, OUTPUT);    
  pinMode(mGaucheArrierePin, OUTPUT);  
}

void loop() {
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > 1000) {
    previousMillis = currentMillis;
    if (sens == 1) {
      digitalWrite(mDroitArrierePin, LOW);
      digitalWrite(mDroitAvantPin, HIGH);
      digitalWrite(mGaucheArrierePin, LOW);
      digitalWrite(mGaucheAvantPin, HIGH);
      sens = 2;
    } else {
      digitalWrite(mDroitAvantPin, LOW);
      digitalWrite(mDroitArrierePin, HIGH);
      digitalWrite(mGaucheAvantPin, LOW);
      digitalWrite(mGaucheArrierePin, HIGH);
      sens = 1;
    }
  }
}

Aucun commentaire:

Enregistrer un commentaire