Cuando se construyen robot móviles, se debe conseguir que se muevan lentamente, para que cuando el sensor correspondiente detecta la variable de entorno, el robot tenga tiempo de reaccionar y realice la acción de control. Si el robot se mueve muy rápido, puede ocurrir que, aunque detecte la variable, no le dé tiempo a reaccionar.
La forma más sencilla de controlar los cambios de dirección en un robot es disponer de dos motores independientes y una rueda loca. De esta manera se pueden hacer cambios de dirección actuando sobre el sentido de giro de los motores.
Cómo se mueve un robot
Cuando las dos ruedas giran en el mismo sentido y misma velocidad, el robot avanza en línea recta.
Cuando las dos ruedas giran en el mismo sentido y distinta velocidad, el robot gira suavemente.
Si solo se hace girar una rueda el robot gira bruscamente deslizándose sobre la otra rueda.
Si las dos ruedas giran en distinta dirección y la misma velocidad, el robot gira bruscamente sobre el centro del eje.
Para controlar el movimiento de los motores vamos a utilizar el driver L293D .
Usaremos una serie de variables para definir los pines desde los que se controlan los motores. El control de sus velocidades requiere de pines digitales PWM.
En total vamos a necesitar seis pines, dos de ellos PWM, para controlar el funcionamiento del robot.
En la función setup() definimos si los pines van a ser entradas o salida.
pinMode(pinI1, OUTPUT);
pinMode(pinI2, OUTPUT);
pinMode(pinI3, OUTPUT);
pinMode(pinI4,OUTPUT);
Programamos el control de velocidad de los motores
Para controlar la velocidad y el sentido de giro de los motores de nuestro robot, vamos a definir siguientes funciones: GirarDerecha(), GirarIzquierda(), Avanzar() yRetroceder(). Cada una de ellas tiene un par de argumentos: la velocidad del motor (entre 0 y 255) y el sentido de giro.
1-. Giro violento hacia la IZQUIERDA
void GirarDerecha()
{
digitalWrite(pinI1, LOW);
digitalWrite(pinI2,HIGH);
digitalWrite(pinI3, LOW);
digitalWrite(pinI4,LOW);
}
2.- Gira a la DERECHA
void GirarIzquierda()
{
digitalWrite(pinI1, LOW);
digitalWrite(pinI2,LOW);
digitalWrite(pinI3, HIGH);
digitalWrite(pinI4,LOW);
}
3.- Avanza hacia adelante
void Avanzar()
{
digitalWrite(pinI1, HIGH);
digitalWrite(pinI2,LOW);
digitalWrite(pinI3, HIGH);
digitalWrite(pinI4,LOW);
No hay comentarios:
Publicar un comentario