Video 7 - Arduino fotoresistenza e tre LED | Prof. Giagnotti
🎥 VIDEO 7 · ARDUINO · FOTORESISTENZA + 3 LED + ADC
✍ Autore: profgiagnotti

Video 7 - Arduino fotoresistenza e tre LED

Sensore di luce ambientale: LDR come partitore, lettura ADC 0-1023, mappatura a soglie e barra luminosa a 3 LED che si spegne con la luce.

Video 7 Arduino Fotoresistenza LDR ADC + if-else ~30 min di video 📑 Stampa → ▶ YouTube Aggiornata 2025/26

2. Di cosa parla questo video

In questo tutorial ti guiderò nella realizzazione di un progetto con Arduino attraverso l'ambiente di lavoro di Tinkercad, facciamo funzionare una fotoresistenza con 3 LED: se è buio rimarranno accesi 3 LED, via via che la luminosità aumenta si spegne il primo poi il secondo e infine il terzo LED, creando una barra luminosa crepuscolare che reagisce alla luce ambientale.

Ultimo progetto del corso Arduino base: fotoresistenza LDR 10kΩ al buio / 1kΩ alla luce + resistenza fissa 10kΩ formano partitore su A0. Cablaggio: 5V → LDR → nodo A0 + 10kΩ → GND (o LDR verso GND e 10k verso 5V, invertito). Al buio LDR 1MΩ → tensione bassa su A0 → val ADC basso ~0-200 → 3 LED ON. Alla luce LDR 1kΩ → tensione alta → val alto ~800-1023 → 0 LED ON. Codice con if-else a soglie: int val = analogRead(A0); if(val < 300) { 3 LED ON } else if(val < 600) { 2 LED ON } else if(val < 900) { 1 LED ON } else { 0 LED ON }. Mappatura ADC: int luce = map(val, 0, 1023, 0, 100); // percentuale. Serial per calibrare soglie buio/luce in Tinkercad.

💬 Nota del docente - Perché ho fatto questo video

Questo è il video finale che chiude il cerchio del corso Arduino. Nel video al minuto 8 mostro l'errore che fa fallire il 90%: collegate LDR diretta tra 5V e A0 senza resistenza fissa 10kΩ. Così A0 è flottante quando LDR non conduce, e quando conduce create corto 5V-GND. Serve sempre partitore LDR + 10kΩ. Al minuto 13 mostro perché LDR va calibrata: in Tinkercad luce ambientale si regola con slider, val al buio 50 e alla luce 900, ma su Arduino reale val buio 0 e luce 1023 dipendono da LDR e 10kΩ, dovete stampare su Serial e trovare soglie 300-600-900 adatte al vostro ambiente. E al minuto 18 mostro barra LED inversa: se volete che più luce = più LED accesi, invertite logica if, ma per crepuscolare buio=3 LED ha senso come luce notturna.

3. Obiettivi di apprendimento

  • ✅ Funzionamento della fotoresistenza LDR come resistenza variabile con la luce
  • ✅ Familiarizzare con la mappatura dell'ADC converter di Arduino 0-1023 a soglie
  • ✅ Creazione e simulazione del tuo settimo circuito Arduino con barra a 3 LED
🎯 Cosa saprai fare dopo questo video

Alla fine saprai cablare LDR con resistenza fissa 10kΩ come partitore su A0, leggere luce ambientale 0-1023 con analogRead, calibrare soglie buio/luce con Serial Monitor, usare if-else if-else per creare barra luminosa a 3 LED che si spegne con la luce, mappare ADC a percentuale 0-100% con map(), e creare sensore crepuscolare per luci automatiche notturne.

4. Perché fotoresistenza - Da manopola a sensore ambientale

Video 6 potenziometro manuale. Video 7 sensore automatico:

Potenziometro (Video 6)Fotoresistenza LDR (questo video)
Manuale: ruoti manopola → cambi luceAutomatico: luce ambientale → cambia da sola
Resistenza fissa 10kΩ variabile meccanicaResistenza variabile con luce: buio 1MΩ, luce 1kΩ
1 LED dimmerato PWM 0-2553 LED a soglie ON/OFF digitale per barra
map per PWM continuoif-else soglie 300-600-900 per livelli discreti
Controllo manuale luminositàSensore crepuscolare: buio 3 LED, luce 0 LED
DimmerLuce notturna automatica, barra luminosa
🎯 Domanda da colloquio / esame

Se vi chiedono "Come funziona fotoresistenza con Arduino?", rispondete: "LDR Light Dependent Resistor: resistenza alta al buio 1MΩ, bassa alla luce 1kΩ. Con resistenza fissa 10kΩ forma partitore su A0: 5V→LDR→A0→10k→GND. Al buio LDR alta → V su A0 bassa ~0V → ADC 0-200, alla luce LDR bassa → V alta ~4V → ADC 800-1023. Leggo analogRead(A0) 0-1023, calibro soglie con Serial: <300 buio 3 LED ON, 300-600 penombra 2 LED, 600-900 luce 1 LED, >900 giorno 0 LED. Così barra crepuscolare automatica, luce notturna. Se inverto LDR e 10kΩ, logica invertita". Risposta da sensoristica base.

5. Concetti chiave - LDR, partitore, ADC, soglie, barra LED

Cuore del video, minuto 6-16:

FOTORESISTENZA - CONCETTI CHIAVE
Fotoresistenza LDR (Light Dependent Resistor): Tipo: semiconduttore CdS, resistenza ↓ quando luce ↑ Buio: 1MΩ (mega), penombra: 50kΩ, luce stanza: 10kΩ, luce forte: 1kΩ Simbolo: resistenza con frecce luce Partitore con LDR: Schema base: 5V -> LDR -> nodo A0 + 10kΩ fisso -> GND Formula: V_A0 = 5V * 10k / (R_LDR + 10k) Buio R_LDR 1MΩ → V=5*10k/1010k=0.05V → ADC 10 Luce R_LDR 1kΩ → V=5*10k/11k=4.54V → ADC 930 Se inverti: 5V -> 10k -> A0 -> LDR -> GND → logica inversa buio=HIGH ADC Arduino Uno: 10 bit 0-1023, analogRead(A0) 0=0V 1023=5V, risoluzione 4.88mV Lettura LDR: buio 0-200, penombra 200-600, luce 600-900, giorno 900-1023 (dipende da LDR e luce) Soglie if-else: if(val < 300) { 3 LED ON } // buio else if(val < 600) { 2 LED ON } // penombra else if(val < 900) { 1 LED ON } // luce else { 0 LED ON } // giorno Barra a 3 LED: LED1 pin 8, LED2 pin 9, LED3 pin 10 + 220Ω ciascuno, GND comune Buio → 3 accesi, luce → 0 accesi (crepuscolare), inverti per barra diretta luce=3 accesi Calibrazione: Serial.println(val) in Tinkercad regola slider luce e annota val buio/luce Trova soglie adatte a tuo ambiente, non usare 300-600-900 fissi su reale senza calibrare Map percentuale: int perc = map(val, 0, 1023, 0, 100); // 0-100% luce
POTENZIOMETRO (VIDEO 6)
Manuale, manopola, 1 LED PWM dimmerato continuo 0-255, map per conversione, controllo manuale.
FOTORESISTENZA (QUESTO VIDEO)
Automatico, luce ambientale, 3 LED a soglie ON/OFF discreti, if-else 300-600-900, sensore crepuscolare notturno.

6. Lab in Tinkercad - Circuito crepuscolare

Nel video (minuto 4-24):

  • Setup: Nuovo circuito "Video7 Fotoresistenza 3 LED" → Arduino Uno + breadboard + fotoresistenza LDR + resistenza 10kΩ + 3 LED (rosso giallo verde) + 3 resistenze 220Ω
  • Cablaggio: Partitore: Arduino 5V → cavo rosso → breadboard → LDR pin1, LDR pin2 → cavo giallo → Arduino A0 + resistenza 10kΩ → bus GND → Arduino GND. LED: Arduino pin 8 → 220Ω → anodo LED1 rosso → catodo → GND, pin 9 → 220Ω → LED2 giallo → GND, pin 10 → 220Ω → LED3 verde → GND, GND comune bus
  • Codice barra crepuscolare: const ldr=A0 led1=8 led2=9 led3=10, setup pinMode led OUTPUT Serial, loop val=analogRead ldr 0-1023, perc=map val 0-1023 0-100, Serial val e perc, if val<300 digitalWrite 3 HIGH else if val<600 led1 led2 HIGH led3 LOW else if val<900 led1 HIGH altri LOW else tutti LOW, delay 100
  • Simulazione: Start → Tinkercad slider fotoresistenza (clic su LDR → imposta luce) buio → val ~50 → 3 LED ON, aumenta luce → val ~400 → 2 LED ON, val ~700 → 1 LED ON, val ~950 → 0 LED ON → luce notturna automatica. Regola soglie guardando Serial
  • Varianti: Logica inversa luce=3 LED ON per barra diretta, aggiungi buzzer che suona al buio, soglia con potenziometro per calibrazione manuale
ARDUINO - FOTORESISTENZA E TRE LED - CREPUSCOLARE
// Video 7 - Fotoresistenza e tre LED - Barra crepuscolare // Partitore: 5V -> LDR -> A0 + 10kΩ -> GND // LED: Pin 8,9,10 -> 220Ω -> LED -> GND const int ldrPin = A0; // LDR su A0 const int led1Pin = 8; // LED1 rosso - buio const int led2Pin = 9; // LED2 giallo - penombra const int led3Pin = 10; // LED3 verde - luce void setup() { pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); Serial.begin(9600); Serial.println("Fotoresistenza + 3 LED - Crepuscolare"); Serial.println("Buio=3 LED, Luce=0 LED"); } void loop() { int valLdr = analogRead(ldrPin); // 0 buio - 1023 luce forte (con questo cablaggio) int percLuce = map(valLdr, 0, 1023, 0, 100); Serial.print("LDR: "); Serial.print(valLdr); Serial.print(" -> Luce: "); Serial.print(percLuce); Serial.print("% -> "); // Barra crepuscolare: buio 3 LED, via via meno luce meno LED if (valLdr < 300) { // Buio -> 3 LED accesi (notte) digitalWrite(led1Pin, HIGH); digitalWrite(led2Pin, HIGH); digitalWrite(led3Pin, HIGH); Serial.println("BUIO - 3 LED ON"); } else if (valLdr < 600) { // Penombra -> 2 LED digitalWrite(led1Pin, HIGH); digitalWrite(led2Pin, HIGH); digitalWrite(led3Pin, LOW); Serial.println("PENOMBRA - 2 LED ON"); } else if (valLdr < 900) { // Luce moderata -> 1 LED digitalWrite(led1Pin, HIGH); digitalWrite(led2Pin, LOW); digitalWrite(led3Pin, LOW); Serial.println("LUCE - 1 LED ON"); } else { // Giorno luce forte -> 0 LED digitalWrite(led1Pin, LOW); digitalWrite(led2Pin, LOW); digitalWrite(led3Pin, LOW); Serial.println("GIORNO - 0 LED OFF"); } delay(200); } // Variante barra diretta: luce = più LED (inversa) /* if (valLdr > 900) 3 LED ON else if >600 2 LED else if >300 1 LED else 0 LED -> Giorno 3 LED, buio 0 LED */ // Variante con calibrazione automatica min/max /* int minLdr = 1023, maxLdr = 0; minLdr = min(minLdr, valLdr); maxLdr = max(maxLdr, valLdr); int valMappato = map(valLdr, minLdr, maxLdr, 0, 1023); */
🔧 LDR 3 LED cheat sheet

LDR + 10kΩ partitore: 5V→LDR→A0→10k→GND, buio LDR 1MΩ→ADC 0-200, luce 1kΩ→ADC 800-1023. Calibra con Serial: slider Tinkercad su LDR per buio/luce annota val, imposta soglie 300-600-900 adattate. Barra crepuscolare: if val<300 3 HIGH else if <600 2 HIGH else if <900 1 HIGH else 0 LOW. 3 LED pin 8,9,10 + 220Ω ciascuno + GND comune. Map perc=map(val,0,1023,0,100) per %. Nel video al minuto 22 mostro Tinkercad slider luce e barra che si spegne progressiva.

7. Errori comuni da evitare

  • LDR senza resistenza fissa: LDR tra 5V e A0 senza 10kΩ verso GND → A0 flottante quando LDR alta, corto 5V-GND quando LDR bassa 1kΩ, val casuale. Sempre partitore LDR + 10kΩ.
  • Resistenza fissa valore errato: 220Ω invece di 10kΩ come partitore → al buio LDR 1MΩ + 220Ω V_A0 ~0.001V sempre basso, alla luce 1kΩ+220Ω V 0.9V sempre basso, range ridotto. Usa 10kΩ per range 0-4.5V.
  • LDR invertita logica non capita: cablaggio 5V→10k→A0→LDR→GND invece di 5V→LDR→A0→10k→GND → logica inversa buio=HIGH luce=LOW, se usi if <300 per buio con logica inversa ottieni giorno=3 LED. Scegli cablaggio e adatta if.
  • Soglie fisse senza calibrazione: usi 300-600-900 di Tinkercad su Arduino reale con LDR diversa → soglie errate, 3 LED sempre ON o sempre OFF. Calibra con Serial println val in buio e luce reale.
  • Pin LED non OUTPUT: pinMode dimenticato per led2 e led3 → solo led1 funziona. Sempre pinMode per tutti e 3 i LED in setup.
  • LED senza resistenze dedicate: 3 LED con una sola 220Ω condivisa → come Video 2 errore luminosità diversa e bruciatura. Ogni LED sua 220Ω dedicata.
  • If-else senza else finale: if <300 3 ON, if <600 2 ON, if <900 1 ON senza else if → quando val=200 entrano tutti e 3 gli if, 3 sovrascritture, ultimo vince. Usa else if a cascata.
⚠️ Errore che blocca crepuscolare al 100%

LDR senza partitore + soglie non calibrate + if senza else if. Sintomo: 3 LED sempre accesi o sempre spenti, ruoti slider luce in Tinkercad nessun cambiamento, val ADC sempre 0 o 1023 o casuale, barra non progressiva, tutti LED ON anche di giorno. Soluzione: partitore 5V→LDR→A0→10kΩ→GND obbligatorio, Serial println val, annota buio ~50 penombra ~400 luce ~700 giorno ~950, imposta soglie 300-600-900 adattate, usa if <300 else if <600 else if <900 else. Verifica con multimetro Tinkercad su A0 0-5V variando luce. Nel video al minuto 8 mostro LDR senza 10kΩ con val flottante.

8. Approfondimento: mappatura ADC e calibrazione

Ultimo concetto del corso: calibrazione sensore reale:

FaseCosa fareValori esempio
1. Cablaggio5V→LDR→A0→10k→GND, 3 LED 8,9,10 + 220ΩPartitore obbligatorio
2. Lettura grezzaanalogRead(A0) → Serial println valBuio 20, penombra 350, luce 750, giorno 980
3. CalibrazioneSlider luce Tinkercad, annota min/max realiMin 20, max 980 nel tuo ambiente
4. SoglieDividi range in 4 livelli: 3,2,1,0 LED<300, <600, <900, >=900
5. Mappaturamap(val,0,1023,0,100) → percentuale luce0% buio, 100% giorno
6. Barraif-else if-else a cascata, GND comuneCrepuscolare: buio 3 ON, luce 0 ON

Fine corso Arduino base - 7 circuiti! Da blink a sensore luce.

📚 Compito per casa - Ultimo del corso Arduino

Crea su Tinkercad circuito finale Video 7: Arduino Uno, breadboard, LDR + resistenza 10kΩ partitore 5V→LDR→A0→10k→GND, 3 LED rosso pin 8 + 220Ω, giallo pin 9 + 220Ω, verde pin 10 + 220Ω, GND comune. Codice con const ldr=A0 led1=8 led2=9 led3=10, setup pinMode OUTPUT, loop val=analogRead(A0) perc=map(val,0,1023,0,100) Serial val e perc, if val<300 3 HIGH else if <600 2 HIGH 1 LOW else if <900 1 HIGH 2 LOW else tutti LOW, delay 200. Simula: slider LDR buio → 3 LED ON val ~50, aumenta luce → 2 ON val ~400, luce → 1 ON val ~700, giorno → 0 ON val ~950. Calibra soglie guardando Serial. Prova variante barra diretta luce=3 LED invertendo if >900 3 ON. Screenshot buio 3 LED ON + giorno 0 OFF + Serial val + codice. Mandamelo - hai finito corso Arduino 7 circuiti!

9. Risorse correlate