Omet navegació

17.- Motors amb Processing (Arduino Motor Shield Rev 3)

Anem a veure l'exemple típic de dos motors de continua amb la targeta Arduino Motor Shield R3 connectada a Arduino uno.

L'esquema serà aquest:

Dos Motors de continua amb Arduino Shield Motor Rev3

El programa per fer anar aquests motors amb Processing és aquest:

/*Motor Shield: Exemple amb dos motors de continua funcionant amb Processing*/
//Programa de domini públic basat en la font de la ratlla de sota
//Font per Arduino: http://www.arduino.org/learning/tutorials/boards-tutorials/arduino-motor-shield-two-dc-motors-example
//Modificat per: Carles Ferrando.

//importem les llibreries de comunicació per port serie
//i la firmata d'arduino per arduino
import processing.serial.*;
import cc.arduino.*;
 
//Clase arduino que representa la targeta Arduino
Arduino arduino;


//Defineix les variables usades al programa
/*Motor de continua connectat al canal A */
int pinDirA = 12;// Variable usada per configurar la direcció del Motor 1
int pinBrkA = 9;// Variable usada per frenar el Motor1
int pinPwmA = 3;// Variable usada per seleccionar la velocitat del Motor1
 
/*Motor de continua connectat al canal B */
int pinDirB = 13;// Variable usada per configurar la direcció del Motor 2
int pinBrkB = 8;// Variable usada per frenar el Motor2
int pinPwmB = 11;// Variable usada per seleccionar la velocitat del Motor2

// Configuració de paràmetres i ports d'entrada i eixida
void setup() {

  size(150, 150);//Mida pantalla
  background(255);//Pantalla blanca
 
  //L'objecte arduino cal crear-lo en primer lloc abans de llegir altre cap port
  arduino = new Arduino(this, Arduino.list()[0], 57600);
 
  //una vegada creat ja puc llegir o escriure altres ports (pins)  
  arduino.pinMode(pinDirA, Arduino.OUTPUT); 
  arduino.pinMode(pinBrkA, Arduino.OUTPUT);
  arduino.pinMode(pinPwmA, Arduino.OUTPUT);
  arduino.pinMode(pinDirB, Arduino.OUTPUT); 
  arduino.pinMode(pinBrkB, Arduino.OUTPUT);
  arduino.pinMode(pinPwmB, Arduino.OUTPUT); 
 
}

//Programa principal al bucle
void draw()
{ 

  //Prova1: Direcció: Motor1 i Motor2 endavant; Velocitat: Motor1 i Motor2 màxima
  /*Motor1*/ 
 arduino.digitalWrite(pinDirA, Arduino.HIGH); //Configura la direcció del Motor1 cap endavant
 arduino.digitalWrite(pinBrkA, Arduino.LOW); //Desactiva el fre per al Motor1
 arduino.analogWrite(pinPwmA, 255); //Configura la velocitat del Motor1 a màxima
   /*Motor2*/
 arduino.digitalWrite(pinDirB, Arduino.HIGH); //Configura la direcció del Motor2 cap endavant
 arduino.digitalWrite(pinBrkB, Arduino.LOW); //Desactiva el fre per al Motor2
 arduino.analogWrite(pinPwmB, 255); //Configura la velocitat del Motor2 a màxima
  delay(2500);
 
   //Atura els motors
  arduino.digitalWrite(pinBrkA, Arduino.HIGH);//Activa el fre per al canal A
  arduino.digitalWrite(pinBrkB, Arduino.HIGH); //Activa el fre per al canal B
  delay(1000);
 
 //Prova2: Direcció: Motor1 i Motor2 endarrere; Velocitat: Motor1 i Motor2 màxima
   /*Motor1*/
  arduino.digitalWrite(pinDirA, Arduino.LOW);//Configura la direcció del Motor1 cap endarrere
  arduino.digitalWrite(pinBrkA, Arduino.LOW); //Desactiva el fre per al Motor1
  arduino.analogWrite(pinPwmA, 255); //Configura la velocitat del Motor1 a màxima
  /*Motor2*/
  arduino.digitalWrite(pinDirB, Arduino.LOW);//Configura la direcció del Motor2 cap endarrere
  arduino.digitalWrite(pinBrkB, Arduino.LOW); //Desactiva el fre per al Motor2
  arduino.analogWrite(pinPwmB, 255); //Configura la velocitat del Motor2 a màxima   
  delay(2500);
 
   //Atura els motors
  arduino.digitalWrite(pinBrkA, Arduino.HIGH);//Activa el fre per al canal A
  arduino.digitalWrite(pinBrkB, Arduino.HIGH); //Activa el fre per al canal B
  delay(1000);
 
 
 //Prova3: Direcció: Motor1 endavant i Motor2 endarrere; Velocitat: Motor1 i Motor2 màxima
   /*Motor1*/
  arduino.digitalWrite(pinDirA, Arduino.HIGH) ; //Configura la direcció del Motor1 cap endavant
  arduino.digitalWrite(pinBrkA, Arduino.LOW); //Desactiva el fre per al Motor1
  arduino.analogWrite(pinPwmA, 255); //Configura la velocitat del Motor1 a màxima
  /*Motor2*/
  arduino.digitalWrite(pinDirB, Arduino.LOW);//Configura la direcció del Motor2 cap endarrere 
  arduino.digitalWrite(pinBrkB, Arduino.LOW);//Desactiva el fre per al Motor2
  arduino.analogWrite(pinPwmB, 255); //Configura la velocitat del Motor2 a màxima   
  delay(2500);
 
   //Atura els motors
  arduino.digitalWrite(pinBrkA, Arduino.HIGH);//Activa el fre per al canal A
  arduino.digitalWrite(pinBrkB, Arduino.HIGH); //Activa el fre per al canal B
  delay(1000); 
  
   //Prova4: Direcció: Motor1 endarrere i Motor2 endavant; Velocitat: Motor1 i Motor2 màxima
 /*Motor1*/
  arduino.digitalWrite(pinDirA, Arduino.LOW) ; //Configura la direcció del Motor1 cap endarrere
  arduino.digitalWrite(pinBrkA, Arduino.LOW); //Desactiva el fre per al Motor1  
  arduino.analogWrite(pinPwmA, 255); //Configura la velocitat del Motor1 a màxima
  /*Motor2*/
  arduino.digitalWrite(pinDirB, Arduino.HIGH); //Configura la direcció del Motor2 cap endavant
  arduino.digitalWrite(pinBrkB, Arduino.LOW);//Desactiva el fre per al Motor2
  arduino.analogWrite(pinPwmB, 255); //Configura la velocitat del Motor2 a màxima 
  delay(2500);
 
   //Atura els motors
  arduino.digitalWrite(pinBrkA, Arduino.HIGH);//Activa el fre per al canal A
  arduino.digitalWrite(pinBrkB, Arduino.HIGH); //Activa el fre per al canal B
  delay(1000);
  
}