You are on page 1of 18

MOVIL CONTROLADO POR COMPUTADOR CON HARDWARE Y SOFTWARE

LIBRE
JULY PAOLA CHITIVA ORTIZ
JHOSMAN ALFONSO LIZARAZO MORA
DOCENTE NORBERTO NOVOA
ARQUITECTURA DE COMPUTADORES

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS


FACULTAD TECNOLOGICA
TECNOLOGIA EN SISTEMATIZACIÓN DE DATOS

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 equipo, o se podría hacer que este vehículo en vez de
seguir instrucciones desde el PC, siga una ruta determinada mediante 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ónico
El 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
Es el sistema encargado de obtener la información del entorno para enviarla al
sistema de comunicación en el cual se determinarán las acciones para los robots.
En este caso se usarán leds infrarrojos, un emisor y un receptor, los cuales están
encargados de detectar la línea negra que define el camino a seguir. En este caso
se utilizarán dos sensores CNY70.
El led infrarrojo (IR) es un componente electrónico que emite luz infrarroja,
caracterizada por encontrarse en una frecuencia menor (10-5 m) que la luz visible
por el ojo humano (0.5 x 10-6m), por lo que sólo puede ser detectada por otro
componente electrónico llamado fotodiodo. De esta manera el led infrarrojo actúa
como el emisor y el fotodiodo como el receptor. La configuración usada es de tipo
auto-reflexiva, es decir que tanto el emisor como el receptor se encuentran ubicados
uno al lado del otro y la luz emitida que viaja en línea recta se refleja en un objeto o
superficie hacia el fotodiodo (figura 5). Este tipo de luz se refleja sobre colores
blancos o claros, si se hace sobre un color oscuro o negro la luz es mayormente
absorbida, disminuyendo la intensidad que recibirá el fotodiodo. De acuerdo a este
y al diseño del entorno, debe invertirse la señal para que pueda actuar sobre la línea
negra.

Figura del Sensor Emisor – Receptor

En el sensor infrarojo lo que hace es enviar y recibir una señal muy pequeña que
determina la transmisión de luz infraroja que dependiendo de las condiciones del
espacio puede darnos varios valores, estos van conectados a unas resistencias R2
y R4 controlan el flujo de corriente, la cual desbloqueará su base y permitirá la
amplificación de la señal. Las resistencias R1 y R3 actúan como protección de los
led disminuyendo el flujo de corriente hacia éstos.
Es importante tener presente que el sensor infrarrojo también es sensible a la luz
ambiente, razón por la cual tanto el led infrarrojo como el fotodiodo deben recubrirse
con cinta aislante negra (u otro material oscuro), formando una especie de conducto
que limita la incidencia de esta luz y facilita que el haz de luz infrarroja se emita en
una sola dirección. O reprogramar la sensibilidad de los sensores CNY70 dentro de
la programación.
Potencia

La señal de salida obtenida de los sensores infrarrojos se convierte en la señal de


entrada a la fase de programación, en la que interviene un módulo electrónico
(Arduino) para el control del robot. Para ello se utilizará un componente
(SN754410NE) o el componente (L293D) quienes realizarán la función de indicar a
los motores que actividad realizar dependiendo del momento
Se crea puente H para control de los motores
Como hemos dicho el puente H se usa para invertir el giro de un motor, pero también
puede usarse para frenarlo (de manera brusca), al hacer un corto entre las bornas
del motor, o incluso puede usarse para permitir que el motor frene bajo su propia
inercia, cuando desconectamos el motor de la fuente que lo alimenta. En el siguiente
cuadro se resumen las diferentes acciones.

S1 S2 S3 S4 Resultado
1 0 0 1 El motor gira en avance
0 1 1 0 El motor gira en retroceso
El motor se detiene bajo su
0 0 0 0 inercia
1 0 1 0 El motor frena (fast-stop)
Figura Etapa de Potencia
La señal de salida de los sensores infrarrojos es de tipo análoga porque su variación
depende de la distancia entre los componentes, la cantidad de luz percibida y la
línea negra, de la incidencia de la luz ambiente y de las pérdidas en el flujo de
corriente en todo el circuito. Esta señal entra a la fase de programación y allí es
transformada en una señal digital, la cual a su vez es la entrada al driver de los
motores (Puente H).
Fase de diseño mecánico
El 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.

Figura Ubicación 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í
se requiere. En la figura 8 se indica la posición en el robot de los sensores para el
avance del seguimiento de línea:

Figura de Ubicación de los Sensores del Robot


Finalmente, en la figura 9 se presentan dos vistas de la estructura física de los
robots.
Vista física del diseño del Robot

Diseño de programación
La última fase que se tiene en cuenta para la construcción de los robots y su
funcionamiento bajo el paradigma de los Sistemas Multi-Agentes es la de
programación, la cual se divide en las secciones de control y de comunicación.
Control
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.
Estas placas son capaces de recibir información del ambiente o entorno en el que
se encuentren, procesarla, manipularla y controlar posteriormente una salida en la
que pueden encontrarse motores, luces, sonido, entre otras. Una ventaja que tiene
este tipo de hardware de código abierto y como aporte a la educación, es que
además de la opción de compra también pueden obtenerse las características de
hardware y así ser ensamblado libremente. El tipo de placa que se usa para este
proyecto es la Duemilanove (Figura 10), la cual cuenta principalmente con seis
entradas análogas, 14 entradas/salidas digitales, un microcontrolador ATMega168,
un voltaje de operación de 5 voltios y una conexión por puerto USB (Arduino,
2012)que permitirá la alimentación y programación de esta placa.

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[1]. 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/

[1]Se puede descargardirectamente de la página principal de


Arduino: http://arduino.cc/en/Guide/HomePage

Programación:
1) Instalar Arduino (sudo apt-get install arduino)
2) Conectar Arduino por USB
3) Abrir Arduino
4) Seleccionar tarjeta (Herramientas/Tarjeta/Arduino Diecimila or Duemileanve w/
Atmega168
5) Verificar permisos USB (~$ ls -l /dev/tty*)
6) Visualizar cual fue el puerto asignado ~$ dmesg

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
Este es un ejemplo del Hola Mundo para arduino

Có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 analogica con 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);

A continuación se presenta los listados de componentes utilizados para la


construcción de los robots especificados en el diseño electrónico, mecánico y de
programación. Cada listado corresponde a los componentes utilizados para 1
robot.

Componentes para el diseño



Cantidad Componente
2 Led infrarrojo CNY70
2 Resistencias 220
2 Resistencias 47K
1 Driver para motor L293 B ó SN754410NE
Secciones de acrílico de 12×12 cms de 10
mm. de ancho para las partes superior e
2 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:

You might also like