InicioMAKERSDIYCrea tu propia mascara con Leds y Bleetle BLE para este Halloween

Crea tu propia mascara con Leds y Bleetle BLE para este Halloween

En este tutorial utilizaremos el Beetle BLE ATmega328 + Bluetooth 4.0 dispositivo de la familia DF Robot para poder controlar por vía Bluetooth la configuración de luces Neopixel tipo RGB e integrarlos en una mascara y poder te puedas lucir en las festividades de Halloween o Día de los Muertos.

Para esto requeriremos:

Diagrama de Conexión

Como puedes revisar usaremos 2 Neopixel circulares para que se utilicen en el contorno de los ojos de la mascara. El dispositivo Beetle es muy parecido al Arduino UNO, pero contando con 2 ventajas: ser mas pequeño y contar con conexión Bluetooth. Finalmente utilizaremos una Power Bank (5V a 2200mA) para poder alimentar de forma independiente a nuestro sistema.

Instalación Basica Bluno

El control del Beetle Ble via Bluetooth para lo cual se requerirá instalar el siguiente archivo APK en su dispositivo Android:

  • Archivo APK : BlunoBasicDemo
  • Ejecute la aplicación y siga los siguientes pasos para realizar la conexión entre dispositivos.

Ahora si contamos con nuestro sistema para poder proceder a programar los modos de encendido en los Led RGB Neopixel.

Código de control de Neopixeles

El siguiente programa tiene la siguiente estructura:

  • Definición de librería para el uso de Neopixel, pin del Beetle Ble y variables.
  • Inicialización
  • Dentro de la función loop, tendremos que se captara el dato enviado desde nuestro dispositivo Android y se guardara en la variable “opcion”
  • Dependiendo la “opcion” que sea se realizara una secuencia de encendido de los led RGB
  • Los valores que el usuario tendrá que mandar serán del 0 al 3
                                                                           
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>                    //16 MHz Adafruit Trinket
#endif 
#define led 5                             //Definimos Pin Digital 5 para datos de salida para la Neopixel Circular
#define NUMPIXELS 32                      //Se declara el uso de los 32 pixeles de Neopixel Circular(16x2)
Adafruit_NeoPixel pixel(NUMPIXELS, led, NEO_GRB + NEO_KHZ800);


int b;
byte opcion;

void setup() {
  Serial.begin (115200);                              //Velocidad del Serial en 115200 bauds
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)  //Se definen los parámetros para que los leds de la Neopixel funcionen a 16 MHZ
  clock_prescale_set(clock_div_1);
#endif
  pixel.begin();                                      //se inicializa Neopixel
}

void loop() {

  if (Serial.available()) {          //Condición para saber si se ha habilitado la comunicación
    opcion = Serial.read();          //La variable opción, guardara la información que recibe vía bluetooth
    Serial.println(opcion);          //Imprime el dato recibido



    if (opcion == 48) {                                 // si el dato recibido fue 0 , data=48
      Serial.println("OFF");                            // Instrucción para apagar todos los led de la Neopixel
      for (int b = 0; b < NUMPIXELS; b++) {             //Se ejecuta una instrucción FOR para apagar uno a uno de los leds
        pixel.setPixelColor(b, pixel.Color(0, 0, 0));   //cada led tendrá un valor RGB (0,0,0)
        pixel.show();                                  //se mostrara dichos valores en la iluminación de los leds

      }
    }

    else if (opcion == 49) {                           //en caso de que sea 1 , data =49
      Serial.println("Arcoiris");                      //realizara la secuencia de iluminación tipo arcoíris

      pixel.setBrightness(10);                         //con un valor para el brillo de 10 (max 50)
//función que realizara una repetición de 500 veces
      for (int a = 0; a < 500; a++) {
//instrucción FOR para proyectar todos los colores en Neopixel, 65536 es el numero total de pixeles por 16 bits
        for (long firstPixelHue = 0; firstPixelHue < 5 * 65536; firstPixelHue += 256) {

//instrucción para encender led por led en incremento con toda la gama de colores posibles dentro de 16 bits
          for (int i = 0; i < pixel.numPixels(); i++) {
            int pixelHue = firstPixelHue + (i * 65536L / pixel.numPixels());
            pixel.setPixelColor(i, pixel.gamma32(pixel.ColorHSV(pixelHue)));
          }
          pixel.show();                                //se encenderá la Neopixel
          delay(5);                                    //pausa de 5 milisegundos para repetir rutina
        }
      }
    }

      else if (opcion == 50) {                        //en caso de que reciba 2, data=50
        Serial.println("Orange Blink");              //realizara la secuencia llamada "Orange Blink"

        pixel.setBrightness(10);                    //en un brillo con valor a 10
//función que realizara una repetición de 500 veces
    for (int a = 0; a < 500; a++) {
//función que nos ayudara a que el avance de encendido sea cada 2 leds
        for (int b = 0; b < 2; b++) {
            pixel.clear();                            //se limpia la RAM de la matriz , para obtener el apagado del le
          for (int c = b; c < pixel.numPixels(); c += 2) {
              pixel.setPixelColor(c, 255, 128, 0); // los led tendrán un valor RGB(255,128,0)~Naranja~
            }
            pixel.show();                          // mostrara la iluminación de los led con la información dada
            delay(120);                            // Pausa de 120 milisegundos
          }
        }
      }

      else if (opcion == 51) {                     //en caso de que el valor obtenido sea 3, data 51
        Serial.println("Orange Blinkx2");          //Se realizara la secuencia Orange Blinkx2
        for (int a = 0; a < 50; a++) {
          for (int i = 0; i < pixel.numPixels(); i++) {             // Cada led del Neopixel.
            pixel.clear();                                          //...se encenderá
            pixel.setPixelColor(i, pixel.Color(255, 128, 0));       // color RGB(255,128,0)~NARANJA~
            pixel.show();                                           //...se mostrara
            delay(50);                                              //espera de 50 milisegundos
          }
        }
      }
      else {
        Serial.println("None");
        for (int b = 0; b < NUMPIXELS; b++) {                 //Se ejecuta una instrucción FOR para apagar uno a uno de los leds
          pixel.setPixelColor(b, pixel.Color(0, 0, 0));       //cada led tendrá un valor RGB (0,0,0)
          pixel.show();
        }
      }
    }
  }                                            

Debido a que la variable “opcion” es tipo byte, cuando se coloquen los valores de 0 al 3, sus homólogos en byte serán del 48 al 51.

Como se puede apreciar en el video, cada vez que se cambia el modo en la aplicación de BlunoBasicDemo, la iluminación de los leds será dinámica.

Bibliografia

DFR0267 Bluno, wiki DF Robot, Wireless Programming via BLE

TUTORIALES RELACIONADOS