Obiettivo: Accensione automatica di un LED al diminuire dell’intensità di luce rilevata.
Componenti elettronici:
- Arduino UNO
- Breadboard
- 1 Led
- 1 Foto-resistenza
- 1 Resistenza (2.2kOhm)
Teoria: La foto resistenza è un componente elettronico la cui resistenza è inversamente proporzionale alla quantità di intensità luminosa che lo colpisce. Questo significa che la corrente (inversamente proporzionale alla resistenza) aumenta all’aumentare dell’intensità luminosa.
A seguire, viene riportato la caratteristica Ohm/Lux di una fotoresistenza tipicamente impiegata in applicazioni realizzate mediante Arduino.
Nel caso specifico, è importante ricordare che Arduino non può rilevare né variazioni di resistenza né variazioni di corrente. Il microcontrollore può infatti analizzare solamente valori di tensione. Per questo motivo, l’utilizzo di una resistenza è indispensabile al fine di collegare correttamente la fotoresistenza ad Arduino. Nel dettaglio, il circuito previsto per trasformare la variazione di resistenza in una variazione di tensione è il partitore di tensione.
Nel circuito presentato, la variazione di luminosità produce una variazione del valore della fotoresistenza. Di conseguenza anche il valore della corrente risulta funzione dell’intensità luminosa e di conseguenza anche il valore di tensione in ingresso ad Arduino. Nel dettaglio:
- Un incremento della luminosità porta ad un decremento della tensione.
- Un decremento della luminosità porta ad un incremento della tensione.
Attraverso l’utilizzo del comando analogRead è possibile leggere la tensione su uno specifico pin analogico (A0-A5) di Arduino. La funzione analogRead restituisce un valore compreso tra 0 e 1023 a seconda della tensione letta dal microcontrollore.
A titolo di esempio, se il valore di tensione letto utilizzando la funzione analogRead sul pin A0 di Arduino risulta pari a 613. Il valore di tensione può essere facilmente calcolato:
valoreTensioneAnalogico = 613/1023*5 = 3V
dove:
- Il valore analogico di tensione letto utilizzando l’istruzione analogRead è pari a 613
- Il valore di tensione massimo che può essere letto dalla funzione analogRead è pari a 1023
- La tensione massima in uscita ad Arduino è pari a 5V
Tale valore può essere facilmente utilizzato per controllare un led mediante l’istruzione condizionale IF.
Collegamento Circuitale:
Codice:
A seguire viene riportata la schematizzazione mediante flowchart dell’algoritmo utilizzato per realizzare il programma.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/* Lezione 8: SMART LAMP Accende un LED se la soglia di luminosità sceglie al di sotto di un valore prefissato. Creato 29 Mar 2019 da Andrea Primavera */ int pinLed = 13; void setup() { Serial.begin(9600); // Inizializza la comunicazione seriale a 9600 bits per secondo pinMode(pinLed, OUTPUT); } void loop() { int threshold = 500; int sensorValue = analogRead(A0); // legge il segnale di input sul pin analogico A0 Serial.println(sensorValue); // stampa il valore letto sul monitor seriale if(sensorValue>threshold) digitalWrite(pinLed, HIGH); else digitalWrite(pinLed, LOW); delay(50); // ritardo tra letture per stabilizzare il sistema } |
Personalizzazioni:
E’ possibile modificare il circuito aggiungendo altri led. E’ inoltre possibile modificare il codice al fine di realizzare una lampada che accenda un numero differente di led in funzione della luminosità.