Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Criador de sequência de luzes

Componentes e suprimentos

Arduino UNO
× 1
Breadboard (genérico)
× 2
Fios de jumpers (genérico)
× 55
74HC595 Shift Register
× 1
botão
× 4
Potenciômetro rotativo (genérico)
× 1
LED (genérico)
× 8
Resistor 221 ohm
× 9
Resistor 10k ohm
× 4

Ferramentas e máquinas necessárias

mãos

Aplicativos e serviços online

Arduino IDE

Sobre este projeto


Tenho me divertido com luzes e matrizes e pensei em usar o shift register e a tela LCD para criar um programa no qual você pode modificar e exibir suas animações de luz sem ter que entrar no código e criar uma animação à mão cada vez.

Existem 4 botões, da esquerda para a direita, eles são numerados de 1 a 4. Eles permitem que você navegue no menu e altere as variáveis. O botão 1 é usado para aumentar os valores e para transformar o estado de uma luz em ALTO. O botão 2 é usado para diminuir os valores e para transformar o estado de uma luz em BAIXO. O botão 3 pode mover o cursor para trás enquanto cria um quadro, e o botão 4 é usado como um botão 'voltar'.

O programa pode modificar a velocidade da animação e a quantidade de vezes que ela será repetida. Posso lançar outra versão permitindo várias animações.

Você pode alterar os quadros alterando o ARR_SIZE no topo do código

Aproveitar

Código

  • Sequenciador de luz
Sequenciador de luz C / C ++
Conecte este código e execute-o. Se a fiação estiver correta, NÃO deve haver problemas!
Aproveite
 #include  #define ARR_SIZE 16 // ALTERE para qualquer número de frames # define LIGHTS 8 // Controla o botão do jogo inputsconst int btn1 =7, btn2 =8, btn3 =9, btn4 =10; // Variável para ler o botão statusint bs1 =0, bs2 =0, bs3 =0, bs4 =0; // Pino conectado a ST_CP de 74HC595const int latchPin =11; // Pino conectado a SH_CP de 74HC595const int clockPin =13; // Pino conectado ao DS de 74HC595const int dataPin =12; // Detentores das informações que você vai passar os dados; // Usado para ler 1 ou 0bool ArrOne [ARR_SIZE] [LIGHTS] ={false}; // animação // Traduzida para o registro como bytesbyte lightArrOne [ARR_SIZE] ={0xFF}; // Variáveis ​​que afetam a animaçãoint animSpeed ​​=50; // ms entre cada frameint loopCount =5; // quantidade de vezes que ele será executado // Controles LCD Valuesconst int rs =15, en =14, d4 =3, d5 =4, d6 =5, d7 =6; LiquidCrystal lcd (rs, en, d4, d5, d6 , d7); void setup () {// Configure cada botão pinMode (btn1, INPUT_PULLUP); pinMode (btn2, INPUT_PULLUP); pinMode (btn3, INPUT_PULLUP); pinMode (btn4, INPUT_PULLUP); // Configure o número de colunas e linhas do LCD:lcd.begin (16, 2); // Define a trava de registro pinMode (latchPin, OUTPUT); PrintMenu ();} void loop () {bs1 =digitalRead (btn1); bs2 =digitalRead (btn2); bs3 =digitalRead (btn3); bs4 =digitalRead (btn4); // Toca o anim if (bs1 ==HIGH) {bs1 =LOW; // usado apenas para prevenir atraso de entrada dupla / ruim (150); Toque(); // Modifica o anim} else if (bs2 ==HIGH) {bs2 =LOW; atraso (150); Criar (ArrOne); // Altera a velocidade do anim} else if (bs3 ==HIGH) {bs3 =LOW; atraso (150); SetSpeed ​​(); // Altera o número de vezes que o anim vai tocar} else if (bs4 ==HIGH) {bs4 =LOW; atraso (150); SetLoop (); } PrintMenu (); delay (150);} // Função para imprimir informações para o menu principalvoid PrintMenu () {ClearScreen (); lcd.print ("1-Play 3-Speed"); lcd.setCursor (0, 1); lcd.print ("2-Create 4-Loops");} // Função para imprimir informações para criar um framevoid PrintCreate (bool Arr [] [LIGHTS], int frame, int _bit) {ClearScreen (); lcd.print ("Quadro:"); lcd.print (frame + 1); if (frame <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]);} // Função para imprimir informações para definir o speedvoid PrintSetSpeed ​​() {ClearScreen (); lcd.print ("Definir velocidade (ms)"); lcd.setCursor (0, 1); lcd.print (animSpeed);} // Função para imprimir informações para alterar o número de loopsvoid de animação PrintSetLoop () {ClearScreen (); lcd.print ("Definir contagem de loop"); lcd.setCursor (0, 1); lcd.print (loopCount);} // Função para reproduzir a animação com os parâmetros fornecidosvoid Play () {// A animação para (int count =0; count  0) {b =LIGHTS-1; quadro--; } bs1 =digitalRead (btn1); bs2 =digitalRead (btn2); bs3 =digitalRead (btn3); bs4 =digitalRead (btn4); if (bs1 ==HIGH) {delay (150); Arr [quadro] [b] =verdadeiro; b ++; } else if (bs2 ==HIGH) {delay (150); Arr [quadro] [b] =falso; b ++; } else if (bs3 ==HIGH) {delay (150); b--; } else if (bs4 ==HIGH) {delay (150); deixando =verdadeiro; } atraso (10); } PrintCreate (Arr, frame, b); IntToHexToByte (Arr); atraso (500); }} // Função para converter a matriz em um byte para o registro para lervoid IntToHexToByte (bool Arr [] [LIGHTS]) {for (int row =0; row  1) animSpeed--; } // Aumenta a velocidade if (bs4 ==HIGH) {delay (150); deixando =verdadeiro; } atraso (30); }} // Função para alterar o número de vezes que o anim loopsvoid SetLoop () {bool leave =false; while (! saindo) {PrintSetLoop (); bs1 =digitalRead (btn1); bs2 =digitalRead (btn2); bs3 =digitalRead (btn3); bs4 =digitalRead (btn4); if (bs1 ==HIGH) {delay (10); loopCount ++; } if (bs2 ==HIGH) {delay (10); if (animSpeed> 1) loopCount--; } se (bs4 ==ALTO) {atraso (150); deixando =verdadeiro; } atraso (30); }} // Função para realmente deslocar os bits no registradorvoid shiftOut (int myDataPin, int myClockPin, byte myDataOut) {// Isso desloca 8 bits para fora do MSB primeiro, // na borda ascendente do relógio, // clock idles on baixo // configuração da função interna int i =0; int pinState; pinMode (myClockPin, OUTPUT); pinMode (myDataPin, OUTPUT); // limpe tudo apenas no caso de // preparar o registrador de deslocamento para o deslocamento de bits digitalWrite (myDataPin, 0); digitalWrite (myClockPin, 0); // Cada bit no byte myDataOut for (i =7; i> =0; i--) {digitalWrite (myClockPin, 0); if (myDataOut &(1 < 

Esquemas

Siga as linhas com cuidado, devido às limitações no comprimento dos resistores no programa e para fins de legibilidade, não fui capaz de compactá-lo da mesma forma que fiz na minha construção real. Depois de construir, eu o desafio a encontrar maneiras de limpá-lo.

Processo de manufatura

  1. Detector de linguagem TinyML baseado em Edge Impulse e Arduino
  2. Jogo Arduino Gyroscope com MPU-6050
  3. Dados digitais Arduino
  4. DIY 37 LED Roulette Game
  5. ATtiny85 Mini Arcade:Snake
  6. Detector de alcance portátil
  7. Arduino Audio Reactive Desk Light
  8. Carro robô rastreador Smart Face
  9. Galvanoplastia com cobre
  10. NeoMatrix Arduino Pong