Sommario:

Una luce che respira controllata da un Raspberry Pi: 5 passaggi
Una luce che respira controllata da un Raspberry Pi: 5 passaggi

Video: Una luce che respira controllata da un Raspberry Pi: 5 passaggi

Video: Una luce che respira controllata da un Raspberry Pi: 5 passaggi
Video: Come non pagare l'acqua. #shorts #bollette 2024, Luglio
Anonim
Una luce che respira controllata da un Raspberry Pi
Una luce che respira controllata da un Raspberry Pi

La "Luce per esercizi di respirazione" qui descritta è una luce pulsante semplice e relativamente poco costosa che può aiutarti negli esercizi di respirazione e aiutarti a mantenere un ritmo respiratorio costante. Potrebbe anche essere usato ad es. come luce notturna rilassante per i bambini. Nella fase attuale è più un prototipo funzionante.

Puoi anche usarlo come esempio economico e semplice da costruire per il "calcolo fisico" con un Raspberry Pi, ad es. da utilizzare come progetto educativo a livello di principianti, qui hai ingressi analogici (potenziometro rotativo) e digitali (pulsante) nonché uscite digitali (LED) e PWM (catene di LED) e gli effetti delle modifiche sono direttamente visibili.

La luce attraversa cerchi ripetitivi composti da quattro fasi: una transizione da verde (superiore) a rossa (inferiore), una fase di solo rosso, una transizione da rosso a verde e una fase di solo verde. La lunghezza di queste fasi è definita da costanti che possono essere modificate da potenziometri. Il processo può essere avviato, messo in pausa, ripreso e interrotto premendo i pulsanti. I LED indicano la fase corrente. Si basa sull'esempio "Firefly Light" di Pimoroni (vedi qui). Simile al "Firefly Light" richiede un Raspberry Pi (Zero), il Pimoroni Explorer pHAT (o HAT) e due catene luminose a LED IKEA SÄRDAL. Questi ultimi sono collegati alle due porte PMW/motore del pHAT. Invece di usare un barattolo, ho posizionato i LED in una cornice IKEA. Ho cercato di ottimizzare un po' lo script Python originale "lucciola light", implementando una funzione sinusoidale opzionale per i cambiamenti di luminosità/ampiezza dell'impulso e ho introdotto due fasi di "hold" tra le fasi di dimming. Durante la modifica dei parametri per trovare un modello di luce più confortevole, ho scoperto che il dispositivo può essere utile per supportare un modello di respirazione regolare e molto chiaramente definito. Pertanto, alcuni di voi potrebbero trovare utile questa "Luce che respira" per scopi di meditazione o allenamento. Poiché Explorer pHAT ha quattro ingressi digitali e quattro analogici, è molto facile regolare fino a quattro diversi parametri utilizzando potenziometri a scorrimento o rotativi e introdurre funzioni di avvio/riavvio/arresto delle luci utilizzando i pulsanti. Ciò ti consentirà di utilizzare il dispositivo e ottimizzare i parametri in base alle tue esigenze senza dover collegare un monitor al Pi.

Inoltre l'Explorer pHAT è dotato di quattro uscite digitali, che consentono di aggiungere LED o cicalini, più due porte 5V e due Ground e due uscite PWM per motori o dispositivi simili. Assicurati di utilizzare i resistori corretti per ridurre la tensione dei tuoi LED.

La libreria python pHAT Explorer di Pimoroni rende estremamente semplice il controllo di tutte queste porte I/O.

In questo manuale vengono descritte le versioni del dispositivo con 0, 2 e 4 potenziometri e pulsanti. Scegli quello che si adatta alle tue esigenze.

Per far funzionare il dispositivo in autonomia, si potrebbe utilizzare sia un alimentatore, sia la combinazione di uno shim LiPo Pimoroni e una batteria LiPo, come descritto per la "Luce Firefly".

Versioni aggiornate 28 dicembre 2018: aggiunta versione "quattro potenziometri e quattro pulsanti". Dec. 30: aggiunto il codice per la versione 4-poti e le immagini fritzing.

Passaggio 1: materiali utilizzati/necessari

Materiali utilizzati/necessari
Materiali utilizzati/necessari
Materiali utilizzati/necessari
Materiali utilizzati/necessari
Materiali utilizzati/necessari
Materiali utilizzati/necessari

- Raspberry Pi Zero (4,80 GBP a Pimoroni, Regno Unito) e una scheda micro SD (>= 8 GB) con Raspian

- Pimoroni Explorer pHAT (10 GBP a Pimoroni, Regno Unito). Opzionale: un'intestazione a fila singola, cavi jumper

- Catena di luci LED IKEA SÄRDAL con 12 LED (2 x, 3,99 € ciascuna presso IKEA Germania), o qualsiasi catena LED 3-5V simile.- Cornice IKEA RIBBA (13 x 18 cm, 2,49 € presso IKEA Germania).

- Un pezzo di schiuma PU (2 x 18 x 13,5 cm), per contenere i LED. In alternativa è possibile utilizzare la schiuma di stirolo.

- Un pezzo di plastica opaca (18 x 13,5 cm), che funge da diffusore.

- Due fogli di carta trasparente colorata (9 x 13,5 cm ciascuno). Ho usato il rosso e il verde.

- Un pezzo di foglio di plastica sottile e molto opaco (18 x 13,5 cm), che funge da schermo esterno. Ho usato un sottile foglio di policarbonato bianco. Opzionale, per la versione sintonizzabile:

Per regolare il tempo di rampa e la durata del plateau, o in alternativa altri parametri come la luminosità.- Potenziometri da 10, 20 o 50 kOhm (fino a quattro, ne ho usati due da 10 kOhm rispettivamente quattro da 50 Ohm).

Come pulsanti di avvio/arresto/pausa/riprendi:- Pulsanti (fino a quattro, ne ho usati quattro o due)

Come indicatori per le fasi del cerchio:- LED colorati e le resistenze necessarie (dipenderà dalle caratteristiche dei LED che utilizzerai).

  1. circa 140 Ohm per 5,2 -> 2, 2 V (giallo, arancione, rosso; alcuni LED verdi),
  2. circa 100 Ohm per 5,3 -> 3,3 V (alcuni LED verdi; blu, bianchi)

- Cavi jumper e breadboard

Opzionale, per una versione a batteria:

  • Alimentatore Micro-USB da 5V, oppure
  • Pimoroni Zero LiPo shim e una batteria LiPo

Passaggio 2: Lazout e assemblaggio

Lazout e assemblaggio
Lazout e assemblaggio
Lazout e assemblaggio
Lazout e assemblaggio
Lazout e assemblaggio
Lazout e assemblaggio

Assemblare l'Explorer pHAT come descritto dal produttore. Ho aggiunto un header femmina a riga singola per il collegamento semplificato dei cavi jumper alle porte I/O del pHAT. Configura il tuo Pi e installa la libreria Pimoroni per Explorer HAT/pHAT, come descritto da Pimoroni. Spegni il Pi e collega il pHAT al Pi. Rimuovi i pacchi batteria dalle catene di LED tagliando i fili e stagna l'estremità dei fili. Tagliare due cavi jumper maschio 2x al centro, stagnare l'estremità dei fili. Saldare i cavi di collegamento alle catene LED e isolare i punti di saldatura utilizzando nastro adesivo o guaina termoretraibile. Prima di saldare, controllare quali dei fili devono essere collegati alle porte più oa terra e contrassegnarli di conseguenza. Ho usato cavi di collegamento con diversi colori. Tagliare la schiuma per contenere i LED, il diffusore e i fogli dello schermo alla dimensione appropriata. Sulla piastra di supporto LED segnare le posizioni in cui devono essere posizionati i LED e praticare fori di 3-5 mm nella schiuma. Quindi inserire i 24 LED nelle posizioni indicate. Posiziona le carte colorate e le piastre diffusori sulla piastra LED (vedi immagini), posiziona la cornice sopra la confezione. Fissare gli strati di schiuma nel telaio, ad es. utilizzando nastro adesivo. Collegare i cavi delle strisce LED alle porte "motore" dell'Explorer pHAT. Per la versione sintonizzabile posizionare potenziometri, pulsanti, LED di controllo (e/o buzzer) e resistori sulla breadboard e collegarli con le porte corrispondenti all'Explorer pHAT.

Avvia il tuo Pi e installa le librerie richieste, come descritto sul sito Web Pimoroni, quindi esegui lo script Python 3 fornito. Se una delle catene di LED non funziona, potrebbe essere collegata nella direzione sbagliata. Quindi è possibile modificare i collegamenti più/meno sul pHAT o apportare una modifica al programma, ad es. cambia “eh.motor.one.backwards()” in “… forwards()”.

In allegato trovi degli script con impostazioni fisse che puoi modificare all'interno del programma e un esempio in cui puoi modificare alcune impostazioni con potenziometri e avviare e interrompere il ciclo di luce utilizzando i pulsanti. Non dovrebbe essere troppo difficile adattare gli script al proprio layout della "luce che respira".

Passaggio 3: gli script Python

La libreria Python di Pimoroni per Explorer HAT/pHAT rende estremamente semplice indirizzare i componenti collegati alle porte I/O degli HAT. Due esempi: "eh.two.motor.backwards(80)" pilota il dispositivo collegato alla porta 2 PWM/motore con l'80% di intensità massima all'indietro, "eh.output.three.flash()" collega un LED alla porta di uscita numero tre lampeggia fino a quando non si ferma. Ho generato alcune variazioni della luce, fondamentalmente aggiungendo livelli crescenti di controllo aggiungendo fino a quattro pulsanti e potenziometri. In allegato trovi un programma Python chiamato "Breathing light fixed lin cosin.py" dove tutte e quattro le impostazioni dei parametri devono essere modificate all'interno del programma. Inoltre una versione denominata "Breathing light var lin cosin.py" dove la lunghezza delle due fasi di regolazione può essere regolata tramite due potenziometri e la versione più elaborata "Breathing light var lin cosin3.py" per la versione a quattro potenziometri e pulsanti. I programmi sono scritti in Python 3.

In tutti i casi il ciclo può essere richiamato e interrotto tramite due pulsanti, nella versione a quattro pulsanti è possibile anche interrompere e riavviare il processo. Inoltre alle porte di uscita digitale possono essere collegati quattro LED (colorati) che indicano le fasi specifiche. Un ciclo del dispositivo è composto da quattro fasi:

- la fase di "inspirazione", in cui i LED superiori si attenuano e i LED inferiori aumentano l'intensità

- la fase "trattieni il respiro", dove i led superiori sono spenti e i led inferiori sono impostati al massimo

- la fase di "espirazione", in cui i LED inferiori si attenuano e i LED superiori aumentano di intensità

- la fase di "resta espirazione", dove i led inferiori sono spenti e i led superiori si accendono al massimo.

La lunghezza di tutte e quattro le fasi è definita da un singolo parametro numerico, che può essere fissato nel programma e/o può essere regolato tramite un potenziometro.

Un quinto parametro definisce l'intensità massima. Permette di impostare la massima luminosità dei led, cosa che potrebbe tornare utile se si vuole utilizzarla come luce notturna. Inoltre, potrebbe consentire di migliorare il processo di attenuazione, poiché ho l'impressione che sia difficile vedere una differenza tra l'80 e il 100% di intensità.

Stavo aggiungendo una funzione opzionale (co-)sinus per l'aumento/diminuzione della luminosità, in quanto fornisce una connessione più fluida tra le fasi. Sentiti libero di provare altre funzioni. Per esempio. puoi eliminare le interruzioni e utilizzare due diverse funzioni sinusoidali (complesse) per entrambe le catene di LED e regolare la frequenza e l'ampiezza tramite potenziometri.

# La lampada "respirazione": versione a due pulsanti e due potenziometri

# una modifica dell'esempio di lucciola per il pHAT Pimoroni Explorer # qui: aumento/diminuzione sinoide dei valori del motore/PWM # per la funzione lineare attiva la funzione lineare e mute del coseno # Questa versione "var" legge gli ingressi analogici, sovrascrive le impostazioni predefinite # legge ingresso digitale, pulsanti per avviare e interrompere """ per avviare all'accensione del Pi puoi utilizzare Cron: Cron è un programma Unix che viene utilizzato per pianificare i lavori e ha una comoda funzione @reboot che ti consente di eseguire uno script ogni volta che il tuo Pi si avvia. Apri un terminale e digita crontab -e per modificare il tuo crontab. Scorri fino alla fine del file, oltre tutte le righe che iniziano con # e aggiungi la riga seguente (supponendo che il tuo codice sia in /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & Chiudi e salva il tuo crontab (se stai usando nano, premi control-x, y e invio per uscire e salvare). """ import time import explorerhat as eh import math costanti valori #sinus xmax = 316 step = 5 # step width, ad es. 315/5 dà 63 passi/ciclo start_button = 0 # definisce lo stato di un pulsante collegato alla porta di ingresso n. 1 stop_button = 0 # definisce lo stato di un pulsante collegato alla porta di ingresso n. 3 pause_1 = 0,02 # imposta la lunghezza di pause all'interno dei passaggi nella fase di "inspirazione", quindi frequenza di rampa e durata pause_2 = 0,04 # imposta la velocità di rampa di "espirazione" pause_3 = 1,5 # pausa tra le fasi di inspirazione ed espirazione (mantenere inspirato) pause_4 = 1,2 # pausa alla fine dell'espirazione fase (mantenere espirato) max_intens = 0.9 # intensità/luminosità massima max_intens_100= 100*max_intens # uguale in % # Può consentire di ottimizzare l'impressione di "respiro" dei LED e ridurre lo sfarfallio. l_cosin= # lista con valori derivati da coseno (100 >= x >=0) l_lin= # lista con valori lineari (100 >= x >=0) # genera una lista di funzioni coseno per i nell'intervallo (0, 316, 3): # 315 è vicino a Pi*100, 105 passaggi # print (i) n_cosin = [(((math.cos (i/100))+1)/2)*100] #genera valore # print (n_cosin) l_cosin = l_cosin + n_cosin #aggiungi valore alla lista # print (l_cosin) # genera una lista lineare per i nell'intervallo (100, -1, -1): # conto alla rovescia da 100 a zero n_lin= l_lin=l_lin + n_lin # print (l_lin) # mostra un noioso elenco print () print ("""Per avviare i cicli di luce, premere il pulsante "Start" (Input uno)""") print () print ("""Per interrompere la luce, premi e tieni premuto il pulsante "Stop" (Input tre)""") print() # attendi che il pulsante Start venga premuto while (start_button==0): start_button=eh.input.one.read() # leggi pulsante numero uno eh.output.one.blink() # lampeggia LED numero uno time.sleep(0.5) # legge due volte al secondo #run si accende while (stop_button==0): # legge gli ingressi analogici UNO e DUE, definisce le impostazioni set_1 =eh.an alog.one.read() # definisce la velocità di rampa rosso-> verde pause_1=set_1*0.02 # i valori saranno compresi tra 0 e 0,13 sec/step print ("set_1:", set_1, " -> pause _1:", pause_1) set_2=eh.analog.two.read() # definisce green -> red ramping rate pause_2=set_2*0.02 # i valori saranno compresi tra 0 e 0.13 sec/step print ("set_2:", set_2, " -> pause _2: ", pause_2) # fase di "inalazione" eh.output.one.on() # può pilotare un LED o un segnale acustico ''' per x nell'intervallo (len(l_lin)): fx=max_intens*l_lin [x] # curva lineare eh.motor.one.backwards(fx) eh.motor.two.backwards(max_intens_100-fx) time.sleep(pause_1) eh.output.one.off() ''' per x nell'intervallo (len(l_cosin)): fx=max_intens*l_cosin [x] # curva lineare eh.motor.one.backwards(fx) eh.motor.two.backwards(max_intens_100-fx) time.sleep(pausa_1) eh.output.one.off() # controlla se il pulsante Stop è premuto stop_button=eh.input.three.read() # "Mantieni il fiato" pausa alla fine della fase di inspirazione eh.output.two.on() # accendi LED due eh.motor.one.indietro(0) eh.motore.due.indietro(max_intens_100) time.sleep(pause_3) eh.output.two.off() #controlla se il pulsante Stop è premuto stop_button=eh.input.three.read() # fase "espira" eh.output.three.on() # accendi il LED tre ''' per x nel range (len(l_lin)): fx=max_intens*l_lin [x] # curva lineare eh.motor.one.backwards(max_intens_100-fx) eh.motor.two.backwards(fx) time.sleep(pause_2) ''' for x in range (len(l_cosin)): fx=max_intens*l_cosin [x] # curva lineare eh.motor.one.backwards(max_intens_100-fx) eh.motor.two. backs(fx) time.sleep(pause_2) eh.output.three.off() #controlla se il pulsante Stop è premuto stop_button=eh.input.three.read() # pausa tra le fasi di "espirazione" e "inspirazione" eh. output.four.on() eh.motor.one.backwards(max_intens_100) eh.motor.two.backwards(0) time.sleep(pause_4) eh.output.four.off() #controlla se il pulsante Stop è premuto stop_button =eh.input.three.read() # spegnimento, disattivazione di tutte le porte di output eh.motor.one.stop() eh.motor.two.stop() eh.output.one.off() eh.output.two.off() eh.output.three.off() eh.output.four.off() print () stampa ("Ciao ciao")

Se si desidera utilizzare la luce come dispositivo autonomo, ad es. come luce di sonno o sveglia, puoi aggiungere una fonte di alimentazione mobile al Pi e avviare il programma dopo l'avvio e utilizzare "Cron" per accenderlo o spegnerlo in determinati momenti. Come usare "Cron" è descritto in modo molto dettagliato altrove.

Passaggio 4: esempi video

In questo passaggio troverai una serie di video che mostrano la luce in condizioni normali (cioè tutti i valori > 0, #1) ed estreme, poiché tutti i valori sono impostati su zero (#2), solo in rampa (#3 e #4), e nessuna rampa (#5 e #6).

Passaggio 5: alcune osservazioni

Si prega di scusare eventuali termini errati, errori di battitura ed errori. Non sono madrelingua inglese, né ho conoscenze approfondite di elettronica, elettronica o programmazione. Il che in realtà significa che sto cercando di scrivere un inglese istruibile su cose di cui conosco a malapena i termini corretti nella mia lingua. Pertanto, qualsiasi suggerimento, correzione o idea di miglioramento è il benvenuto. H

Consigliato: