You are on page 1of 22

Robot recolector

Reporte

Baez Nuez Daniel Omar Castro Jess Antonio Zarate Mendoza Gilberto
GRUPO: 5AM

Contenido
Objetivo ................................................................................................................................... 2 Marco terico ........................................................................................................................... 2 Sensores infrarrojos ........................................................................................................................ 2 Micro-controlador ........................................................................................................................... 3 Motor de corriente continua (C.D.)................................................................................................. 3 Servomotor ..................................................................................................................................... 4 Materiales utilizados ................................................................................................................ 5 Caractersticas de los componentes usados ............................................................................... 6 Fotodiodo y fototransistor .............................................................................................................. 6 Arduino DUE .................................................................................................................................... 7 Servomotor ..................................................................................................................................... 8 Desarrollo del proyecto ............................................................................................................ 9 Recepcin de la seal ...................................................................................................................... 9 Etapa de control de motores ........................................................................................................ 10 Diseo del mecanismo .................................................................................................................. 11 Estructura del robot ...................................................................................................................... 11 Mecanismo recolector .................................................................................................................. 12 Ubicacin de sensores, motores y servomotores ......................................................................... 13 Diagrama de flujo .......................................................................................................................... 14 Programa ....................................................................................................................................... 15 Resultados ............................................................................................................................. 21

Objetivo
Disear y construir un dispositivo robtico capas de recolectar objetos atreves de un laberinto, ser capaz de seguir lneas y realizar giros tanto de 90 grados como de 180 grados.

Marco terico
Sensores infrarrojos
El fotodiodo (IR) es un componente electrnico que emite luz infrarroja, caracterizada por encontrarse en una frecuencia menor (10-5m) que la luz visible por el ojo humano (0.5 x 10-6m), por lo que slo puede ser detectada por otro componente electrnico llamado fototransistor. De esta manera el fotodiodo acta como el emisor y el fototransistor como el receptor. La configuracin 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 lnea recta se refleja en un objeto o superficie hacia el fototransistor (figura 1). 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 por lo tanto el fototransistor no detectara nada.

Figura (1) del Sensor Emisor Receptor

Micro-controlador
Un microcontrolador (abreviado C, UC o MCU) es un circuito integrado programable, capaz de ejecutar las rdenes grabadas en su memoria. Est compuesto de varios bloques funcionales, los cuales cumplen una tarea especfica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento, memoria y perifricos de entrada/salida.

Motor de corriente continua (C.D.)


Un motor elctrico de Corriente Continua es esencialmente una mquina que convierte energa elctrica en movimiento o trabajo mecnico, a travs de medios electromagnticos.

Servomotor
Un servomotor (tambin llamado servo) es un dispositivo similar a un motor de corriente continua que tiene la capacidad de ubicarse en cualquier posicin dentro de su rango de operacin, y mantenerse estable en dicha posicin.1 Un servomotor es un motor elctrico que puede ser controlado tanto en velocidad como en posicin. Es posible modificar un servomotor para obtener un motor de corriente continua que, si bien ya no tiene la capacidad de control del servo, conserva la fuerza, velocidad y baja inercia que caracteriza a estos dispositivos.

Materiales utilizados
2 Motores de corriente continua 2 Llantas 11 Fotodiodos 11 Fototransistores 2 Servomotores 1 Puente H (L293B) 12 Resistencias de 100K 3 Resistencias de 330 1 Rueda loca 1 Acrlico 15cm x 10cm 1 Arduino DUE Palitos de madera

Caractersticas de los componentes usados


Fotodiodo y fototransistor

Arduino DUE

Microcontroller Operating Voltage Input Voltage (recommended) Input Voltage (limits) Digital I/O Pins Analog Input Pins Analog Outputs Pins Total DC Output Current on all I/O lines DC Current for 3.3V Pin DC Current for 5V Pin Flash Memory SRAM Clock Speed

AT91SAM3X8E 3.3V 7-12V 6-16V 54 (of which 12 provide PWM output) 12 2 (DAC) 130 mA 800 mA 800 mA 512 KB all available for the user applications 96 KB (two banks: 64KB and 32KB) 84 MHz

Servomotor

Modulation: Torque:

Analog 4.8V: 25.0 oz-in (1.80 kg-cm)

Speed:

4.8V: 0.10 sec/60

Weight:

0.32 oz (9.0 g) Length: 0.91 in (23.1 mm)

Dimensions:

Width: 0.48 in (12.2 mm) Height: 1.14 in (29.0 mm)

Motor Type: Gear Type: Rotation/Support:

3-pole Plastic Bushing

Desarrollo del proyecto


La finalidad del robot seguidor ser que este debe seguir una lnea blanca haciendo uso de sensores infrarrojos, los cuales detectaran la lnea y enviaran la seal correspondiente al arduino. El mecanismo contara con un par de sensores infrarrojos para realizar la recoleccin, una vez detectado el objeto (en este caso pelotas de golf) lo recolecte para despus colocarlo en la canasta instalada en robot para despus seguir su trayectoria y recolectar las dems pelotas. All, de acuerdo a la programacin realizada, se tomar una decisin respecto a las acciones que el robot debe realizar para mantenerse en el camino y llegar a la meta.

Recepcin de la seal

El sistema encargado de obtener informacin del entorno para enviarla al sistema de comunicacin en el cual se determinarn las acciones que deber tomar el robot. En este caso se usarn leds infrarrojos, un emisor y un receptor, los cuales estn encargados de detectar la lnea blanca que define el camino a seguir, en la figura 2 se muestra el diagrama esquemtico. EL robot cuenta con un total de 11 sensores (fotodiodos y fototransistores) de los cuales 10 estn destinados a la deteccin de la lnea blanca (figura 1) y el sensor restante es usado para la deteccin de la pelota para su posterior recoleccin.

Figura 1 Placa de sensores para deteccin de lnea.

Figura 2 Diagrama esquemtico de la placa de sensores.

Etapa de control de motores

El puente H (figura 3) se usa para controlar el giro del motor, tambin puede usarse para detenerlo, 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.

Figura 3 Conexin de puente H al motor.

La seal de salida de los sensores infrarrojos es de tipo anloga porque su variacin depende de la distancia entre los componentes, la cantidad de luz percibida y la lnea blanca, de la incidencia de la luz ambiente y de las prdidas en el flujo de corriente en todo el circuito. Esta seal entra a la fase de programacin y all es transformada en una seal digital, la cual a su vez es la entrada al driver de los motores (Puente H).

10

Diseo del mecanismo

El robot cuenta con traccin diferencial, ya que utiliza dos ruedas y dos motores que son controlados de manera individual y soportadas en un eje central comn (rueda loca) para el balance. Las dos ruedas tienen un recubrimiento de caucho que permite un mayor agarre a la superficie plana del entorno; la rueda loca adems facilita el movimiento del robot al contar con un giro libre de 360 grados (figura 4). Las dos ruedas principales son controladas con motores independientes de corriente continua que cuenta con un sistema de engranajes que ayuda a aumentar la potencia en el movimiento. (Figura 4) Estructura

Estructura del robot


Para que la estructura mecnica presente un buen desempeo, se debe escoger adecuadamente los materiales a emplear. Despus de una previa investigacin se determin que el material ms adecuado es acrlico, debido a que es rgido, liviano y de fcil manejo.

En la ubicacin 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, girar a la derecha y hacia atrs si as se requiere.

11

Mecanismo recolector
El mecanismo implementado para la recoleccin de las pelotas est conformado por una pala en forma de tenedor (figura5), sujetada por medio de piezas de acrlico a un servomotor que suministra el torque adecuado y permite un control de posicin preciso junto con un eje apoyado en madera. El mecanismo de depsito de pelotas est conformado por una plataforma de madera, cuyo movimiento es generado por una palanca acoplada a un servomotor similar al de la pala. El sistema de depsito se dise para liberar las pelotas por la parte frontal. Para la deteccin de la pelota se utilizara un sistema parecido al de seguimiento de lnea, ya que ambos utilizan luz infrarroja. La diferencia radica en que en este sistema el emisor se encuentre frente al receptor, y forman entre ambos una barrera de luz infrarroja. El emisor es un fotodiodo de uso comn y el detector, estos dispositivos estn compuesto internamente por una serie de circuitos que los hacen especiales para este uso, ya que lo nico que tenemos que hacer es polarizarlos con una fuente de 5V y tomar la seal del pin de salida.

Figura 5 Mecanismo recolector.

12

Ubicacin de sensores, motores y servomotores


6

4 1 3

1. Pareja de sensores destinados a la recoleccin de las pelotas. 2. Servomotor ubicado en la parte derecha utilizado para subir o bajar la pala. 3. Placa de sensores ubicada en la inferior del robot. 4. Motor y llanta ubicados en la parte izquierda del robot. 5. Servomotor ubicado en el centro del robot utilizado para mover el contenedor de las pelotas. 6. Motor y llanta ubicados en la parte derecha del robot.

13

Diagrama de flujo

14

Programa
#include <Servo.h> #define IZQ -1 #define FRENTE 0 #define DER 1 #define brillo_linea 900 #define pala_abajo 82 #define pala_arriba 0 #define canasta_abajo 10 #define canasta_arriba 55 int siguiente_ruta = 0; int total_intersecciones; int ruta[] = { DER, DER, IZQ, FRENTE, FRENTE, DER, IZQ}; #define total_sensores_por_lado 5 const int sensor_central = total_sensores_por_lado - 1; // Sensores linea auxiliar derecha const int sensor_der_1 = A14; const int sensor_der_2 = A13; const int sensor_der_3 = A12; const int sensor_der_4 = A11; const int y = A10; int derecho[] = { sensor_der_1, sensor_der_2, sensor_der_3, sensor_der_4, y}; // Sensores linea auxiliar izquierda const int sensor_izq_1 = A3; const int sensor_izq_2 = A4; const int sensor_izq_3 = A5; const int sensor_izq_4 = A6; const int x = A7; int izquierdo[] = { sensor_izq_1, sensor_izq_2, sensor_izq_3, sensor_izq_4, x}; const int tabla_velocidades[] = { HIGH, HIGH, HIGH, HIGH, HIGH }; const int mder0 = 18; const int mder1 = 19;

15

const int mizq0 = 21; const int mizq1 = 20; // Sensor que verifica si hay una pelota const int sensor_pelota = 8; Servo canasta; Servo pala; int pelotas_levantadas = 0; void setup(){ Serial.begin(9600); total_intersecciones = sizeof(ruta); canasta.attach(24); canasta.write(canasta_abajo); pala.attach(34); pala.write(pala_arriba); int i; for(i = 0; i < 4; i++){ pinMode(derecho[i], INPUT); pinMode(izquierdo[i], INPUT); } pinMode(mizq0, OUTPUT); pinMode(mizq1, OUTPUT); pinMode(mder0, OUTPUT); pinMode(mder1, OUTPUT); } void loop(){ seguidor(); if(siguiente_ruta < total_intersecciones){ if(hay_pelota()){ Serial.println("Hay pelota!!"); levanta_pelota(); } if(hay_interseccion()){ detener_carro();

16

da_vuelta(ruta[siguiente_ruta]); siguiente_ruta++; avanza(); delay(1000); } } else { busca_meta(); tira_objetos(); while(true); } if(pelotas_levantadas == 3){ delay(3000); tira_objetos(); while(true); } } boolean hay_interseccion(){ int lado_izq = analogRead(sensor_izq_3); int lado_der = analogRead(sensor_der_3); return lado_izq >= brillo_linea | lado_der >= brillo_linea; } boolean hay_pelota(){ return !digitalRead(sensor_pelota); } void busca_meta(){ Serial.println("Llego a la meta"); } void tira_objetos(){ pala.write(pala_abajo); canasta.write(canasta_arriba); } void levanta_pala(){ Serial.println("levanta la pala"); pala.write(pala_arriba); delay(600); }

17

void baja_pala(){ Serial.println("baja la pala"); pala.write(pala_abajo); delay(320); } void levanta_pelota(){ levanta_pala(); pelotas_levantadas++; if(pelotas_levantadas < 3){ baja_pala(); } } void da_vuelta(int lado){ Serial.print("vuelta a "); switch(lado){ case IZQ: Serial.println("izquierda"); alinear(lado, izquierdo); break; case DER: Serial.println("derecha"); alinear(lado, derecho); break; case FRENTE: Serial.println("frente"); break; default: Serial.println("Matate"); } Serial.println("empujar el carro"); } void alinear(int lado, int lista_sensores[]){ int posicion_actual_de_la_linea = busca_linea(lista_sensores); while(posicion_actual_de_la_linea != sensor_central){ Serial.print("Posicion = "); Serial.println(posicion_actual_de_la_linea); if(lado == IZQ){ ajusta_motor(mizq0, HIGH); ajusta_motor(mizq1, 0); ajusta_motor(mder0, 0);

18

ajusta_motor(mder1, HIGH); delay(5); ajusta_motor(mder1, LOW); } else { ajusta_motor(mizq0, 0); ajusta_motor(mizq1, HIGH); ajusta_motor(mder0, HIGH); ajusta_motor(mder1, 0); delay(5); ajusta_motor(mizq1, LOW); } posicion_actual_de_la_linea = busca_linea(lista_sensores); } Serial.print("Posicion final = "); Serial.println(posicion_actual_de_la_linea); avanza(); } int busca_linea(int lista_sensores[]){ int i; for(i = 0; i < total_sensores_por_lado; i++){ if(hay_linea(lista_sensores[i])) return i; } Serial.print("Linea esta en "); Serial.println(i); return -1; } void ajusta_motor(int pin, int velocidad){ digitalWrite(pin, velocidad); } boolean hay_linea(int pinSensor){ return analogRead(pinSensor) >= brillo_linea; } void detener_carro(){ digitalWrite(mizq0, LOW); // motor izquierdo Azul

19

digitalWrite(mizq1, LOW); // motor izquierdo digitalWrite(mder0, LOW); // motor derecho Verde digitalWrite(mder1, LOW); // motor derecho } void avanza(){ digitalWrite(mizq0, HIGH); digitalWrite(mizq1, LOW); digitalWrite(mder0, HIGH); digitalWrite(mder1, LOW); } void seguidor(){ int sizq = analogRead(x); int sder = analogRead(y); Serial.print(sizq); Serial.print(" / "); Serial.print(sder); if(sizq >= brillo_linea & sder >= brillo_linea){ avanza(); Serial.println(" avanza "); return; } if(sizq < brillo_linea & sder >= brillo_linea){ digitalWrite(mizq0, LOW); // motor izquierdo Azul digitalWrite(mizq1, LOW); // motor izquierdo digitalWrite(mder0, HIGH); // motor derecho Verde digitalWrite(mder1, LOW); // motor derecho Serial.println(" izquierda "); return; } if(sizq >= brillo_linea & sder < brillo_linea){ digitalWrite(mizq0, HIGH); // motor izquierdo Azul digitalWrite(mizq1, LOW); // motor izquierdo digitalWrite(mder0, LOW); // motor derecho Verde digitalWrite(mder1, LOW); // motor derecho Serial.println(" derecha "); return; }

20

if(sizq < brillo_linea & sder < brillo_linea){ digitalWrite(mizq0, LOW); // motor izquierdo Azul digitalWrite(mizq1, HIGH); // motor izquierdo digitalWrite(mder0, LOW); // motor derecho Verde digitalWrite(mder1, HIGH); // motor derecho Serial.println(" reversa "); return; } }

Resultados
El robot seguidor-recolector sigue la lnea blanca sin dificultad, si se sale de la lnea este regresa, en cuanto respecta a los giros de 90 y 180 grados, estos estn un poco confusos ya que el robot poder una vuelta a la derecha sin dificultad pero cuando llega a la siguiente interseccin este no detecta las lneas de la interseccin y sigue derecho y este tiende a chocar o en varias ocasiones este si detecto la interseccin se pero cuando comenz a realizar el giro este se perdi y quedo girando en su propio eje, en otras ocasiones comenzaba a realizar el giro pero no detectaba la lnea as que segua con el giro pero detectaba la lnea siguiente y este hacia un giro de 180 grados el cual no estaba planeado. El mecanismo recolector funciona a la perfeccin, este fue probado en el robot funcionando solo que este caminara en lnea recta, este camina y en cuanto la pelota entran en la pala los sensores la detectan, sube la pala y se deposita en la canasta, este mecanismo fue diseado para que el robot no se detenga cuando la pelota es detectada, el mecanismo fue probado muchas veces y por los resultados que obtuvimos este diseo fue la mejor opcin.

21

You might also like