Crepuscolare con Arduino: LED e fotoresistenza LDR
Realizziamo un semplice sistema crepuscolare capace di accendere automaticamente un LED quando la luce ambientale diminuisce, utilizzando Arduino e una fotoresistenza LDR.
Cosa realizzeremo
In questo progetto utilizzeremo una fotoresistenza (LDR) per creare un semplice sistema crepuscolare. La resistenza elettrica dell’LDR varia in base alla quantità di luce ricevuta:
- più luce → resistenza più bassa;
- meno luce → resistenza più alta.
Arduino può leggere questa variazione e decidere quando accendere automaticamente una luce. Lo stesso principio può essere utilizzato per lampioni automatici, luci da giardino, sistemi domotici e altre automazioni domestiche.
Materiale necessario
Kit Arduino consigliato
Se non possiedi ancora i componenti puoi utilizzare un kit Arduino completo con LED, resistenze, breadboard e altri componenti utili per realizzare questo e molti altri progetti.
🛒 Guarda un kit Arduino su AmazonLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
Come funziona la fotoresistenza
La fotoresistenza è un sensore molto semplice. Quando la luce aumenta, la sua resistenza diminuisce; quando la luce diminuisce, la resistenza aumenta. Per permettere ad Arduino di trasformare questa variazione in un valore leggibile, l’LDR viene utilizzata insieme a una resistenza da 10 kΩ formando un partitore di tensione.
Schema di collegamento
Il sensore di luce viene collegato all’ingresso analogico A0.
Il collegamento formato da LDR e resistenza da 10 kΩ permette quindi di ottenere sul pin A0 un valore analogico che varia con la luminosità.
Collegamento del circuito crepuscolare con Arduino, LED e fotoresistenza.
Come funziona il programma
Arduino legge continuamente il valore presente sull’ingresso analogico A0 tramite analogRead(A0). Il valore restituito varia da 0 a 1023.
| Condizione | Valore indicativo | Comportamento |
|---|---|---|
| Buio | Valore più basso | LED acceso |
| Molta luce | Valore più alto | LED spento |
Nel programma viene utilizzata una soglia iniziale di 500. Quando il valore letto è inferiore alla soglia, Arduino considera l’ambiente sufficientemente buio e accende il LED.
Codice Arduino
// Arduino Light Sensor (LDR) Example
// Accende il LED quando la luce diminuisce
const int ledPin = 13;
const int ldrPin = A0;
int threshold = 500;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
int lightValue = analogRead(ldrPin);
// Se il livello di luce è basso accende il LED
if (lightValue < threshold) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
Il codice spiegato passo passo
Definiamo i pin
Il LED è collegato al pin digitale 13, mentre la fotoresistenza viene letta tramite l’ingresso analogico A0.
Impostiamo la soglia
La variabile threshold contiene il valore di riferimento che separa la condizione di luce dalla condizione di buio.
Leggiamo la fotoresistenza
Con analogRead(ldrPin) Arduino acquisisce il valore analogico proveniente dal partitore di tensione.
Accendiamo o spegniamo il LED
Se il valore letto è inferiore alla soglia, il pin del LED viene portato su HIGH. Negli altri casi viene portato su LOW.
Simulazione online
Puoi provare il progetto anche attraverso la simulazione disponibile su Tinkercad.
▶️ Apri la simulazione TinkercadScarica lo sketch
Se preferisci, puoi scaricare direttamente il file Arduino del progetto.
⬇️ Scarica led_e_fotoresistenza.inoDebug rapido
Se il circuito non funziona correttamente:
- controlla il collegamento della fotoresistenza;
- verifica la presenza della resistenza da 10 kΩ;
- controlla la polarità e il collegamento del LED;
- prova a modificare il valore della soglia threshold.
Varianti del progetto
Puoi sviluppare il circuito in diversi modi:
- accendere una lampada tramite relè;
- controllare più LED;
- visualizzare il livello di luminosità sul monitor seriale;
- utilizzare il sensore all’interno di un sistema domotico.
Cosa devi ricordare
- La fotoresistenza LDR cambia resistenza in base alla luce.
- LDR e resistenza da 10 kΩ formano un partitore di tensione.
- Arduino legge il livello di luce tramite l’ingresso analogico A0.
- La soglia determina quando il LED deve accendersi.
- La soglia può essere adattata alle condizioni reali dell’ambiente.
Domande frequenti
Perché il LED rimane sempre acceso?
Controlla i collegamenti della LDR e della resistenza da 10 kΩ. Se il circuito è corretto, prova a modificare il valore della soglia.
Posso cambiare il valore di threshold?
Sì. La soglia deve essere adattata al livello di luce presente nell’ambiente in cui utilizzi il circuito.
Posso usare il progetto per accendere una lampada?
Il progetto può essere esteso utilizzando un relè, come indicato tra le varianti del circuito.

