giovedì 28 Marzo 2024
Home / Curiosità / Simulatore di fuoco per presepe, in 10 minuti

Simulatore di fuoco per presepe, in 10 minuti

Eccoci, ci siamo, quasi!
Si avvicina il Natale, qui a Milano, per tradizione, il presepe si allestisce a S. Ambrogio, il 7 Dicembre.
Quindi lo ho già fatto. E quindi, anche quest’ anno, ho dovuto sentire le lamentele della consorte in merito al fatto che sia spoglio e privo di luci.
Potrei buttarmi in un centro commerciale nella ressa pre-natalizia formata da gente alla ricerca spasmodica di regali, per comprare qualche acessorio luminoso ad-hoc made in Cina.. Oppure…
Oppure posso prendere il Raspberry e divertirmi. E con questa guida e 10 minuti, lo potrai fare anche tu.

fuoco from Raspberryitaly.com on Vimeo.

Quale Raspberry?

Ho scelto il Raspberry Pi Zero, che era in un cassetto in attesa di fare da cuore al mio prossimo progetto, ma anche il Raspberry Pi B che fa da mediacenter attaccato dietro al televisore era un buon candidato. Si può fare con tutti i Raspberry Pi.

Materiali

L’idea è di usare il Raspberry, un paio di LED, e realizzare un classico dei presepi: il fuoco simulato.
La luce prodotta dalle fiamme vive, infatti, è “traballante”, variabile in colore e intensità.
Come riprodurla, con il poco che avevo già in casa?

  1. Raspberry Pi Zero
  2. 2 LED (giallo / rosso)
  3. 2 resistenze (da 300 / 1000 Ohm circa)
  4. breadbord (opzionale)
  5. collegamenti vari (cavi Dupont/cavallotti)

Ho pensato di usare 2 LED (uno giallo e uno rosso) per simulare un fuoco, e di usare PWM software (cioè la possibilità di utilizzare la modulazione di larghezza di impulso) per ottenere una tensione equivalente variabile, anche su delle uscite digitali che hanno tensione fissa, come quelle del Raspberry.
Come è possibile? In pratica si mandano una serie di impulsi molto veloci a ampiezza fissa, ma di durata variabile. Più la durata dell’ impulso è lunga e le pause sono brevi, e più la tensione media sarà vicina alla tensione nominale di lavoro dei pin (3,3V), viceversa, più gli impulsi saranno brevi e le pause lunghe, e più la tensione media si avvicinerà allo zero. Questo “trucchetto”ci consente uscite a tensione variabili. Per chi vuolesse approfondire la teoria, link a Wikipedia.

Progetto

Per lavorare con i LED, è buona cosa limitare la corrente che li attraversa, e questo si fa inserendo in serie una resistenza. Va bene qualsiasi valore tra 300 e 1000 Ohm circa (più la resistenza è alta, e meno intensa sarà la luminosità). Io avevo in casa resistenze da 560 Ohm e ho utilizzato quelle. Ricordo che se non avete resistenze di un valore utile, ma ne avete molte con altri valori, potete sempre combinarle tra loro in serie o parallelo per ottenere una resistenza equivalente adatta. Poco elegante, ma pratico. Senza scendere nei particolari, che esulano dallo scopo di questa guida, ricordate che se avete ad esempio due resistenze dello stesso valore (prendiamo 300 Ohm, ad esempio), messe in serie producono una resistenza equivalente pari al doppio del loro valore (300 + 300 = 600 Ohm), mentre se collegate in parallelo, avranno una resistenza equivalente pari alla metà del valore di una singola resistenza (300 / 2 = 150 Ohm). tenetelo a mente.

Breadboard

Per comodità, ho usato una breadboard, giusto per inserire le resistenze. Non è in realtà necessaria, basterebbe usare qualche spezzone di filo e un saldatore per mettere “in linea” le resistenze. Ma vista la natura temporanea della mia installazione, e visto l’obbiettivo (fare tutto in 10 minuti), la breadboard andrà benissimo per inserire le mie resistenze nel circuito.
Eccolo qui, il circuito:

Il codice

Ora vediamo come “animare” i nostri LED.
prima di tutto, aggiorniamo il nostro sistema, digitando da terminale:
sudo apt-get update
e poi
sudo apt-get upgrade

Ora, ci serve un editor di testo per scrivere il programma. Possiamo usare anche Nano, quindi fate così:
sudo nano fuoco.py
(apriamo un file nuovo, e lo chiamiamo già fuoco.py). Ora copiate il codice python e incollatelo dentro a Nano, sul vostro terminale. sistemate gli orari di accensione e spegnimento secondo le vostre preferenze, se volete. Per uscire da Nano salvando le modifiche, premere CTRL+X, rispondere S per mantenere le modifiche e premere invio per confermare il nome del file.

Adesso con
python fuoco.py
lancerete il programma.
Se volete che venga lanciato automaticamente a ogni avvio, modificate il file rc.local con il comando:
sudo nano /etc/rc.local
e aggiungete una riga appena prima di “exit 0” con scritto:
python /home/pi/fuoco.py
(questo se avete lasciato il programma in python ora creato nella vostra home directoy, assumendo che stiate lavorando usando “pi” come nome utente. Insomma, se non avete modificato nulla e seguito la guida alla lettera, la stringa è esattamente quella).

Descrizione del codice

A differenza delle molte guide in rete, ho deciso di utilizzare la libreria GPIO Zero per comandare il GPIO. Moderna, semplice e pre-installata.
Io ho usato 2 LED, ma se ne possono usare di più. Ho usato un ciclo for per accendere i led in sequenza, basta cambiare il “2” in quella riga per operare su più LED.
Faccio calcolare al programma un numero casuale in virgola mobile tra 0 e 1, poi lo applico ai LED (0 = spento, 1 = acceso al massimo). piccola attesa di 0,02 secondi per rendere più realistico il tremolio (altrimenti troppo rapido) e fine.
Come valore aggiunto ho inserito un orario di accensione e di spegnimento: il programma, in un ciclo, controlla che ore sono, e le confronta con l’ora di accensione e spegnimento. Se siamo in quell’intervallo, assegna ai led il valore casuale (si accendono e tremolano) se invece siamo fuori da quell’intervallo, imposta i LED a 0 (spenti).
Questo tipo di controllo sull’orario non funziona in caso accensione e spegnimento siano in giorni diversi, ma mi sembrava più che adeguato per il nostro utilizzo.

La mia realizzazione

Ho quindi preso un po’ di polistirolo, degli stuzzicadenti colorati col pennarello, alcuni sassolini e ho realizzato il mio falò, che andrà a abbellire il mio presepe regalandogli un po’ di atmosfera.
Ho tolto i LED dalla bredboard, li ho inseriti nella base di polistirolo vicini, in modo che entrambi avessero il catodo (il piedino dal lato smussato, il negativo, quello più corto) verso il centro. Ho unito tra loro i due catodi (che vanno entrambi collegati a GND) in modo da usare solo 3 fili come “prolunga” dalla breadboard: anodo LED 1, catodi in comune, anodo LED 2.

Varianti

E’ naturalmente possibile migliorare e espandere questo piccolissimo progetto (ad esempio si possono usare LED RGB, o matrici di led per simulare anche la forma delle fiamme, o accendere più LED, con effetti di tremolio diversi o intensità diverse, o implementare effetti alba / tramonto). Il mio vuole essere solo uno spunto, e visto che il tempo stringe (quasi sento già Babbo Natale che si avvicina) ho voluto lasciarlo semplice e veloce.

Ecco una discussione sul forum, in cui discutere le varianti o i miglioramenti.

BUON NATALE!

A proposito di Zzed

Appassionato di informatica alternativa, ma perenne novellino di Linux..

Vedi Anche

MagPi 138 doppia pagina

MagPi in Italiano! Nuova Generazione Retrogaming

Estratto, tradotto in italiano, di The MagPi N°138 la rivista ufficiale della Fondazione Raspberry Pi.

Powered by themekiller.com