Funciones para controlar el moviento de un robot


 


 

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.

Pero dado que los motores que vamos a usar en el taller  hemos llegado a la conclusión que es más efectivo para el funcionamiento de nuestro robot el conectar los pines EA y EB, a +5 v y controlar solo el sentido de giro del motor, lo cual nos simplifica 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);
}


4.- Retroceder

void Retroceder()

{

digitalWrite(pinI1, LOW);

digitalWrite(pinI2,HIGH);

digitalWrite(pinI3, LOW);

digitalWrite(pinI4,HIGH);
}


5.- Parar

void Parar()

{

digitalWrite(pinI1,LOW);

digitalWrite(pinI2,LOW);

digitalWrite(pinI3, LOW);

digitalWrite(pinI4,LOW);
}



No hay comentarios: