Les 10: Werken met een lichtsensor

In vorige lessen leerden we hoe we onze Arduino lieten samenwerken met de computer. Dat was een zeer belangrijk deel van coderen met Arduino en zeker niet te onderschatten. Vandaag zullen we echter weer met een component werken! Want net zoals onze computer zijn er ook componenten die meer kunnen dan slecht een binaire taal verwerken. Dit zijn analoge componenten, zoals lichtsensoren. Vandaag zullen we dan ook werken met een lichtsensor. Deze analoge componenten zijn overal aanwezig in de industrie. Toch is het zeer simpel om er één zelf te coderen… Laten we beginnen!

Werken met een lichtsensor:

In deze les zullen we werken met een lichsensor. Deze lichtsensor is uiteraard analoog. Er zijn namelijk veel meer mogelijkheden dan licht of donker, aan of uit, 1 of 0 … We gaan vandaag ervoor zorgen dat ons ledje automatisch zal beginnen branden wanneer het donker wordt.

Opbouw:

We beginnen nog steeds met onze woorden te declareren. Vandaag werken we met een LED en een lichtsensor. We schakelen onze LED op uitgang 12. Zoals eerder vermeld mag de led geschakeld worden op elke poort, behalve als we deze wouden dimmen. Dan hadden we een poort nodig die met PWM werkte, zodat deze analoge signalen kon verwerken. Voor onze analoge component is dit niet anders. Deze moet ofwel op een analoge poort A0,A1…  ofwel op een PWM-poort geschakeld worden. Deze PWM-poorten kan je herkennen met het golfje naast het nummer. Daarom schakelen we onze lichtsensor op poort 11 en bijvoorbeeld niet op poort 13.

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

We maken opnieuw onderscheidt tussen onze uitvoerende en observerende poorten. Onze uitvoerende poorten voeren acties uit, terwijl observerende poorten de Arduino informatie verschaffen. Uiteraard is onze lichtsensor in observerende poort. De LED gebruiken we als OUTPUT. We starten ook de seriële communicatie om een overzicht te hebben over onze sensor-waarden.

Het programma:

Wanneer we werken met een analoge component, zoals een lichtsensor, maken we een variabele om de waarde in op te slaan. In deze les gebruiken we lichtSensorStatus. Deze stellen we dan ook gelijk aan de waarde van de sensor helemaal in het begin van ons programma.

lichtSensorStatus = analogRead ( lichtSensor );

Net zoals we digitalRead(); hebben om digitale observerende poorten te lezen, hebben we analogRead voor de analoge sensoren. Nu zullen we niet slechts een 1 of een 0 als antwoord krijgen. AnalogRead zal waarden gegeven in het interval [0,1023]. Wanneer we de waarde hebben ontvangen sturen we die door daar de seriële monitor op onze computer. Zo kunnen we deze evalueren.

if ( lichtSensorStatus <= 400){
digitalWrite ( ledRood , HIGH);
}

Met deze if-functie stellen we de voorwaarde waaraan voldaan moet worden om de LED te laten branden. In deze code is de voorwaarde dat de waarde van de lichtsensor kleiner of gelijk aan moet zijn aan 400. Als deze voorwaarde voldaan is, zal de LED branden.

else{

digitalWrite ( ledRood, LOW);

}

Wanneer we werken met een lichtsensor, hebben we ook een manier nodig om de led te doven. Dit doen we door gebruik te maken van een else-functie. Telkens als de voorwaarde van van de if-functie niet voldaan is, zal deze else-functie doorlopen worden. Zo zal de led doven wanneer het weer lichter wordt.

Code

// Eerst zetten we onze woorden om in taal die Arduino begrijpt.

int ledRood =12;
int lichtSensor =11;

int lichtSensorStatus;

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

pinMode ( ledRood , OUTPUT);
pinMode ( lichtSensor , INPUT);
Serial.begin( 9600);
}
void loop() {
// Vervolgens zetten we hier de opdrachten die uitgevoerd moeten worden. Deze “loop” wordt dus steeds herhaald.

lichtSensorStatus = analogRead ( lichtSensor );
Serial.println( lichtSensorStatus);
if ( lichtSensorStatus <= 400){
digitalWrite ( ledRood , HIGH);
}

else{

digitalWrite ( ledRood, LOW);

}

Schakeling:

We schakelen een ledje met in serie een 200 ohm weerstand. Het positieve been is verbonden met poort 12. De lichtsensor daarentegen is verbonden met zijn negatieve been met poort 11. Dit komt omdat de sensor een observerende component is, terwijl de LED een uitvoerende component is.

werken met een lichtsensor
Basislessen Arduino 83.3%

Ook raden we jou aan om bepaalde waardes of commando’s te vervangen of te veranderen. Zo wordt het al snel duidelijke welke invloed een commando heeft op de werking van de schakeling. In deze code kan je eens proberen om te voorwaarde in de if-else-functie te veranderen.

Als je deze code vlotjes beheerst, ga dan over naar les 11!

Geplaatst in Programmeren Arduino voor dummies.

Geef een reactie

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