## Project 2.3 Licht sensors

In dit project gaan we leren hoe we een fotoweerstand, een lichtgevoelig type variabele weerstand, kunnen uitlezen met de analoge ingang van Arduino. Dit wordt ook wel een LDR (lichtafhankelijke weerstand) genoemd.

Tot nu toe heb je al geleerd hoe je LED’s kunt aansturen met de analoge uitgang van Arduino en hoe je een potentiometer kunt uitlezen, wat ook een type variabele weerstand is. We bouwen in dit project voort op die vaardigheid. Onthoud dat de analoge ingangen van Arduino (de pinnen gemarkeerd met A0-A6) een geleidelijk veranderend elektrisch signaal kunnen detecteren en dat signaal omzetten in een getal tussen 0 en 1023.

Je weet welke componenten je nodig hebt, probeer nu zelf de schakeling na te bouwen:

- LED
- 220 ohm weestand
- Licht gevoelige weerstand
- 4,7 kilo ohm weerstand

1. De fotoweerstand moet verbonden zijn met een analoge pin (in het voorbeeld A0) op de Arduino. De ene poot van de fotoweerstand wordt aangesloten op de 5V (+) en de andere op A0. Tussen die laatste poot en de - (GND) plaats je een weerstand van 4,7 kΩ.

2. De LED wordt aangesloten op een digitale pin (bijvoorbeeld pin 9) van de Arduino. De anode (de langere poot, +) van de LED wordt met pin 9 verbonden, terwijl de kathode (de kortere poot, -) in serie geschakeld is met een weerstand van 100 Ω tot 1 kΩ. Verbind de andere kant van de weerstand met de - (GND).

3. Het breadboard moet goed verbonden zijn met de Arduino. Sluit de + rail van het breadboard aan op de 5V van de Arduino en de - rail op de GND van de Arduino.

Kijk goed naar het voorbeeldcircuit om te zien hoe de componenten zijn verbonden. Je mag andere pinnen gebruiken als dat handiger is voor jouw schakeling.

Kom je er niet uit? Controleer de schematische weergave of kijk naar het voorbeeldcircuit voor hulp. Kun je het nog steeds niet oplossen? Bekijk dan het antwoord bij de oplossingen.

Open de code-editor en selecteer in het dropdownmenu links de optie “Blocks + Text” om de gegenereerde Arduino-code te bekijken. Volg mee terwijl we de code stap voor stap verkennen:

De variabele sensorValue

`int sensorValue = 0;`

Boven de setup() maken we een variabele aan om de waarde op te slaan die wordt uitgelezen van de fotoweerstand. Dit is een integer (int), wat betekent dat het een geheel getal is.

De setup() functie

`void setup(){`

`pinMode(A0, INPUT);`

`pinMode(9, OUTPUT);`

`Serial.begin(9600);`

`}`

In de setup() configureren we de pinnen met de functie pinMode().

• Pin A0 is ingesteld als INPUT zodat we het signaal van de fotoweerstand kunnen uitlezen.

• Pin 9 is ingesteld als OUTPUT om de LED aan te sturen.

• Met Serial.begin(9600) openen we een seriële communicatiekanaal, waarbij 9600 bits per seconde wordt gebruikt om berichten te verzenden.

De loop() functie

`void loop(){`

`// Lees de waarde van de sensor`

`sensorValue = analogRead(A0);`

`// Print de sensorwaarde om het bereik te begrijpen`

`Serial.println(sensorValue);`

In de hoofdlus lezen we met analogRead(A0) de waarde van pin A0 uit. Dit levert een getal op tussen 0 en 1023. Deze waarde wordt opgeslagen in sensorValue.

Met Serial.println(sensorValue) sturen we de sensorwaarde naar de seriële monitor, zodat je kunt zien hoe deze verandert.

De helderheid van de LED aanpassen

`// Map de sensorwaarde naar een bereik voor de LED`

`analogWrite(9, map(sensorValue, 0, 1023, 0, 255));`

`delay(100); // Wacht 100 milliseconden`

`}`

Hier gebruiken we de functie map() om de sensorwaarde van het bereik 0-1023 om te zetten naar 0-255, het bereik dat nodig is voor analogWrite().

• `analogWrite(9, ...)` stuurt de geschaalde waarde naar pin 9, wat de helderheid van de LED bepaalt.

• De `delay(100`) pauzeert de lus kort, zodat veranderingen in helderheid soepel verlopen.

Tips

• Commentaar in de code: Alles wat na // staat, is een uitleg voor mensen en wordt niet door de Arduino uitgevoerd.

• Test de code en experimenteer door bijvoorbeeld de pinnen of waarden aan te passen om te zien hoe dat de werking beïnvloedt.

Kom je er niet uit? kijk dan bij de antwoorden