View
5.781
Download
0
Category
Preview:
DESCRIPTION
Citation preview
ROBOT SEGUIDOR DE
LÍNEA CON SOFTWARE Y
HARDWARE LIBREJuly Paola Chitiva Ortiz
Jhosman Alfonso Lizarazo
Universidad Distrital Francisco José de Caldas
Facultad Tecnológica
Tecnología en Sistematización de Datos
PROBLEMA PLANTEADO
Vehículo Controlado Mediante un Computador: se podría
controlar un “vehículo” (Robot pequeño de ruedas) que
avance, retroceda o gire mediante instrucciones que se
impartan desde el computador, o se podría hacer que este
vehículo en vez de seguir instrucciones desde el PC, siga una
ruta determinada mediante sensores infrarrojos. Este será
constituido por ruedas, motores, fuente de energía, y tarjeta de
control (micro controlador Arduino ATmega168) programado en
lenguaje Arduino.
FASE DE DISEÑO
ELECTRÓNICOEl robot actuará como un móvil seguidor de línea
negra haciendo uso de sensores infrarrojos, los
cuales detectan la línea y envían una señal al resto
del circuito del robot. Allí, de acuerdo a la
programación realizada, se tomará una decisión
respecto a las acciones que el robot debe realizar
para mantenerse en el camino y llegar a la meta.
Este diseño electrónico cuenta con dos sistemas:
percepción y potencia.
PERCEPCIÓN
En el sensor infrarojo lo que hace es enviar y recibir unaseñal muy pequeña que determina la transmisión deluz infraroja que dependiendo de las condiciones delespacio puede darnos varios valores, estos vanconectados a unas resistencias R2 y R4 controlan elflujo de corriente, la cual desbloqueará su base ypermitirá la amplificación de la señal. Las resistenciasR1 y R3 actúan como protección de los leddisminuyendo el flujo de corriente hacia éstos.
CNY70
Es importante tener presente que el sensor infrarrojotambién es sensible a la luz ambiente, razón por la cualtanto el led infrarrojo como el fotodiodo debenrecubrirse con cinta aislante negra (u otro materialoscuro), formando una especie de conducto quelimita la incidencia de esta luz y facilita que el haz deluz infrarroja se emita en una sola dirección. Oreprogramar la sensibilidad de los sensores CNY70dentro de la programación.
POTENCIA
La señal de salida obtenida de los sensores infrarrojosse convierte en la señal de entrada a la fase deprogramación, en la que interviene un móduloelectrónico (Arduino) para el control del robot. Paraello se utilizará un componente (SN754410NE) o elcomponente (L293D) quienes realizarán la función deindicar a los motores que actividad realizardependiendo del momento
“
”
FUNCIONAMIENTO DEL PUENTE H
S1 S2 S3 S4 Resultado
1 0 0 1 El motor gira en avance
0 1 1 0 El motor gira en retroceso
0 0 0 0El motor se detiene bajo su
inercia
1 0 1 0 El motor frena (fast-stop)
DISEÑO MECANICOEl robot cuenta con tracción diferencial, ya
que utiliza dos ruedas que son controladas
de manera individual y soportadas en un eje
central común (rueda loca) para el balance.
Las dos ruedas tienen un recubrimiento de
caucho que permite mayor adhesión a la
superficie plana del entorno; la rueda loca
además facilita el movimiento del robot al
contar con un giro libre de 360 grados. Las
dos ruedas principales son controladas por
un motor de corriente continua que cuenta
con un sistema de engranajes que ayuda a
aumentar la potencia en el movimiento.
UBICACIÓN DE LAS RUEDAS DEL
ROBOT
En la figura 7 se observa la ubicación de las ruedas en el robot;
la rueda loca se encuentra en la parte posterior de éste. Las
formas de avance con las que cuenta robot son hacia adelante,
girar a la izquierda y girar a la derecha y hacia atrás si así serequiere. En la figura 8 se indica la posición en el robot de los
sensores para el avance del seguimiento de línea:
DISEÑO DE PROGRAMACIÓN
Como ya se ha descrito en la fase de diseño mecánico la
tracción de los robots es diferencial, pero se hace necesario
controlar su movimiento (detenerse, avanzar, girar) y además
garantizar el correcto funcionamiento de los sensores para seguir
un camino. Para solucionar esto se propone hacerlo a través de
un entorno de programación, teniendo en cuenta la población principal a la cual va dirigida la actividad, por lo que es
importante que sea de fácil acceso y uso.
De esta manera, el control de los robots se realiza a través el IDE
de programación de Arduino www.arduino.cc.
DISEÑO DE PROGRAMACIÓN
Para que sea posible la programación de la placa en el entorno
Arduino, primero debe descargarse el software Arduino y el
firmware que hará posible el reconocimiento de dicha placa por
el entorno. En la página principal de Arduino se encuentran las
especificaciones de instalación de acuerdo al tipo y versión del
sistema operativo con el que se cuente. En este proyecto se
utilizó la versión de Arduino para Ubuntu, el cual se puede encontrar en el centro de Software para
Ubuntu: https://apps.ubuntu.com/cat/applications/arduino/
PROGRAMACION
Programación:
1) Instalar Arduino (sudo apt-get install arduino)
2) Conectar Arduino por USB
3) Abrir Arduino
PROGRAMACION
4) Seleccionar tarjeta (Herramientas/Tarjeta/Arduino Diecimila or
Duemileanve w/ Atmega168
PROGRAMACION
5) Verificar permisos USB (~$ ls -l /dev/tty*)
PROGRAMACION
6) Visualizar cual fue el puerto asignado ~$ dmesg
PROGRAMACION
7) Si no tiene permisos asignar permisos al puerto USB que se
asignó a la placa (crwxrwxrwx 1 root dialout 188, 0 may 24 10:33
ttyUSB0)
~$chmod 777 ttyUSB0
PROGRAMACION
Este es un ejemplo del Hola Mundo para arduino
PROGRAMACIONCódigo para nuestro robot seguidor de línea con Arduino:
#define M1A 19 //Motor 1A
#define M1B 18 //Motor 1B
#define M2A 17 //Motor 2A
#define M2B 16 //Motor 2B
#define PIN_PWM 11 //Modulacion por ancho de pulso - Emular salida analogicacon salida digital
#define VEL 100 //Velocidad
#define S1 0 //IZQ
#define S2 1 //DER
#define _UMBRAL_ 200 //Umbral de los sensores
unsigned long timeserial;
void setup (){
Serial.begin(9600);
timeserial = millis();
pinMode(M1A, OUTPUT);
pinMode(M1B, OUTPUT);
pinMode(M2A, OUTPUT);
pinMode(M2B, OUTPUT);
STOP(10000);
analogWrite(PIN_PWM, VEL);
}
void loop()
{
byte SDER = (analogRead(S1)> _UMBRAL_ )?0:1;
byte SIZQ = (analogRead(S2)> _UMBRAL_ )?0:1;
if(SDER && SIZQ)
STOP(0);
else if (!SDER && SIZQ)
DER(0);
else if (SDER && !SIZQ)
IZQ(0);
else
ADE(0);
if(millis() - timeserial > 500){
timeserial = millis();
Serial.print("Sensor1: ");
//Serial.print(SDER);
Serial.print(analogRead(S1));
Serial.print(" Sensor2: ");
//Serial.println(SIZQ);
Serial.println(analogRead(S2));
}
}
void ATR(uint16_t time){
digitalWrite(M1A, HIGH);
digitalWrite(M1B, LOW);
digitalWrite(M2A, HIGH);
digitalWrite(M2B, LOW);
delay(time);
}
void ADE(uint16_t time){
digitalWrite(M1A, LOW);
digitalWrite(M1B, HIGH);
digitalWrite(M2A, LOW);
digitalWrite(M2B, HIGH);
delay(time);
}
void DER(uint16_t time){
//Llanta Izquierda
digitalWrite(M1A, HIGH);
digitalWrite(M1B, LOW);
//llanta Derecha
digitalWrite(M2A, LOW);
digitalWrite(M2B, HIGH);
delay(time);
}
void IZQ(uint16_t time){
//Llanta Izquierda
digitalWrite(M1A, LOW);
digitalWrite(M1B, HIGH);
//Llanta Derecha
digitalWrite(M2A, HIGH);
digitalWrite(M2B, LOW);
delay(time);
}
void STOP(uint16_t time){
digitalWrite(M1A, LOW);
digitalWrite(M1B, LOW);
digitalWrite(M2A, LOW);
digitalWrite(M2B, LOW);
delay(time);
}
ELEMENTOS NECESARIOS
Cantidad Componente
2 Led infrarrojo CNY70
2 Resistencias 220
2 Resistencias 47K
1 Driver para motor L293 B ó
SN754410NE
2 Secciones de acrílico de
12x12 cms de 10 mm. de
ancho para las partes
superior e inferior.
Tornillos y Tuercas
2 Ruedas de 8 cm de
diámetro
1 Rueda loca
1 Twin Motor GrearBox
1 Placa Arduino ATMega168
1 Protoboard
Cables para conexiones
5 Condensadores
Agradecimientos:
Laura Romero
Leonardo Urrego
Documentación arduino.cc
Google y Wikipedia
Texas Instruments
FOTOGRAFIAS
Recommended