Lichtintensiteit - Introductie
Dit is een project waarin we de licht sensor gebruiken. Afhankelijk van de hoeveelheid licht, zal de weerstandswaarde veranderen. De sensor geeft geen spanningsverschil terug. Om deze sensor te kunnen gebruiken moeten we een spanningsdeler toepassen.
Spanningsdeler
De spanningswaarde die op de Arduino binnen komt, kan nu worden omgerekend naar een lichthoeveelheid. Dit gebruiken we om LEDs te laten branden. Bij geen licht, zal geen LED branden. Bij weinig licht slechts enkele LED branden, bij veel licht zullen alle LEDs branden.
Breadboard
Source code
/*
   Light sensor
   (C) copyright www.punthooft.nl 2019-2025
*/
const int analogInPin = A0; // Analog input pin
// Variables
int sensorValue = 0;    // value read from the pot
// Setup function runs once when powerup the board and on reset
void setup() {
   // initialize serial communications at 9600 bps:
   Serial.begin(9600);
   // Set each pin as output and off
   for(int pinNumber = 0; pinNumber <= 9; pinNumber++) {
      pinMode(pinNumber+2, OUTPUT);
      digitalWrite(pinNumber+2,LOW);
   }
}
// The loop function runs over and over again forever
void loop() {
   // fetch light value and convert to ledValue
   sensorValue = analogRead(analogInPin);
   int ledValue = (sensorValue-550) / 50;
   // Write values in the serial Monitor
   Serial.print("sensor =");
   Serial.print(sensorValue);
   Serial.print(" led=");
   Serial.println(ledValue);
  delay(500);
   // Check for other LEDs which to turn ON
   for(int pinNumber = 0; pinNumber <= 9; pinNumber++) {
      if (pinNumber <= ledValue) {
         digitalWrite(pinNumber+2,HIGH);
      } else {
         digitalWrite(pinNumber+2,LOW);
      }
   }
}
Opmerkingen
In het breadboard staan 5 LEDs getekend. In de code ga ik uit van 10 stuks. Sluit deze aan op pin 2 tot en met 11.
Om de LED's te beschermen tegen teveel spanning zijn voorschakelweerstanden nodig. Een weerstand per LED. Ik gebruik er hier van 220 Ohm. De te gebruiken weerstandswaarde is echter afhankelijk van het type/soort/kleur van de LED. Uitrekenen is eenvoudig, zie de theorie in componenten of gebruik meteen de rekenhulp
Let op dat voor de sensor een weerstand van 10 kOhm nodig is!
Voor het uitrekenen van de waarde van de LED gebruik ik de formule:
ledValue = (sensorValue-550) / 50
Ik heb hiervoor eerst de sensor afgedekt. Toen gaf deze nog een waarde van 550 aan. Die trek ik er vanaf. In uiterste stand gaf de led nog rond de 1000 aan. :
Boven in het programma, voor de setup staan de constanten, de waarde van de constanten kan niet worden aangepast. Deze waarden blijven altijd hetzelfde. Eronder staat een variable sensorValue. Deze zetten we hier op 0. Dit is geen constante, deze waarde kan (en zal) tijdens het programma in de loop iedere keer worden aangepast.
Onder de loop zien we nog 2 functies staan. Dit zijn zelf geschreven functies. De flashLED functie zal worden aangeroepen vanuit de setup. De turnLEDOn functie zal in de loop worden gebruikt. De code zal van boven naar onder worden uitgevoerd. Als er opeens een functie staat (met of zonder waarden erachter) dan zal het programma verder gaan in deze functie. Deze helemaal uitvoeren en als die is afgewerkt, zal er worden teruggekeerd naar de plaats waar de functie stond, en met het eerst volgende commando erna verder gaan. De waarden achter de functienaam, tussen haakjes, zijn argumenten (ook wel parameters) genoemd. De uitvoerende functie krijgt deze waarden mee vanuit de aanroepende functie.
Door het gebruik van functies kan code overzichtelijk worden opgebouwd / ingedeeld. Ook kunnen de functies op verschillende plaatsen worden aangeroepen, wat weer dubbele code scheelt.