Zoals je misschien ondertussen al weet heb je een onderscheid tussen analoog en digitaal. Daar digitaal maar twee toestanden heeft namelijk “AAN” of “UIT” of ook wel in spanningen uitdedrukt “5V” of “0V” of met getallen “1” of “0” heeft men bij analoog veel meer mogelijke waarden. Bij de Arduino zal het niet echt analoog zijn maar simuleert men een analoog systeem door 256 verschillende toestanden te voorzien. Als je dit uit zou drukken is de 5V verdeelt in 256 gelijke delen.
Gebruik : Voor een LED te kunnen dimmen, de snelheid van een motor te kunnen regelen, …
Mogelijkheden : AnalogWrite(uitgangsnaam,getal); kan enkel gebruikt worden met de pinnen die op het Arduino board aangeduid zijn door een sinusvorm. Het signaal dat op deze pin zal een blokgolf vorm hebben waarbij het getal zal bepalen hoelang het signaal hoog is, deze vorm van aansturen noemt men pulsbreedte modulatie of kortweg PWM (puls width modulatie)
Puls width modulation (PWM) Pulsbreedtemodulatie
Zoals je misschien al weet is een blokgolf een periodiek signaal, dit wil zeggen dat het blokje waarbij een bepaalde tijd het signaal “hoog” is en daarna een bepaalde tijd “laag” is zich continu zal herhalen.
De kleinste tijd waarin het signaal uniek is noemt men de periode. Bij de blokgolf is dat de tijd dat het signaal hoog is opgeteld met de tijd dat het signaal laag is.
De tijd dat het signaal hoog is zal bepalen hoeveel energie er in het signaal aanwezig is. Als het signaal continu hoog is zit er het meeste vermogen in en zal dus het aangesloten toestel op volle kracht functioneren. Een LED zal dus op volle sterkte branden en een motor zal op volle snelheid draaien.
Als het signaal continu laag is zit er geen vermogen in en zal dus het aangesloten toestel niet functioneren. tussen 0 en 255 zijn er dus nog 254 verschillende mogelijkheden gaande van een beetje vermogen tot bijna alle vermogen. Dit digitale signaal zal zich gedragen alsof het analoog is terwijl het in werkelijkheid een spanning is van 5V die continu zeer snel aan en uitgeschakeld zal worden, Dit signaal zal de Arduino automatisch maken, het enige wat je als gebruiker moet testen is of je tevreden bent met de hoeveelheid vermogen dat het toestel krijgt.
Bij de Arduino UNO zijn de pinnen die je met PWM kan gebruiken 3,5,6,9,10,11
Pinnen 3,5 zijn aangesloten op een LED van het KAEDU shield
Pin 6 is aangesloten op de servo aansluiting
Pin 9,10,11 is aangesloten op een drukknop. Een drukknop kan je niet met PWM gebruiken maar je kan wel de jumper verwijderen en iets anders op deze pinnen aansluiten.
Toepassen van PWM met analogWrite()
Wat PWM precies doet kan je het beste zien door alle 256 waarden kort na elkaar te tonen op een LED.
Bijvoorbeeld voor de rode led die aangesloten is op pin 3.
Voor Setup schrijf je dan
int LEDR2 = 3;
IN Setup moet je deze uitgang dan activeren.
pinMode(LEDR2,OUTPUT);
Je kan er dan 256 keer analogWrite schrijven maar eenvoudiger is om dit in een for lus te stoppen. Zo komt er automatische uitvoering van analogWrite voor 256 keer. Bij analogWrite moet je laten weten op welke uitgang je wil toepassen en hoeveel vermogen (een getal tussen 0 en 255 je op deze pin wil). Dat getal kan de i zijn van de for lus.
for(int i=0; i
Dit gaat zodanig snel dat je weinig verschil ziet, Als je verschillende waarden duidelijk wil zien dan zet je best na analogWrite een korte delay van bijvoorbeeld 100ms. Je zal dan de intensiteit van de LED zien veranderen in trapjes. Pas je analogWrite toe samen met het RGB shield dan krijg je een effect zoals in onderstaand filmpje.
Volgende les : analoog inlezen
Een spanning omzetten naar een getal kunnen we via analogRead().
Vorige les : digitalWrite()
Vergeet zeker niet hoe je met digitalWrite() en delay() werkt want dat heb je zo goed als elk programma nodig. Zoals in het verkeerslichtprogramma van de vorige les.