Introducción
En este tutorial vamos a crear un enchufe de corriente “inteligente” WiFi para poder activar o desactivar la luz de una lámpara remotamente mediante el uso de comandos de voz utilizando el asistente de voz de Google.
Para realizar este proyecto vamos a utilizar el servicio Web IFTTT («IF This, Then That», lo que traducido al español significaría «Si Esto, Entonces Aquello»).
Este servicio nos permite crear/programar acciones entre diferentes aplicaciones. En nuestro caso vincularemos el asistente de voz de Google con el Adafruit IO Cloud.
El funcionamiento será el siguiente:
Utilizando el asistente de voz de Google y al decir el comando de voz “encender la luz o encender luz” se grabará en un “feed” del Adafruit IO Cloud el valor “ON” y cuando digamos “apagar la luz o apagar luz” se grabará el valor “OFF”.
Estos valores a su vez serán leídos continuamente mediante una placa MKR WiFi 1010 de Arduino. Si el valor leído es “ON” se activará un relé que hará que se encienda la luz de lámpara (se cerrará el circuito) por el contrario si el valor es “OFF” se apagará la luz de la lámpara (se abrirá el circuito).
Listado de componentes
-
- Arduino MKR WiFi 1010.
- Arduino MKR Connector Carrier.
- KS0011 Keyestudio 5V Relé o equivalente.
- 2 pilas Panasonic NCR18650B de Li-Ion recargables ( 3400 mAh, 3.7V).
- Portapilas para dos pilas 18650 con cable alimentación.
- Cable conversor de 4 pines hembra de conector Grove a Dupont.
- Cables de electricidad (fase, neutro, tierra).
- Regletas de conexión eléctrica.
- Caja de conexión eléctrica.
- Clavija eléctrica macho 220 VCA.
- Clavija eléctrica hembra 220 VCA.
- Madera de 3 mm de espesor.
- Separadores y tornillería de Métrica 3.
Adafruit IO Cloud
Lo primero que tendremos que realizar es crear en el Adafruit IO Cloud un Feed.
Paso 1: Ir al Adafruit IO Cloud: https://io.adafruit.com/
Paso 2: Crearemos un “feed” llamado “ON_OFF” dentro del “grupo” DEFAULT (grupo que existe por defecto).
Para saber como crear “feeds”:
https://learn.adafruit.com/adafruit-io-basics-feeds/overview
Paso 3: Modificaremos la propiedad “Feed History” para que no guarde el historial de valores de este Feed ya que para este proyecto no es necesario. Para ello pondremos a “OFF” esta propiedad.
Una vez creado el Feed ya podemos crear las acciones necesarias en la Web de IFTTT.
IFTTT
Paso 1: Ir a la Web de IFTTT: https://ifttt.com
Paso 2: Crearemos dos acciones, una para apagar la luz y otra para encender la luz.
Para crear el servicio que hará que se apague la luz seguiremos los siguientes pasos que se muestran en las siguientes imágenes:
Para crear el servicio que hará que se encienda la luz realizaremos los mismos pasos pero cambiando los siguientes parámetros de las siguientes pantallas:
Si todo lo hemos realizado correctamente tendremos dentro de la sección de “My Applets” las dos acciones anteriormente creadas:
Conexionado
El circuito que montaremos será como el que se muestra en la siguiente imagen:
El circuito estará formado por los siguientes elementos:
-
- Arduino MKR WiFi 1010.
- Arduino MKR Connector Carrier.
- KS0011 Keyestudio 5V relé o equivalente.
- 2 pilas Panasonic NCR18650B de Li-Ion recargables ( 3400 mAh, 3.7V).
- Portapilas para dos pilas 18650 con cable alimentación.
- Cable conversor de 4 pines hembra de conector Grove a Dupont.
Alimentaremos la MKR Connector Carrier con 2 pilas Panasonic NCR18650B de Li-Ion recargables ( 3400 mAh, 3.7V) a través de los pines de la regleta de conexión etiquetados como GND y VIN. Por otro lado conectaremos el conector etiquetado como D0 al módulo relé de 5V mediante un cable conversor de 4 pines hembra de conector Grove a Dupont (solo necesitaremos 3 de los 4 cables).
El conector D0 tiene un conector Grove estándar de cuatro pines y por normal general los cables que se conectan a estos conectores tienen cuatro colores estándar:
-
- pin 1 – Amarillo (salida/entrada digital primaria)
- pin 2 – Blanco (salida/entrada digital secundaria)
- pin 3 – Rojo – VCC
- pin 4 – Negro – GND
En nuestro caso la conexión entre el conector D0 de la MKR Connector Carrier y el Módulo Relé de 5V será de la siguiente manera:
Conector GROVE D0 MKR Connector Carrier | Pin Módulo Relé 5V |
pin 1 – cable amarillo (i/o) | S (Señal) |
pin 3- cable Rojo (VCC) | + (VCC) |
pin 4 – cable Negro (GND) | – (GND) |
NOTA: El Arduino MKR WiFi 1010 solo suministra 3,3V en las salida de sus pines por eso necesitamos la MKR Connector Carrier la cual proporcionará los 5V necesarios en todos los pines de salida de sus conectores (además de los 5V y GND en los pines de alimentación). Estos 5V son necesarios para el correcto funcionamiento del módulo Relé de 5V.
Una vez visto el circuito que tenemos que montar fijaremos todos estos componentes a un soporte de madera de 3 mm de espesor para finalmente introducir todo el conjunto en la caja de conexión eléctrica.
NOTA: Para fijar la MKR Connector Carrier y el módulo Relé de 5V al soporte de madera utilizaremos separadores hexagonales de 20 mm de M3 para de esta manera dejar espacio en la parte inferior de estos módulos para el paso de los cables.
Utilizaremos del módulo Relé de 5V los pines N.C (normalmente cerrado) y los conectaremos a la regleta de conexión de la siguiente manera:
Ahora solo faltará conectar en la regleta de conexión los cables de corriente (fase, neutro y tierra) y poner todo el conjunto dentro de la caja de conexión eléctrica:
Programación
Como se comentó al principio del tutorial utilizaremos una placa MKR WiFi 1010 de Arduino para leer el valor del Feed del Adafruit IO Cloud. Si el valor leído es “ON” se activará un relé que hará que se encienda la luz de lámpara (se cerrará el circuito) por el contrario si el valor es “OFF” se apagará la luz de la lámpara (se abrirá el circuito).
Para recoger el valor del “feed” que indica si se tiene que apagar (“OFF”) o encender la luz ( “ON”) utilizaremos la opción de coger el último valor de un feed del Adafruit IO REST API (v2.0.0) utilizando la librería WiFiNINA.
Si miramos la documentación del API vemos que para coger esta información necesitamos hacer la siguiente llamada:
GET: /api/v2/{username}/feeds/{feed_key}/data/last
… y deserializar un JSON con la siguiente estructura:
{ "id": "string", "value": "string", "feed_id": 0, "group_id": 0, "expiration": "string", "lat": 0, "lon": 0, "ele": 0, "completed_at": "string", "created_at": "string", "updated_at": "string", "created_epoch": 0 }
Para deserializar los datos del JSON devuelto utilizaremos la librería “ArduinoJson”:
https://arduinojson.org/v6/doc/deserialization/
Finalmente cargaremos en la placa MKR el sketch del siguiente repositorio y comprobaremos que al variar el valor del Feed (“ON/OFF”) utilizando el asistente de voz de Google provoca que el relé se active o desactive provocando el apagado / encendido de la lámpara:
https://github.com/avilmaru/iot_arduino_adafruit/tree/master/onoff_getfromadafruit_iotcloud
NOTA: Recordad que que teneis que cambiar los siguientes valores por los vuestros:
arduino_secrets.h #define SECRET_SSID "XXX" #define SECRET_PASS "YYY” #define IO_USERNAME "ZZZZ" #define IO_KEY "XXXX"