Como se comentó en el principio del tutorial el robot tendrá dos modos de operación:
-
- Modo automático donde el robot de manera autónoma irá avanzando y sorteando obstáculos gracias a los tres sensores de distancia situados en la parte frontal.
- Modo manual donde controlaremos al robot por bluetooth mediante una aplicación de móvil gratuita que descargaremos de la Play Store.
El código (sketch) con la funcionalidad anteriormente descrita la tenéis para descargar en el siguiente enlace con todas las librerías necesarias:
Descargar sketch del robot carlo
Seguidamente os detallo las funciones principales presentes en el código:
void Avanzar(). Hace avanzar el robot a su velocidad máxima.
void Retoceder(). Hace retroceder el robot a su velocidad máxima.
void Parar(). Hace parar el robot.
void girarDerechaAvanzando(). Hace girar hacia la derecha al robot a la vez que avanza. El giro es progresivo.
void girarIzquierdaAvanzando(). Hace girar hacia la izquierda al robot a la vez que avanza. El giro es progresivo.
void girarDerechaRetrocediendo(). Hace girar hacia la derecha al robot a la vez que retrocede. El giro es progresivo.
void girarIzquierdaAvanzando(). Hace girar hacia la izquierda al robot a la vez que retrocede. El giro es progresivo.
void girarDerecha(). Hace girar a la derecha al robot girando sobre sí mismo. Este giro se hace a la máxima velocidad y por tanto es un giro rápido.
void girarIzquierda(). Hace girar a la izquierda al robot girando sobre sí mismo. Este giro se hace a la máxima velocidad y por tanto es un giro rápido.
Para poder usar el Arduino Motor Shield hay que instalar la librería AF_Motor.
URL librería AF_Motor :
https://github.com/adafruit/Adafruit-Motor-Shield-library/zipball/master
void encenderFaros(). Enciende los LEDS delanteros.
void apagarFaros(). Apaga los LEDS delanteros.
void desactivarIndicador(). Apaga el LED RGB.
void activarIndicadorVerde(). Activa el color verde en el LED RGB.
void activarIndicadorRojo(). Activa el color rojo en el LED RGB.
void activarIndicadorAzul(). Activa el color azul en el LED RGB.
void activarSonidoDeteccion(). Activa el zumbador emitiendo una señal acústica en forma de dos “pitidos” que indicará que se ha detectado un obstáculo.
void activarSonido(). Activa el sonido del zumbador de manera permanente.
void desactivarSonido(). Desactiva el sonido del zumbador.
void detectarObstaculo(). Esta función será la encargada de medir la distancia en cada uno de los 3 sensores con el fin de detectar obstáculos cuando estamos en modo automático.
Si no se detecta ningún obstáculos se hará avanzar el robot a máxima velocidad y el indicador luminoso (LED RGB) mostrará el color verde.
Si algún sensor detecta un obstáculo dentro de la distancia programada se emitirá un sonido indicando que se ha detectado un obstáculo, se pondrá el indicador en color rojo y se hará girar el robot a la izquierda o derecha hasta que ya no se detecte ningún obstáculo en los 3 sensores.
El criterio que indicará al robot si debe girar a la derecha o la izquierda para evitar el obstáculo será el siguiente:
Sensor izquierdo | Sensor central | Sensor derecho | Acción |
0 | 0 | 0 | Ningún obstáculo detectado → Avanzar. |
0 | 0 | 1 | Obstáculo a la derecha → Girar a la izquierda. |
0 | 1 | 0 | Obstáculo en el centro → Girar a la izquierda o derecha (optamos por la izquierda). |
0 | 1 | 1 | Obstáculo a la derecha y centro → Girar a la izquierda. |
1 | 0 | 0 | Obstáculo a la izquierda → Girar a la derecha (**) |
1 | 0 | 1 | Obstáculo a izquierda y derecha → Girar a la izquierda o derecha (optamos por la izquierda). |
1 | 1 | 0 | Obstáculo a la izquierda y centro → Girar a la derecha (**) |
1 | 1 | 1 | Obstáculo a la izquierda, derecha y centro→ Girar a la izquierda o derecha (optamos por la izquierda). |
Donde 0 es que el sensor no ha detectado un obstáculo y 1 si que lo ha detectado.
NOTA: (**) Únicas combinaciones donde se gira a la derecha , en el resto se girará a la izquierda.
Para medir la distancia utilizaremos la librería NewPing.
URL librería New Ping: https://github.com/PaulStoffregen/NewPing
Control del robot por bluetooth
Para utilizar el robot en modo manual y poder controlarlo por bluetooth me he descargado de la Play Store la aplicación gratuita para móvil llamada “Arduino Bluetooth RC Car” de de Andi.co que tiene todas las caracterísitcas que necesito.
Concretamente permite enviar los comandos en modo continuo ( “Continuous stream” en los settings de la aplicación). Esta característica nos permitirá que el robot sólo responda a la dirección que le indiquemos mientras mantengamos pulsado el botón de la App.
Esta aplicación además tiene botones que nos permitirán poder encender remotamente las luces delanteras, las traseras (en nuestro caso como nuestro robot no tiene luces traseras haremos que el LED RGB se ponga de color rojo al seleccionar esta opción) así como activar el zumbador (simulando un claxon). La aplicación también permite controlar la velocidad pero en mi caso no lo he utilizado.
En el apartado de “settings” la aplicación nos muestra qué comandos (“letras”) corresponden a cada botón de la App y que hemos programado en nuestro sketch.
Por último comentar que en modo manual no se utilizan los sensores de distancia para detectar obstáculos.