Indholdsfortegnelse:

Et vejrtrækningslys styret af en hindbær Pi: 5 trin
Et vejrtrækningslys styret af en hindbær Pi: 5 trin

Video: Et vejrtrækningslys styret af en hindbær Pi: 5 trin

Video: Et vejrtrækningslys styret af en hindbær Pi: 5 trin
Video: 10 minutters digital nedtællingstimer med åndelys baggrund. 2024, Juli
Anonim
Et åndedrætslys styret af en Raspberry Pi
Et åndedrætslys styret af en Raspberry Pi

"Breathing Exercise Light" beskrevet her er et simpelt og relativt billigt pulserende lys, der kan understøtte dig i dine vejrtrækninger og hjælpe dig med at holde en konstant vejrtrækningsrytme. Det kan også bruges f.eks. som en beroligende natlampe til børn. I den nuværende fase er det mere en fungerende prototype.

Du kan også bruge det som et billigt og enkelt at bygge eksempel til "fysisk computing" med en Raspberry Pi, f.eks. skal bruges som et uddannelsesprojekt på begynderniveau, Her har du analoge (rotationspotentiometer) og digitale indgange (trykknap) samt digital (LED) og PWM -udgang (LED -kæder), og effekterne af ændringer er direkte synlige.

Lyset løber gennem gentagne cirkler, der består af fire faser: en grøn (øvre) til rød (nedre) overgang, en fase med kun rød, en rød-til-grøn overgang og en fase, der kun er grøn. Længden af disse faser er defineret af konstanter, som kan modificeres af potentiometre. Processen kan startes, sættes på pause, genoptages og stoppes ved at trykke på trykknapper. Lysdioder angiver den aktuelle fase. Den er baseret på "Firefly Light" -eksemplet af Pimoroni (se her). Ligesom "Firefly Light" kræver det en Raspberry Pi (Zero), Pimoroni Explorer pHAT (eller HAT) og to IKEA SÄRDAL LED lyskæder. De senere er forbundet til de to PMW/motorporte i pHAT. I stedet for at bruge en krukke har jeg placeret lysdioderne i en IKEA billedramme. Jeg har forsøgt at optimere det originale "firefly light" python -script lidt, implementeret en valgfri sinusfunktion til ændringer i lysstyrke/ pulsbredde og har introduceret to "hold" -faser mellem dæmpningsfaserne. Mens jeg ændrede parametrene for at finde et let mønster, der føles mere behageligt, fandt jeg ud af, at enheden kan være nyttig til at understøtte et meget klart defineret, regelmæssigt vejrtrækningsmønster. Nogle af jer kan derfor finde dette "Åndedrætslys" nyttigt til meditation eller træning. Da Explorer pHAT har fire digitale og fire analoge indgange, er det meget let at regulere op til fire forskellige parametre ved hjælp af skyde- eller rotationspotentiometre og indføre start/genstart/stop -funktioner for lysene ved hjælp af trykknapper. Dette giver dig mulighed for at bruge enheden og optimere parametrene til dine behov, uden at en skærm skal være knyttet til Pi.

Desuden leveres Explorer pHAT med fire digitale udgange, som gør det muligt at tilføje lysdioder eller summer, plus to 5V og to jordporte og to PWM-udgange til motorer eller lignende enheder. Sørg for, at du bruger de korrekte modstande til at reducere spændingen for dine lysdioder.

Pimoronis Explorer pHAT python -bibliotek gør det ekstremt enkelt at styre alle disse I/O -porte.

I denne instruerbare version af enheden med 0, 2 og 4 potentiometre og knapper er beskrevet. Vælg den, der passer til dine behov.

For at køre enheden autonomt kunne man enten bruge en strømforsyning eller kombinationen af et Pimoroni LiPo -mellemlæg og et LiPo -batteri, som beskrevet for "Firefly Light".

Opdaterede versioner 28. december 2018: 'fire potentiometre og fire trykknapper' version tilføjet. Dec. 30: kode til 4-poti version og fritzing billeder tilføjet.

Trin 1: Materialer brugt / påkrævet

Materialer brugt / påkrævet
Materialer brugt / påkrævet
Materialer brugt / påkrævet
Materialer brugt / påkrævet
Materialer brugt / påkrævet
Materialer brugt / påkrævet

- Raspberry Pi Zero (4,80 GBP hos Pimoroni, UK) og et micro SD -kort (> = 8 GB) m/ Raspian

- Pimoroni Explorer pHAT (10 GBP hos Pimoroni, Storbritannien). Valgfrit: en enkelt række header, jumper kabler

- IKEA SÄRDAL LED-kædelamper m/ 12 lysdioder (2 x, 3,99 € pr. Stk. I IKEA Tyskland) eller en lignende 3-5V LED-kæde.- IKEA RIBBA billedramme (13 x 18 cm, 2,49 € hos IKEA Tyskland).

- Et stykke PU -skum (2 x 18 x 13,5 cm), til at holde LED'erne. Alternativt kan styro -skum bruges.

- Et stykke uigennemsigtig plast (18 x 13,5 cm), der fungerer som diffusor.

- To ark farvet gennemsigtigt papir (9 x 13,5 cm hver). Jeg brugte rød og grøn.

- Et stykke tyndt, meget uigennemsigtigt plastark (18 x 13,5 cm), der fungerer som den ydre skærm. Jeg brugte et tyndt hvidt polycarbonatark. Valgfri, til den tunbare version:

For at justere ramping timing og plateau varighed eller alternativt andre parametre som lysstyrke.- 10, 20 eller 50 kOhm potentiometre (op til fire brugte jeg to 10 kOhm henholdsvis fire 50 Ohm).

Som knapper til start/stop/pause/genoptag:- Trykknapper (op til fire, jeg brugte fire eller to)

Som indikatorer for cirkelfaserne:- Farvede lysdioder og de nødvendige modstande (afhænger af egenskaberne ved de lysdioder, du vil bruge).

  1. ca. 140 Ohm til 5,2 -> 2, 2 V (gul, orange, rød; nogle grønne lysdioder),
  2. ca. 100 Ohm til 5,3 -> 3,3 V (nogle grønne, blå, hvide lysdioder)

- Jumperkabler og et brødbræt

Valgfrit, til en batteridrevet version:

  • 5V Micro-USB strømforsyning eller
  • Pimoroni Zero LiPo -mellemlæg og et LiPo -batteri

Trin 2: Lazout og samling

Lazout og samling
Lazout og samling
Lazout og samling
Lazout og samling
Lazout og samling
Lazout og samling

Saml Explorer pHAT som beskrevet af producenten. Jeg har tilføjet en enkelt række kvindelig header til den forenklede forbindelse af jumperkabler til pHATs I/O -porte. Konfigurer din Pi og installer Pimoroni -biblioteket til Explorer HAT/pHAT, som beskrevet af Pimoroni. Sluk for Pi, og fastgør pHAT på Pi. Fjern batteripakkerne fra LED -kæderne ved at skære ledningerne og tin enden af ledningerne. Skær to 2x han -jumperkabler i midten, tin enden af ledningerne. Lod jumperkablerne til LED -kæderne, og isoler loddepunkterne ved hjælp af enten tape eller krympeslange. Inden lodning skal du kontrollere, hvilke af ledningerne der skal tilsluttes plus- eller jordporte, og markere dem i overensstemmelse hermed. Jeg brugte jumperwires med forskellige farver. Skær skummet for at holde lysdioderne, diffusoren og skærmarkene i den passende størrelse. På LED-holdepladen markeres de positioner, hvor LED'erne skal placeres, og huller 3-5 mm huller i skummet. Indsæt derefter de 24 lysdioder på de givne positioner. Placer de farvede papirer og diffusorplader på LED -pladen (se billeder), dem placerer rammen over pakken. Fastgør skumlagene i rammen, f.eks. ved hjælp af tape. Fastgør LED -stripkablerne til "motor" -portene på Explorer pHAT. For den tunbare version skal du placere potentiometre, trykknapper, kontrol -LED'er (og/eller summer) og modstande på brødbrættet og forbinde dem med de tilsvarende porte på Explorer pHAT.

Start din Pi og installer de nødvendige biblioteker, som beskrevet på Pimoroni -webstedet, og kør derefter det medfølgende Python 3 -script. Hvis en af LED -kæderne ikke fungerer, kan den være forbundet i den forkerte retning. Så kan du enten ændre plus/minus -forbindelserne på pHAT eller foretage en ændring i programmet, f.eks. ændre "eh.motor.one.backwards ()" til "… forward ()".

Vedhæftet finder du scripts med faste indstillinger, du kan ændre i programmet og et eksempel, hvor du kan ændre nogle af indstillingerne med potentiometre og starte og stoppe lyscyklussen ved hjælp af trykknapper. Det bør ikke være for svært at justere scripts, så de passer til dit eget layout af "åndedrætslyset".

Trin 3: Python -scripts

Pimoronis Python -bibliotek til Explorer HAT/pHAT gør det ekstremt enkelt at adressere de komponenter, der er knyttet til HAT'ernes I/O -porte. To eksempler: "eh.two.motor.backwards (80)" driver enheden, der er fastgjort til PWM/motorport 2 med 80% maksimal intensitet i baglæns retning, "eh.output.three.flash ()" gør en LED tilsluttet til at sende port nummer tre blinke, indtil det er stoppet. Jeg har genereret et par variationer af lyset, og tilføjer stort set stigende kontrolniveauer ved at tilføje op til fire trykknapper og potentiometre. Vedhæftet finder du et Python -program kaldet "Breathing light fixed lin cosin.py ", hvor alle fire parameterindstillinger skal ændres i programmet. Derudover en version kaldet "Breathing light var lin cosin.py", hvor længden af de to dæmpningsfaser kan justeres ved hjælp af to potentiometre og den mest udførlige version "Breathing light var lin cosin3.py" til de fire potentiometer & trykknapversion. Programmerne er skrevet i Python 3.

I alle tilfælde kan cykelprocessen fremkaldes og stoppes ved hjælp af to trykknapper, i versionen med fire knapper kan du også afbryde og genstarte processen. Derudover kan der tilsluttes fire (farvede) lysdioder til de digitale outputporte, hvilket angiver de specifikke faser. En cyklus af enheden består af fire faser:

- "indånder" -fasen, hvor de øvre lysdioder dæmpes lavt, og de nederste lysdioder øger intensiteten

- "hold vejret" -fasen, hvor de øverste lysdioder er slukket, og de nederste lysdioder er sat til maksimum

- "udånder" -fasen, hvor de nederste lysdioder dæmpes lavt, og de øvre lysdioder øger intensiteten

- fasen "bliv udåndet", hvor de nederste lysdioder er slukket, og de øvre lysdioder lyser maksimalt.

Længden af alle fire faser er defineret af en individuel numerisk parameter, som enten kan fastgøres i programmet og/eller kan justeres ved hjælp af et potentiometer.

En femte parameter definerer den maksimale intensitet. Det giver dig mulighed for at indstille den maksimale lysstyrke for LED'erne, hvilket kan være praktisk, hvis du vil bruge det som et natlys. Derudover kan det give dig mulighed for at forbedre dæmpningsprocessen, da jeg har indtryk af, at det er svært at se en forskel mellem 80 og 100% intensitet.

Jeg tilføjede en valgfri (co-) sinusfunktion til stigning/formindskelse af lysstyrke, da det giver en glattere forbindelse mellem faserne. Prøv gerne andre funktioner. F.eks. du kan eliminere pauserne og bruge to forskellige (komplekse) sinusfunktioner til begge LED -kæder og justere frekvens og amplitude ved hjælp af potentiometre.

# "Åndedræts" -lampen: version med to knapper og to potentiometer

# en ændring af ildflueeksemplet for Pimoroni Explorer pHAT # her: sinoid stigning/reduktion af motor/PWM værdier # for lineær funktion unmute lineær og mute cosin funktion # Denne version "var" læser analoge indgange, tilsidesætter foruddefinerede indstillinger # læser digital input, knapper til start og stop "" "for at starte ved tænding af Pi, du kan bruge Cron: Cron er et Unix -program, der bruges til at planlægge job, og det har en praktisk @reboot -funktion, der giver dig mulighed for at køre et script når din Pi starter. Åbn en terminal, og skriv crontab -e for at redigere din crontab. Rul helt til bunden af filen, forbi alle de linjer, der begynder #, og tilføj følgende linje (forudsat at din kode er på /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & Luk og gem din crontab (hvis du bruger nano, tryk derefter på control-x, y og enter for at afslutte og gemme). "" "import tid import explorerhat as eh import matematiske konstante værdier #sinus xmax = 316 trin = 5 # trin bredde, f.eks. 315/5 giver 63 trin/cyklus start_button = 0 # dette definerer tilstanden af en trykknap, der er forbundet til inputport nr. 1 stop_button = 0 # dette definerer tilstanden af en trykknap, der er forbundet til inputport nr. 3 pause_1 = 0,02 # sæt længde af pauser inden for trin i "inhaler" -fasen, og derved rampehastighed og varighed pause_2 = 0,04 # indstiller "udånder" rampinghastighed pause_3 = 1,5 # pause mellem inhalations- og udåndingsfaser (hold inhaleret) pause_4 = 1,2 # pause i slutningen af udåndingen fase (hold udåndet) max_intens = 0,9 # maksimal intensitet/lysstyrke max_intens_100 = 100*max_intens # det samme i % # Kan muliggøre optimering af "åndedræts" indtryk af lysdioder og reducere flimmer. l_cosin = # liste med cosinus afledte værdier (100> = x> = 0) l_lin = # liste med lineære værdier (100> = x> = 0) # generer cosinus funktionsliste for i inden for område (0, 316, 3): # 315 er tæt på Pi*100, 105 trin # print (i) n_cosin = [(((math.cos (i/100))+1)/2)*100] #generér værdi # print (n_cosin) l_cosin = l_cosin + n_cosin # tilføj værdi til liste # print (l_cosin) # generer lineær liste for i i område (100, -1, -1): # nedtælling fra 100 til nul n_lin = l_lin = l_lin + n_lin # print (l_lin) # viser en kedelig listeprint () print ("" "For at starte lyscyklusserne skal du trykke på" Start "-knappen (Input One)" "") print () print ("" "For at stoppe lyset, tryk og hold "Stop" -knappen (input tre) "" ") print () # vent, indtil Start -knappen trykkes, mens (start_button == 0): start_button = eh.input.one.read () # læs knap nummer et eh.output.one.blink () # blink LED nummer én gang. sover (0,5) # læs to gange i sekundet # kør lyser, mens (stop_knap == 0): # læs analoge indgange ONE og TO, definer indstillinger set_1 = eh.an alog.one.read () # definerer rød-> grøn stigningshastighed pause_1 = set_1*0,02 # værdier vil ligge mellem 0 og 0,13 sek/trinudskrivning ("set_1:", set_1, " -> pause _1:", pause_1) set_2 = eh.analog.two.read () # definerer grøn -> rød stigningshastighed pause_2 = set_2*0,02 # værdier vil ligge mellem 0 og 0,13 sek/trinudskrivning ("set_2:", set_2, " -> pause _2: ", pause_2) #" inhalations "fase eh.output.one.on () # kan køre en LED eller bipper '' 'for x i området (len (l_lin)): fx = max_intens*l_lin [x] # lineær kurve eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () '' 'for x i område (len (l_cosin)): fx = max_intens*l_cosin [x] # lineær kurve eh.motor.one.backwards (fx) eh.motor.to.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () # tjek, om der er trykket på Stop -knap stop_button = eh.input.three.read () # "Hold vejret" pause i slutningen af inhalationsfasen eh.output.two.on () # tænd LED to eh.motor.one. baglæns (0) eh. motor. to. baglæns (max_intens_100) time.sleep (pause_3) eh.output.two.off () # tjek, om der trykkes på Stop -knap stop_button = eh.input.three.read () # "udånder" fase eh.output.three.on () # tænde LED tre '' 'for x i område (len (l_lin)): fx = max_intens*l_lin [x] # lineær kurve eh.motor.one.backwards (max_intens_100-fx) eh.motor.two.backwards (fx) time.sleep (pause_2) '' 'for x i området (len (l_cosin)): fx = max_intens*l_cosin [x] # lineær kurve eh.motor.one.backwards (max_intens_100-fx) eh.motor.two. baglæns (fx) time.sleep (pause_2) eh.output.three.off () # tjek, om der trykkes på Stop -knap stop_button = eh.input.three.read () # pause mellem "udånder" og "indånder" faser eh. output.four.on () eh.motor.one.backwards (max_intens_100) eh.motor.to.backwards (0) time.sleep (pause_4) eh.output.four.off () #tjek om der er trykket på stopknappen stop_knap = eh.input.three.read () # nedlukning, drej alle outputporte 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 () print ("Farvel")

Hvis du vil bruge lyset som en enkeltstående enhed, f.eks. som sove- eller vækkelseslys kan du tilføje en mobil strømkilde til Pi og få programmet til at starte efter opstart og bruge "Cron" til at tænde eller slukke det på bestemte tidspunkter. Hvordan man bruger "Cron" har beskrevet meget detaljeret andre steder.

Trin 4: Videoeksempler

I dette trin finder du et antal videoer, der viser lyset under normale (dvs. alle værdier> 0, #1) og ekstreme forhold, da alle værdier er sat til nul (#2), kun rampe (#3 ), og ingen rampe (#5 ).;

Trin 5: Nogle bemærkninger

Undskyld venligst eventuelle forkerte vilkår, stavefejl og fejl. Jeg er hverken engelsk som modersmål, og jeg har heller ikke uddybet viden inden for el, elektronik eller programmering. Hvilket faktisk betyder, at jeg forsøger at skrive en engelsk instruerbar om ting, hvor jeg næsten ikke kender de korrekte termer på mit eget sprog. Således er alle tip, rettelser eller ideer til forbedringer velkomne. H.

Anbefalede: