Professional Documents
Culture Documents
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.
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.
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
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:
Speed:
Weight:
Dimensions:
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.
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.
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
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
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.
12
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