Stel je wil iets dat veel stroom verbruikt (bij voorbeeld een grote lamp of een elektromotor) laten reageren op de hoeveelheid licht. Een Arduino pin kan maar heel weinig stroom leveren (maximaal zo'n 40 mA) dus de stroom moet komen van een andere stroombron, zoals een batterij. Door gebruik te maken van een relais module kunnen we de stroom naar de lamp onderbreken door pin 13 HIGH of LOW te zetten. Kijk voor een uitgebreidere beschrijving van het relais bij: Enkel relais met dc motor
Aansluitingen:
Relais Arduino kant: 5V op VCC, GND op GND, Pin 13 op IN (midden).
Relais Batterijkant: Plus batterij op middelste schroefaansluiting. Linker of rechter schroefaansluiting naar de lamp (afhankelijk van of het relais normaal open (NO) of normaal gesloten (NC) moet zijn).
De min van de batterij is verbonden met gnd van de Arduino
LDR aansluiting:
Eén kant van de LDR aangesloten op 5V. De andere kant rechtstreeks verbonden met Analoge pin 0 en via een 10 kohm weerstand verbonden met ground (gnd).
Onder aan de pagina staan twee test programma's. Het linker programma is het meest eenvoudige. Met het rechter programma kan je ook de waarde van de LDR op pin A0 op de serial monitor aflezen.
Als de LDR waarde heel dicht bij de grenswaarde is kan het zijn dat er de ene keer net boven en de andere keer net onder de grenswaarde gemeten wordt. Het relais zou dan heel snel hoog en laag geschakeld worden (het relais gaat ratelen). Dit is meestal niet gezond voor het relais en datgene dat erop aangesloten is. Daarom is er een delay toegevoegd aan de sketch zodat het relais in ieder geval de delay tijd in dezelfde stand blijft staan. De delay tijd is natuurlijk afhankelijk van het doel van de schakeling. Als je bij voorbeeld in een blikjespletter een laserstraal gebruikt om de LDR te 'belichten' waarbij als de laserstraal onderbroken wordt het blikje geplet wordt, kan de delay tijd vrij kort zijn. Zou je een lamp maken die aan moet blijven als het donker is kan kan een veel langere delay tijd beter zijn.
Hieronder links testcode zonder seriële monitor, rechts met seriële monitor
// Zonder seriële monitor
// Relais met LDR en threshold
int ldrPin = 0; // LDR op analoge pin 0
int relaisPin = 13; // relais op pin 13
int threshold = 700; // grenswaarde LDR
void setup(void) {
pinMode(relaisPin, OUTPUT);
}
void loop(void) {
if(analogRead(ldrPin) < threshold) {
digitalWrite(relaisPin, HIGH);
}
else {
digitalWrite(relaisPin, LOW);
}
delay(300);
}
// Met seriële monitor
// Relais met LDR en threshold
// Op de serial monitor wordt de LDR waarde afgedrukt
int ldrPin = 0; // LDR op analoge pin 0
int relaisPin = 13; // relais op pin 13
int threshold = 700; // Grenswaarde LDR (kan je zelf veranderen)
int ldrWaarde = 0; // variabele voor de LDR waarde
void setup(void) {
pinMode(relaisPin, OUTPUT);
Serial.begin(9600); // Start de serial monitor
}
void loop(void) {
ldrWaarde = analogRead(ldrPin);
Serial.print(" LDRwaarde = ");
Serial.println(ldrWaarde); // print de analoge waarde op de monitor
if (analogRead(ldrPin) < threshold) {
digitalWrite(relaisPin, HIGH);
}
else {
digitalWrite(relaisPin, LOW);
}
delay(1000);
}