Home » Uncategorized » Robot BOBY

Login with your Social Account

Robot BOBY

  •  
  •  
  •  
  •  
  •  
  •  

1. Introducción.
En la presente entrada, se detallará el diseño, montaje y programación del robot con configuración diferencial Bobby. El robot está basado en Arduino y la carcasa del mismo se ha diseñado específicamente para la aplicación e imprimido en una impresora 3D. Las tareas que realiza actualmente el robot son las siguientes: seguilíneas, control de posición 1D y control remoto. Como complemento, también se ha diseñado una aplicación que permite la reproducción de canciones previamente definidas mediante el buzzer y la interacción con una pantalla led por SPI. No obstante, debido a la electrónica incluida y el chasis personalizado, este robot se puede fácilmente expandible para multitud de aplicaciones futuras.

2. Componentes.
2.1 Electrónica.
Los diferentes componentes electrónicos son los siguientes:
• Arduino nano v3. • Arduino nano I/O Shield. • Seguilíneas TCRT5000. • Matriz LED 8×8 MAX7219. • Sensor de ultrasonidos HC-SR04. • Altavoz pasivo (buzzer). • Servo de rotación continua FS90R (2 unidades). • Modulo bluetooth SPP-C.

El esquemático es el siguiente (realizado con Fritzing):

2.2 Componentes auxiliares.
A parte de los componentes electrónicos, los siguientes componentes también son necesarios:
• Carcasa.

• Bateria externa “powerbank” de 5500mAh

• Par de ruedas servo FS90R.

• Cables varios (dupond hembra-hembra).

• Rueda loca.

La carcasa construida permite la inclusión de los principales componentes diseñados, aparte de dejar permitir la construcción de un segundo piso donde incluir más sensores o realizar un piso giratorio, tal como en un principio se había diseñado para situar una Raspberry Pi con una cámara encima. Los planos de la carcasa, los cuales se imprimieron en una impresora 3D, son los siguientes:

3. Montaje.
Gracias al diseño previo del chasis, el montaje de los diferentes componentes es trivial. En primer lugar se sitúan los dos servos en las ranuras laterales dispuestas para ellos. El sensor de ultrasonidos se sitúa en el frente plano, para permitir la medida de distancias en la dirección principal del robot. A los lados del sensor de ultrasonidos, se colocan los sensores infrarrojos, a una distancia aproximadamente de un centímetro del suelo. El arduino junto a su Shield se sitúan en el punto central de la base, para minimizar la distancia de los otros componentes al realizar el cableado. Finalmente, se ubica la electrónica menor encima de la carcasa, como son
el buzzer, la pantalla led o el bluetooth, se realiza el cableado y se montan las ruedas en los servos y la rueda loca en la ranura inferior del robot.
A continuación se pueden observar diversas imágenes desde diferentes puntos de vista del robot una vez montado:

4. Aplicaciones.
4.1 Funciones auxiliares.
Para simplificar código en las siguientes aplicaciones, se ha realizado dos funciones auxiliares que permitirán facilitar el control de los motores y la obtención de la medida del sensor ultrasonidos.
4.1.1 Control de los motores.
Los dos motores empleados, aunque son continuos, utilizan el mismo protocolo de los servos angulares clásicos. A partir de una señal PWM 20ms de periodo, dependiendo del tiempo en estado activo, se traduce en un ángulo determinado. Así es, por ejemplo 1000ms pueden significar en un modelo -180º y 2000ms 180º. En el caso de servos continuos, se establece la velocidad, máxima negativa o máxima positiva. Arduino cuenta con la librería Servo.h, la cual permite establecer un pin y enviar las referencias en ángulos a seguir por el servo. Para simplificar su uso, se ha creado la siguiente función, la cual tiene dos entradas que son las referencias de los motores izquierdo y derecho a seguir, de -100 a 100 (escalado gracias a la función map). Los objetos servos deben estar inicializados previamente.

4.1.2 Ultrasonidos.
El sensor de ultrasonidos funciona a partir de medir el tiempo que tarda en volver una onda emitida., a partir de los pines conectados la sensor A partir del tiempo y velocidad en el medio se puede obtener el doble de la distancia, y finalmente la distancia recorrida. Para facilitar su uso en diferentes programas se ha realizado una función que se encarga de emitir, recibir y calcular para devolver la distancia medida en centímetros.

4.2 Seguilíneas.
La primera aplicación realizada es el seguilíneas, la cual consiste en seguir un camino (línea) dado aunque este tenga curvaturas, calculando el robot los giros necesarios para continuarlo. También tiene implementado un sistema de seguridad, que consiste en que si detecta un objeto a una distancia menor que la determinada el robot se para.
En primer lugar se obtienen las medidas analógicas de los dos sensores infrarrojos y la medida del sensor de ultrasonidos. Si la medida no está dentro de la zona de peligro, según los umbrales establecidos en los sensores se puede obtener si detectan color claro u oscuro. En el caso de seguir un camino negro, sino se detecta blanco sigue recto, si el sensor derecho detecta blanco gira a la izquierda y si detecta el sensor izquierdo gira a la derecha.
El código Arduino es el siguiente:

4.3 Control de posición 1D.
La segunda aplicación programada es el control de posición 1D. En este caso, dada una referencia de distancia prestablecida, el robot debe mantener la distancia obtenida por el sensor de ultrasonidos lo más cerca posible. Para ello se ha implementado un control proporcional no lineal que permite seguir la referencia más suavemente. La no linealidad viene dada primero por la histéresis que se ha implementado, si el error se encuentra entre una banda dada, no se actúa para evitar estresar los motores. Segundo, como con un proporcional no reaccionaba igual hacia delante que hacia atrás, se ha establecido una ganancia diferente para ambas situaciones, permitiendo un control más uniforme.
Respecto al bucle, su funcionamiento es el que sigue. Primeramente, se obtiene la medida del sensor y se estudia si es realista. En el caso de no serlo se mantiene la medida anterior. A continuación se filtra mediante un filtro de media móvil. Con la referencia se obtiene el error y se aplica la comprobación de si está dentro de la banda de histéresis. Finalmente mediante el
signo del error se aplica el proporcional no continuo y se envía la señal a los actuadores. El ciclo establecido funciona a una frecuencia de 4Hz.
El código Arduino es el siguiente:

4.4 Control remoto.
La tercera aplicación es el control remoto del robot mediante bluetooth. Mediante una aplicación de Android expresamente diseñada, se le envían al robot una serie de comandos, que le permiten saber qué orden se le está enviando (parar, girar…).
El código Arduino es el siguiente:


Por otra parte, el programa de Android se encarga de establecer la comunicación con el robot y se según los botones pulsados por el usuario enviar los comandos correspondientes.
La interfaz gráfica es la siguiente:

 

A %d blogueros les gusta esto: