RotLine - Fase 4
Fase 4: Diseño del algoritmo del robot
En esta fase se describe el driver utilizado para controlar los motores del robot seguidor de línea. Además, se presenta el diagrama de conexión de los elementos del robot, imágenes del robot y la programación para su funcionamiento.
Driver
El driver implementado en el robot para controlar los motores es el "Módulo Puente H L298N", este tiene la capacidad de manejar dos motores de corriente continua o motor DC (por las iniciales en inglés "direct current"), dado que, posee dos puentes H (circuito electrónico que permite que los motores DC giren en ambos sentidos). Este módulo permite controlar el sentido y velocidad de giro de los motores mediante señales que recibe de microcontroladores, como tarjetas de Arduino. El control del sentido de giro se realiza mediante dos pines para cada motor y la velocidad de giro se puede regular haciendo uso de modulación por ancho de pulso (PWM por sus siglas en inglés). Tiene integrado un regulador de voltaje LM7805 de 5V encargado de alimentar la parte lógica del L298N, el uso de este regulador se hace a través de un jumper y se puede usar para alimentar la etapa de control. El precio de este componente varia desde 8.000 pesos colombianos
- Especificaciones:
A continuación se presenta el diagrama de bloques que contiene las conexiones de todos los elementos del robot.
Programación del robot
Se presenta la programación del robot en el IDE de Arduino.
//motor izquierdo
int mi1=5;
int mi2=6;
//motor derecho
int md1=8;
int md2=9;
//declaración de variables (sensores y botón)
int sen1=2; //sensor izquierdo
int sen2=3; //sensor medio
int sen3=4; //sensor derecho
//declaración de estados de sensores
int ActivarSen1 = HIGH;
int ActivarSen2 = HIGH;
int ActivarSen3 = HIGH;
int DesactivarSen1 = LOW;
int DesactivarSen2 = LOW;
int DesactivarSen3 = LOW;
void setup() {
pinMode(mi1,OUTPUT); //motor izquierdo
pinMode(mi2,OUTPUT);
pinMode(md1,OUTPUT); //motor derecho
pinMode(md2,OUTPUT);
pinMode(sen1,INPUT); //sensor izquierdo
pinMode(sen2,INPUT); //sensor medio
pinMode(sen2,INPUT); //sensor derecho
}
void loop() {
//asociación de estados a los sensores
ActivarSen1 = digitalRead(sen1);
ActivarSen2 = digitalRead(sen2);
ActivarSen3 = digitalRead(sen3);
DesactivarSen1 = !digitalRead(sen1);
DesactivarSen2 = !digitalRead(sen2);
DesactivarSen3 = !digitalRead(sen3);
if (ActivarSen3 = digitalRead(sen3)) //sensor derecho (funcionar el motor izquierdo)
{
//activar el motor izquierdo(hacia adelante)
digitalWrite(mi1,HIGH);
digitalWrite(mi2,LOW);
//desactivar el motor derecho
digitalWrite(md1,LOW);
digitalWrite(md2,LOW);
delay(50);
}
if (ActivarSen1 = digitalRead(sen1)) //sensor izquierdo (funcionar el motor derecho)
{
//desactivar el motor izquierdo
digitalWrite(mi1,LOW);
digitalWrite(mi2,LOW);
//activar el motor derecho(hacia adelante)
digitalWrite(md1,HIGH);
digitalWrite(md2,LOW);
delay(50);
}
if (ActivarSen2 = digitalRead(sen2))//sensor medio (funcionar los dos motores)
{
//activar el motor izquierdo(hacia adelante)
digitalWrite(mi1,HIGH);
digitalWrite(mi2,LOW);
//activar el motor derecho(hacia adelante)
digitalWrite(md1,HIGH);
digitalWrite(md2,LOW);
delay(50);
}
if((DesactivarSen2 = !digitalRead(sen2)) && (DesactivarSen1 = !digitalRead(sen1)) && (DesactivarSen3 = !digitalRead(sen3)))//no censa línea negra (no funcionar los dos motores)
{ //desactivar el motor izquierdo
digitalWrite(mi1,LOW);
digitalWrite(mi2,LOW);
//desactivar el motor derecho
digitalWrite(md1,LOW);
digitalWrite(md2,LOW);
}
if((ActivarSen2 = digitalRead(sen2)) && (ActivarSen1 = digitalRead(sen1)) && (ActivarSen3 = digitalRead(sen3)))//censa línea negra todos los sensores (no funcionar los dos motores)
{
//activar el motor izquierdo(hacia atrás)
digitalWrite(mi1,LOW);
digitalWrite(mi2,HIGH);
//activar el motor derecho(hacia atrás)
digitalWrite(md1,LOW);
digitalWrite(md2,HIGH);
delay(1000);
}
}
Imágenes del robot
A continuación, se presentan las imágenes del montaje y las conexiones del robot.
Comentarios
Publicar un comentario