Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Creador de secuencias de luz

Componentes y suministros

Arduino UNO
× 1
Breadboard (genérico)
× 2
Cables de puente (genéricos)
× 55
74HC595 Shift Register
× 1
botón
× 4
Potenciómetro giratorio (genérico)
× 1
LED (genérico)
× 8
Resistencia 221 ohm
× 9
Resistencia de 10k ohmios
× 4

Herramientas y máquinas necesarias

manos

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Me he estado divirtiendo con luces y matrices y pensé que haría uso del registro de desplazamiento y la pantalla LCD para crear un programa en el que puedas modificar y mostrar tus animaciones de luz sin tener que entrar en el código y crear una animación a mano. cada vez.

Hay 4 botones, de izquierda a derecha están numerados del 1 al 4. Le permiten navegar por el menú y cambiar las variables. El botón 1 se usa para incrementar valores y para cambiar el estado de una luz a ALTO. El botón 2 se usa para disminuir valores y para cambiar el estado de una luz a BAJO. El botón 3 puede mover el cursor hacia atrás mientras se hace un marco, y el botón 4 se usa como botón de 'retroceso'.

El programa puede modificar la velocidad de la animación y la cantidad de veces que se repetirá. Podría lanzar otra versión que permita múltiples animaciones.

Puede cambiar los marcos cambiando ARR_SIZE en la parte superior del código

Disfruta

Código

  • Secuenciador de luz
Secuenciador ligero C / C ++
Conecte este código y ejecútelo, si el cableado es correcto, ¡NO debería tener problemas!
Enjoy
 #include  #define ARR_SIZE 16 // CAMBIAR esto a cualquier número de fotogramas # define LIGHTS 8 // Controla el botón del juego inputconst int btn1 =7, btn2 =8, btn3 =9, btn4 =10; // Variable para leer el estado del pulsador bs1 =0, bs2 =0, bs3 =0, bs4 =0; // Pin conectado a ST_CP de 74HC595const int latchPin =11; // Pin conectado a SH_CP de 74HC595const int clockPin =13; // Pin conectado al DS de 74HC595const int dataPin =12; // Titulares de la información que vas a pasar por datos; // Se usa para leer 1 o 0bool ArrOne [ARR_SIZE] [LIGHTS] ={false}; // animación // Traducido para el registro como bytesbyte lightArrOne [ARR_SIZE] ={0xFF}; // Variables para afectar la animaciónint animSpeed ​​=50; // ms entre cada frameint loopCount =5; // cantidad de veces que se ejecutará // Controla los valores de LCD const int rs =15, en =14, d4 =3, d5 =4, d6 =5, d7 =6; LiquidCrystal lcd (rs, en, d4, d5, d6 , d7); void setup () {// Establece cada botón en pinMode (btn1, INPUT_PULLUP); pinMode (btn2, INPUT_PULLUP); pinMode (btn3, INPUT_PULLUP); pinMode (btn4, INPUT_PULLUP); // Configure el número de columnas y filas de la pantalla LCD:lcd.begin (16, 2); // Establecer registro latch pinMode (latchPin, OUTPUT); PrintMenu ();} bucle vacío () {bs1 =digitalRead (btn1); bs2 =digitalRead (btn2); bs3 =digitalRead (btn3); bs4 =digitalRead (btn4); // Reproduce el anim if (bs1 ==HIGH) {bs1 =LOW; // solo se usa para evitar un retraso de entrada malo / doble (150); Tocar(); // Modifica el anim} else if (bs2 ==HIGH) {bs2 =LOW; retraso (150); Crear (ArrOne); // Cambia la velocidad del anim} else if (bs3 ==HIGH) {bs3 =LOW; retraso (150); Velocidad fijada(); // Cambia el número de veces que se reproducirá el anim} else if (bs4 ==HIGH) {bs4 =LOW; retraso (150); SetLoop (); } PrintMenu (); delay (150);} // Función para imprimir información para el menú principal. void PrintMenu () {ClearScreen (); lcd.print ("1 reproducción de 3 velocidades"); lcd.setCursor (0, 1); lcd.print ("2-Create 4-Loops");} // Función para imprimir información para crear un framevoid PrintCreate (bool Arr [] [LIGHTS], int frame, int _bit) {ClearScreen (); lcd.print ("Marco:"); lcd.print (marco + 1); if (marco <9) lcd.print (""); para (int j =0; j <_bit; j ++) lcd.print (""); lcd.print ("v"); lcd.setCursor (0, 1); lcd.print (""); for (int j =0; j <8; j ++) lcd.print (Arr [frame] [j]);} // Función para imprimir información para configurar el speedvoid PrintSetSpeed ​​() {ClearScreen (); lcd.print ("Establecer velocidad (ms)"); lcd.setCursor (0, 1); lcd.print (animSpeed);} // Función para imprimir información para cambiar el número de bucles de animaciónvoid PrintSetLoop () {ClearScreen (); lcd.print ("Establecer recuento de bucles"); lcd.setCursor (0, 1); lcd.print (loopCount);} // Función para reproducir la animación con los parámetros dadosvoid Play () {// La animación for (int count =0; count  0) {b =LIGHTS-1; marco--; } bs1 =digitalRead (btn1); bs2 =digitalRead (btn2); bs3 =digitalRead (btn3); bs4 =digitalRead (btn4); if (bs1 ==ALTO) {retraso (150); Arr [fotograma] [b] =verdadero; b ++; } más si (bs2 ==ALTO) {retraso (150); Arr [fotograma] [b] =falso; b ++; } más si (bs3 ==ALTO) {retraso (150); B--; } más si (bs4 ==ALTO) {retraso (150); dejando =verdadero; } retraso (10); } PrintCreate (Arr, frame, b); IntToHexToByte (Arr); retraso (500); }} // Función para convertir la matriz en un byte para que el registro readvoid IntToHexToByte (bool Arr [] [LIGHTS]) {for (int fila =0; fila  1) animSpeed--; } // Incrementa la velocidad if (bs4 ==HIGH) {delay (150); dejando =verdadero; } retraso (30); }} // Función para cambiar el número de veces que el anim loopsvoid SetLoop () {bool dejando =falso; while (! dejando) {PrintSetLoop (); bs1 =digitalRead (btn1); bs2 =digitalRead (btn2); bs3 =digitalRead (btn3); bs4 =digitalRead (btn4); if (bs1 ==ALTO) {retraso (10); loopCount ++; } if (bs2 ==ALTO) {retraso (10); if (animSpeed> 1) loopCount--; } if (bs4 ==ALTO) {retraso (150); dejando =verdadero; } retraso (30); }} // Función para cambiar realmente los bits en el registro. baja // configuración de la función interna int i =0; int pinState; pinMode (myClockPin, SALIDA); pinMode (myDataPin, SALIDA); // borra todo por si acaso // prepara el registro de desplazamiento para el desplazamiento de bits digitalWrite (myDataPin, 0); escritura digital (myClockPin, 0); // Cada bit en el byte myDataOut for (i =7; i> =0; i--) {digitalWrite (myClockPin, 0); if (myDataOut &(1 <  

Esquemas

Siga las líneas con cuidado, debido a las limitaciones en la longitud de las resistencias en el programa, y ​​por motivos de legibilidad, no pude compactarlo de la misma manera que lo hice en mi construcción real. Después de construir, te desafío a que encuentres formas de limpiarlo.

Proceso de manufactura

  1. TinyML-Language Detector basado en Edge Impulse y Arduino
  2. Juego de giroscopio Arduino con MPU-6050
  3. Dados digitales Arduino
  4. Juego de ruleta DIY 37 LED
  5. ATtiny85 Mini Arcade:Serpiente
  6. Detector de alcance portátil
  7. Luz de escritorio reactiva de audio Arduino
  8. Coche robot inteligente de seguimiento facial
  9. Galvanoplastia con cobre
  10. NeoMatrix Arduino Pong
  11. Pick to Light Project 2 WiFi