Skyduino:~#
Articles
arduino, programmation

[Arduino] Moteur bipolaire et Motor Shield (adafruit)

Salut à tous !

Aujourd’hui je fait un article avec trois morceau de code.
Le but final de chacun de ces codes est de contrôler un moteur bipolaire depuis une motor shield d’adafruit.

Code N°1 : fait tourner le moteur dans un sens puis dans l’autre sans arrêt.

#include <AFMotor.h>

AF_DCMotor motor(4);

void setup() {
  Serial.begin(9600);
  Serial.println("Motor test!");

  motor.setSpeed(200);
  motor.run(RELEASE);
}

void loop() {
  uint8_t i;
  
  Serial.print("tick");
  
  motor.run(FORWARD);
  for (i=0; i<255; i++) {
    motor.setSpeed(i);  
    delay(10);
 }
 
  for (i=255; i!=0; i--) {
    motor.setSpeed(i);  
    delay(10);
 }
  
  Serial.print("tock");

  motor.run(BACKWARD);
  for (i=0; i<255; i++) {
    motor.setSpeed(i);  
    delay(10);
 }
 
  for (i=255; i!=0; i--) {
    motor.setSpeed(i);  
    delay(10);
 }
  
  Serial.print("tech");
  motor.run(RELEASE);
  delay(1000);
}

Code N°2 : Lis la position envoyé sur le port série sous la forme 000~999 puis fait tourner le moteur jusqu’à cette position.

#include <AFMotor.h>

AF_Stepper motor(200, 2);

void setup() {
  Serial.begin(9600);      
  motor.setSpeed(20);
  Serial.println("Auto Stepper ready !");
}

int actualpos = 0;

void loop() {
  char cmd[4];
  int pos = 0;

  if(Serial.available() >= 3){
    cmd[0] = Serial.read();
    cmd[1] = Serial.read();
    cmd[2] = Serial.read();
    cmd[3] = '\0';
    pos = atoi((char*)&cmd[0]);

    while(pos > 200)
      pos -= 200;

    Serial.print("Goto ");
    Serial.println(pos);

    if(pos >= actualpos)
      motor.step(pos - actualpos, FORWARD, SINGLE);
    else
      motor.step(actualpos - pos, BACKWARD, SINGLE);
  
    while(analogRead(3) > 500);
    
    Serial.println("Done.");

    actualpos = pos;

    Serial.flush();
  }
}

Code N°3 : Une sorte d’interface en mode console pour tester les diverse possibilité de la shield.

#include <AFMotor.h>

AF_Stepper motor(200, 2);
int direc = FORWARD;
int foot = SINGLE;
int sspeed = 10;

void setup() {
  Serial.begin(9600);      
  motor.setSpeed(sspeed); 
  PrintMenu();
}

void loop() {
  while(Serial.available() > 0)
    exec(Serial.read());
  commit();
}

void exec(char cmd){
  switch (cmd) {
  case '1':
    raz();
    break;
  case '2':
    down();
    break;
  case '3':
    singles();
    break;
  case '4':
    forward();
    break;
  case '5':
    info();
    break;
  case '6':
    backward();
    break;
  case '7':
    avoid();
    break;
  case '8':
    up();
    break;
  case '9':
    doubles();
    break;
 case '0':
    free();
    break;
  default: 
    break;
  }
}

void PrintMenu(){
  Serial.println("Stepper Command");
  Serial.println("8 Up speed");
  Serial.println("2 Down speed");
  Serial.println("4 Forward"); 
  Serial.println("6 Backward");
  Serial.println("5 Print info");
  Serial.println("9 Doubles step");
  Serial.println("3 Single step");
  Serial.println("7 Avoid Motor");
  Serial.println("1 Reset Config");
  Serial.println("0 Release Motor");
}

void forward(){
  direc = FORWARD;
}

void backward(){
  direc = BACKWARD;
}

void up(){
  sspeed += 10;
  motor.setSpeed(sspeed); 
}

void down(){
  if (sspeed > 10){
    sspeed -= 10;
    motor.setSpeed(sspeed); 
  }
}

void info(){
  Serial.println("Direction");
  Serial.println(direc);
  Serial.println("Speed");
  Serial.println(sspeed);
  Serial.println("Step");
  Serial.println(foot);
}

void singles(){
  foot = SINGLE;
}

void doubles(){
  foot = DOUBLE;
}

void avoid(){
  while(1);
}

void raz(){
  direc = FORWARD;
  foot = SINGLE;
  sspeed = 10;
  motor.setSpeed(sspeed); 
}

void commit(){
  motor.step(1, direc, foot);  
}

void free(){
  motor.release();
}
Publicités

Discussion

Pas encore de commentaire.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.