Tutorial: Giochi di luce con Arduino

Continuo il filone feste di Natale con questo primo semplice gioco di luci per il tuo albero di natale o presepe. Nei prossimi articoli troverai degli esempi differenti di giochi natalizi e chissà che non possa realizzare dei giochi di luce radiocomandati 🙂

Albero di Natale

Ti mostro un semplice sketch lasciando a te la possibilità di definire sia che tipo di luci utilizzare, magari riciclando delle vecchie serie di luci oramai in disuso perchè statiche, o realizando delle serie con i led.

Ricorda che le uscite Arduino non erogano correnti elevate e per questo dovrai studiare una alimentazione esterna, potrebbe essere fatta con dei triac, se vuoi realizzare una centralina luci a 220v, o con dei transistor se desideri colegare direttamente le serie in bassa tensione.

Passiamo allo sketch:

/**
 * Giochi di luce con Arduino
 * Version 0.1 Dec, 2011
 * Copyright 2011 Alfieri Mauro
 * info at mauroalfieri dot it
 *
 * This example code is in the public domain.
 */
 
 #include <SoftPWM.h>
 
 int minpin = 2;
 int maxpin = 13;
 int fadeUp = 1000;
 int fasdeDown = 1000;
 
 void setup() {
   SoftPWMBegin();
   for ( int i=minpin; i<=maxpin; i++)
   {
     SoftPWMSet(i, HIGH);
   }
   for ( int i=minpin; i<=maxpin; i++)
   {
     SoftPWMSet(i, LOW);
     SoftPWMSetFadeTime(i, fadeUp, fasdeDown);
   }
 }
 
 void loop() {
   
  game_one();
 
 }
 
 void game_one() {
   for ( int l=minpin; l<=maxpin; l++)
   {
     SoftPWMSetPercent(l, 100);
     if (l >= (minpin+1)) { SoftPWMSetPercent((l-1), 0); }
     if (l == minpin)     { SoftPWMSetPercent((maxpin), 0); }
     delay(fadeUp);
   }
 }

Per consentirti il massimo della flessibilità ho previsto di utilizzare tutte le uscite digitali di Arduino, lasciandoti la possibilità di ridurle in numero se ti occorressero meno serie di luci.

Inoltre ho previsto di utilizzare tutte le uscite digitali in modalità PWM in questo modo potrai usare effetti di dissolvenza su tutte le luci; usa solo l’accortezza di verificare che le tue serie possano essere pilotate in dssolvenza pena la loro rottura prima della fine delle feste, e l’effetto sarebbe sgradevole. Ricorda inoltre di fare molta attenzione alle alte tensioni (220v) se decidi di realizzare una centralina luci a 200v.

Iniziamo a vedere come si comporta lo sketch.

linea 10: includi la libreria SoftPWM, che ti permette di utilizzare tutte le uscite digitali con segnali PWM;

linee 12-15: definisci le variabili di tipo integer necessarie al funzionamento del tuo gioco di luce, in particolare minpin e maxpin definiscono il primo e l’ultimo pin di Arduino che utilizzerai, sono impostati rispettivamente a 2 e 13 in questo modo escludi i primi 2 pin ( 0 e 1 ) solitamente Tx ed Rx destinati alle comunicazioni seriali; le variabili fadeUp e fadeDown definiscono i tempi di dissolvenza in accensione e spegnimento;

linea 17: definisci la funzione di setup() il cui scopo ti è chiaro;

linea 18: inizializza la libreria SoftPWM, indicando allo sketch che intendi utilizzarla per questo programma;

linee 19-22: esegui un primo ciclo di startUp, ossia un ciclo in cui tutte le linee si accendono, serve a verificare che tutto funzioni e non ci siano serie di lampadine bruciate; è molto utile anche per sapere quando il circuito riceve per la prima volta tensione. Alla linea 21 utilizza la funzione SoftPWMSet( pin, valore) per eseguire il check, ad ogni ciclo for il valore di i si incrementa di uno a partire dal minpin fino a raggiungere il maxpin, per ogni pin imposta il valore del pin a HIGH ossia accende la serie collegata;

linee 23-27: esegui la stessa operazione delle righe 19-22 ma impostando il valore di ciascun pin a LOW ossia spegnendo la serie; inoltre utilizzando la funzione SoftPWMSetFadeTime( pin, fadeUp, fadeDown) imposti i tempi con cui la libreria softPWM deve accendere e spegnere ciascuna linea di lampadine, i loro valori sono definiti alle linee 14 e 15; ATTENZIONE: per ottenere un effetto fluido e veritiero puoi variare a piacere questi due valori ma sconsiglio di impostare il fadeUp di valore inferiore al fadeDown otterresti che la fase di spegnimento dura più tempo di quella di accensione, rendendo non equilibrato l’effetto;

linee 30-34: in questo sketch la funzione loop() si limita a lanciare il primo gioco di luci, ho voluto darle solo questa funzione perchè così potremo aggiunger nuovi giochi di luce a questo stesso sketch;

linea 36: definisci una nuova funzione game_one() che esegue il primo gioco di luci e che viene invocata dalla loop() ad ogni eseguzione del ciclo di Arduino;

linea 37: inizia un cisclo dal valore del pin minimo (minpin) al valore del pin massimo (maxpin) in cui eseguirai delle operazioni per ciascun pin;

linea 39: utiliza la funzione SoftPWMSetPercent( pin, percentuale) in cui imposti per ciascun pin, primo valore, la percentuale a cui vuoi che arrivi il segnale pwm, in pratica impostandolo a 100 indichi alla SoftPWM di incrementare il valore del pin impostato da 0% a 100% nel tempo indicato dal fadeUp (vedi linea 26) la libreria provvederà a inviare valori corrispettivi da 0 a 255 all’uscita corrispondente, nel tempo impostato;

linea 40: controlla che il valore di l sia superiore alla somma (minpin+1) questo comporta che lo sketch esegue le istruzioni tra parentesi solo quando l assume valore 3 (2 + 1) questo trucco ti permette di spegnere la serie precedentemente accesa, in pratica con l=2 (l=minpin) accendi la serie di luci connessa al pin 2; con l>=3 accendi la serie di luci connessa ai pin da 3 in poi e spegni la precedente, per fare questo utilizzi la stessa funzione SoftPWMSetPercent impostando a 0 la percentuale del pin precedente (l-1);

linea 41: è molto simile alla linea precedente ma ti permette di spegnere l’ultima serie accesa quando l=minpin, entra in gioco da subito ma il suo effetto lo vedi solo al secondo loop di Arduino in quanto al primo loop hai acceso in sequenza le serie collegate ai pin 2,3,4,5,6,7,8,9,10,11,12,13 spegnendo ogni volta la precedente, ma ti sarà rimasta accesa l’ultima linea (13 o maxpin) per cui dal loop successivo provvederai a spegnere propio quella mentre la prima (2 o minpin) si accende, l’effetto è di rotazione continua;

linea 42: attendi il tempo necessario alla realizzazione di quello che hai impostato in Arduino, ossia attendi che il pin in accensione sia giunto al livello massimo e che l’eventuale spegnimento sia concluso, per farlo giochi solo sui tempi, sapendo che fadeUp è il tempo in cui la SoftPWM incrementa il valore in accensione e che fadeDown è il tempo di decremento impostando il delay, tempo di attesa, come fadeUp l’effetto sarà di serie contigue che alternano accensione e spegnimento. ATTENZIONE: per questo motivo ti sconsiglio di impostare un fadeDown superiore al fadeUp, rovinerebbe l’effetto;

Buon divertimento

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/tutorial-giochi-di-luce-con-arduino.html

44 pings

Skip to comment form

  1. […] Mauro Alfieri Tweet Continua la serie dei miei articoli sui giochi di luce per il tuo albero o per le decorazioni Natalizie. In questo articolo realizzerai un secondo gioco […]

  2. […] settimana fa hai potuto leggere il primo articolo relativo a giochi di luce con Arduino, oggi arricchisci le tue decorazioni con un nuovo gioco, quello mostrato nel video […]

  3. […] giochi di luce con Arduino […]

  4. […] Avrai già notato come funziona, il principio è molto semplice: se il valore della variabile game è 9 ( linea 01 ) esegue le linee successive del listato; per ciascun gioco dal primo all’ottavo Arduino esegue prima il settaggio dei pin secondo la modalità prevista dal gioco da eseguire. Ad esempio se il gioco da eseguire è il primo game_one() devi resettare i pin dal minpin al maxpin impostando come tempi di fadeUp e  fadeDown quelli definiti nelle variabili corrispondenti, se il gioco da eseguire è ad esempio il quarto game_four() allora il settagio dei pin dal minpin al maxpin è 0 come tempo di fade sia per la fase ascendente ( fadeUp ) sia discendente ( fadeDown ); In questo modo Arduino esegue tutti i giochi in sequenza e poi rilascia il controllo alla funzione loop() che provvede a rieseguire l’intero gioco ripartendo dal primo. Avrai notato che alcuni giochi di luce hanno una durata inferiore rispetto ad altri, prova a pensare come rendere quei giochi di inferiore durata più simili a quelli di durata maggiore, con delle semplici righe di codice e proponile a tutti i lettori di questa serie di articoli come commento a questo articolo. Riepilogo di seguito ciascuno dei giochi di luce così come li vedrai eseguiti selezionando il nono gioco di luce: Primo Gioco […]

  5. […] Mauro Alfieri Tweet Finita la serie di articoli sui Giochi di luce con Arduinoecco un articolo sui motori passo-passo. E’ molto tempo che non mi occupavo di […]

  6. […] personalemente, e lo sto utilizzando per i tutorial che hai visto nell’ultimo periodo: Giochi di luce, Motori stepper, […]

  7. […] questa shield in modo più utile, un primo suggerimento è prendere tutta la serie di articoli sui giochi di luce di Natale ed adattarla per essere utilizzata con la shield I/O otterrai dei fantastici giochi di luce per il […]

Lascia un commento

Your email address will not be published.

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