Pentru a detecta lumina si a o folosi la a comanda un microcontroler putem folosi un modul care are inclus si un fotorezistor (LDR).Acest modul este creat cu ajutorul circuitului integrat LM393 si a catorva componente pasive.
Acest modul se alimenteaza cu o tensiune cuprinsa intre 3.3V si 5V. Iesirea acestui modul este in format digital LOW. Mai exact in lipsa luminii pe pinul de iesire avem o tensiune egala cu tensiunea de alimentare. La detectarea luminii iesirea comuta in 0 logic (0V tensiune de iesire).
Modulul poate fi cumparat la un pret de 5 lei de aici.
Reglajul sensibilitatii acestui modul se realizeaza cu ajutorul rezistorului semireglabil de 10KiloOhmi aflat pe modul.
Poza cu modulul este cea de mai jos:

Schema electronica a acestui modul este cea de mai jos:

Pentru a folosi acest modul cu Arduino va trebui sa creeam un sketch simplu, format doar din cateva linii de cod.
Acest cod este explicat mai jos:
In prima linie vom declara o variabila care contine pinul digital unde vom conecta iesirea modulului. In acest caz vom folosi portul D3 al Arduino:
int LDR = 3;
Apoi vom crea prima functie necesara compilarii programului:
void setup() {}
In interiorul acestei functii vom adauga 2 linii de cod.
In prima linie de cod vom initializa functia de transfer serial pentru a citi rezultatele in consola:
Serial.begin(9600);
In cea de-a doua linie vom seta pinul digital al Arduino ca si pin de intrare:
pinMode(LDR, INPUT);
Codul final pentru functia setup() este urmatorul:
void setup() {
Serial.begin(9600);
pinMode(LDR, INPUT);
}
Urmatoarea functie in care va trebui sa introducem cod este functia loop(). Aceasta functie se va executa in mod repetitiv si are urmatoarea forma:
void loop() {}
In aceasta functie vom adauga liniile de cod de mai jos.
In prima linie de cod vom citi valoarea aflata la pinul D3 al Arduino:
int val = digitalRead(LDR);
In variabila val vom avea stocata valoarea returnata de catre modul in format LOW sau HIGH.
Pentru a afisa aceasta valoare in consola seriala (sau intr-un display LCD) vom folosi instructiunea conditionala if... else. Aceasta instructiune ne va afisa o propozitie in cazul in care nu este lumina si o alta propozitie in cazul in care se detecteaza prezenta luminii. Codul este cel de mai jos:
if (val == LOW) {
//aici se va executa codul in cazul in care este detectata lumina de catre modul, iesirea acestui fiind in LOW
Serial.println("Am detectat lumina...");
} else {
//aici se va executa codul in cazul in care valoarea citita la pinul D3 este HIGH, valoare care semnifica lipsa luminii
Serial.println("Nu avem lumina detectata...");
}
Dupa executarea acestor linii de cod vom pune microcontrolerul in pozitie de asteptare pentru 1 secunda prin adaugarea acestei linii de cod:
delay(1000);
Codul in intregima din functia loop() este mai jos:
void loop() {
int val = digitalRead(LDR);
if (val == LOW) {
Serial.println("Am detectat lumina...");
} else {
Serial.println("Nu avem lumina detectata...");
}
delay(1000);
}
Sketchul in forma finala este cel de mai jos:
int LDR = 3;
void setup() {
Serial.begin(9600);
pinMode(LDR, INPUT);
}
void loop() {
int val = digitalRead(LDR);
if (val == LOW) {
Serial.println("Am detectat lumina...");
} else {
Serial.println("Nu avem lumina detectata...");
}
delay(1000);
}
In consola se va returna urmatorul mesaj:
