Skip to content

6-Il Robot Girasole (Fotoresistenze e Segui-Luce) 🌻🔦

Obiettivo: Scoprire come funzionano i sensori di luce (fotoresistenze), leggere i loro valori e programmare il robot per inseguire una fonte luminosa, come una falena o un girasole.

Concetti Chiave:

  • Cos'è una fotoresistenza (sensore analogico).
  • Confronto tra due variabili (Luce Destra vs Luce Sinistra).
  • Controllo differenziale dei motori in base agli input analogici.

Fase 1: Teoria - Gli "Occhi" per la Luce 👁️

  • La Fotoresistenza: i due piccoli componenti sulla parte frontale della scheda del robot (vicino ai fari RGB) si chiamano fotoresistenze; sono resistenze speciali che fanno passare più o meno corrente a seconda di quanta luce le colpisce.
  • Valori Analogici: A differenza di un pulsante (acceso/spento), le fotoresistenze restituiscono un numero (da 0 a 255 nel nostro caso). Zero significa buio totale, numeri alti indicano molta luce.
  • Come fa a seguire la luce? Se punto una torcia a destra del robot, il sensore destro leggerà un valore più alto di quello sinistro. Il "cervello" (il nostro codice) capirà che deve far girare il robot verso destra.

Fase 2: Il Test del Buio (Lettura dei Sensori) 📊

Prima di muoverci, dobbiamo capire che numeri inviano i due sensori.

SezioneBloccoIstruzione e Funzione
VariablesMake a VariableCrea due variabili: Luce_L (Sinistra) e Luce_R (Destra).
BasicforeverBlocco principale continuo.
Variablesset...toset Luce_L to (Get Light_L value) Prende il blocco di lettura del sensore sinistro dall'estensione MiniCar.
Variablesset...toset Luce_R to (Get Light_R value) Prende il valore del sensore destro.
Basicshow numberMostra prima Luce_L, poi usa pause 500, poi mostra Luce_R. (Serve solo per capire i numeri, poi toglieremo questi blocchi per non rallentare il robot).

Test in classe: Scaricate il codice. Coprire con una mano il sensore sinistro e poi quello destro, osservando come cambiano i numeri sul display. Qual è il valore di base della luce nell'aula? Qual è il valore se punto la torcia dello smartphone? Segnatevi questi numeri (es. la luce normale è 50, la torcia è 150).

Fase 3: Azione! (Programmare l'Inseguimento) 🏎️

Ora cancelliamo i blocchi show number e pause e inseriamo la vera intelligenza. Creiamo le condizioni per muoverci confrontando i due sensori.

SezioneBloccoIstruzione e Funzione
Logicif...then...elseInseriamo questo grosso blocco sotto ai due set nel forever.
Logic (Condizione 1)... and ...if (Luce_L > 100) and (Luce_R > 100) then (Sostituite 100 con il valore della vostra torcia). Se ENTRAMBI i sensori vedono una luce forte, la luce è dritta davanti a noi!
MiniCarmotor...motor = All Direction = Forward speed = 80 (Vai dritto).
Logic (Condizione 2)else ifCliccate sul "+" per aggiungere un "else if". if (Luce_L > Luce_R) then Se la luce a sinistra è maggiore di quella a destra...
MiniCarmotor...motor = All Direction = Turn_Left speed = 80 (Girati a sinistra!).
Logic (Condizione 3)else ifif (Luce_R > Luce_L) then Se la luce a destra è maggiore...
MiniCarmotor...motor = All Direction = Turn_Right speed = 80 (Girati a destra!).
Logic (Condizione 4)elseelse Se non c'è luce forte (condizioni normali)...
MiniCarmotor...motor = All Direction = Forward speed = 0 (Fermati e aspetta la torcia!).

Fase 4: Collaudo col "Cibo Luminoso" 🔦

Mettere i robot a terra. Ogni gruppo (o studente) deve usare la torcia del proprio smartphone come "esca" per far muovere il robot.

Sfide e Debugging:

  • Il robot va sempre dritto anche senza torcia: La soglia (es. 100) è troppo bassa e la normale luce della classe la fa scattare. Aumentate il valore nell'istruzione if (Luce_L > 100) and (Luce_R > 100).
  • Il robot "trema" tra destra e sinistra: I due sensori stanno leggendo valori molto simili. Si può risolvere abbassando leggermente la velocità (es. speed = 60) per rendere i movimenti più dolci.
  • Sfida Estrema: Riuscire ad aggiungere l'uso dei fari RGB? (Es: se gira a sinistra, accende solo il faro sinistro lampeggiante, come una freccia della macchina!).