Open Electronics publicó el 4 de noviembre la segunda entrega de su demoboard para el SoC ESP32, uno de los módulos WiFi más usados. En la primera parte, publicada a fines de octubre, la revista presentó la placa y empezó a describir el firmware y los ejemplos que escribió para acercar este hardware al desarrollo de aplicaciones de Internet de las cosas. Ahora sigue por ese camino con aplicaciones de demostración que usan el hardware de la placa y los módulos que se conectan desde afuera por sus conectores dedicados.
Como recordatorio, estos son los módulos que se pueden montar en la demoboard:
- sensor de calidad del aire, código SGP30CO2
- sensor de rayos, código FT1324M
- detector de gestos, código APDS9960BOUT
- sensor de radiación UVB, código GYLM8511
- sensor de presión, código BMP280
- lector NFC/RFID, código PN532
- sensor de turbidez, código TORBISENS
- sensor PIR, código PIRMOD o MINIPIRMOD
La segunda parte retoma donde quedó la primera y parte con el detector de gestos.
¿Cómo detecta gestos la demoboard?
Para esta aplicación se carga desde Arduino un firmware dedicado, OLED_Gesture.ino. El programa lee los datos del gesto de la mano que capta el detector APDS9960BOUT, ubicado en la posición U5 de la demoboard, y muestra en la pantalla las cuatro direcciones que puede reconocer (arriba, abajo, izquierda y derecha) según el movimiento que se haga.
Después de instalar el módulo U5 hay que copiar la carpeta "libraries" dentro de "/Documents/Arduino" (si no se cambió la carpeta por defecto). Luego se abre el Arduino IDE y desde el menú "File" se carga el ejemplo "Gesture/OLED_gesture.ino", que la revista reproduce completo en el Listado 1.
La tarjeta breakout que detecta los gestos se basa en el sensor RGB y de gestos APDS-9960. Trae filtros integrados contra UV e infrarrojo, cuatro diodos separados sensibles a distintas direcciones y una interfaz compatible con I²C. Con eso permite medir luz y color, y detectar proximidad y movimiento sin contacto a una distancia de entre 10 y 20 cm. El sensor reconoce los gestos a partir de la radiación luminosa.
En la demoboard se usan estos pines de la tarjeta. VL (alimentación opcional del LED infrarrojo), GND (tierra), VCC (alimentación de 3,3 V), SDA (datos I²C) y SCL (reloj I²C).
El código usa las librerías Adafruit_GFX, Adafruit_SSD1306 y SparkFun_APDS9960. Declara el pin 27 como entrada de interrupción del sensor y una pantalla SSD1306 de 128 por 64 píxeles en la dirección I²C 0x3C. Cuando el sensor informa un gesto disponible, la rutina limpia la pantalla y escribe UP, DOWN, LEFT, RIGHT, NEAR, FAR o NONE según lo que haya leído.
Un detector de rayos con el chip AS3935
La segunda aplicación del artículo combina la demoboard con una tarjeta breakout basada en el chip AS3935 de AMS. Es un componente capaz de captar las perturbaciones radioeléctricas que generan los arcos eléctricos, en particular las descargas atmosféricas (o sea, los rayos). Tras procesarlas, entrega una señal que corresponde a la detección de un rayo y a su intensidad. Todas las señales necesarias para manejar el circuito integrado salen por una fila de pads con paso de 2,54 mm en uno de sus lados, y la conexión de datos se hace por bus I²C o SPI.
La tarjeta se diseñó para trabajar junto a un microcontrolador y para usarse con hardware Arduino. El microcontrolador analiza y procesa la señal del sensor, y luego muestra en la pantalla OLED de la demoboard la cantidad de descargas detectadas y la distancia estimada. Hay librerías dedicadas, y una de ellas va incluida en el código que la revista escribió para este ejemplo. La tarjeta se alimenta con 5 V continuos, consume 50 mA y detecta descargas hasta a 40 km.
Para armar el ejemplo hay que copiar la carpeta "libraries" dentro de "/Documents/Arduino", abrir el Arduino IDE y cargar el ejemplo de la carpeta "Sens_Fulmini". Ese código envía a la salida serial un aviso por cada rayo captado o por las perturbaciones de origen eléctrico que trae una tormenta. Para ver lo mismo también en la pantalla de la demoboard hay que cargar el ejemplo OLED_Sens_Fulmini (Listado 2), que muestra los avisos en la pantalla y en la salida serial a la vez.
Qué hace el código del sensor de rayos
El Listado 2 usa la librería SparkFun_AS3935 con el sensor en la dirección 0x03 y toma el pin 35 como interrupción. Ese pin pasa a nivel alto cuando el sensor detecta un evento, y entonces el programa lee el registro de interrupciones para saber qué ocurrió. Hay tres casos.
- Ruido, que se muestra como "Noise detected" y se puede filtrar subiendo el nivel de ruido.
- Perturbador, una señal que no es un rayo, que aparece como "Disturber detected". El programa sube el umbral del watchdog a 10 para rechazar mejor estas falsas alarmas.
- Rayo, en cuyo caso el código consulta la distancia a la tormenta. La estimación toma en cuenta los eventos de los últimos 15 segundos.
El sensor viene configurado por defecto para uso en interiores, con menos sensibilidad. Si se va a usar al aire libre, basta con descomentar la línea que activa el modo exterior. El bucle principal hace una pausa de 500 ms entre lecturas.






