Arduino Opla IoT

Publicado por Loli Diéguez en

El nuevo Kit Arduino Oplà IoT es un conjunto de componentes con el que podremos crear hasta ocho aplicaciones conectadas que van desde el control remoto de las luces, del termostato o el control del inventario de productos y la gestión inteligente de nuestro jardín.

Además de ello tenemos una placa WiFi para dotar al producto de esa conectividad, una carcasa de plástico y varios accesorios como el sensor de movimiento o el de humedad.

Arduino Oplà es un completo kit de desarrollo de productos IoT capaz de producir prototipos elegantes y de aspecto profesional para aplicaciones inteligentes.

Su pequeña PCB circular está repleta de dispositivos y sensores. Hay 5 sensores táctiles capacitivos, una pantalla OLED a todo color, 5 LED RGB, zumbador, sensores ambientales para temperatura, humedad y presión, además de reconocimiento de luz y gestos y una IMU.

La placa portadora alberga la gama MKR de placas de microcontrolador Arduino SAMD 21 y el MKR WiFi 1010 está incluido en el kit, pero es posible cambiarlo por cualquiera de la otra familia MKR para ofrecer una gama flexible de opciones de conectividad como LoRa, NB-IoT o GSM.

Se incluye un clip de batería para una batería de iones de litio (no incluida) y hay 2 relés de 24 V integrados y conectores para 2 sensores analógicos Grove y 1 sensor externo I2C que dan acceso a más de 100 complementos adicionales, junto con una tarjeta SD. Se incluyen un sensor de humedad del suelo Grove externo, un sensor PIR y un cable de programación USB.

Todo está alojado en una atractiva caja translúcida con una placa trasera que se puede montar en la superficie o de forma independiente.

Además, el kit incluye 1 año de acceso gratuito a Arduino Web Editor para programar el dispositivo y Arduino IoT Cloud para crear tableros de IoT, además hay 8 proyectos creados específicamente con documentación en línea de alta calidad y ejemplos de código.

Para este proyecto, te guiaremos a través de la construcción de un dispositivo SMART alimentado por batería que se conecta a través de WiFi a la API del pronóstico de OpenWeather. Utiliza los sensores del panel táctil con indicadores LED pulsantes y retroalimentación táctil audible para mostrar el pronóstico del tiempo más reciente para tu área junto con la temperatura interior del sensor integrado.   

Arduino Oplà OpenWeather IoT

1. Montaje del juego

Todas las piezas necesarias están incluidas en el kit para este proyecto, excepto una batería de iones de litio de 3,7 V si deseas utilizar el Oplà de forma independiente. Arduino ha creado instrucciones muy claras para montar el kit Oplà que puedes encontrar aquí . 

A continuación te muestro una descripción general:

  • Conecta la placa MKR Wifi 1010 a los enchufes en la parte inferior de la placa portadora. Asegúrate de que las marcas de clavijas en el MKR 1010 coincidan con las del soporte.
  • Conecta el cable corto negro y rojo de 2 pines a los conectores del MKR 1010 y el portador.
  • Alinea la ranura del portador con el espaciador en la caja y atornilla los 3 tornillos de retención de cabeza cruzada.
  • Conecta el cable USB suministrado al MKR y tu PC.
Parte trasera del Arduino Opla

2. Editor web Arduino 

Con el kit Opla se incluye una suscripción gratuita de 1 año al entorno de desarrollo Arduino en línea. Esto incluye un editor web para escribir y construir su código Arduino C/C++. También incluye acceso a Arduino Cloud para crear paneles para tus dispositivos conectados.
Necesitarás una cuenta de Arduino y un agente de complemento instalado en tu PC: El editor también tiene algunas características interesantes como la coincidencia de paréntesis, el resaltado de errores y el monitor serial integrado. También tiene acceso a cientos de proyectos y bibliotecas de ejemplo.
Ahora puedes acceder a tus proyectos Arduino desde cualquier lugar y beneficiarte de tener las últimas versiones de la biblioteca siempre actualizadas.
Prueba que todo funciona, cargando el boceto Blink desde el menú Ejemplos.
Pantalla editor de Arduino

3. Servicio OpenWeather

 OpenWeather proporciona un servicio de pronóstico del tiempo que se puede integrar en tu proyecto de IoT mediante una API fácil de usar. El servicio tiene un nivel gratuito para desarrolladores, usamos su API de pronóstico por hora:

  • Visita openweathermap.org e inicia sesión o crea una cuenta.
  • Dirigete a la página de tu cuenta y haz una copia de la clave predeterminada. Se utilizará en su código para autenticar las solicitudes al servicio OpenWeather.

OpenWeather puede proporcionar pronósticos precisos en lugares de todo el mundo.

Pantalla con el pronóstico del tiempo

 

4. Diseño de aplicaciones 

Una vez que todos los componentes están en su lugar, se pueden agregar más detalles al diseño. Queremos crear una aplicación simple que pueda mostrar el pronóstico del tiempo y la temperatura exterior para nuestra ubicación y mostrar la temperatura interior. También queremos una interfaz de usuario limpia que sea intuitiva y fácil de usar.

El Oplà Kit viene con 8 proyectos listos para usar que cubren la mayoría de los aspectos de las funciones de la placa Carrier, por lo que puedes usarlos para comenzar a crear tus propias aplicaciones. Estas son las características que utilizamos en el proyecto:

Interfaz de usuario sensible al tacto con 3 funciones de visualización:

  • Actualiza el último pronóstico del tiempo y la temperatura exterior de OpenWeather.
  • Muestra la temperatura exterior.
  • Muestra la temperatura interior para el sensor integrado.

Alimentado por batería, así que ahorrarás energía

  • Conéctate a WiFi y desconéctate después de la actualización.
  • Apaga la luz de fondo de la pantalla OLED después del tiempo de espera.
  • Indica los paneles táctiles activos usando LED: pulso para ahorrar energía.

Pantalla de arranque con el logo de Arduino y colores personalizados

Pitido audible para retroalimentación táctil 

5. Código de configuración

El código fuente completo del proyecto está disponible en GitHub y se puede importar directamente al editor web de Arduino para probarlo o usarlo como base para tu propia aplicación.

Esta sección destaca parte del código de configuración que se ejecuta solo una vez al inicio.

Arduino ha creado una biblioteca dedicada, Arduino_MKRIoTCarrier para facilitar el uso de sensores y dispositivos a bordo. El encabezado de esta y las otras bibliotecas utilizadas se incluyen al principio. También se crea una instancia de la clase MKRIoTCarrier.

#include <Arduino_MKRIoTCarrier.h>
#include <WiFiNINA.h>
#include <Arduino_JSON.h>
#include "Images.h"
MKRIoTCarrier carrier;
...

Para usar los paneles táctiles con el estuche puesto, es necesario anular la configuración predeterminada utilizada en la biblioteca de Carrier para poder calibrar cada panel táctil individualmente. 

Haz esto usando el método updateConfig para todos los botones y luego anula cada botón individualmente. Los pads (botones) deben configurarse antes de llamar a carrier.begin . Configurar la sensibilidad de la almohadilla demasiado baja da como resultado que se activen toques aleatorios y configurarla demasiado alta hace que no responda.

 //CARRIER_CASE = true;
  carrier.Buttons.updateConfig(threshold);
  carrier.Button0.updateConfig(threshold_btn_0);
...
  carrier.begin();

El Editor web tiene una función especial si necesitas incrustar contraseñas y claves privadas en el código. Declarar una matriz de caracteres como SECRET_XXX hace que el editor crea un archivo de encabezado separado para contener los valores secretos. Estos se borran si alguna vez exportas tu boceto, lo cual es útil. Simplemente introduce tus propias credenciales wifi, clave OpenWeather y ubicación en la pestaña Secretos .

char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASSWD;

Cuando el dispositivo se inicia, queríamos mostrar el logotipo de Arduino (también puedes crear uno propio), por lo que se incluye al final de la configuración mediante el método drawBitmap . Los mapas de bits reales para el logotipo y el texto del logotipo se almacenan en un archivo separado (Images.h) y se cargan en la memoria flash para guardar SRAM. 

También sería posible almacenar imágenes en una tarjeta SD y cargarlas cuando sea necesario, por ejemplo, si deseas mostrar una imagen que represente el pronóstico actual.

carrier.display.drawBitmap(44, 60, ArduinoLogo, 152, 72, color);

Arduino Opla con el logo de Arduino

6. Bucle principal 

El bucle principal se ejecuta de forma continua y para que los paneles táctiles respondan, no deben bloquearse. Elegimos escribir esto como una máquina de estado usando una instrucción switch/case. La mayoría de las veces, el código está en el estado inicial que verifica los sensores táctiles. Si se detecta un toque, la próxima vez que pase por el bucle, el código cambiará al estado responsable de ejecutar las tareas asociadas con ese panel táctil. Una vez finalizadas dichas tareas, vuelve al estado inicial.

void loop() {
  switch (button_state) {
    case 0:
      ...
      carrier.Buttons.update(); // Check touch pads
      if (carrier.Button0.onTouchDown()) {
        button_state = 3;
      }
      ...

Algunos estados como la conexión WiFi deben completarse antes de que los paneles táctiles puedan volver a activarse.

case 1:
      showButtonLed(2);
      showText("Updating");
      connectWiFi();

La función changeState al final de cada declaración de caso vuelve al estado inicial. Descubrimos que era necesario un ligero retraso antes de volver a habilitar los paneles táctiles para lograr estabilidad. La función también restablece el temporizador de la luz de fondo para que se apague en un intervalo establecido después de regresar.

void changeState(const int state) {
  previous_t = millis();      
  button_state = state;
  delay(250); // Delay for stability 
}

Cuando se activa el panel táctil de actualización, el sistema se conecta a la Wifi. Se construye y envía una solicitud GET a la API de OpenWeather. La ubicación para el pronóstico del tiempo y la clave secreta se obtienen de las variables de matriz secretas.

void requestData() {
  if (client.connect(server, 80)) {
    // Make a HTTP request:
    client.print("GET ");
    client.print("/data/2.5/weather?q=");
    client.print(weather_loc);
...

La respuesta contiene el pronóstico del tiempo y la temperatura exterior como una cadena JSON. La función parseData analiza esto y extrae los objetos relevantes en variables para usar en la pantalla.

while (client.connected()) {
    line = client.readStringUntil('n');
    JSONVar myObject = JSON.parse(line);
     weather = JSON.stringify(myObject["weather"][0]["main"]);
...

El pronóstico del tiempo se muestra antes de desconectar la Wifi para ahorrar energía y volver al estado inicial.

Se escribieron varias funciones para la pantalla Oled para formatear bien la información. Establecen los colores de fondo, el texto y colocan el cursor antes de actualizar la pantalla.

void showWeather(String town, String weather) {
  carrier.display.fillScreen(ST77XX_BLUE);
  carrier.display.setCursor(60, 50);
  carrier.display.setTextColor(ST77XX_WHITE);
...

La placa tiene varios sensores a bordo, un sensor de temperatura y humedad, un sensor de luz, un acelerómetro y un giroscopio. También es posible conectar varios sensores Grove analógicos e I2C. Incluimos una función para leer el sensor de temperatura antes de mostrarlo.

void updateSensors() {
  temp_in = carrier.Env.readTemperature();
}

El elemento final a destacar son los LED pulsantes. El portador tiene 5 LED RGB colocados junto a los paneles táctiles que se pueden direccionar individualmente o como un conjunto.

Usamos la función de seno incorporada para variar el brillo de los LED para que parpadeen, indicando qué paneles táctiles están activos. Cada iteración del bucle principal aumenta ligeramente el brillo del LED hasta un valor máximo antes de volver a disminuirlo. Esto hace que el código parezca multitarea, pulsando los LED y detectando toques cuando en realidad las funciones están intercaladas.

void pulseLoop() {
  static unsigned int i = 0;
  const int max_brightness = 10;
  // Convert mod i degrees to radians
  float b = (i++ % 180) * PI / 180; 
  b = sin(b) * max_brightness;
...

Arduino Opla con la temperatura

 

7. Energía de la batería 

Este proyecto fue diseñado para funcionar con baterías para que Oplà pueda ser independiente.

  • Iniciar el ciclo begin y while para el monitor serial y carga.
//Serial.begin(9600);
 //while (!Serial);
  • Retira el cable USB.
  • Inserta una batería de iones de litio 18650 de 3,7 V en el clip de la batería asegurándote de que la polaridad sea la correcta.
  • Oplà mostrará la pantalla de inicio y comenzará a ejecutarse.
  • Fija la parte inferior de la caja.

Para cargar la batería, conecta el cable USB y el LED CHRG del MKR 1010 se encenderá. Se apagará una vez que se complete la carga. 

En resumen, el kit Oplà IoT es un excelente lugar para comenzar a construir dispositivos IoT funcionales que se ven y se sienten como productos reales.

Hay tanta funcionalidad, flexibilidad y posibilidades para crear dispositivos inteligentes para los cuales este proyecto es un buen ejemplo de trabajo.

Arduino se ha esforzado mucho tanto en el producto como en las bibliotecas de soporte y la documentación en línea para ayudar a principiantes y expertos a realizar tu próximo dispositivo inteligente IoT.

 


Compartir esta publicación



← Publicación más antigua Publicación más reciente →