
Sensore di luminosità
Inizio questa lezione con un’informazione che va a correggere quanto scritto sul sito Arduino in riferimento al Grove Light Sensor in cui erroneamente viene indicato il dispositivo come fotoresistenza, in realtà si tratta di un fototransistor e ciò, soprattutto per i neofiti può creare qualche problema di comprensione, soprattutto perché lo sketch presentato non fornisce esattamente quanto indicato.
Fotoresistenza o fototransistor?
- Versione 1.0 del Grove-Light Sensor – usava una classica CdS LDR GL5528, cioè una vera fotoresistenza.
- Versione 1.1 / 1.2 (quella montata sullo Shield dell’Arduino Sensor Kit) – per ragioni RoHS (il cadmio delle CdS è vietato) Seeed ha sostituito l’LDR con un LS06-S: si tratta di un sensore a fototransistor lineare (tecnicamente una fotodiodo-transistor) che “mima” la vecchia fotoresistenza ma è più rapido e lineare.
Il sito di Arduino non ha aggiornato la terminologia e continua a chiamarlo “photo-resistor”.
Ora come possiamo fare per non creare problemi a chi inizia?
Innanzi tutto se volete utilizzare una fotoresistenza vi rimando alle mie slide: Alfabeto di Arduino – Lezione 3, ma attenzione in questo caso dovrete usare una breadboard e realizzare un circuito con un resistore da 10Kohm e una fotoresistenza, in questo modo usando lo sketch presente sul sito Arduino o quelli indicati nelle mie slide tutto funzionerà ed avrete valori che variano tra 0 e circa 900, coll’esempio sul sito Arduino avrete un valore massimo più basso.
Dal punto di vista teorico cosa succede (usando una fotoresistenza):
La fotoresistenza (o LDR, Light Dependent Resistor) per rilevare l’intensità della luce:
- la resistenza della fotoresistenza diminuisce quando l’intensità luminosa aumenta;
- la resistenza della fotoresistenza aumenta quando l’intensità luminosa diminuisce.
L’ADC dell’Arduino la converte in un numero intero da 0 (buio) a 1023 (molta luce) quindi la lettura avviene tramite l’istruzione analogRead() per questo kit collegheremo direttamente il modulo al pin A3 e quindi nel codice scriveremo: analogRead(A3).
// Prof. Maffucci Michele
// Uso del sensore di luminosità
// 27.05.2025
int sensore_luce = A3; // pin del sensore di luminosità
void setup() {
analogReference(INTERNAL); // 1,1 V; attivare PRIMA di qualsiasi analogRead
delay(3); // attesa minima per la stabilizzazione della reference
Serial.begin(9600); // avvia la comunicazione seriale
}
void loop() {
int luce_grezza = analogRead(sensore_luce); // legge il valore grezzo dal pin A3
int luce = map(luce_grezza, 0, 1023, 0, 100); // converte 0–1023 in 0–100 (percentuale)
Serial.print("Livello di luce: ");
Serial.println(luce); // stampa il valore di luce sul Monitor Seriale
delay(1000); // attende 1 secondo prima della prossima lettura
}
Le cose sono simili con il Grove-Light Sensor sull’Arduino Sensor Kit, ma avrete, come dicevo, valori massimi più bassi, che raggiungo circa i 750 con la torcia dello smartphone direttamente puntata sul fototransistor. Dal punto di vista funzionale nulla cambia ma è importante aver ben presente che siamo lavorando con componenti elettronici diversi che hanno comportamenti simili.
Con lo sketch precedente otterremo sulla serial monitor questi valori:

Il fatto che il valore massimo si fermi attorno a 750 è in realtà perfettamente coerente con l’elettronica del modulo.
Quindi per ora, per chi inizia potete far finta che il componente sull’Arduino Sensor Kit è una fotoresistenza e se desiderate potete fermarvi a questo punto.
Continua a leggere→