Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Licht dimmen met PWM met drukknop

Componenten en benodigdheden

Arduino Mega 2560
× 1
Broodplank (algemeen)
× 1
Jumperdraden (algemeen)
De hoeveelheid die je gebruikt kan verschillen, dit hangt af van de methode die wordt gebruikt.
× 11
LED (generiek)
Elke kleur is voldoende, maar ik raad 3 verschillende kleuren aan.
× 3
SparkFun Drukknopschakelaar 12 mm
× 1
Weerstand 330 ohm
× 4

Apps en online services

Arduino IDE

Over dit project

Dit project laat zien hoe je LED's (Light-emitting diodes) kunt vervagen met behulp van Arduino. Het is opgedeeld in 3 secties:

  • Licht vervagen
  • Licht vervagen met drukknop
  • Fade Lights met knop (verbetering naar vertraging)

Lichten vervagen:

Aan het einde van dit gedeelte zou uw project er als volgt uit moeten zien.

Zoals je kunt zien, gloeien de lichten feller, daarna wordt het geleidelijk weer zwakker in de volgorde van een verkeerslicht. Laten we beginnen.

Het schema:

Zoals u kunt zien, zijn de LED's aangesloten op pinnen 3, 6 en 9. U kunt de LED's op elke gewenste pin aansluiten, maar vergeet niet om deze achteraf in de code te wijzigen.

De code:

Voeg dit om te beginnen toe aan uw code. Het geeft aan welke componenten, in dit geval, welke LED's in welke pinnen gaan.

int ledRed =9;int ledYellow =6;int ledGreen =3; 

Nu, in de void setup() functie, geef aan of de pinnen Input of Output zijn.

void setup() { pinMode(ledRed, OUTPUT); pinMode (ledGeel, UITGANG); pinMode(ledGreen, OUTPUT);} 

Voeg ten slotte het volgende toe aan de void loop() functie. Het vertelt de MCU wat hij moet doen.

void loop() {// Dit vervaagt alleen het rode licht - ledRed //ledRed for (int i=0; i<=255; i++) {analogeWrite(ledRed, i); vertraging (30); } for (int i=255; i>=0; i--) { analogWrite(ledRed, i); vertraging (30); }} 

Wat hier gebeurt, is dat de MCU controleert of het gehele getal 'i' lager is dan 255 of niet. Zo ja, de waarde van 'i' met één wordt verhoogd. Het proces wordt 30 milliseconden vertraagd, waarna het opnieuw wordt gestart. Zodra de waarde van 'i' gelijk is aan of groter is dan 255, wordt het elke keer dat het is gecontroleerd met één afgetrokken. Wanneer de waarde 0 heeft bereikt, wordt het proces helemaal opnieuw gedaan.

Als u echter de tijd die nodig is om te vervagen wilt wijzigen, moet u alle delay() wijzigen functies naar het gewenste bedrag. Dat is niet erg efficiënt. Om dingen gemakkelijker en sneller te maken wanneer u de delay() . wilt wijzigen tijden, voeg dit toe aan het begin van je code.

const int fade =30; 

Wat het doet, is een standaardwaarde instellen, in dit geval is het een standaardtijd. Wijzig nu elke vertraging() waarde in (fade) . Je kunt het een andere naam geven als je wilt. Als gevolg hiervan is uw vertraging() functies zouden er zo uit moeten zien.

vertraging (vervagen); 

En de code zou er als volgt uit moeten zien:

int ledRed =9;int ledYellow =6;int ledGreen =3;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode (ledGeel, UITGANG); pinMode(ledGreen, OUTPUT);}void loop() {//ledRed for (int i =0; i <=255; i++) {analogeWrite(ledRed, i); vertraging (vervagen); } for (int i =255; i>=0; i--) {analogeWrite(ledRed, i); vertraging (vervagen); } //ledYellow for (int i =0; i <=255; i++) {analogeWrite(ledYellow, i); vertraging (vervagen); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); vertraging (vervagen); } // ledGreen voor (int i =0; i <=255; i++) {analogeWrite (ledGreen, i); vertraging (vervagen); } for (int i =255; i>=0; i--) { analogWrite (ledGreen, i); vertraging (vervagen); } //ledYellow for (int i =0; i <=255; i++) {analogeWrite(ledYellow, i); vertraging (vervagen); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); vertraging (vervagen); }} 

Fade Lights met drukknop:

Na dit gedeelte kunt u een knop aan uw project toevoegen.

Zoals je kunt zien, veranderen de LED's pas nadat ik op de knop heb gedrukt. Laten we nu beginnen.

Het schema:

Het is je misschien al opgevallen dat alle LED's op dezelfde plek worden gehouden, maar er is een toevoeging van een drukknop.

De code:

Ten eerste moeten we de MCU vertellen op welke pin de knop is aangesloten. Om dat te doen, voeg je dit toe aan het begin van je code.

int-knop =7;  

Nu, in de void setup() functie, voeg dit toe om de MCU te vertellen of de knop Input of Output is.

pinMode(knop, INPUT); 

Voeg dit ook toe aan de functie.

 digitalWrite(ledRed, LOW); digitalWrite (ledGeel, LAAG); digitalWrite(ledGroen, HOOG); 

Het zet een startlicht. Deze keer is de start-LED groen, maar je kunt deze desgewenst veranderen in rood of geel.

Nu is er een grote verandering in de void loop() functie. Alles wat in de loop() zat is nu vervangen door een functie met de naam fadeLights() (de naam kan anders zijn als u dat wilt). In de loop() het zou nu moeten zijn:

void loop() { if(digitalRead(button) ==HIGH) { delay (15); // software debounce if(digitalRead(button) ==HIGH){ // als de knop wordt ingedrukt, de functie fadeLights(); // fadeLights heet } } else { digitalWrite (ledRed, LOW); // als de knop niet wordt ingedrukt, is de groene LED digitalWrite (ledYellow, LOW); // gaat aan en de anderen niet. digitalWrite (ledGroen, HOOG); }} 

Zoals eerder vermeld, de void fadeLights() functie zal hebben wat er in de lus zat.

void fadeLights(){ for (int i =255; i>=0; i--) { // begint op groen dus moet groen vervagen analogWrite(ledGreen, i); vertraging (vervagen); } //ledYellow for (int i =0; i <=255; i++) {analogeWrite(ledYellow, i); vertraging (vervagen); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); vertraging (vervagen); } // ledRed voor (int i =0; i <=255; i++) {analogeWrite (ledRed, i); vertraging (vervagen); } for (int i =255; i>=0; i--) {analogeWrite(ledRed, i); vertraging (vervagen); } //ledYellow for (int i =0; i <=255; i++) {analogeWrite(ledYellow, i); vertraging (vervagen); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); vertraging (vervagen); } // ledGreen voor (int i =0; i <=255; i++) {analogeWrite (ledGreen, i); vertraging (vervagen); } } 

Als je project werkt zoals in de video, heb je het goed gedaan. Als de volgorde niet klopt, controleer dan:

  • als je code correct is geschreven
  • als je de LED's op de juiste pinnen hebt aangesloten

En als je lichten niet aan gaan, controleer dan

  • als je de LED's op de juiste pinnen hebt aangesloten
  • als je de draden goed hebt aangesloten
  • als je de formule correct hebt geschreven

Fade Lights met knop (verbetering naar vertraging):

Zoals je misschien hebt gemerkt, blijven de lampjes doven als ik de knop loslaat. Na dit gedeelte kunt u uw code bewerken, zodat de LED's alleen vervagen als de knop wordt ingedrukt.

Zoals je hier kunt zien, als ik de knop loslaat, gaan de LED's terug naar de standaardvolgorde van:

Rood - UIT

Geel - UIT

Groen - AAN

Het schema:

Het schema is hetzelfde gehouden, omdat we geen componenten meer toevoegen of iets anders willen doen - we willen nog steeds dat de LED's vervagen.

De code:

We voegen geen dingen meer toe, dus het is niet nodig om iets aan het begin toe te voegen. Omdat we de vertraging echter wijzigen, moeten we deze verwijderen.

const int fade =10; // dit is niet meer nodig 

Er is niets te veranderen voor de setup() functie. In de void loop() , we moeten een else . toevoegen verklaring.

void loop() { if(digitalRead(button) ==HIGH) { delay (15); if (digitalRead (knop) ==HOOG) {fadeLights (); } } else { // voeg het hier toe digitalWrite (ledRed, LOW); digitalWrite (ledGeel, LAAG); digitalWrite (ledGroen, HOOG); }}  

Dit betekent dat als de knop niet wordt ingedrukt, het programma fadeLights() verlaat en gaat naar de anders statement met de standaard LED-volgorde. Anders dan eerder - eerder werd de knop niet één keer aangevinkt fadeLights() is gebeld.

Verander nu alle delay() functies hiervoor:

for(int y =0; y <1000; y++){ // if knop wordt losgelaten if (digitalRead(button) ==LOW) { return; } 

In elke lus controleert de microprocessor de knop. Als het wordt vrijgegeven, wordt de retour commando wordt aangeroepen om fadeLights() . te stoppen . Volgens mijn schatting duurt het uitvoeren van elke for-lus waarschijnlijk ongeveer 10 microseconden, wat betekent dat we het vaak moeten doen om de gewenste snelheid te krijgen.

Ik hoop dat je genoten hebt van deze tutorial en veel succes met je project.

Code

  • Licht vervagen
  • Licht vervagen met drukknop
  • Fade Lights met drukknop (verbetering van de vertraging)
Licht vervagenArduino
int ledRed =9;int ledYellow =6;int ledGreen =3;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode (ledGeel, UITGANG); pinMode(ledGreen, OUTPUT);}void loop() {//ledRed for (int i =0; i <=255; i++) {analogeWrite(ledRed, i); vertraging (vervagen); } for (int i =255; i>=0; i--) {analogeWrite(ledRed, i); vertraging (vervagen); } //ledYellow for (int i =0; i <=255; i++) {analogeWrite(ledYellow, i); vertraging (vervagen); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); vertraging (vervagen); } // ledGreen voor (int i =0; i <=255; i++) {analogeWrite (ledGreen, i); vertraging (vervagen); } for (int i =255; i>=0; i--) { analogWrite (ledGreen, i); vertraging (vervagen); } //ledYellow for (int i =0; i <=255; i++) {analogeWrite(ledYellow, i); vertraging (vervagen); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); vertraging (vervagen); }}
Licht vervagen met drukknopArduino
int ledRed =9;int ledYellow =6;int ledGreen =3;int knop =7;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode (ledGeel, UITGANG); pinMode (ledGroen, UITGANG); pinMode (knop, INPUT); digitalWrite (ledRood, LAAG); digitalWrite (ledGeel, LAAG); digitalWrite (ledGroen, HOOG);} ongeldige lus () {if (digitalRead (knop) ==HOOG) {vertraging (15); if (digitalRead (knop) ==HOOG) { fadeLights (); } } else { digitalWrite (ledRed, LOW); digitalWrite (ledGeel, LAAG); digitalWrite (ledGroen, HOOG); }}void fadeLights() { for (int i =255; i>=0; i--) { analogWrite(ledGreen, i); vertraging (vervagen); } //ledYellow for (int i =0; i <=255; i++) {analogeWrite(ledYellow, i); vertraging (vervagen); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); vertraging (vervagen); } // ledRed voor (int i =0; i <=255; i++) {analogeWrite (ledRed, i); vertraging (vervagen); } for (int i =255; i>=0; i--) {analogeWrite(ledRed, i); vertraging (vervagen); } //ledYellow for (int i =0; i <=255; i++) {analogeWrite(ledYellow, i); vertraging (vervagen); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); vertraging (vervagen); } // ledGreen voor (int i =0; i <=255; i++) {analogeWrite (ledGreen, i); vertraging (vervagen); }}
Fade Lights met drukknop (verbetering van de vertraging)Arduino
int ledRed =9;int ledYellow =6;int ledGreen =3;int knop =7;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode (ledGeel, UITGANG); pinMode (ledGroen, UITGANG); pinMode (knop, INPUT); digitalWrite (ledRood, LAAG); digitalWrite (ledGeel, LAAG); digitalWrite (ledGroen, HOOG);} ongeldige lus () {if (digitalRead (knop) ==HOOG) {vertraging (15); if (digitalRead (knop) ==HOOG) {fadeLights (); } } else { digitalWrite (ledRed, LOW); digitalWrite (ledGeel, LAAG); digitalWrite (ledGroen, HOOG); }} void fadeLights(){ for(int i=255; i>=0; i--) { analogWrite(ledGreen, i); for (int y =0; y <1000; y++) { // als de knop wordt losgelaten if (digitalRead (knop) ==LAAG) { return; } } } //ledYellow for (int i=0; i<=255; i++) {analogeWrite(ledYellow, i); for (int y =0; y <400; y++) {// als de knop wordt losgelaten if (digitalRead (knop) ==LAAG) { return; } } } for(int i=255; i>=0; i--) { analogWrite(ledYellow, i); for (int y =0; y <400; y++) {// als de knop wordt losgelaten if (digitalRead (knop) ==LAAG) { return; } } } //ledRed for (int i=0; i<=255; i++) {analogeWrite(ledRed, i); for (int y =0; y <1000; y++) { // als de knop wordt losgelaten if (digitalRead (knop) ==LAAG) { return; } } } for(int i=255; i>=0; i--) {analogeWrite(ledRed, i); for (int y =0; y <1000; y++) { // als de knop wordt losgelaten if (digitalRead (knop) ==LAAG) { return; } } } //ledYellow for (int i=0; i<=255; i++) {analogeWrite(ledYellow, i); for (int y =0; y <400; y++) {// als de knop wordt losgelaten if (digitalRead (knop) ==LAAG) { return; } } } for(int i=255; i>=0; i--) { analogWrite(ledYellow, i); for (int y =0; y <400; y++) {// als de knop wordt losgelaten if (digitalRead (knop) ==LAAG) { return; } } } //ledGreen voor (int i=0; i<=255; i++) {analogeWrite(ledGreen, i); for (int y =0; y <1000; y++) { // als de knop wordt losgelaten if (digitalRead (knop) ==LAAG) { return; } } }}

Schema's


Productieproces

  1. Arduino-gyroscoopspel met MPU-6050
  2. Aanwezigheidssysteem met Arduino en RFID met Python
  3. DHT11-sensor met LED's en een piëzo-luidspreker
  4. ULTRASONE LEVITATION-machine die ARDUINO gebruikt
  5. Unopad - Arduino MIDI-controller met Ableton
  6. Automatisch plantenwatersysteem met Arduino
  7. Eenvoudige obstakelsensor met Arduino
  8. Vind mij
  9. Hoe de massa van de aarde te meten met Arduino
  10. Sonar met arduino en weergave op verwerkings-IDE
  11. 25 kHz 4-pins PWM-ventilatorregeling met Arduino Uno