Les 98-5: Vervaag lig wanneer 'n knoppie gedruk word met behulp van Arduino
In hierdie les gaan jy 'n lig bou wat op commando vervaag: druk 'n drukknop en die LED begin op vol helderheid, en dim dan glad af tot dit af is. Dit is een van die nuttigste beginner-patrone in Arduino omdat dit 'n digitale inset (die knop) met 'n PWM analoog uitset (die LED helderheid) kombineer, en dit leer jou hoe om die tempo en gladheid van 'n verandering te beheer eerder as om net iets aan en af te skakel.
Vervaag op aanvraag kom oral in werklike produkte voor. Hier is 'n paar praktiese maniere waarop jy kan gebruik wat jy hier leer:
- Sag-af aanwyserligte — in plaas van 'n lamp wat skielik afgaan, dim dit saggies wanneer jy 'n knop druk, wat baie meer gepoleerd lyk op toestelle en 3D-gedrukte omhulsels.
- Slaap / bystandmodus — druk 'n knop en 'n helder status-LED vervaag tot swart sodat dit jou nie snags steur nie, terwyl die stroombaan aangeskakel bly.
- "Vervaag tot swart" verhoog- of modelbeligting — 'n enkele knop veroorsaak 'n gladde dimming van 'n LED-strook of -paneel eerder as 'n skielike afsny.
- Battery-spaarsame terugvoer — 'n oombliklike knopdruk gee jou 'n helder bevestigingsflits wat vervaag, sodat die LED net vir 'n kort tydjie vol verlig is.
- Interaktiewe kuns en rekwisiete — 'n "uitasem"-effek wat deur aanraking geaktiveer word, ideaal vir cosplay, dioramas of museumuitstallings.
Die kernidee is eenvoudig: die knop sê vir die Arduino "begin nou vervaag," en die Arduino laat die LED helderheid afgaan van 255 (vol) na 0 (af) in klein stappies. Omdat die stappies klein is en vinnig gebeur, sien jou oog 'n gladde vervaging eerder as 'n sprong.
As jy nog nooit 'n LED laat vervaag het nie, word die onderliggende helderheidsbeheer gedek in Les 98-4: Vervaag 'n LED-lig met Arduino: Helderheidsbeheer. Hierdie les bou direk op daardie grondslag deur 'n drukknop as die sneller by te voeg.
Hardeware en Komponente
Dit is 'n baie lae-koste bou — alles hier is standaard beginnersstel materiaal:
- Arduino-bord (Uno, Nano, Mega, of enige versoenbare bord)
- Een LED (5 mm of 3 mm, enige kleur)
- Een drukknopskakelaar (oombliklik, 4-pen taktiele tipe werk goed)
- Een weerstand vir die LED — enigiets van 200 Ω tot 1000 Ω (die klassieke 220 Ω of 330 Ω is perfek)
- Broodbord en DuPont verbindingsdrade
- USB-kabel vir programmering (en 'n battery of 5 V adapter as jy wil hê dit moet draadloos werk)
'n Vinnige nota oor die LED-weerstand: 'n LED benodig ongeveer 2 V oor dit en ongeveer 10 mA stroom. Met 'n 5 V toevoer moet die weerstand die oorblywende 3 V laat val, so Ohm se wet gee ongeveer 300 Ω. Enigiets van 300 Ω tot 1000 Ω sal werk — hoër waardes maak net die LED dowwer. Om 'n weerstand te gebruik is nie opsioneel nie; sonder dit sal die LED te veel stroom trek en uitbrand.
Bedradingsgids
Die bedrading is doelbewus minimaal. Die LED se anode (die langer been) verbind deur die weerstand na digitale pen 3, en sy katode (die korter been, met die plat kant op die pakket) gaan na grond. Die drukknop verbind tussen digitale pen 2 en grond — geen eksterne pull-up weerstand is nodig nie omdat die kode die Arduino se interne pull-up aktiveer.
Let op die LED polariteit: die plat kant van die plastiekliggaam en die korter been merk die katode (negatief). As jy dit omgekeerd insit, sal die LED eenvoudig nie lig nie — geen skade word veroorsaak nie, draai dit net om.
Vir die drukknop, as jy 'n 4-pen taktiele skakelaar gebruik, onthou dat die penne intern gepaar is: twee van die vier penne is altyd saam verbind. Gebruik 'n multimeter in kontinuïteitsmodus om 'n paar te vind wat piep wanneer gedruk, gebruik dan een pen van elke kant. Een kant gaan na pen 2, die ander na grond.
Kode Verduideliking
Die skets is kort, en byna alles wat jy dalk wil verander, is in 'n handjievol reëls aan die bokant. Hier is die gebruikerskonfigureerbare dele:
const int pushButtonPin = 2;//die pen waar die drukknopskakelaar aan gekoppel is
const int LEDPin = 3;//die pen waar die LED aan gekoppel is
const int fadeAmount = 10; // hoeveel punte om die LED mee te vervaag
const int fadeSpeed = 5;//vervaagtyd in millisekondes. hoe kleiner die waarde, hoe vinniger die vervaging
pushButtonPin en LEDPin sê bloot vir die Arduino aan watter penne jy dinge gekoppel het. As jy die knoppie na pen 4 of die LED na pen 9 (’n PWM-geskikte pen) skuif, verander net hierdie twee nommers om by jou bedrading te pas. Let daarop dat die LED-pen moet PWM ondersteun — op ’n Uno beteken dit penne 3, 5, 6, 9, 10 of 11 — want vervaging vereis analogWrite().
fadeAmount beheer hoe groot elke helderheidstap is. Helderheid loop van 0 tot 255, so ’n fadeAmount van 10 beteken die LED verdof in ongeveer 25 stappe. ’n Groter nommer maak die vervaging growwer en vinniger; ’n kleiner nommer maak dit gladder en stadiger.
fadeSpeed is die vertraging in millisekondes tussen elke stap. Dit is die enkele belangrikste instelling vir hoe die effek voel. ’n Waarde van 5 ms gee ’n vinnige, rats vervaging; ’n waarde van 30 ms of meer gee ’n stadige, luukse verdof. Saam met fadeAmount laat hierdie twee waardes jou toe om die vervaging presies na die karakter te stem wat jy wil hê.
Daar is ook ’n interne veranderlike wat die moeite werd is om te ken:
int brightness = 255; // hoe helder die LED is
int pushButtonStatus = 0; // drukwaarde vanaf pen 2
brightness begin by 255, wat beteken die LED begin elke keer wanneer jy die knoppie druk op volle helderheid. As jy wil hê die vervaging moet vanaf ’n dowwer punt begin — sê, halfhelde — verander dit na 128.
Die logika self werk so: die lus lees die knoppie. As dit gedruk is (LOW, as gevolg van die interne pull-up), loop ’n while-lus solank brightness bo nul is. Binne daardie lus skryf die Arduino die huidige helderheid na die LED, trek fadeAmount af, wag fadeSpeed millisekondes en herhaal. Wanneer die knoppie nie gedruk is nie, word die LED bloot na 0 geskryf en bly af.
Een belangrike detail: die interne pull-up beteken die pen lees HIGH wanneer die knoppie nie gedruk is nie en LOW wanneer dit wel gedruk is. Dit is waarom die kode vir LOW kyk om ’n druk te bespeur. As jy ooit na ’n eksterne pull-down-weerstand oorskakel, sal jy daardie vergelyking na HIGH moet verander.
Lewendige projek en demonstrasie
Sodra dit opgelaai is, is die gedrag onmiddellik en bevredigend. Druk die knoppie en die LED spring na volle helderheid, en verdof dan sigbaar tot niks oor ’n tydperk wat jy beheer. Los die knoppie en die LED gaan donker; druk weer en die vervaging begin weer vanaf volle helderheid.
In die video word die vervaging by verskeie instellings gedemonstreer sodat jy die verskil kan hoor en sien. Met fadeAmount = 20 is die vervaging vinnig en grof — dit bereik nul in ’n handjievol sigbare stappe. Deur na fadeAmount = 10 te sak, maak dit dit aansienlik gladder, en om na fadeAmount = 3 te gaan, laat die vervaging merkbaar langer neem en lyk byna aaneenlopend. Die fadeSpeed-waarde het ’n ewe dramatiese effek: om dit op 1 ms te stel maak die vervaging byna onmiddellik, terwyl groter waardes dit uitrek.
Probeer hierdie eksperiment: stel fadeAmount = 5 en fadeSpeed = 30. Jy sal ’n stadige, sagte verdof kry wat lyk soos ’n lig wat aan die slaap raak. Stel dan fadeAmount = 50 en fadeSpeed = 1 vir ’n harde, vinnige afsny. Nie een is "verkeerd" nie — dit gaan heeltemal oor die stemming wat jy wil hê.
Die skakelgedrag van dieselfde knoppie word afsonderlik gedek in Les 98-3: Hoe om ’n skakel-LED aan/af te skakel met ’n drukknop met Arduino, en die eenvoudiger druk-om-te-lig-weergawe is in Les 98-2: Hoe om ’n LED aan en af te skakel met ’n drukknop met Arduino.
Omdat die vervaging deur ’n momentêre kontak geaktiveer word, is hierdie selfde stroombaan ’n natuurlike pasmaat om ’n relais of MOSFET in plaas van ’n LED te dryf — jy kan ’n 12 V-lamp vervaag, ’n motor se sagte-aansit, of ’n verwarmingselement se opwarm. Die knoppie is net die sneller; wat jy vervaag is aan jou.
Verwante projekte uit hierdie video
- Les 98-1: Hoe om ’n LED aan en af te skakel met Arduino
- Les 98-2: Hoe om ’n LED aan en af te skakel met ’n drukknop met Arduino
- Les 98-3: Hoe om ’n skakel-LED aan/af te skakel met ’n drukknop met Arduino
- Les 98-4: Vervaag ’n LED-lig met Arduino: Helderheidsbeheer
- Les 98-6: Wipplank-LED-speletjie met Arduino
- Les 98-7: Looplig met Arduino en 5 LEDs
- Les 98-8: Looplig met drukknop en LEDs met Arduino
- Les 98-9: LED-spanningvlakmeter met Arduino of looplig met potensiometer
- Les 98-10: Arduino-verkeerslig
Hoofstukke
- [00:00] Oorsig van die 10 LED-projekte
- [01:00] Inleiding tot die Arduino stap-vir-stap kursus
- [02:29] LED-basiese: simbole, polariteit en stroom
- [03:49] Bereken die LED-weerstand met Ohm se wet
- [05:53] Projek 1: Skakel 'n LED aan en af
- [12:43] Projek 2: LED met drukknop
- [17:13] Projek 3: Wissel LED met drukknop
- [20:12] Projek 4: Laat 'n LED vervaag
- [23:20] Projek 5: Laat 'n LED vervaag met 'n drukknop
- [27:32] Projek 6: Wipplank-LED
- [30:47] Projek 7: Looplig
- [36:41] Projek 8: Looplig met drukknop
- [42:25] Projek 9: LED-spanningvlakmeter
- [49:25] Projek 10: Arduino-verkeerslig
This code has not been parsed yet. Please return to the admin panel to parse it.
Goedere wat jy dalk nodig het
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
Hulpbronne en verwysings
-
DokumentasieDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
Buitenburg
-
Buitenburg
-
Buitenburg
Lêers📁
Arduino Biblioteke (zip)
-
SunFounder se 3-in-1 Slim Motor leerstel bronkode
3in1-kit-main-v2.zip12.80 MB
Gebruikershandleiding
-
SunFounder 3-in-1 Arduino Slimmotor-monteringshandleidingHierdie dokument wys stap-vir-stap montering van SunFounder 3-in-1 Arduino Slimmotor
SunFounder_car_assembly_manual.pdf1.20 MB