Imprimir

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:

Captura de pantalla 2019 06 23 a las 21.26.41 d1819 Captura de pantalla 2019 06 23 a las 21.24.52 cb81f

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:

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.

Captura de pantalla 2019 06 23 a las 21.40.47 680d9

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.

Captura de pantalla 2019 06 23 a las 21.49.14 a6cde

A partir de ese momento podrás ver el valor que contiene esa variable en la parte derecha de la ventana.

Captura de pantalla 2019 06 23 a las 21.50.39 4c8d0

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.

Captura de pantalla 2019 06 23 a las 21.55.04 0a453

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:

Captura de pantalla 2019 06 23 a las 21.55.16 d0ee5

Ejecución del código

Para probar el código que has creado hasta el momento sigue estos pasos:

  1. 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.
  2. Asegúrate de que Snap4Arduino está conectado con la placa, usando el botón Connect Arduino de la sección Arduino.
  3. Acerca la mano o algún objeto al sensor HC-SR04 (a la parte donde se encuentran los cilindros negros)
  4. 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.

Captura de pantalla 2019 06 23 a las 22.09.50 c9341

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:

Captura de pantalla 2019 06 23 a las 22.14.10 e483b

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

Captura de pantalla 2019 06 23 a las 22.17.38 d801f 

Para saber más