En el artículo Programación de servomotores con placas Arduino y Snap4Arduino (Scratch) has podido conocer un caso de programación similar al que se va a realizar con el sensor de distancia por ultrasonidos HC-SR04, por lo que se recomienda conocer el proceso llevado a cabo para programar servomotores con Snap4Arduino.
Para poder hacer la programación de este sensor necesitarás tenerlo correctamente conectado a la placa Arduino. Si no lo has conectado ya, sigue el artículo Conexión del sensor de distancia HC-SR04 para robótica con Arduino.
Instalación de Firmata (SA5) en la placa Arduino
Recuerda que para poder programar la placa Arduino desde Snap4Arduino, en la Arduino se debe instalar una aplicación (Firmata) que permita la comunicación entra ambos elementos. En otros casos has podido ver que es suficiente con la instalación del StandardFirmata que incorpora el entorno de programación de Arduino en sus ejemplos.
Pero para poder programar el sensor HC-SR04 se debe utilizar otro Firmata, ya que el StandardFirmata no lo soporta.
Existen varios Firmatas publicados en Internet con soporte para el HC-SR04. En este artículo se va utilizar SA5Firmata, cuyo proyecto completo puedes encontrar en github.com/jguille2/SA5.
Sigue los pasos indicados en github.com/jguille2/SA5/blob/master/firmata/SA5Firmata.md (en la sección Download and Install) para realizar la descarga e instalación de SA5Firmata, teniendo en cuenta que, como se indica en esa guía, puedes instalar SA5Firmata_tone.ino o SA5Firmata_ir.ino, pero para la programación del HC-SR04 necesitarás instalar SA5Firmata_tone.ino en la placa Arduino.
Observa que también se debe importar la librería SA5Firmata en Snap4Arduino para poder tener todos estos bloques nuevos en la sección Arduino:
Uso del bloque ping (cm)
La manera más sencilla de obtener información del sensor de distancia HC-SR04 es usando el bloque ping (cm), que puedes encontrar en la sección Arduino tras importar la librería SA5Firmata. Al añadir ese bloque al código de una aplicación en Snap4Arduino se obtendrá un valor numérico correspondiente a la distancia detectada (medida en centímetros) entre el sensor y el objeto que se sitúe enfrente.
Por tanto, el bloque ping (cm) no se puede usar de manera independiente, sino que debe incluirse dentro de otro bloque que admita un valor numérico.
Puedes ver que en este bloque se deben indicar 4 valores como parámetros que corresponden a los siguientes datos:
- Trig: Pin digital de la placa Arduino al que se ha conectado el pin Trig del sensor.
- Echo: Pin digital de la placa Arduino al que se ha conectado el pin Echo del sensor.
- Pulse microsegundos: Los 2 valores que contiene se pueden dejar con el valor por defecto que traen (2 y 5). Corresponden a los microsegundos que debe esperar el sensor para los envíos de las señales ultrasónicas que necesita para obtener la distancia.
Como se puede ver en la ayuda de este bloque (clic derecho sobre el bloque > Help), el valor que se obtiene si no se ha podido detectar ningún obstáculo es 1000. El sensor de ultrasonidos envía una señal ultrasónica y espera hasta que esa señal haya rebotado en el objeto que se encuentre enfrente, y en base al tiempo transcurrido entre el envío de la señal y su recepción, podrá calcular la distancia a la que se encuentra el objeto. Pero el sensor se programa para que espere un determinado tiempo a recibir la señal de vuelta. Si transcurrido ese tiempo no se ha detectado la señal de vuelta (no hay un objeto cercano), se establece un valor de referencia, que en este caso es 1000.
Para poder observar el valor de la distancia que se obtiene podemos almacenarlo en una variable.
Crea una variable con el nombre distancia usando el botón Make variable que se encuentra en la sección Variables (naranja) de Snap4Arduino.
A partir de ese momento podrás ver el valor que contiene esa variable en la parte derecha de la ventana.
Para asignarle a esa variable el valor de la distancia que se obtenga desde el sensor debes añadir un bloque set (de la sección variables), seleccionar la variable distancia en su lista desplegable y preparar un bloque ping (cm) de la sección Arduino.
Establece los valores correspondientes para los pines Trig y Echo del bloque ping. En este ejemplo se están usando los pines 2 para Echo y 3 para Trig.
Arrastra el bloque ping dentro del bloque set, sustituyendo al valor 0 que aparecía, para que finalmente tengamos el bloque completo:
Ejecución del código
Para probar el código que has creado hasta el momento sigue estos pasos:
- Comprueba que está conectada al ordenador la placa Arduino con todo el circuito de conexión al sensor, y con el SA5Firmata instalado en la placa.
- Asegúrate de que Snap4Arduino está conectado con la placa, usando el botón Connect Arduino de la sección Arduino.
- Acerca la mano o algún objeto al sensor HC-SR04 (a la parte donde se encuentran los cilindros negros)
- Ejecuta el código haciendo clic sobre el conjunto de bloques que has editado (set distancia to ping ...)
Como resultado de la ejecución, se debería haber actualizar en la parte derecha de la pantalla el valor de la variable distancia, mostrando (aproximadamente) los centímetros de separación entre el sensor y el objeto que hayas situado frente a él.
Mejoras del código
Si quieres que las mediciones de la distancia se hagan repetidamente puedes meter el conjunto anterior dentro de un bloque de repetición como los que se ofrecen en la sección Control (amarillo), añadiendo alguna espera para que se muestre la información fija durante un tiempo. Por ejemplo, para que se realicen las mediciones de manera indefinida cada segundo:
Puedes parar la ejecución haciendo clic de nuevo sobre el conjunto de bloques que se está ejecutando.
Intenta editar un conjunto de bloques como este, para que se muestre un mensaje cuando se detecte que hay obstáculo cercano (con una distancia menor de 20 cm):
Para saber más
- El sensor ultrasónico en Snap4Arduino: https://mashumanoqueloshumanos.wordpress.com/2017/05/02/el-sensor-ultrasonico-en-snap4arduino/
- HC-SR04 on Snap4Arduino: http://ardupineda.blogspot.com/2017/04/hc-sr04-on-snap4arduino.html
- mdcanham/Snap4Arduino-Firmata: https://github.com/mdcanham/Snap4Arduino-Firmata