Arduino: effetti luminosi per rendere attraente la lezione

Ormai da tempo che svolgo i mie corsi su Arduino e gli allievi stanno diventando sempre pi esigenti. Mi accorgo che andando avanti con le lezioni, gli allievi hanno l’esigenza, legittime, di realizzare esperienze di laboratorio sempre pi attinenti al mondo reale che loro conoscono. Qualche anno fa era sufficiente mostrare come era semplice variare il colore di un diodo led RGB per avere interesse ed attenzione duratura, ci mi permetteva di conseguenza di dettagliare alcuni aspetti di programmazione che se non spiegati con Arduino sarebbero risultati pi difficili da comprendere, ma ora per mantenere lo stesso livello di attenzione necessario aggiungere altri elementi di sensibilizzazione.

Maggiori pretese e quindi fin dalle prime lezioni si vuole “la sorpresa tecnologica”…

mamma mia quanto faticoso fare l’insegnante!

Sono in quel periodo del corso in cui si accendono il led con Arduino in tutte le maniere possibili, dal blink al fade, in sequenza e in molti altri modi, ma alla lunga, mi rendo conto, la cosa pu diventare un po’ “noiosetta”, vorrei evitare il pi possibile l’effetto “sbadiglio” 🙂 e quindi ho pensato di modificare le prime esperienze con qualcosa di pi coreografico.

Tutto nasce da alcune idee che ho sulla realizzazione di una struttura semplificata (ad incastro) per la realizzazione di un kit robotico basato su Arduino da usare a scuola e da realizzare con materiali di basso costo di facile reperibilit, sto costruendo alcuni prototipi usando il plexiglass.

E proprio mentre manipolavo il plexiglass ho avuto l’idea di utilizzare questo materiale per nuove esperienze che fanno uso di led.

Ho voluto condividere questa bozza di lezione con voi in modo che se vorrete potrete darmi suggerimenti o alternative che potranno essere in futuro sfruttate a scuola.

Tutti sapete che quando la luce passa attraverso due materiali diversi, come tra l’aria e l’acqua oppure tra l’aria e la plastica, subisce rifrazione, effetto tipico che potete notare quando ad esempio mettete una cannuccia in un bicchiere d’acqua, si nota che la cannuccia nell’acqua sembra piegata.
Sfruttiamo questo fenomeno per far cambiare direzione alla luce che attraversa uno strato di plexiglass e la variazione di percorso della luce viene realizzata incidendo (graffiando) la superficie di plastica, cos facendo i raggi luminosi prodotti da diodi led che colpiscono la zona incisa si rifletteranno (cambiano direzione) provocando un effetto visivo molto bello.

Poich siamo in periodo natalizio l’idea potrebbe essere quella di realizzare una piccola insegna su cui scrivere “Buone Feste” facendo variare il suo colore in maniera ciclica.

Scopo dell’esperienza:

reciclando materiali di uso comune reperibili a scuola, realizzare un’insegna luminosa che auguri “Buone Feste” ai visitatori della scuola.
Tempo di realizzazione 3 ore (max).

Materiali:

  • plexiglass (misure a piacere nel mio caso inferiori alla lunghezza massima di una breadboard)
  • piccolo trapano con punta per incisione
  • breadboard
  • Arduino UNO
  • 2 diodi RGB (nel mio caso ad anodo comune)
  • 4 resistenze da 82 ohm
  • 2 resistenze da 150 ohm
  • porta diodi (per evitare la saldatura diretta su millefori dei LED)
  • millefori
  • mammut (usati come supporto a scorrimento – vedi foto)
  • pezzi metallici per blocco insegna (ho usato delle punte da saldatore)

Vi state chiedendo perch ho usato i mammut e le punte da saldatore?
Perch nel magazzino della scuola ho trovato una scorta infinita e quindi mi sembrava uno spreco non usarli 🙂

Procedimento

Passo 1

Realizzare una stampa del testo da fissare temporaneamente sul plexiglass che verr usata come matrice per l’incisione.

Passo 2

Con nastro biadesivo fissate la matrice di carta al plexiglass

Passo 3

Usate un piccolo trapano con una punta adeguata per procedere con l’incisione. Cercate di mantenere un numero di giri non elevato e fate in modo che la punta non fuoriesca troppo dal mandrino, altrimenti appena toccate la superficie di plastica incomincia a vibrare pericolosamente, rischiando la rottura.
A tal proposito vi consiglio l’uso di occhiali protettivi come ad esempio quelli che vedete nella fotografia che segue.

Passo 4

Provocate due scanalature sulla base inferiore dell’insegna di dimensioni tali da poter permettere l’inserimento dei diodi LED.
Se non disponete di strumenti adeguati, fate una serie di fori per eliminare il materiale in eccesso e poi utilizzate una piccola lima per sgrossare.

Passo 5

Usando una basetta millefori realizzate il semplice circuito costituito da resistenze a LED, per rendere comprensibile il collegamento tra i componenti si allega la realizzazione su breadboard.

La necessit di realizzazione su millefori il circuito dovuta al fatto che indispensabile regolare in altezza il plexiglassper favorire il fissaggio dei LED.

Principio di funzionamento

Diodo led RGB

I led RGB sono led capaci diprodurre 3 differenti lunghezzed’onda:

  • Rosso (R, red)
  • Verde (G, green)
  • Blu (B, blue)

Posseggono 4 terminali e si possono presentare in due tipi di configurazione:

  • 1 anodo e 3 catodi (RGB ad anodo comune)
  • 3 anodi e 1 catodo (RGB a catodo comune)

La mescolanza dei tre colori d luogo ad una luce di un determinato colore che dipende dall’intensit di ciascuno dei tre colori originari (si veda la composizione RGB):

Nel circuito sono stati utilizzati diodi led ad anodo comune, questa la piedinatura:

16-RGB-AC

Questo la rappresentazione elettrica del diodo led RGB ad anodo comune:

In serie ad ogni led sar inserita una resistenze che consentir di regolare la corrente circolante nel diodo.

Dai datasheet si pu notare come la caduta di tensione Vf, a parit di corrente nominale If sia diversa per ogni LED e la variabilit di Vf piuttosto ampia, per questo motivo per effettuare i calcoli delle resistenze da porre in serie ai rispettivi diodi led bisogner considerare un valore medio di Vf.

La caduta di tensione di funzionamento dei diodi da considerare pu essere letta in colonna TYP questi valori fanno riferimento ad una corrente diretta di 20 mA, usando questi valori di tensione siamo ora in grado di calcolare il valore della resistenza da porre in serie ai singoli diodi led.

Sapendo che la tensione di alimentazione sar di 5V (tensione in uscita sul piedino digitale della scheda Arduino) e che su ogni singolo diodo led da considerare una tensione tipica come da colonna TYP, sia avr:

Da cui avremo che i valori delle R da porre in serie saranno:

Poich 75 ohm non un valore commerciale di resistenza, si sceglie come valore quello prossimo superiore, pari a 82 ohm.

Per ulteriori dettagli sul calcolo della R serie si faccia riferimento al post: Arduino: dimensionare la resistenza serie di protezione per un diodo led

I catodi del primo led saranno collegati ai piedini PWM 9, 10, 11l’anodo sar collegato a +5V. Analogamentei catodi del secondo led saranno collegati ai piedini PWM 3, 5, 6l’anodo sar collegato a +5V.

Passo 6

Bloccate i mammut alla breadboard con le punte da saldatore o con il blocco metallico che avete trovato, procedete con il fissaggio del circuito tra le due file di mammut come mostrato nell’immagine:

Passo 7

Coprite i diodi led con nastro isolante nero in modo che la luce emessa dal LED venga diretta verso l’alto:

Passo 8

Realizzate il seguente sketch per il controllo la variazione di colore dei LED RGB.
All’interno i commenti che ne spiegano il funzionamento. Per approfondimenti sul PWM: Arduino lezione 06: modulazione di larghezza di impulso (PWM)

#define VERDE 9
#define BLU 10
#define ROSSO 11
#define VERDE2 6
#define BLU2 5
#define ROSSO2 3
#define delayTime 20

void setup() {

// imposta il pin digitale come output
pinMode(VERDE, OUTPUT);
pinMode(BLU, OUTPUT);
pinMode(ROSSO, OUTPUT);

// si impostano ad HIGH i pin VERDE, BLU, ROSSO
// il colore iniziale sara' bianco
digitalWrite(VERDE, HIGH);
digitalWrite(BLU, HIGH);
digitalWrite(ROSSO, HIGH);

// imposta il pin digitale come output
pinMode(VERDE2, OUTPUT);
pinMode(BLU2, OUTPUT);
pinMode(ROSSO2, OUTPUT);

// si impostano ad HIGH i pin VERDE, BLU, ROSSO
// il colore iniziale sara' bianco
digitalWrite(VERDE2, HIGH);
digitalWrite(BLU2, HIGH);
digitalWrite(ROSSO2, HIGH);
}

// definizione di variabili globali
int ValRosso;
int ValBlu;
int ValVerde;

int ValRosso2;
int ValBlu2;
int ValVerde2;

void loop() {

// variazione da verde a rosso

int ValRosso = 255;
int ValBlu = 0;
int ValVerde = 0;

int ValRosso2 = 255;
int ValBlu2 = 0;
int ValVerde2 = 0;

for( int i = 0 ; i < 255 ; i += 1 ){

ValVerde += 1;
ValRosso -= 1;

ValVerde2 += 1;
ValRosso2 -= 1;

/* ad ogni ciclio la differenza
   255 - ValVerde DIMINUISCE
   255 - ValRosso AUMENTA
   provocando un graduale passaggio
   dal verde al rosso
*/

analogWrite( VERDE, 255 - ValVerde );
analogWrite( ROSSO, 255 - ValRosso );

analogWrite( VERDE2, 255 - ValVerde );
analogWrite( ROSSO2, 255 - ValRosso );

// attesa di 20 ms per percepire il colore
delay( delayTime );
}

// variazione da blu al verde

ValRosso = 0;
ValBlu = 0;
ValVerde = 255;

ValRosso = 0;
ValBlu = 0;
ValVerde = 255;

for( int i = 0 ; i < 255 ; i += 1 ){

ValBlu += 1;
ValVerde -= 1;

ValBlu2 += 1;
ValVerde2 -= 1;

/* ad ogni ciclio la differenza
   255 - ValBlu DIMINUISCE
   255 - ValVerde AUMENTA
   provocando un graduale passaggio
   dal blu al verde
*/

analogWrite( BLU, 255 - ValBlu );
analogWrite( VERDE, 255 - ValVerde );

analogWrite( BLU2, 255 - ValBlu );
analogWrite( VERDE2, 255 - ValVerde );

// attesa di 20 ms per percepire il colore
delay( delayTime );
}

// variazione da rosso al blu

ValRosso = 0;
ValBlu = 255;
ValVerde = 0;

ValRosso2 = 0;
ValBlu2 = 255;
ValVerde2 = 0;

for( int i = 0 ; i < 255 ; i += 1 ){

ValRosso += 1;
ValBlu -= 1;

ValRosso2 += 1;
ValBlu2 -= 1;

/* ad ogni ciclio la differenza
   255 - ValRosso DIMINUISCE
   255 - ValBlu AUMENTA
   provocando un graduale passaggio
   dal rosso al blu
*/

analogWrite( ROSSO, 255 - ValRosso );
analogWrite( BLU, 255 - ValBlu );

analogWrite( ROSSO2, 255 - ValRosso );
analogWrite( BLU2, 255 - ValBlu );

// attesa di 20 ms per percepire il colore
delay( delayTime );
}
}

Questo il video che mostra il funzionamento:

Varianti

Esperienza

Realizzate l’esperienza precedente inserendo tre pulsanti che consentono di selezionare il range di colori emessi:

pulsante 1 – tutti i colori
pulsante 2 – colori caldi
pulsante 3 – colori freddi

variante
usate un potenziometro per controllare la velocit di variazione del colore

Esperienza

Costruire un’insegna in plexiglass che evidenzi il range di temperatura ambientale.
Supponete di realizzare una fascia incisa su plexiglass su cui verr evidenziato una luce rosso se la temperatura maggiore di 25 gradi, rosa se la temperatura e tra i 20 e 25 gradi e azzurra al di sotto dei 20 gradi. La variazione del colore dovr essere graduale.

Esperienza

Supponete di realizzare un’insegna luminosa che evidenzi l’arrivo di una mail illuminando un testo inciso su plexiglass: “nuova mail”

Se avete suggerimenti fatemi sapere.

Saluti.

Questa voce è stata pubblicata in arduino e contrassegnata con , , , , . Contrassegna il permalink.

12 risposte a Arduino: effetti luminosi per rendere attraente la lezione

  1. Simona Mondeli scrive:

    Nonostante io ci capisca la metà di quanto descritto, ritengo che la proposta sia molto significativa e accattivante e che il risultato sia davvero significativo!! Posso averne uno da usare come centrotavola x Natale? 😉
    Buone feste a te e ai tuoi fortunati alunni!!
    Simona

    • admin scrive:

      Cara Simona, non puoi dirmi che non riesci a capirci nulla tu che sei una docente geek 🙂
      Per il risultato ti assicuro che ha avuto i suoi effetti, sia tra gli allievi che tra i lettori del mio blog che mi stanno chiedendo ulteriori dettagli.
      Per il centrotavola nessun problema ma devo metterti in lista di attesa, mia moglie mi ha commissionato questa mattina una versione che varia colore in funzione della pressione atmosferica 🙂 ma se vuoi posso insegnare a te e ai tuoi studenti come cotruire una versione semplificata del dispositivo.
      Un caro saluto e buone feste anche a te.

      Michele.

  2. GiovanniR scrive:

    Grazie ancora Michele per questi articoli che fanno la mia, e quella di mio figlio, gioia nel poter realizzare questi simpatici oggetti. Però la cosa che mi ha intrigato di questo articolo è la parte a cui tu accenni alla realizzazione di robot con parti a basso costo. E’ proprio in questo periodo che mi stavo guardando intorno per comprare qualcosa per mio figlio e mi ero orientato sui robot Lego sia Mindstorms ma anche WEDO. Però sono tentato di provare qualcosa con Arduino ma per adesso non sono riuscito a trovare qualcosa di semplice, per la mia poca esperienza, da poter realizzare. Quindi subito mi è saltato all’occhio questo particolare. Ti chiedo se si possono avere delle anticipazioni, magari in privato, del progetto o mi tocca aspettare (per quanto)?.
    Grazie ancora per i tuoi articoli.

    • admin scrive:

      Ciao Giovanni.

      Grazie a te per aver usato i miei appunti.

      Incominciano ad esserci delle aziende che stanno implementando prodotti che possono in un certo senso essere paragonati in funzionalità al Lego Mindstorms, tempo fa avevo dato notizia su questo blog di Multiplo, dai uno sguardo potrebbe essere una buona soluzione.
      Per quanto riguarda i miei esperimenti, sì posso dirlo apertamente senza nessun problema, uno dei miei propositi è quello di implementare qualcosa che vada nella stessa direzione, dove però è indispensabile aver un minimo di conoscenze elettroniche, non è semplice ma credo si possa fare, non so darti delle tempistiche sto realizzando dei prototipi, ma il lavoro è ancora lungo.
      Io ho usato lungamente Lego Mindstorms con allievi dalla prima alla terza superiore ed i risultati sono stati molto positivi. Se la tua attenzione è rivolta a Lego Mindstorms in unione ad Arduino, ti consiglio di leggere il breve post di qualche tempo fa sul mio blog: Interfacciare Arduino e Lego Mindstorms che fa riferimento alla seguente pagina Arduino Shields and Controllers su mindsensors.com.

      Grazie ancora.
      Saluti.

  3. GiovanniR scrive:

    Caro Michele mi potresti dire che attrezzi usi per lavorare il plexiglass? In generale qual’è l’attrezzatura base, per cominciare a cimentarsi nella costruzione meccanica di un robot? Grazie.

    • admin scrive:

      Ciao Giovanni

      Scusa se rispondo in ritardo ma la fine del quadrimestre e sempre piena di impegni.

      Non sono necessari molti materiali, ti allego qualche foto che mostrano il primo di una serie di esperimenti realizzato qualche tempo fa, il tutto è stato realizzato all’insegna del risparmio. Come ti dicevo sto disegnando con illustrator una versione un po’ più solida che taglierò a laser.

      Il taglio del plexiglass a forma rettangolare, come sicuramente saprai, puoi farlo fare in qualsiasi brico center, in molti il taglio è gratuito, se vuoi farlo da solo puoi usare un seghetto da legno.
      Il plexiglass si piega a caldo e le singole parti possono essere incollate con colla specifica, il mio consiglio è invece che usare colla usa viti e angoli metallici ad L per costruire i vari elementi.

      Per incollare i motori ed altri piccoli elementi (non plexiglass) ho usato la colla a caldo, nella versione che sto realizzando gli elementi saranno incastrati e avvitati insieme.

      Ho utilizzato due motorini GM3 – MOTORIDUTTORE 224:1 ASSE 90°

      con due ruote in plastica.

      La ruota anteriore che vedi è stata presa sempre in un brico center per poco più di 1 Euro, sono le rotelle che vengono avvitate ad esempio sotto un mobile, sono leggere e resistenti.

      Il serraggio della scheda Arduino avveniva mediante viti passanti con base esagonale incollate alla alla struttura in plexiglass.
      I circuiti per il pilotaggio dei motori e dei sensori ad infrarossi venivano disposti su una piccola breadboard fissata alla base in plexiglass mediante del velcro, ciò mi permetteva agevolmente di fare comodamente ogni modifica.

      Appena concludo l’ultima versione pubblico.

      Con l’occasione ti auguro buone feste.

      Saluti.

      Foto:





  4. Salvo Passaro scrive:

    Salve e grazie per questi preziosi suggerimenti !
    Volevo segnalarle un errore nel commentare lo sketch:

    /* ad ogni ciclio la differenza
    255 – ValRosso DIMINUISCE
    255 – ValBlu AUMENTA
    provocando un graduale passaggio
    dal rosso al blu
    /*

    deve invecie essere:

    /* ad ogni ciclio la differenza
    255 – ValRosso DIMINUISCE
    255 – ValBlu AUMENTA
    provocando un graduale passaggio
    dal rosso al blu
    */

  5. andpagl scrive:

    Non ho capito una cosa:
    i led sono ad ANODO comune, e colleghiamo questo anodo al +5v.
    Poi colleghiamo ogni catodo ad un pin…
    Poi, però (cito):
    —————————–
    // si impostano ad HIGH i pin VERDE, BLU, ROSSO
    // il colore iniziale sara’ bianco
    digitalWrite(VERDE, HIGH);
    digitalWrite(BLU, HIGH);
    digitalWrite(ROSSO, HIGH);
    —————————–
    Ecco il mio dubbio: da quel che avevo CREDUTO di capire, se mettiamo in HIGH il pin di un catodo, non vi è differenza di potenziale, e quindi il LED è SPENTO, e non ACCESO… dove sbaglio?

    Grazie, Andrea

  6. sara scrive:

    Mi unisco anch’io alla domanda di @andpagl.
    Inoltre non ho capito perché su altri progetti simili (striscia di led rgb da 12v) hanno usato dei transistor. Non si poteva collegare direttamente il pin di arduino al catodo come hai fatto tu?
    Grazie
    Sara

  7. fabio scrive:

    @Andpagl… Sono quasi sicuro che tu abbia ragione. 5v sul catodo rispetto ai 5v dell’anodo darebbero un delta potenziale nullo, spegnendo il led…anche se credo che sia un errore di copiatura da altro codice.
    @Sara… Arduino può fornire un massimo di 5v in out su un pin, il transistor viene usato come un interruttore comandato in tensione o in corrente per chiudereil circuito della striscia di led su un’alimentazione di 12 volt

  8. Mauro scrive:

    Alla fine dell’articolo si accenna alla possibilità di gestire il led RGB con potenziometro e bottoni; io mi sono limitato ad una soluzione dove, con un bottone seleziono ciclicamente il colore da cambiare e con il potenziometro ne regolo l’intensità (naturalmente si può passare facilmente ai 3 bottoni ma non ne avevo la voglia :p)


    #define RED 3
    #define GRE 5
    #define BLU 6
    #define POT 0
    #define BUT 8

    int val_pot = 0;
    int val_col = 0;
    int old_val_col = 0;
    int color = 0;
    int red=0, gre=0, blu=0;

    void setup()
    {
    Serial.begin(9600);
    pinMode(RED, OUTPUT);
    pinMode(GRE, OUTPUT);
    pinMode(BLU, OUTPUT);
    pinMode(BUT, INPUT);
    }

    void loop()
    {
    val_pot = analogRead(POT);
    val_col = digitalRead(BUT);

    if(val_col==HIGH && old_val_col==LOW) color++;
    old_val_col = val_col;

    Serial.print("lettura potenziometro: ");
    Serial.print(val_pot);
    Serial.print("\tlettura bottone: ");
    Serial.print(color);
    Serial.print("\tRED: ");
    Serial.print(red);
    Serial.print("\t\tGREEN: ");
    Serial.print(gre);
    Serial.print("\tBLUE: ");
    Serial.println(blu);

    if(color%3 == 0){
    red = val_pot/4;
    analogWrite(RED, red);
    }
    else if(color%3 == 1){
    gre = val_pot/4;
    analogWrite(GRE, gre);
    }
    else{
    blu = val_pot/4;
    analogWrite(BLU, blu);
    }
    }

    PS: per chi, come me, stà muovendo i primi passi e non ha basi di elettronica, questi primi esperimenti con arduino sono molto utili, quindi spero riprenda e continui questa “agenda” magari anche con qualcosa di più complesso e piu utile nel pratico.

    La ringrazio per il supporto datomi con questo sito 🙂

Rispondi a admin Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.