Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Créateur de séquences lumineuses

Composants et fournitures

Arduino UNO
× 1
Planche à pain (générique)
× 2
Câbles de raccordement (générique)
× 55
74HC595 Shift Register
× 1
bouton
× 4
Potentiomètre rotatif (générique)
× 1
LED (générique)
× 8
Résistance 221 ohm
× 9
Résistance 10k ohm
× 4

Outils et machines nécessaires

mains

Applications et services en ligne

Arduino IDE

À propos de ce projet

Je me suis amusé avec les lumières et les tableaux et j'ai pensé utiliser le registre à décalage et l'écran LCD pour créer un programme dans lequel vous pouvez modifier et afficher vos animations lumineuses sans avoir à entrer dans le code et à créer une animation à la main à chaque fois.

Il y a 4 boutons, de gauche à droite, ils sont numérotés de 1 à 4. Ils vous permettent de naviguer dans le menu et de modifier les variables. Le bouton 1 est utilisé pour incrémenter les valeurs et pour faire passer l'état d'une lumière à ÉLEVÉ. Le bouton 2 est utilisé pour décrémenter les valeurs et pour faire passer l'état d'une lumière à BAS. Le bouton 3 peut déplacer le curseur vers l'arrière lors de la création d'un cadre, et le bouton 4 est utilisé comme bouton « retour ».

Le programme peut modifier la vitesse de l'animation et le nombre de fois qu'elle bouclera. Je pourrais sortir une autre version permettant plusieurs animations.

Vous pouvez changer de cadre en changeant le ARR_SIZE en haut dans le code

Profitez

Code

  • Séquenceur de lumière
Séquenceur de lumièreC/C++
Branchez ce code et exécutez-le, si le câblage est correct, il ne devrait PAS avoir de problèmes !
Enjoy
#include #define ARR_SIZE 16 // CHANGE cela en n'importe quel nombre d'images#define LIGHTS 8// Contrôle les entrées du bouton de jeuconst int btn1 =7, btn2 =8, btn3 =9, btn4 =10;// Variable de lecture du bouton poussoir statusint bs1 =0, bs2 =0, bs3 =0, bs4 =0;// Pin connecté à ST_CP de 74HC595const int latchPin =11;// Pin connecté à SH_CP de 74HC595const int clockPin =13 ;// Broche connectée au DS de 74HC595const int dataPin =12 ;// Détenteurs des informations que vous allez transmettre aux données ; // Utilisé pour lire 1 ou 0 bool ArrOne[ARR_SIZE][LIGHTS] ={false} ; // animation// Traduit pour le registre en bytesbyte lightArrOne[ARR_SIZE] ={0xFF};// Variables affectant l'animationint animSpeed ​​=50; // ms entre chaque frameint loopCount =5; // nombre de fois qu'il s'exécutera // Contrôle les valeurs LCDconst int rs =15, en =14, d4 =3, d5 =4, d6 =5, d7 =6;LiquidCrystal lcd(rs, en, d4, d5, d6 , d7);void setup(){ // Configurer chaque bouton pinMode(btn1, INPUT_PULLUP); pinMode(btn2, INPUT_PULLUP); pinMode(btn3, INPUT_PULLUP); pinMode(btn4, INPUT_PULLUP); // Configure le nombre de colonnes et de lignes de l'écran LCD :lcd.begin(16, 2); // Définir le registre de verrouillage pinMode(latchPin, OUTPUT); PrintMenu();}void loop(){ bs1 =digitalRead(btn1) ; bs2 =digitalRead(btn2) ; bs3 =digitalRead(btn3) ; bs4 =digitalRead(btn4) ; // Joue l'anim if(bs1 ==HIGH) { bs1 =LOW;// juste utilisé pour empêcher un mauvais/double retard d'entrée (150); Jouer(); // Modifie l'anim } else if(bs2 ==HIGH) { bs2 =LOW; retard (150); Créer (ArrOne); // Change la vitesse de l'anim } else if(bs3 ==HIGH) { bs3 =LOW; retard (150); SetVitesse(); // Changer le nombre de fois que l'anim sera joué } else if(bs4 ==HIGH) { bs4 =LOW; retard (150); SetLoop(); } ImprimerMenu(); delay(150);}// Fonction pour imprimer des informations pour le menu principal void PrintMenu(){ ClearScreen(); lcd.print("1-Play 3-Speed"); lcd.setCursor(0, 1); lcd.print("2-Create 4-Loops");}// Fonction pour imprimer des informations pour créer un framevoid PrintCreate(bool Arr[][LIGHTS], int frame, int _bit){ ClearScreen(); lcd.print("Cadre :"); lcd.print(frame+1); if(frame <9) lcd.print(" "); for(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]);}// Fonction pour imprimer des informations pour définir le speedvoid PrintSetSpeed(){ ClearScreen(); lcd.print("Définir la vitesse (ms)"); lcd.setCursor(0, 1); lcd.print(animSpeed);}// Fonction pour imprimer des informations pour changer le nombre de boucles d'animationvoid PrintSetLoop(){ ClearScreen(); lcd.print("Définir le nombre de boucles"); lcd.setCursor(0, 1); lcd.print(loopCount);}// Fonction pour jouer l'animation avec les paramètres donnésvoid Play(){ // L'animation for(int count =0; count  0) { b =LIGHTS-1; Cadre--; } bs1 =digitalRead(btn1) ; bs2 =digitalRead(btn2) ; bs3 =digitalRead(btn3) ; bs4 =digitalRead(btn4) ; if(bs1 ==HAUT) { délai(150); Arr[frame][b] =vrai; b++ ; } else if(bs2 ==HIGH) { delay(150); Arr[cadre][b] =faux ; b++ ; } else if(bs3 ==HIGH) { delay(150); b--; } else if(bs4 ==HIGH) { delay(150); laisser =vrai; } délai(10) ; } ImprimerCréer(Arr, cadre, b); IntVersHexVersByte(Arr); retard (500); }}// Fonction pour convertir le tableau en un octet pour le registre à readvoid IntToHexToByte(bool Arr[][LIGHTS]){ for(int row =0; row  1) animSpeed--; } // Augmenter la vitesse if(bs4 ==HIGH) { delay(150); laisser =vrai; } délai(30); }}// Fonction pour changer le nombre de fois que l'anim loopsvoid SetLoop(){ bool laissant =false; while(!leaving) { PrintSetLoop(); bs1 =digitalRead(btn1) ; bs2 =digitalRead(btn2) ; bs3 =digitalRead(btn3) ; bs4 =digitalRead(btn4) ; if(bs1 ==HAUT) { délai(10); loopCount++ ; } if(bs2 ==HAUT) { délai(10); if(animSpeed ​​> 1) loopCount--; } if(bs4 ==HAUT) { délai(150); laisser =vrai; } délai(30); }}// Fonction pour réellement décaler les bits dans le registervoid shiftOut(int myDataPin, int myClockPin, byte myDataOut){ // Ceci décale d'abord 8 bits hors MSB, // sur le front montant de l'horloge, // l'horloge est inactive sur low //configuration de la fonction interne int i =0; int pinState; pinMode(myClockPin, SORTIE); pinMode(myDataPin, SORTIE); // tout effacer juste au cas où // préparer le registre à décalage pour le décalage de bits digitalWrite (myDataPin, 0); digitalWrite(myClockPin, 0); // Chaque bit dans l'octet myDataOut pour (i =7; i>=0; i--) { digitalWrite(myClockPin, 0); if ( myDataOut &(1 < 

Schémas

Suivez attentivement les lignes, en raison des limitations de la longueur des résistances dans le programme et pour des raisons de lisibilité, je n'ai pas pu le compacter de la même manière que je l'ai fait dans ma construction actuelle. Après la construction, je vous mets au défi de trouver des moyens de le nettoyer.

Processus de fabrication

  1. Détecteur de langage TinyML basé sur Edge Impulse et Arduino
  2. Jeu de gyroscope Arduino avec MPU-6050
  3. Dés numériques Arduino
  4. Jeu de roulette DIY 37 LED
  5. Mini arcade ATtiny85 :Serpent
  6. Détecteur de portée portable
  7. Lampe de bureau réactive audio Arduino
  8. voiture robot intelligente de suivi du visage
  9. La galvanoplastie avec du cuivre