Sadržaj:

Svjetlo za disanje kontrolirano malinom Pi: 5 koraka
Svjetlo za disanje kontrolirano malinom Pi: 5 koraka

Video: Svjetlo za disanje kontrolirano malinom Pi: 5 koraka

Video: Svjetlo za disanje kontrolirano malinom Pi: 5 koraka
Video: Келли МакГонигал: Как превратить стресс в друга? 2024, Srpanj
Anonim
Svjetlo za disanje kontrolirano od Raspberry Pi
Svjetlo za disanje kontrolirano od Raspberry Pi

Ovdje opisano "Svjetlo vježbe disanja" jednostavno je i relativno jeftino pulsirajuće svjetlo koje vas može podržati u vježbama disanja i pomoći vam u održavanju stalnog ritma disanja. Također se može koristiti npr. kao umirujuće noćno svjetlo za djecu. U sadašnjoj fazi to je više radni prototip.

Također ga možete koristiti kao jeftin i jednostavan primjer za "fizičko računanje" s Raspberry Pi, npr. koji će se koristiti kao obrazovni projekt na razini početnika, Ovdje imate analogne (rotacijski potenciometar) i digitalne ulaze (gumb), kao i digitalne (LED) i PWM izlaz (LED lanci), a učinci promjena su izravno vidljivi.

Svjetlost prolazi kroz ponavljajuće se krugove koji se sastoje od četiri faze: zeleni (gornji) prema crvenom (donji) prijelaz, samo crvena faza, prijelaz crveno-zeleno i samo zelena faza. Duljina ovih faza definirana je konstantama koje se mogu mijenjati potenciometrima. Proces se može pokrenuti, pauzirati, nastaviti i zaustaviti pritiskom na gumbe. LED diode pokazuju trenutnu fazu. Temelji se na primjeru "Firefly Light" od Pimoronija (vidi ovdje). Slično kao i "Firefly Light", zahtijeva Raspberry Pi (nula), Pimoroni Explorer pHAT (ili HAT) i dva IKEA SÄRDAL LED svjetlosna lanca. Potonji su spojeni na dva priključka PMW/motor pHAT -a. Umjesto staklenke, LED diode sam stavio u IKEA okvir za slike. Pokušavao sam pomalo optimizirati izvornu python skriptu "svjetla krijesnice", implementirajući dodatnu sinusnu funkciju za promjene svjetline/ širine impulsa i uveo sam dvije faze "zadržavanja" između faza zatamnjenja. Mijenjajući parametre kako bi se pronašao laganiji uzorak svjetla, otkrio sam da uređaj može pomoći u podržavanju vrlo jasno definiranog, pravilnog uzorka disanja. Stoga će nekima od vas ovo "Svjetlo za disanje" biti od pomoći za meditaciju ili trening. Budući da Explorer pHAT ima četiri digitalna i četiri analogna ulaza, vrlo je jednostavno regulirati do četiri različita parametra pomoću kliznih ili okretnih potenciometara, te uvesti funkcije pokretanja/ponovnog pokretanja/zaustavljanja svjetla pomoću gumba. To će vam omogućiti korištenje uređaja i optimiziranje parametara prema vašim potrebama bez montiranja monitora na Pi.

Uz to, Explorer pHAT dolazi s četiri digitalna izlaza koji omogućuju dodavanje LED dioda ili zvučnih signala, plus dva 5V i dva uzemljena priključka te dva PWM izlazna priključka za motore ili slične uređaje. Molimo provjerite koristite li ispravne otpornike za smanjenje napona vaših LED dioda.

Pimoronijeva Explorer pHAT python knjižnica čini iznimno jednostavnom kontrolu svih ovih I/O portova.

U ovoj uputi opisane su verzije uređaja s 0, 2 i 4 potenciometra i tipkama. Odaberite onu koja odgovara vašim potrebama.

Za autonomno pokretanje uređaja moglo bi se koristiti ili napajanje ili kombinacija Pimoroni LiPo podmetača i LiPo baterije, kako je opisano za "Firefly Light".

Ažurirane verzije 28. prosinca 2018.: dodana verzija "četiri potenciometra i četiri tipke". 30: dodan je kôd za verziju s 4 porta i prevrtanje slika.

Korak 1: Korišteni materijali / potrebni

Korišteni materijali / potrebni
Korišteni materijali / potrebni
Korišteni materijali / potrebni
Korišteni materijali / potrebni
Korišteni materijali / potrebni
Korišteni materijali / potrebni

- Raspberry Pi Zero (4,80 GBP u Pimoroniju, UK) i mikro SD kartica (> = 8 GB) s Raspian -om

- Pimoroni Explorer pHAT (10 GBP u Pimoroniju, UK). Izborno: jednoredni zaglavlje, kratkospojni kablovi

- IKEA SÄRDAL LED svjetla za lance sa 12 LED dioda (2 x, 3,99 € svaka u IKEA Njemačkoj), ili bilo koji sličan LED lanac od 3-5 V.- IKEA RIBBA okvir za slike (13 x 18 cm, 2,49 € u IKEA Njemačkoj).

- Komad PU pjene (2 x 18 x 13,5 cm) za držanje LED dioda. Alternativno se može koristiti stiropora.

- Komad neprozirne plastike (18 x 13,5 cm), koji djeluje kao difuzor.

- Dva lista prozirnog papira u boji (9 x 13,5 cm svaki). Koristio sam crvenu i zelenu boju.

- Komad tankog, vrlo neprozirnog plastičnog lima (18 x 13,5 cm), koji djeluje kao vanjski zaslon. Koristio sam tanak bijeli polikarbonatni lim. Izborno, za podesivu verziju:

Za podešavanje vremena uspona i trajanja platoa, ili alternativno drugih parametara poput svjetline.- potenciometri od 10, 20 ili 50 kOhm (do četiri, koristio sam dva 10 kOhm odnosno četiri 50 Ohma).

Gumbi za pokretanje/zaustavljanje/pauzu/nastavak:- tipke (do četiri, koristio sam četiri ili dvije)

Kao pokazatelji za faze kruga:- LED u boji i potrebni otpornici (ovisit će o karakteristikama LED dioda koje ćete koristiti).

  1. oko 140 Ohma za 5,2 -> 2, 2 V (žuta, narančasta, crvena; neke zelene LED diode),
  2. oko 100 Ohma za 5,3 -> 3,3 V (neke zelene; plave, bijele LED diode)

- Kablovi za preskakanje i ploča

Izborno, za verziju na baterije:

  • 5V Micro-USB napajanje, ili
  • Pimoroni Zero LiPo podmetač i LiPo baterija

Korak 2: Lazout i montaža

Lazout i Skupština
Lazout i Skupština
Lazout i Skupština
Lazout i Skupština
Lazout i Skupština
Lazout i Skupština

Sastavite Explorer pHAT kako je opisao proizvođač. Dodao sam jednoredni ženski zaglavlje za pojednostavljeno spajanje kratkospojnih kabela na pHATs I/O portove. Postavite svoj Pi i instalirajte Pimoronijevu knjižnicu za Explorer HAT/pHAT, kako je opisao Pimoroni. Isključite Pi i pričvrstite pHAT na Pi. Uklonite baterije iz LED lanaca tako što ćete prerezati žice i kositi kraj žica. Prerežite dva 2x kratka spojna kabela na sredini, kosite kraj žica. Lemite kratkospojne kabele na LED lance i izolirajte mjesta lemljenja ljepljivom trakom ili skupljajućom cijevi. Prije lemljenja provjerite koje žice moraju biti spojene na plus ili uzemljenje i označite ih na odgovarajući način. Koristio sam kratkospojne žice u različitim bojama. Izrežite pjenu kako biste držali LED diode, difuzor i listove zaslona na odgovarajućoj veličini. Na ploči za držanje LED označite položaje na koje će LED diode biti postavljene i probušite rupe od 3-5 mm u pjeni. Zatim umetnite 24 LED diode na zadane položaje. Stavite obojene papire i ploče s difuzorom na LED ploču (pogledajte slike), a okvir postavite iznad pakiranja. Učvrstite slojeve pjene u okvir, npr. pomoću ljepljive trake. Priključite kabele LED trake na priključke „motora“Explorer pHAT -a. Za podesivu verziju postavite potenciometre, gumbe, kontrolne LED diode (i/ili zujalice) i otpornike na matičnu ploču i povežite ih s odgovarajućim priključcima na Exploreru pHAT.

Pokrenite svoj Pi i instalirajte potrebne knjižnice, kako je opisano na web stranici Pimoroni, a zatim pokrenite priloženu skriptu Python 3. Ako jedan od LED lanaca ne radi, možda je spojen u pogrešnom smjeru. Tada možete promijeniti plus/minus veze na pHAT -u ili promijeniti program, npr. promijenite “eh.motor.one.backwards ()” u “… forward ()”.

U privitku se nalaze skripte s fiksnim postavkama koje možete promijeniti unutar programa i primjer gdje možete promijeniti neke postavke pomoću potenciometara, te pokrenuti i zaustaviti svjetlosni ciklus pomoću gumba. Ne bi trebalo biti previše teško prilagoditi skripte prilagođene vlastitom rasporedu "svjetla za disanje".

Korak 3: Python skripte

Pimoronijeva Python knjižnica za Explorer HAT/pHAT čini iznimno jednostavnim adresiranje komponenti spojenih na I/O portove HAT -ova. Dva primjera: "eh.two.motor.backwards (80)" pokreće uređaj priključen na PWM/priključak motora 2 s 80% maksimalnog intenziteta u smjeru unatrag, "eh.output.three.flash ()" čini LED spojenom za izlaz trećeg priključka treperi dok se ne zaustavi. Generirao sam nekoliko varijacija svjetla, u osnovi dodajući sve veće razine kontrole dodavanjem do četiri tipke i potenciometra. U privitku se nalazi Python program pod nazivom "Breathing light fixed lin cosin".py "gdje se sve četiri postavke parametara moraju promijeniti u programu. Nadalje, verzija pod nazivom "Breathing light var lin cosin.py" gdje se duljina dvije faze prigušivanja može podesiti pomoću dva potenciometra i najrazrađenija verzija "Breathing light var lin cosin3.py" za verziju s četiri potenciometra i pritiskom na gumb. Programi su napisani na Pythonu 3.

U svim slučajevima ciklički proces može se izazvati i zaustaviti pomoću dva gumba, u verziji s četiri gumba također možete prekinuti i ponovno pokrenuti proces. Osim toga, četiri (obojene) LED diode mogu se spojiti na digitalne izlazne priključke, označavajući određene faze. Ciklus uređaja sastoji se od četiri faze:

- faza "udisanja", gdje su gornje LED diode prigušene nisko, a donje LED povećavaju intenzitet

- faza "zadržite dah", gdje su gornje LED diode isključene, a donje LED postavljene na maksimum

- faza "izdaha", gdje su donje LED diode prigušene nisko, a gornje LED pojačavaju intenzitet

- faza "ostati na izdisaju", gdje su donje LED diode isključene, a gornje LED diode svijetle maksimalno.

Duljina sve četiri faze definirana je pojedinačnim numeričkim parametrom, koji se može ili fiksirati u programu i/ili prilagoditi pomoću potenciometra.

Peti parametar definira maksimalni intenzitet. Omogućuje vam postavljanje maksimalne svjetline LED dioda, što bi vam moglo biti korisno ako ga želite koristiti kao noćno svjetlo. Osim toga, može vam omogućiti poboljšanje procesa zatamnjivanja, jer imam dojam da je teško vidjeti razliku između intenziteta 80 i 100%.

Dodao sam dodatnu (su) sinusnu funkciju za povećanje/smanjenje svjetline, jer daje glatkiju vezu između faza. Isprobajte druge funkcije. Npr. možete ukloniti prekide i koristiti dvije različite (složene) sinusne funkcije za oba LED lanca te podesiti frekvenciju i amplitudu pomoću potenciometara.

# Lampa "disanje": verzija s dva gumba i dva potenciometra

# izmjena primjera krijesnice za Pimoroni Explorer pHAT # ovdje: sinoidno povećanje/smanjenje vrijednosti motora/PWM vrijednosti # za linearnu funkciju uključivanje linearne i isključivanje funkcije cosin # Ova verzija "var" čita analogne ulaze, poništava unaprijed definirane postavke # čitanja digitalni ulaz, tipke za pokretanje i zaustavljanje "" "za pokretanje nakon uključivanja Pi možete koristiti Cron: Cron je Unixov program koji se koristi za zakazivanje poslova, a ima i prikladnu funkciju @reboot koja vam omogućuje pokretanje skripte kad god se Pi pokrene. Otvorite terminal i upišite crontab -e za uređivanje crontaba. Pomaknite se do dna datoteke, prođite sve retke koji počinju #i dodajte sljedeći redak (pod pretpostavkom da je vaš kôd na /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & Zatvorite i spremite svoju crontab (ako koristite nano, pritisnite control-x, y i enter za izlaz i spremanje). "" "vrijeme uvoza import explorerhat kao eh uvoz matematičke konstantne vrijednosti #sinus xmax = 316 step = 5 # širina koraka, npr. 315/5 daje 63 koraka/ciklus start_button = 0 # ovo definira stanje tipke spojene na ulazni priključak br. 1 stop_button = 0 # ovo definira stanje tipke spojene na ulazni priključak br. 3 pauza_1 = 0,02 # postavlja duljinu pauza unutar koraka u fazi "udisaja", čime se povećava brzina i trajanje pauze_2 = 0,04 # postavlja "brzina izdaha" brzina pauze_3 = 1,5 # pauza između faza udaha i izdisaja (zadržite udah) pauza_4 = 1,2 # pauze na kraju izdisaja faza (zadržite izdah) max_intens = 0.9 # maksimalni intenzitet/svjetlina max_intens_100 = 100*max_intens # isto u % # Može omogućiti optimiziranje "disanja" dojma LED dioda i smanjiti treperenje. l_cosin = # popis s izvedenim vrijednostima cosinusa (100> = x> = 0) l_lin = # popis s linearnim vrijednostima (100> = x> = 0) # generira popis funkcija cosinusa za i u rasponu (0, 316, 3): # 315 je blizu Pi*100, 105 koraka # print (i) n_cosin = [(((math.cos (i/100))+1)/2)*100] #generiraj vrijednost # print (n_cosin) l_cosin = l_cosin + n_cosin #dodaj vrijednost na popis # print (l_cosin) # generiraj linearni popis za i u rasponu (100, -1, -1): # odbrojavanje od 100 do nule n_lin = l_lin = l_lin + n_lin # print (l_lin) # prikazuje dosadni popis print () print ("" "Za početak ciklusa svjetla pritisnite gumb" Start "(Input One)" "") print () print ("" "Za zaustavljanje svjetlo, pritisnite i držite gumb "Stop" (ulaz tri) "" ") print () # pričekajte dok se gumb Start ne pritisne dok (start_button == 0): start_button = eh.input.one.read () # read gumb broj jedan eh.output.one.blink () # trepće LED broj jedan put.sleep (0.5) # čitanje dvaput u sekundi # trčanje svijetli dok (stop_button == 0): # čitanje analognih ulaza JEDAN i DVA, definirajte set_1 = eh.an alog.one.read () # definira crveno-> zeleno ramping rate pause_1 = set_1*0,02 # vrijednosti će se kretati između 0 i 0,13 sec/korak ispisa ("set_1:", set_1, " -> pauza _1:", pauza_1) set_2 = eh.analog.two.read () # definira zeleno -> crveno ramping rate pause_2 = set_2*0,02 # vrijednosti će se kretati između 0 i 0,13 s/ispis koraka ("set_2:", set_2, " -> pauza _2: ", pause_2) # faza" udisanja "eh.output.one.on () # može pokrenuti LED ili zvučni signal" "" za x u rasponu (len (l_lin)): fx = max_intens*l_lin [x] # linearna krivulja eh.motor.one.backwards (fx) eh.motor.two. unazad (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () '' 'za x u rasponu (len (l_cosin)): fx = max_intens*l_cosin [x] # linearna krivulja eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () # provjerite je li pritisnuta tipka Stop stop_button = eh.input.three.read () # "Zadržite dah" stanka na kraju faze udisanja eh.output.two.on () # uključite LED dva eh.motor.one.nazad (0) eh.motor.two.backwards (max_intens_100) time.sleep (pause_3) eh.output.two.off () #check ako je pritisnuta tipka Stop stop_button = eh.input.three.read () # faza "izdaha" eh.output.three.on () # uključite LED tri '' 'za x u rasponu (len (l_lin)): fx = max_intens*l_lin [x] # linearna krivulja eh.motor.one.backwards (max_intens_100-fx) eh.motor.two. unazad (fx) time.sleep (pause_2) '' 'za x u rasponu (len (l_cosin)): fx = max_intens*l_cosin [x] # linearna krivulja eh.motor.one.backwards (max_intens_100-fx) eh.motor.two. unatrag (fx) vrijeme.spavanje (pauza_2) eh.output.three.off () # provjerite je li pritisnuta tipka Stop stop_button = eh.input.three.read () # pauza između faza "izdaha" i "udisaja" eh. output.four.on () eh.motor.one.backwards (max_intens_100) eh.motor.two.backwards (0) time.sleep (pause_4) eh.output.four.off () #check ako je tipka Stop pritisnuta stop_button = eh.input.three.read () # shutdown, okretanje svih izlaznih portova eh.motor.one.stop () eh.motor.two.stop () eh.output.one.off () eh.output.two.off () eh.output.three.off () eh.output.four.off () ispis () print ("Zbogom")

Ako želite koristiti svjetlo kao samostalan uređaj, npr. kao svjetlo za spavanje ili buđenje, možete dodati mobilni izvor napajanja u Pi i pokrenuti program nakon podizanja sustava te upotrijebiti "Cron" za uključivanje ili isključivanje u određeno vrijeme. Kako se koristi "Cron" detaljno je opisano drugdje.

Korak 4: Video primjeri

U ovom koraku pronaći ćete brojne videozapise koji prikazuju svjetlo u normalnim (tj. Svim vrijednostima> 0, #1) i ekstremnim uvjetima, jer su sve vrijednosti postavljene na nulu (#2), samo ramping (#3 ), i bez rampanja (#5 ).;

Korak 5: Neke napomene

Ispričajte se zbog pogrešnih uvjeta, pravopisnih pogrešaka i pogrešaka. Nisam izvorni govornik engleskog jezika, niti imam razrađeno znanje iz struje, elektronike ili programiranja. Što zapravo znači da pokušavam napisati engleski jezik za stvari na kojima jedva poznajem točne izraze na svom jeziku. Stoga su svi savjeti, ispravke ili ideje za poboljšanje dobrodošli. H

Preporučeni: