#3 Fade een LED via pulse width modulation


In deze Nederlandstalige Arduino tutorial voor beginners leer ik je hoe je via Pulse Width Modulation (PWM) een LED in een breadboard kunt laten faden.

De weerstand calculator vind je op https://www.weerstandcalculator.nl

#3 Fade een LED via pulse width modulation schakelschema

Benodigdheden

  • 1× Arduino
  • 1× Breadboard
  • 1× LED
  • 2× Jumper wire (man-man)
  • 1× 470 Ohm (goud-bruin-violet-geel) weerstand

Bas van Dijk

Over Bas on Tech


Mijn naam is Bas van Dijk, ondernemer, software ontwikkelaar en maker. Onder de naam "Bas on Tech" bied ik op YouTube videolessen aan over technische onderwerpen zoals Arduino en 3D-printen.

De video’s zijn in het Nederlands met ondertiteling, zodat mensen met een gehoorbeperking ze ook kunnen volgen.

Jaren geleden toen ik mijn eerste Arduino kocht had ik maar één doel: zo snel mogelijk een LCD schermpje aansluiten en er een tekst op laten zien. Na allerlei bronnen te hebben geraadpleegd kwam ik er na veel puzzelen eindelijk uit. Ik was als een kind zo blij met die paar letters op een geel schermpje.

Met Bas on Tech wil ik mijn kennis delen zodat ook anderen deze blijheid kunnen ervaren. Ik heb gekozen voor kort en krachtige YouTube video’s, met een duidelijke vaste opbouw en één onderwerp per video. Daarnaast staan onder elke video links naar de broncode en webshops waar de onderdelen te koop zijn.

video Transcriptie


0:00:12.060 voor deze schakeling heb je hetzelfde nodig als in les 2
0:00:17.350 een breadboard, Arduino, LED, weerstand
0:00:24.360 en twee jumper wires
0:00:30.780 vandaag gaan we ervoor zorgen dat ons LED wat we eerder hebben gemaakt
0:00:35.260 langzaam "aan" en "uit" gaat
0:00:37.950 dit noemen we ook wel "faden" maar voordat ik je ga uitleggen hoe we de
0:00:42.809 schakeling gaan maken moet het toch eerst eventjes een stukje theorie doen
0:00:47.120 en dat heet PWM oftewel Pulse Width Modulation
0:00:52.520 klinkt heel ingewikkeld  maar dat valt reuze mee
0:00:56.100 als je het allemaal uitgelegd heb gekregen.
0:00:59.000 Normaal hebben we het lampje "uit" of "aan" maar we willen nu dat hij ook half kan branden
0:01:07.620 hoe we dat doen is dat we het lampje heel snel laten knipperen
0:01:13.160 zo snel, dat wij het eigenlijk niet meer kunnen zien
0:01:16.960 ik heb een schema uitgeprint en dat werkt als volgt
0:01:19.580 hierboven staat een 0% duty cycle op 0 Volt
0:01:23.070 er gaat dus geen stroom doorheen
0:01:26.880 hier is het LED uit zoals we gewend zijn
0:01:30.040 onderop heb je een 100% duty cycle
0:01:33.869 die staat op 5 volt, de LED staat dus aan.
0:01:38.320 Wat nieuw is zijn de "cycles" ertussen
0:01:42.180 er zijn 255 stapjes op de Arduino
0:01:51.200 deze bovenste is een 25% duty cycle
0:01:55.140 dit betekent dat het lampje voor 25% "aan" staat
0:02:01.040 deze piek geeft aan dat hij van 0 na 5 gaat voor een bepaalde tijd
0:02:08.300 horizontaal staat de tijd
0:02:13.120 je ziet dat hij "aan" gaat, daarna een tijdje "uit" enzovoort
0:02:18.540 dat doet hij 25 procent van de tijd
0:02:20.920 omdat een Arduino heel snel aan en uit kan schakelen
0:02:24.560 lijkt het voor ons alsof het LED op 25% brandt.
0:02:29.960 hier zie je dat hij 50 om 50 "aan" en "uit" springt
0:02:35.960 je ziet hier weer de 5 volt dus aan en uit en dat doet hij zou de hele tijd
0:02:42.300 voor 75% is precies het omgekeerde van de 25%
0:02:48.400 je ziet hier dat hij een klein stukje "aan" is en hier maar een klein stukje "uit"
0:02:54.220 dus het begint lang "aan" en dan een klein stukje "uit"
0:03:00.120 dit noemen ze "pulsen", de pieken die je ziet
0:03:07.740 hier is het eigenlijk één lange puls
0:03:10.200 waarom heet het "pulse width modulation"?
0:03:14.140 In het Nederlands vertaald is het "manipuleren van de puls breedte"
0:03:17.920 Je ziet hier de breedte verschillen
0:03:22.140 en dat is wat we doen: we passen de breedte van de pulsen aan
0:03:26.650 hoe we doen ga ik je straks in de code laten zien
0:03:30.380 Ik ga nu beginnen en het maken van de schakeling
0:03:39.260 we gaan beginnen met het opnieuw maken van de schakelingen die we de vorige keer ook hebben gemaakt
0:03:44.820 met één verschil, dat laat ik zo zien
0:03:47.639 ik sluit eerst weer de rode draad aan, en de weerstand ertussen
0:03:58.240 en het LED. Let hier bij op de je met dan lange poot naar de rode draad gaat
0:04:06.710 ik sluit de nu de "min" weer aan op de "ground"
0:04:13.460 die sluiten we aardig op de "ground" die kunnen we hier onder doen alleen de plus
0:04:16.790 de "plus" gaan we veranderen . De vorige keer hadden we deze op pin 13 gezet
0:04:23.600 omdat we toen met het LED wilde schakelen.
0:04:28.660 om het faden te kunnen doen heb je een speciale poort nodig
0:04:32.400 je kunt naast pin 6, 5 en 3
0:04:36.500 en 9, 10 en 11 een klein streepje zien, pin 13 en 12 hebben dit niet
0:04:43.160 op jouw Arduino kan het ook een golfje zijn. Meestal is het een streepje of een golfje
0:04:47.810 dat betekent dat je op die poorten gebruik kunt maken van puls width modulation
0:04:56.600 wij gaan gebruik maken van poortje 11
0:05:00.500 ik plug de draad in poort 11
0:05:06.080 dan is voor nu de schakeling klaar, dan gaan we nu kijken naar de code
0:05:13.940 ik heb de Arduino IDE opgestart en ik ga jullie stap voor stap door de code leiden
0:05:19.500 om ons fadende lampje te krijgen
0:05:22.240 ik begin bovenaan
0:05:24.220 ik heb overal commentaar bij gezet
0:05:27.040 hier geven aan welke PWM we gebruiken
0:05:29.920 in ons geval is dat pin 11
0:05:33.780 het is een "integer" dus een nummer.
0:05:37.120 Wij hebben hier 11 in gezet hiervan is dat we nu de variabelen led
0:05:40.400 het voordeel hiervan is dat we de variabele "ledPin" kunnen gebruiken in onze code.
0:05:44.760 het voordeel is dat als we een andere pin gebruiken dat alleen hier hoeven aan te passen.
0:05:49.440 setup() laten we leeg.
0:05:51.560 het hoofdprogramma begint met het in-faden van de led
0:05:54.920 dat betekend dat hij van "uit" langzaam naar "aan" gaat dat gebeurt tussen regel 9 en 12
0:06:02.890 dit stukje wordt er meerdere keren uitgevoerd
0:06:07.090 dat komt omdat hier "for" staat dus eenzogenaamde "for loop"
0:06:11.640 wat wij hier doen, is dat we een variabele maken "ledVal"
0:06:15.700 dat is de waarde van de LED op dit moment
0:06:18.520 die begint bij 0 en die eindigt als "ledVal" 255 groot is.
0:06:24.980 dat doen we in stapjes van 1
0:06:28.120 vandaar de plus 1. Wil je grotere stapjes dat kun je hier eventueel 2 zetten
0:06:32.860 dan beginnen we met een "analogWrite" in de vorige tutorial hebben we
0:06:37.330 "digitalWrite" gebruikt dat was een 1 of een 0
0:06:42.480 en hier kunnen we omdat het een PWM pin is
0:06:45.920 waarden tussen de 0 en 255 wegschrijven
0:06:50.300 dus we schrijven een analoge waarde naar de LED pin
0:06:55.580 die hebben we net op 11 gezet
0:06:59.320 dus naar pin 11 gaat de waarde "ledVal"
0:07:02.180 wat is nu "ledVal"?
0:07:04.600 Deze begint met 0 dan gaat ie de lus door
0:07:08.000 komt terug en wordt verhoogd met 1
0:07:10.680 daarna is "ledVal" 1 geworden
0:07:13.220 dan 3 en dan 4 en dan 5 net zo lang totdat "ledVal" kleiner of gelijk is aan 255
0:07:21.540 wat er gebeurd is dat naar pin 11, 0 tot en met 255 weg geschreven
0:07:28.080 en na elke stap dat de waarde 1 hoger wordt, staat er een "delay" van 1000ms
0:07:33.740 dit doen we om het proces een beetje te vertragen anders zou je bijna niet kunnen waarnemen
0:07:39.180 dat een led harder gaat branden
0:07:43.180 in het tweede deel doel we precies het spiegelbeeld
0:07:45.880 ook weer een "ledVal" in een "for-loop"
0:07:48.840 maar hier gaat hij van 255 naar 0 toe
0:07:52.460 in plaats dat we verhogen, verlagen we de waarde met 1
0:07:57.760 ook hier schrijven we weer analoog naar LED pin 11
0:08:04.080 daarna hebben we weer een wacht momentje van 15ms
0:08:08.760 dus deze begint met 255 loopt de lus door
0:08:12.819 komt terug, haalt er 1 vanaf tot 254, dan 253 enz.
0:08:19.990 dan staat er op het einde nog een "delay" van 1000
0:08:23.800 wat gelijk staat aan 1 seconde dus dan wacht het hele programma
0:08:28.210 een seconde voordat hij opnieuw gaat beginnen met de led harder te laten branden
0:08:34.840 en hier weer zachter te laten branden
0:08:38.340 we hoeven nu alleen nog maar onze
0:08:40.760 schets naar de Arduino te sturen. Je kunt nu je Arduino koppelen aan de USB-poort
0:08:46.280 zorg ervoor dat je de juiste poort hebt geselecteerd
0:08:49.800 en het juist een bordje hebt gekozen
0:08:52.990 druk op uploaden, en als het goed is zie je dat het programma start met een
0:08:59.740 LED wat harder en zachter gaat branden zoals ik je nu laat zien
0:09:08.120 we hebben nu de code naar de Arduino gestuurd zoals hier bij het LED kunt zien
0:09:13.020 is dat hij langzaam aan en uit gaat
0:09:16.220 we hebben gezegd dat tussen het aan en uit gaan hij een seconde moet wachten
0:09:20.600 dat kun je ook zien. Hij gaat langzaam uit, dan wachten we een seconde en dan komt hij weer
0:09:26.440 als je dit resultaat heb dan is je project geslaagd
0:09:31.340 in de volgende tutorial
0:09:33.120 gaan we werken met een variabele weerstand
0:09:36.940 om zelf te bepalen hoe hard of zacht we het lampje willen laten branden