martes, 29 de mayo de 2012

Programa Prueba de Motores Andromie - Arduino


La placa de puente H y sensores denominada "MotorShield", esta placa está diseñada para ser utilizada de inmediato en un robot pequeño, usando motores con un consumo máximo de 1A. Se basa en un Puente H de la Empresa Texas Instruments, SN754410NE, que contiene dos canales, cada uno con 3 bits de control, dos para dirección y para PWM, control por anchura de pulso. Para facilitar el control de los motores, y economizar bits de salida/entrada de nuestra tarjeta de control, Arduino o Pinguino, la placa "MotorShield" tiene implementado un circuito el cual sólo necesita un bit para controlar la dirección y otro para controlar la velocidad de cada motor. Siendo las salidas digitales 13 y 11 para el motor "MT1" y las salidas 12 y 10 para el motor "MT2". Cabe mencionar que la salida 13 y 12 son los bits de dirección del motor "MT1"  y  "MT2" respectivamente, las salidas 11 y 10 son los bits de PWM de los motores "MT1" y  "MT2" respectivamente.
A continuación se presenta el diagrama esquemático de la placa "MotorShield".


Para conectarlo a la placa Arduino simplemente se introduce el MotorShield, conexión entre conectores hembras del Arduino y conectores macho de shield, fijándose que coincidan los terminales pin a pin. Para hacer la prueba de los motores, conecte los motores a los terminales MT1 y MT2 y la alimentación del puente H. Es recomendable utilizar fuentes independientes para el circuito lógico y el circuito de potencia, es por ello que en la tarjeta no se toma voltaje del sistema embebido, sino se requiere de otra fuente.
Conectado y energizado el sistema, descargue el siguiente código al Arduino:


/*
Prueba de Motores
 */

//Pines de control de motor derecho
int pwmtoder = 10;
int mtoder = 12;

//Pines de control de motor izquierdo
int pwmtoizq = 11;
int mtoizq = 13;

//Rutinas
void adelante();
void atras();
void giroderecha();
void giroizquierda();
void derecha();
void izquierda();
void detenido();

void setup() {
  pinMode(pwmtoizq, OUTPUT);    
  pinMode(mtoizq, OUTPUT);    
 
  pinMode(pwmtoder, OUTPUT);    
  pinMode(mtoder, OUTPUT);
 
  digitalWrite(pwmtoizq, HIGH);
  digitalWrite(mtoizq, LOW);
 
  digitalWrite(pwmtoder, HIGH);
  digitalWrite(mtoder, LOW);

}

void loop()
{
adelante();
delay(1000);
detenido();
delay(200);
atras();
delay(1000);
detenido();
delay(200);
derecha();
delay(1000);
detenido();
delay(200);
izquierda();
delay(1000);
detenido();
delay(200);
}

void adelante()
{
  digitalWrite(pwmtoder, HIGH);
  digitalWrite(pwmtoizq, HIGH);
  digitalWrite(mtoder,   HIGH);  
  digitalWrite(mtoizq, HIGH);
}

void atras()
{
  digitalWrite(pwmtoder, HIGH);
  digitalWrite(pwmtoizq, HIGH);
  digitalWrite(mtoder, LOW);  
  digitalWrite(mtoizq, LOW);  
}

void giroderecha()
{
   digitalWrite(pwmtoder, HIGH);
  digitalWrite(pwmtoizq, HIGH);
  digitalWrite(mtoder, LOW);  
  digitalWrite(mtoizq, HIGH);  
}

void derecha()
{
  digitalWrite(pwmtoder, LOW);
  digitalWrite(pwmtoizq, HIGH);
  digitalWrite(mtoder, LOW);  
  digitalWrite(mtoizq, HIGH);  
}

void giroizquierda()
{
  digitalWrite(pwmtoder, HIGH);
  digitalWrite(pwmtoizq, HIGH);
  digitalWrite(mtoder, HIGH);  
  digitalWrite(mtoizq, LOW);  
}

void izquierda()
{
  digitalWrite(pwmtoder, HIGH);
  digitalWrite(pwmtoizq, LOW);
  digitalWrite(mtoder, HIGH);  
  digitalWrite(mtoizq, LOW);
}

void detenido()
{
  digitalWrite(pwmtoder, LOW);
  digitalWrite(pwmtoizq, LOW);
}


En el programa están realizadas las funciones para los movimientos básicos de un Robot. Fíjese que al iniciar el programa su robot avance hacia adelante, si alguno de los motores gira en sentido contrario, invierta los cablecillos desde el terminal. En la siguiente entrada se publicará más ejemplos usando la placa "MotorShield" y un robot Andromie RF.

No hay comentarios:

Publicar un comentario