Programación de LED WS2812B con ATtiny85

Presentamos la alternativa de Arduino notablemente económica, el ATtiny85 en otra publicación de blog, por lo que este tutorial asume que ha seguido los pasos en esa publicación para configurar su ATtiny85 y el IDE de Arduino.

En este tutorial, profundizaremos un poco más en lo que podemos lograr usando ATtiny85 y Arduino IDE. Crearemos un guión que controlará cualquier longitud o forma de neopíxeles y crearemos un espectáculo de luces aleatorio para nuestro entretenimiento, ¡especialmente útil para Halloween, Acción de Gracias y Navidad!

Para este proyecto, necesitarás

  • Un ATtiny85
  • neopíxeles
  • Jumper jerky para conectar el ATtiny85 a Neopixels

Todo el código de este proyecto se puede descargar desde nuestro repositorio de GitHub https://github.com/lesp/ATtiny85—Random-Pixels/archive/master.zip

¡Advertencia!

Los NeoPixels son muy brillantes y pueden causar dolores de cabeza si se usan durante demasiado tiempo. No los mire directamente, utilice un trozo de papel de un material translúcido para difundir la luz. Cualquier persona con fotosensibilidad o una forma de epilepsia no debería intentar este proyecto.

Hardware

Comenzamos el proyecto construyendo el circuito. Afortunadamente, solo hay que hacer tres conexiones. Usamos una tira de neopíxeles con solo ocho píxeles, pero esta compilación se puede aplicar a compilaciones mucho más grandes, solo necesitará aplicar una fuente de alimentación externa de 5 V a la longitud de los neopíxeles y asegurarse de que la GND de la fuente de alimentación esté conectada a la GND. del ATtiny85.

Para nuestra pequeña construcción, conectamos el circuito como tal.

Software

Abra el IDE de Arduino para que tenga un boceto nuevo con el que trabajar.

Para usar Neopixels (WS2812B) con el IDE de Arduino, primero debemos instalar su biblioteca, hacer clic en Boceto >> Incluir biblioteca >> Administrar bibliotecas… para abrir el Administrador de bibliotecas. En el cuadro de búsqueda, en la parte superior derecha de la ventana, escriba Adafruit Neopixel y luego seleccione Adafruit NeoPixel de Adafruit Versión 1.1.2 o superior e instálelo.

Una vez que se completa la instalación, podemos cerrar la ventana y volver a nuestro boceto. Comencemos a escribir el código para este proyecto, y la primera línea que debemos escribir es incluir la biblioteca Adafruit NeoPixel.

#include

Ahora pasemos a crear un entero largo que será nuestro número aleatorio.

long randNumber;

Ahora definamos las variables, el pin al que están conectados nuestros NeoPixels, y luego la cantidad de píxeles en la tira y guardemos eso en una variable.

#define PIN            4

#define NUMPIXELS      8

Usando las variables que acabamos de crear, ahora llamamos a la función Adafruit NeoPixel y le pasamos los detalles de nuestra configuración.

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

Para que podamos controlar la velocidad a la que se actualizará nuestra franja NeoPixel, creamos una variable que almacenará un número entero que será la duración en milisegundos que el código debe hacer una pausa entre cada cambio de píxel. Aquí lo configuramos a 1/10 de segundo, 100ms.

int delayval = 100;

Pasando a la parte de configuración del código, ahora configuramos nuestros NeoPixels listos para usar y luego generamos una semilla aleatoria para nuestro generador de números aleatorios basado en un valor generado por una lectura analógica en un pin desconectado, en este caso, P0 de nuestro ATtiny85. ¿Por qué hacemos esto? Bueno, nos permite reducir la posibilidad de que se ejecute la misma secuencia de luces cada vez.

void setup() {

  pixels.begin();

  randomSeed(analogRead(0));

}

Para que el código se ejecute de forma autónoma, debemos colocarlo dentro de un bucle, y el IDE de Arduino nos proporciona un bucle listo para usar. Dentro del bucle creamos tres nuevas variables llamadas r,g,b y estas almacenan valores enteros generados por nuestro generador de números aleatorios. NeoPixels puede usar un valor entre 0 y 255 para controlar el brillo/intensidad. El valor 0 indica que el color en particular no está encendido, mientras que 255 indica que el color tiene el máximo brillo/intensidad. Un valor de 128 es un valor medio que nos ofrece mucha luz y es agradable a la vista. Recuerda que los NeoPixels son muy brillantes, así que ten cuidado al usarlos.

void loop() {

  int r = random(128);

  int g = random(128);

  int b = random(128);

Todavía dentro del ciclo y ahora necesitamos usar un ciclo for que iterará sobre cada píxel en nuestra cadena. Para esto, usamos un número entero, lo ponemos a cero y lo almacenamos en la variable “i”. Cada vez que itera el bucle for, mientras sea menor que el número de píxeles, el valor de i aumenta en 1.

    for(int i=0;i<NUMPIXELS;i++){

Pero, ¿qué queremos que haga el código dentro del ciclo for? Bueno, en primer lugar, nos gustaría establecer el color de cada píxel («i») en la tira utilizando los valores generados aleatoriamente almacenados en nuestras variables (r, g, b). Luego necesitamos actualizar la tira para mostrar el cambio de color, pero introducimos un retraso usando la variable «delayval» que creamos anteriormente.

    for(int i=0;i<NUMPIXELS;i++){

      pixels.setPixelColor(i, pixels.Color(r,g,b));

      pixels.show(); // This sends the updated pixel color to the hardware.

      delay(delayval); // Delay for a period of time (in milliseconds).

  }

}

Su código ahora está completo y listo para ser enviado a ATtiny. Primero haga clic en la «marca» para verificar que el código sea correcto. Luego haga clic en la Flecha (o Bosquejo >> Cargar) para cargar el código en el tablero. Recuerde conectar el ATtiny85 cuando se le indique, de lo contrario, recibirá un error.

También probamos el proyecto en nuestra máquina con Windows 10 y podemos confirmar que todo funciona como se esperaba.

¡Ahora puede alimentar su proyecto desde una fuente de alimentación USB/banco de energía o un puerto USB de repuesto en su computadora! ¡Disfruta de tu nuevo espectáculo de luces aleatorias NeoPixel, ATtiny85!