domingo, 16 de abril de 2017

PROGRAMACIÓN EN ARDUINO PARA CALCULAR DISTANCIAS A OBJETOS CON EL SENSOR DE ULTRASONIDOS

El objetivo de este reto será que nuestro robot indique de manera automática cuál es la menor distancia de las obtenidas a tres objetos diferentes (d1, d2, d3). (También se podía plantear obtener la mayor o la intermedia). Para la medida de las distancias a los objetos se utilizará el sensor de ultrasonidos.

Las condiciones que se han de cumplir para realizar nuestro reto serán las siguientes:
  • El sensor de ultrasonidos irá anclado al miniservo (ángulo de giro entre 0º y 180º).
  • Las órdenes para mover el miniservo se darán desde un dispositivo inalámbrico (teléfono móvil o tablet), y serán de tres tipos:
                            ORDEN A - Girar 10 º el sensor de ultrasonidos a la derecha.
                            ORDEN B - Girar 10 º el sensor de ultrasonidos a la izquierda.
                            ORDEN C - Hacer que el sensor mida la distancia a un objeto.
  • Se debe establecer una señal de aviso de “tope” para evitar que el miniservo supere sus límites de giro, es decir, para que el ángulo no supere 180º ni sea menor que 0º. Si se superan los límites, deberá detenerse y se emitirá un sonido o luz para indicar esta situación.
  • Se deben realizar medidas de distancia a tres objetos diferentes, y una vez realizada esta acción, el sensor de ultrasonidos deberá apuntar automáticamente al objeto más próximo, emitiendo también algún tipo de señal al mismo tiempo. En el caso de que existan medidas iguales, se apuntará al último objeto con la misma medida.
 Vídeo demo
     
El sensor de ultrasonidos está formado por un emisor (trigger) y un receptor (echo). El emisor lanza un ultrasonido (o pulso) de una duración de al menos10 microsegundos y espera a que dicha señal rebote y sea captada por el receptor. Si medimos el tiempo transcurrido desde que se envió la señal y se recibió en el receptor, y conociendo la velocidad del sonido (343 m/s), la distancia al objeto la podemos calcular con la fórmula:
Distancia = (Velocidad * Tiempo)/2

Es importante tener en cuenta que el tiempo medido por el sensor es lo que ha tardado la señal en ir y volver, y por eso aparece en la fórmula anterior la división por 2.


Para profundizar sobre el funcionamiento del sensor de ultrasonidos se puede acudir a:

http://robotstyles.blogspot.com.es/2014/09/ultrasonidos-que-nada-te-impida-avanzar.html
http://diwo.bq.com/programando-el-sensor-ultrasonido-en-bitbloq/

Para la realización de este reto como hardware se utilizará el kit ZUM de BQ, y como software el IDE de arduino. Además necesitamos un software para nuestro móvil o tablet, que nos permita mandar las órdenes para manejar nuestra plataforma robótica por bluetooth. Esta aplicación puede ser diseñada por nosotros, o bien podemos utilizar una aplicación que ya exista, adaptándola a nuestras necesidades.

Optaremos por esta segunda opción, y para ello utilizaremos la aplicación Robopad++, que es una aplicación para controlar mediante bluetooth los PrintBots de BQ (Renacuajo, Beetle y Evolution) desde un dispositivo Android, de un modo sencillo y divertido (http://diwo.bq.com/robopad-3/).




Con esta aplicación nosotros vamos a controlar los movimientos de nuestro robot (avanzar, girar derecha, girar izquierda, retroceder y parar),  y también el giro del miniservo donde se encuentra anclado el sensor de ultrasonidos (girar derecha, girar izquierda y tomar medida de la distancia al objeto). Así, en nuestro caso tenemos que programar en arduino el siguiente algoritmo:
 
En el programa de arduino, tenemos que conectar y configurar la opción de "bluetooth" en nuestra placa controladora (placa ZUM), y utilizaremos la instrucción de control "switch" para seleccionar nuestras distintas opciones en el programa principal (loop). Sobre esta instrucción de control podemos encontrar más información en el siguiente enlace:

Todo el proceso de construcción y programación en arduino se puede ver en el siguiente VÍDEO TUTORIAL.

https://youtu.be/7AdNm-RZH6c