En los siguientes
ejemplos y ensayos vamos a introducirnos en la programación de los
motores para conseguir diferentes movimientos básicos del robot:
Una vez que hemos realizado la
conexión del chip L293D o puente en H, procedemos a la programación
en el IDE de Arduino:
Calentando motores: Vamos a comprobar el funcionamiento del
motor izquierdo, que hemos conectado a los pines 4 y 5 de
Arduino Uno. Para su programación, vamos a utilizar por
primera vez las funciones,
que son como unas rutinas que por su frecuencia de uso, si las
etiquetamos con un nombre, facilitan y estructuran la programación
a la vez que lo simplifican. Su uso es fácil, observa el siguiente
ejemplo:
void
setup () {
pinMode(4,OUTPUT); //configuramos
los pines 4 y 5 como salidas
pinMode(5,OUTPUT);
}
void
adelante () {
digitalWrite(4,LOW); /*Esta
sería la configuración ideal, ya digitalWrite(5,HIGH);
que el pin 5 es del tipo PWM } lo que
nos permitirá variar la velocidad del motor en su avance. Si con
esta conexión el motor no gira hacia adelante, entonces habrá que
invertir la conexión del motor al chip L293D*/
void
paro () {
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
void
loop () {
adelante(); //llamamos a la
función creada
delay(2000); //
esperamos 2 segundos con el motor en marcha
paro(); //paramos
el motor utilizando la función paro
delay(1000);
}
¿Y el motor
derecho? Vamos a comprobar el
funcionamiento del motor derecho,
que hemos conectado a los pines 6 y 7 de Arduino
Uno. Volvemos a
utilizar las funciones.
Observa
el siguiente ejemplo:
void
setup () {
pinMode(6,OUTPUT); //configuramos
los pines 6 y 7 como salidas
pinMode(7,OUTPUT);
}
void
adelante () {
digitalWrite(6,HIGH); /*esta
sería la configuración ideal, ya digitalWrite(7,LOW);
que el pin 6 es del tipo PWM } lo que
nos permitirá variar la velocidad del motor en su avance. Si con
esta conexión el motor no gira hacia adelante, entonces habrá que
invertir la conexión del motor al chip L293D */
void
paro () {
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}
void
loop () {
adelante(); //llamamos a la
función creada
delay(2000); //
esperamos 2 segundos con el motor en marcha
paro(); //paramos
el motor utilizando la función paro
delay(1000);
}
¡Y ahora los
dos! Una vez que hemos
comprobados que todo funciona bien y como nosotros queremos, vamos a
utilizar los dos motores a la vez y vamos a introducir la función
atrás:
void
setup () {
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
}
void
adelante () {
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}
void
paro () {
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}
void
atras () {
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
}
void
loop () {
adelante();
delay(2000);
paro();
delay(1000);
atras();
delay(2000);
paro();
delay(1000);
}
Y
ahora los giros: Como ya
puedes entender, para conseguir que el robot gire a la izquierda
debes parar el motor de ese lado y mantener en marcha el derecho. Al
contrario, para girar a la derecha, debes parar el motor derecho y
mantener en marcha el motor izquierdo. Como ejemplo vamos a
programar los siguientes movimientos:
Adelante 2 s
Paro 0,5 s
Gira a izquierdas 0,25 s
Paro 0,5 s
Atrás 2 s
Paro 0,5 s
Gira a derechas 0,25 s
Paro 0,5 s
void
setup () {
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
}
void
adelante () {
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}
void
paro () {
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}
void
atras () {
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
}
void
giraizquierda () {
digitalWrite(4,LOW); //paramos
el motor izquierdo
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
//mantenemos el motor derecho en marcha
digitalWrite(7,LOW);
}
void
giraderecha () {
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
//mantenemos el motor izquierdo en marcha
digitalWrite(6,LOW); //paramos
el motor derecho
digitalWrite(7,LOW);
}
void
loop () {
adelante();
delay(2000);
paro();
delay(500);
giraizquierda();
delay(250);
paro();
delay(500);
atras();
delay(2000);
paro();
delay(500);
giraderecha();
delay(250);
paro();
delay(500);
}