E1 Reporte Robot Seguidor-recolector 22 Abril 2014

Embed Size (px)

Citation preview

  • Robot recolector Reporte

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

  • 1

    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

  • 2

    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

  • 3

    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.

  • 4

    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.

  • 5

    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

  • 6

    Caractersticas de los componentes usados

    Fotodiodo y fototransistor

  • 7

    Arduino DUE

    Microcontroller AT91SAM3X8E

    Operating Voltage 3.3V

    Input Voltage (recommended) 7-12V

    Input Voltage (limits) 6-16V

    Digital I/O Pins 54 (of which 12 provide PWM output)

    Analog Input Pins 12

    Analog Outputs Pins 2 (DAC)

    Total DC Output Current on all I/O lines 130 mA

    DC Current for 3.3V Pin 800 mA

    DC Current for 5V Pin 800 mA

    Flash Memory 512 KB all available for the user applications

    SRAM 96 KB (two banks: 64KB and 32KB)

    Clock Speed 84 MHz

  • 8

    Servomotor

    Modulation: Analog

    Torque: 4.8V:

    25.0 oz-in (1.80 kg-cm)

    Speed: 4.8V:

    0.10 sec/60

    Weight: 0.32 oz (9.0 g)

    Dimensions:

    Length:

    0.91 in (23.1 mm)

    Width:

    0.48 in (12.2 mm)

    Height:

    1.14 in (29.0 mm)

    Motor Type: 3-pole

    Gear Type: Plastic

    Rotation/Support: Bushing

  • 9

    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.

  • 10

    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).

  • 11

    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.

  • 12

    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.

  • 13

    Ubicacin de sensores, motores y servomotores

    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.

    1

    2

    3 4

    5

    6

  • 14

    Diagrama de flujo

  • 15

    Programa #include

    #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;

  • 16

    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();

  • 17

    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);

    }

  • 18

    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);

  • 19

    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

  • 20

    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;

    }

  • 21

    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.