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

Variation des lumières avec PWM à l'aide du bouton-poussoir

Composants et fournitures

Arduino Mega 2560
× 1
Planche à pain (générique)
× 1
Câbles de raccordement (générique)
La quantité que vous utilisez peut différer, cela dépend de la méthode utilisée.
× 11
LED (générique)
Toutes les couleurs feraient l'affaire, mais je recommande 3 couleurs différentes.
× 3
Interrupteur à bouton-poussoir SparkFun 12mm
× 1
Résistance 330 ohm
× 4

Applications et services en ligne

Arduino IDE

À propos de ce projet

Ce projet vous montre comment atténuer les LED (diodes électroluminescentes) à l'aide d'Arduino. Il est divisé en 3 sections :

  • Lumières en fondu
  • Fade Lights avec bouton-poussoir
  • Fade Lights avec bouton (amélioration pour retarder)

Fondu de lumière :

À la fin de cette section, votre projet devrait ressembler à ceci.

Comme vous pouvez le voir, les lumières brillent de plus en plus, puis elles s'atténuent progressivement dans l'ordre d'un feu de circulation. Maintenant, commençons.

Le schéma :

Comme vous pouvez le voir, les LED sont connectées aux broches 3, 6 et 9. Vous pouvez connecter les LED à la broche de votre choix, mais vous devez vous rappeler de la modifier dans le code par la suite.

Le Code :

Pour commencer, ajoutez ceci à votre code. Il indique quels composants, dans ce cas, quelles LED vont dans quelles broches.

int ledRouge =9;int ledJaune =6;int ledVert =3; 

Maintenant, dans la configuration void() fonction, indiquez si les broches sont d'entrée ou de sortie.

void setup() { pinMode(ledRed, OUTPUT); pinMode(ledJaune, SORTIE); pinMode(ledVert, SORTIE);} 

Enfin, ajoutez ce qui suit à la boucle vide() une fonction. Il indique au MCU quoi faire.

void loop() { // Ceci ne fait qu'atténuer la lumière rouge - ledRed //ledRed for (int i=0; i<=255; i++) { analogWrite(ledRed, i); retard (30) ; } pour (int i=255; i>=0; i--) { analogWrite(ledRed, i); retard (30) ; }} 

Ce qui se passe ici, c'est que le MCU vérifie si l'entier 'i' est inférieur à 255 ou non. Si c'est le cas, la valeur de 'i' est augmenté de un. Le processus est retardé de 30 millisecondes, puis il redémarre. Une fois la valeur de 'i' est égal ou supérieur à 255, il est soustrait de un à chaque vérification. Lorsque la valeur a atteint 0, le processus est recommencé.

Cependant, si vous vouliez changer le temps qu'il faut pour s'estomper, vous devriez changer tous les delay() fonctions au montant que vous voulez. Ce n'est pas très efficace. Pour rendre les choses plus faciles et plus rapides lorsque vous souhaitez modifier le delay() fois, ajoutez ceci au début de votre code.

const int fade =30 ; 

Ce qu'il fait est de définir une valeur par défaut, dans ce cas, c'est une heure par défaut. Maintenant, changez chaque retard() valeur en (fondu) . Vous pouvez le nommer autrement si vous le souhaitez. En conséquence votre retard() les fonctions devraient ressembler à ceci.

retard (fondu) ; 

Et le code devrait ressembler à :

int ledRed =9;int ledYellow =6;int ledGreen =3;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode(ledJaune, SORTIE); pinMode(ledGreen, OUTPUT);}void loop() { //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledRed, i); retard (fondu) ; } //ledJaune pour (int i =0; i <=255; i++) { analogWrite(ledYellow, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledYellow, i); retard (fondu) ; } //ledGreen pour (int i =0; i <=255; i++) { analogWrite(ledGreen, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledGreen, i); retard (fondu) ; } //ledJaune pour (int i =0; i <=255; i++) { analogWrite(ledYellow, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledYellow, i); retard (fondu) ; }} 

Fade Lights avec bouton poussoir :

Après cette section, vous pourrez ajouter un bouton à votre projet.

Comme vous pouvez le voir, les LED ne changent qu'après avoir appuyé sur le bouton. Maintenant, commençons.

Le schéma :

Vous avez peut-être remarqué que toutes les LED sont maintenues au même endroit, mais il y a un ajout d'un bouton poussoir.

Le Code :

Tout d'abord, nous devons indiquer au MCU à quelle broche le bouton a été connecté. Pour ce faire, ajoutez ceci au début de votre code.

bouton int =7 ;  

Maintenant, dans le void setup() fonction, ajoutez ceci pour indiquer au MCU si le bouton est Input of Output.

pinMode(bouton, INPUT); 

Ajoutez également ceci à la fonction.

 digitalWrite(ledRed, LOW); digitalWrite(ledJaune, BAS); digitalWrite(ledGreen, HIGH); 

Il met une lumière de départ. Cette fois, la LED de démarrage est verte mais vous pouvez la changer en rouge ou jaune si vous le souhaitez.

Maintenant, il y a un grand changement dans la boucle vide() une fonction. Tout ce qui était dans la boucle() a maintenant été remplacé par une fonction nommée fadeLights() (le nom peut être différent si vous le souhaitez). Dans la boucle() il devrait maintenant être :

void loop() { if(digitalRead(button) ==HIGH) { delay(15); // le logiciel anti-rebond if(digitalRead(button) ==HIGH){ // si le bouton est enfoncé, la fonction fadeLights(); // fadeLights est appelé } } else { digitalWrite(ledRed, LOW); // si le bouton n'est pas enfoncé, la LED verte est digitalWrite(ledYellow, LOW); // va être allumé et les autres ne le sont pas. digitalWrite(ledGreen, HIGH); }} 

Comme mentionné précédemment, le void fadeLights() fonction va avoir ce qui était dans la boucle.

void fadeLights(){ for (int i =255; i>=0; i--) { // commence au vert donc doit faire un fondu vert analogWrite(ledGreen, i); retard (fondu) ; } //ledJaune pour (int i =0; i <=255; i++) { analogWrite(ledYellow, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledYellow, i); retard (fondu) ; } //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledRed, i); retard (fondu) ; } //ledJaune pour (int i =0; i <=255; i++) { analogWrite(ledYellow, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledYellow, i); retard (fondu) ; } //ledGreen pour (int i =0; i <=255; i++) { analogWrite(ledGreen, i); retard (fondu) ; } } 

Si votre projet fonctionne comme celui de la vidéo, vous l'avez fait correctement. Si la séquence n'est pas correcte, vérifiez :

  • si votre code a été écrit correctement
  • si vous avez connecté les LED aux bonnes broches

Et si vos lumières ne s'allument pas, vérifiez

  • si vous avez connecté les LED aux bonnes broches
  • si vous avez correctement connecté les fils
  • si vous avez bien écrit la formule

Fade Lights avec bouton (amélioration du délai) :

Comme vous l'avez peut-être remarqué, lorsque je relâche le bouton, les lumières continuent de s'éteindre. Après cette section, vous pourrez éditer votre code afin que les LED ne s'estompent que lorsque le bouton est enfoncé.

Comme vous pouvez le voir ici, lorsque je lâche le bouton, les LED reviennent à l'ordre par défaut de :

Rouge - ARRÊT

Jaune - Éteint

Vert - ON

Le schéma :

Le schéma reste le même, puisque nous n'ajoutons plus de composants ou ne voulons pas qu'il fasse quoi que ce soit de différent - nous voulons toujours que les LED s'estompent.

Le Code :

Nous n'ajoutons plus de choses donc il n'y a pas besoin d'ajouter quoi que ce soit au début. Cependant, puisque nous modifions le délai, nous devons le supprimer.

const int fade =10 ; // plus besoin de ça 

Il n'y a rien à changer pour le setup() une fonction. Dans la boucle vide() , nous devons ajouter un autre déclaration.

void loop() { if(digitalRead(button) ==HIGH) { delay(15); if(digitalRead(button) ==HIGH){ fadeLights(); } } else { // l'ajouter ici digitalWrite(ledRed, LOW); digitalWrite(ledJaune, BAS); digitalWrite(ledGreen, HIGH); }}  

Cela signifie que lorsque le bouton n'est pas enfoncé, le programme quitte fadeLights() et va à l'autre instruction qui a l'ordre des LED par défaut. Différent du précédent - auparavant, le bouton n'était pas coché une fois fadeLights() a été appelé.

Maintenant, changez tous les delay() fonctions à ceci :

for( int y =0; y <1000; y++){ // si le bouton est relâché if (digitalRead(button) ==LOW) { return; } 

Dans chaque boucle, le microprocesseur vérifiera le bouton. S'il est publié, le retour la commande sera appelée pour arrêter fadeLights() . D'après mon estimation, lorsque chaque boucle for est exécutée, cela prend probablement environ 10 microsecondes, ce qui signifie que nous devons le faire plusieurs fois pour atteindre la vitesse souhaitée.

J'espère que vous avez apprécié ce tutoriel et bonne chance avec votre projet.

Code

  • Lumières en fondu
  • Fade Lights avec bouton-poussoir
  • Fade Lights avec bouton-poussoir (amélioration du délai)
Fade LightsArduino
int ledRed =9;int ledYellow =6;int ledGreen =3;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode(ledJaune, SORTIE); pinMode(ledGreen, OUTPUT);}void loop() { //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledRed, i); retard (fondu) ; } //ledJaune pour (int i =0; i <=255; i++) { analogWrite(ledYellow, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledYellow, i); retard (fondu) ; } //ledGreen pour (int i =0; i <=255; i++) { analogWrite(ledGreen, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledGreen, i); retard (fondu) ; } //ledJaune pour (int i =0; i <=255; i++) { analogWrite(ledYellow, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledYellow, i); retard (fondu) ; }}
Fade Lights avec bouton poussoirArduino
int ledRed =9;int ledYellow =6;int ledGreen =3;int button =7;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode(ledJaune, SORTIE); pinMode(ledVert, SORTIE); pinMode(bouton, INPUT); digitalWrite(ledRed, LOW); digitalWrite(ledJaune, BAS); digitalWrite(ledGreen, HIGH);}void loop() { if (digitalRead(button) ==HIGH) { delay(15); if (digitalRead(button) ==HIGH) { fadeLights(); } } else { digitalWrite(ledRed, LOW); digitalWrite(ledJaune, BAS); digitalWrite(ledGreen, HIGH); }}void fadeLights() { for (int i =255; i>=0; i--) { analogWrite(ledGreen, i); retard (fondu) ; } //ledJaune pour (int i =0; i <=255; i++) { analogWrite(ledYellow, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledYellow, i); retard (fondu) ; } //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledRed, i); retard (fondu) ; } //ledJaune pour (int i =0; i <=255; i++) { analogWrite(ledYellow, i); retard (fondu) ; } pour (int i =255; i>=0; i--) { analogWrite(ledYellow, i); retard (fondu) ; } //ledGreen pour (int i =0; i <=255; i++) { analogWrite(ledGreen, i); retard (fondu) ; }}
Fade Lights avec bouton poussoir (amélioration du délai)Arduino
int ledRed =9;int ledYellow =6;int ledGreen =3;int button =7;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode(ledJaune, SORTIE); pinMode(ledVert, SORTIE); pinMode(bouton, INPUT); digitalWrite(ledRed, LOW); digitalWrite(ledJaune, BAS); digitalWrite(ledGreen, HIGH);}void loop() { if(digitalRead(button) ==HIGH) { delay(15); if(digitalRead(button) ==HIGH){ fadeLights(); } } else { digitalWrite(ledRed, LOW); digitalWrite(ledJaune, BAS); digitalWrite(ledGreen, HIGH); }} void fadeLights(){ for( int i=255; i>=0; i--) { analogWrite(ledGreen, i); for( int y =0; y <1000; y++){ // si le bouton est relâché if (digitalRead(button) ==LOW) { return; } } } //ledYellow for( int i=0; i<=255; i++) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // si le bouton est relâché if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // si le bouton est relâché if (digitalRead(button) ==LOW) { return; } } } //ledRed for( int i=0; i<=255; i++) { analogWrite(ledRed, i); for( int y =0; y <1000; y++){ // si le bouton est relâché if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledRed, i); for( int y =0; y <1000; y++){ // si le bouton est relâché if (digitalRead(button) ==LOW) { return; } } } //ledYellow for( int i=0; i<=255; i++) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // si le bouton est relâché if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // si le bouton est relâché if (digitalRead(button) ==LOW) { return; } } } //ledGreen for( int i=0; i<=255; i++) { analogWrite(ledGreen, i); for( int y =0; y <1000; y++){ // si le bouton est relâché if (digitalRead(button) ==LOW) { return; } } }}

Schémas


Processus de fabrication

  1. Jeu de gyroscope Arduino avec MPU-6050
  2. Système de présence utilisant Arduino et RFID avec Python
  3. Capteur DHT11 avec LED et haut-parleur piézo
  4. Machine à LÉVITATION ULTRASONIQUE utilisant ARDUINO
  5. Unopad - Contrôleur MIDI Arduino avec Ableton
  6. Système d'arrosage automatique des plantes avec Arduino
  7. Capteur d'obstacles simple avec Arduino
  8. Trouvez-moi
  9. Contrôle de ventilateur PWM 4 broches 25 kHz avec Arduino Uno