Les 6: Programmeren analogWrite voor dummies

In onze eerste les maakten we al kennis met het commando DigitalWrite();. In les 6 gaan we een stapje verder en leren we programmeren met analogWrite();. Beiden zijn commando’s gelinkt aan uitvoerende componenten, maar hier later meer over. Een volledige ontleding en gebruik van al onze commando’s wordt gegeven in onze sectie Arduino commando’s.

Programma:

We leerden al hoe we een ledje laten werken met digitalWrite. We programmeerden steeds dat ofwel het ledje moet branden ofwel het ledje gedoofd moet zijn. Maar wat als we het ledje op halve kracht zouden willen laten werken? Wel, dat kunnen we programmeren met analogWrite.

Eerst en vooral declareren we onze woorden. Onze ledje en onze knop schakelen we respectievelijk op uitgang 11 en 10. Deze declareren we als constanten terwijl we ‘knopStatus’ en ‘a’ declareren als variabelen. We schakelen ons ledje op uitgang 11 omdat deze PWM-signalen kan versturen. Deze zullen we nodig hebben om een variabele spanning over de led te bregen.

PWM-signalen:

PWM-signalen of pulse with modulation is een manier om met digitale middelen een analoog output te verkrijgen. PWM werkt met bloksignalen. Je hebt de maximum spanning enerzijds en de minimum spanning anderzijds. Door zeer snel te wisselen tussen beide krijgen we een resulterende spanning die tussen beide extrema liggen. Theoretisch gezien zouden het licht voortdurend knipperen, maar omdat deze wisseling sneller gaat dan de frequentie van onze ogen, zien we deze niet. De grote van de resulterende spanning hang of van de procentuele verhouding van de extrema per puls. Hoe langer deze dus bij de maximum blijft, hoe hoger dus de resulterende spanning.

PWM-signalen

Opbouw analogWrite:

Allereerst maken we een onderscheid tussen de uitvoerende en observerende poorten. Onze ledje programmeren we als een OUTPUT, een uitvoerende poort, en onze knop als een INPUT, een observerende poort.

We maken in deze code gebruik van een knop met vier standen. Zo kunnen we onze led op drie verschillende sterktes laten werken. De vierde stand gebruiken we om het ledje te doven.

analogWrite ( ledRood, 85);
analogWrite ( ledRood, 170);

Bij digitalWrite was het alles of niets, wit of zwart, 1 of 0… Dit was binaire, digitale taal. Echter wanneer we programmeren met analogWrite, kunnen we de grootte van de spanningsval over onze component, ons ledje, zelf kiezen. Een Arduino board kan een maximale spanningsval leveren van 5V. Omdat dit kan worden beïnvloed door gebruik te maken van extra componenten, maakt de Arduino geen onderverdeling in de hoeveelheden spanning. Daarom is alles op schaal omgezet. De maximale spanning staat gelijk aan 255, de maximale decimale waarde van een byte. Zo is, met enkel een Arduino-board, 128 gelijk aan 2,5V. 128 is namelijk de helft van 255, zodoende is 2,5 de helft van 5.

Notities:

analogWrite ( ledRood, 255);
analogWrite ( ledRood , 0 );

In dit voorbeeld programmeren we met analogWrite voor de maximale 255, en de minimale, 0 spanningsval. Deze commando’s zijn dus alles of niets, wit of zwart, 1 of 0… Binaire, digitale taal dus. Deze commando’s zijn dan ook respectievelijk gelijk aan digitalWrite( ledRood , HIGH) en digitalWrite ( ledRood, LOW).

In deze code zal de led bij de eerste druk op de knop dim zijn. Wanneer er meerdere malen gedrukt wordt zal de led steeds feller branden tot deze bij de vierde druk weer zal doven.

Code:

// Eerst zetten we onze woorden om in taal die arduino begrijpt.
const int ledRood =11;
const int knop = 10;
int knopStatus ;
int a = 0;

void setup() {
// Aangezien dat deze ” loop ” slechts eenmaal doorlopen wordt, declareer je hier jouw poorten.

pinMode ( ledRood , OUTPUT);
pinMode ( knop , INPUT);
}

void loop() {
// Vervolgens zetten we hier de opdrachten die uitgevoerd moeten worden. Deze “loop” wordt dus steeds herhaald.

knopStatus = digitalRead ( knop);
if ( knopStatus == HIGH && a==0){
analogWrite ( ledRood , 85); // levert 1,6667 V
delay ( 1000);
a = 1;
}

knopStatus = digitalRead ( knop);
if ( knopStatus == HIGH && a ==1){
analogWrite ( ledRood , 170); // levert 3,3333 V
delay ( 1000);
a = 2 ;
}

knopStatus = digitalRead ( knop);
if ( knopStatus == HIGH && a == 2 ) {
analogWrite ( ledRood , 255); // levert 5 V
delay ( 1000);
a = 3;
}
knopStatus = digitalRead ( knop);
if ( knopStatus == HIGH && a == 3 ){
analogWrite ( ledRood, 0); // levert 0 V
delay ( 1000)
a = 0;
}
}

Schakeling :

We schakelen een knop verbonden met de 5V spanningsbron en met een 100 000 ohmse weerstand verbonden aan de ground. Eenzelfde laatste pin wordt verbonden met uitgang 9 op de Arduino. Het rode ledje is op poort 11 geschakeld. In serie is er een weerstand van 200 ohm aangesloten.

programmeren analogwrite

Basislessen Arduino 50%

Ook raden we jou aan om bepaalde waardes of commando’s te vervangen of te veranderen. Zo wordt het snel duidelijke welke invloed een commando heeft op de werking van de schakeling. In deze code zal vooral een verschil in waardes bij het commando analogWrite een duidelijk verschil opleveren.

Bij problemen met het programmeren van analogWrite , aarzel dan zeker niet om contact op te nemen.

Als je deze code onder de knie hebt, ga dan over naar les 7!

Geplaatst in Programmeren Arduino voor dummies.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *