Innehållsförteckning:

Ett andningsljus som styrs av en Raspberry Pi: 5 steg
Ett andningsljus som styrs av en Raspberry Pi: 5 steg

Video: Ett andningsljus som styrs av en Raspberry Pi: 5 steg

Video: Ett andningsljus som styrs av en Raspberry Pi: 5 steg
Video: ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 2024, November
Anonim
Ett andningsljus som styrs av en Raspberry Pi
Ett andningsljus som styrs av en Raspberry Pi

"Andningsövningsljuset" som beskrivs här är ett enkelt och relativt billigt pulserande ljus som kan stödja dig i dina andningsövningar och hjälpa dig att hålla en konstant andningsrytm. Det kan också användas t.ex. som ett lugnande nattljus för barn. I det nuvarande skedet är det mer en fungerande prototyp.

Du kan också använda det som ett billigt och enkelt att bygga exempel för "fysisk beräkning" med en Raspberry Pi, t.ex. att användas som ett pedagogiskt projekt på nybörjarnivå. Här har du analoga (roterande potentiometrar) och digitala ingångar (tryckknapp) samt digital (LED) och PWM -utgång (LED -kedjor), och effekterna av förändringar är direkt synliga.

Ljuset går genom repetitiva cirklar som består av fyra faser: en grön (övre) till röd (nedre) övergång, en endast röd fas, en röd-till-grön övergång och en enbart grön fas. Längden på dessa faser definieras av konstanter som kan modifieras med potentiometrar. Processen kan startas, pausas, återupptas och stoppas genom att trycka på tryckknappar. Lysdioder indikerar den aktuella fasen. Den är baserad på exemplet "Firefly Light" av Pimoroni (se här). I likhet med "Firefly Light" krävs en Raspberry Pi (Zero), Pimoroni Explorer pHAT (eller HAT) och två IKEA SÄRDAL LED -ljuskedjor. De senare är anslutna till de två PMW/motorportarna i pHAT. Istället för att använda en burk har jag placerat lysdioderna i en IKEA -bildram. Jag har försökt optimera det ursprungliga "firefly light" -pythonskriptet lite, implementerat en valfri sinusfunktion för förändringar av ljusstyrka/ pulsbredd och har introducerat två "håll" -faser mellan dimningsfaserna. Medan jag ändrade parametrarna för att hitta ett ljusmönster som känns mer bekvämt, fann jag att enheten kan hjälpa till att stödja ett mycket klart definierat, regelbundet andningsmönster. Således kan några av er tycka att detta "Andningsljus" är till hjälp för meditation eller träning. Eftersom Explorer pHAT har fyra digitala och fyra analoga ingångar är det mycket enkelt att reglera upp till fyra olika parametrar med hjälp av skjut- eller rotationspotentiometrar och att införa start/omstart/stoppfunktioner för lamporna med hjälp av tryckknappar. Detta gör att du kan använda enheten och optimera parametrarna efter dina behov utan att en bildskärm måste anslutas till Pi.

Utöver det kommer Explorer pHAT med fyra digitala utgångar, som gör det möjligt att lägga till lysdioder eller summer, plus två 5V- och två jordportar och två PWM-utgångar för motorer eller liknande enheter. Se till att du använder rätt motstånd för att minska spänningen för dina lysdioder.

Pimoronis Explorer pHAT pythonbibliotek gör det extremt enkelt att styra alla dessa I/O -portar.

I denna instruerbara version av enheten med 0, 2 och 4 potentiometrar och knappar beskrivs. Välj den som passar dina behov.

För att köra enheten självständigt kan man använda antingen ett kraftpaket eller kombinationen av ett Pimoroni LiPo -mellanlägg och ett LiPo -batteri, enligt beskrivningen för "Firefly Light".

Uppdaterade versioner 28 december 2018: version "fyra potentiometrar och fyra tryckknappar" tillagd. Dec. 30: kod för 4-poti-version och fritzing-bilder tillagda.

Steg 1: Material som används / krävs

Material som används / krävs
Material som används / krävs
Material som används / krävs
Material som används / krävs
Material som används / krävs
Material som används / krävs

- Raspberry Pi Zero (4,80 GBP på Pimoroni, Storbritannien) och ett micro SD -kort (> = 8 GB) med Raspian

- Pimoroni Explorer pHAT (10 GBP på Pimoroni, Storbritannien). Valfritt: ett enda radhuvud, bygelkablar

- IKEA SÄRDAL LED-kedjeljus m/ 12 lysdioder (2 x 3,99 € styck på IKEA Tyskland), eller liknande 3-5V LED-kedja.- IKEA RIBBA-bildram (13 x 18 cm, 2,49 € på IKEA Tyskland).

- En bit PU -skum (2 x 18 x 13,5 cm), för att hålla LED -lamporna. Alternativt kan styro -skum användas.

- En bit ogenomskinlig plast (18 x 13,5 cm), som fungerar som diffusor.

- Två ark färgat transparent papper (9 x 13,5 cm vardera). Jag använde rött och grönt.

- Ett tunt, mycket ogenomskinligt plastark (18 x 13,5 cm), som fungerar som den yttre skärmen. Jag använde ett tunt vitt polykarbonatark. Valfritt, för den justerbara versionen:

För att justera ramping timing och platå varaktighet, eller alternativt andra parametrar som ljusstyrka.- 10, 20 eller 50 kOhm potentiometrar (upp till fyra, jag använde två 10 kOhm respektive fyra 50 Ohm).

Som knappar för start/stopp/paus/återupptagning:- Tryckknappar (upp till fyra, jag använde fyra eller två)

Som indikatorer för cirkelns faser:- Färgade lysdioder och nödvändiga motstånd (beror på egenskaperna hos de lysdioder du kommer att använda).

  1. ca 140 Ohm för 5,2 -> 2, 2 V (gul, orange, röd; några gröna lysdioder),
  2. ca 100 Ohm för 5,3 -> 3,3 V (några gröna; blåa, vita lysdioder)

- Bygelkablar och en brödbräda

Valfritt, för en batteridriven version:

  • 5V Micro-USB power pack, eller
  • Pimoroni Zero LiPo -mellanlägg och ett LiPo -batteri

Steg 2: Lazout och montering

Lapp och montering
Lapp och montering
Lapp och montering
Lapp och montering
Lapp och montering
Lapp och montering

Montera Explorer pHAT enligt beskrivningen av tillverkaren. Jag har lagt till en enda radhona för den förenklade anslutningen av bygelkablar till pHATs I/O -portar. Ställ in din Pi och installera Pimoroni -biblioteket för Explorer HAT/pHAT, enligt beskrivning av Pimoroni. Stäng av Pi och fäst pHAT på Pi. Ta bort batteripaketet från LED -kedjorna genom att klippa av trådarna och tina trådänden. Klipp två 2x manliga bygelkablar i mitten, tenn ändarna på trådarna. Löd jumperkablarna till LED -kedjorna och isolera lödpunkterna med antingen tejp eller krympslang. Innan lödning, kontrollera vilka av ledningarna som måste anslutas till plus- eller jordportar, och markera dem därefter. Jag använde bygelkablar med olika färger. Klipp skummet för att hålla lysdioderna, diffusorn och skärmarken i lämplig storlek. På LED-hållarplattan markerar du positionerna där lysdioderna ska placeras och stansar 3-5 mm hål i skummet. Sätt sedan in de 24 lysdioderna på de angivna positionerna. Placera de färgade pappren och diffusorplattorna på LED -plattan (se bilder), de placerar ramen ovanför förpackningen. Fixera skumlagren i ramen, t.ex. med hjälp av tejp. Anslut LED -stripkablarna till "motor" -portarna på Explorer pHAT. För den justerbara versionen placerar du potentiometrar, tryckknappar, kontroll -lysdioder (och/eller summer) och motstånd på brödbrädan och ansluter dem med motsvarande portar på Explorer pHAT.

Starta din Pi och installera de nödvändiga biblioteken, enligt beskrivningen på Pimoronis webbplats, kör sedan det medföljande Python 3 -skriptet. Om en av LED -kedjorna inte fungerar kan den vara ansluten i fel riktning. Sedan kan du antingen ändra plus/minus -anslutningarna på pHAT eller göra en ändring i programmet, t.ex. ändra "eh.motor.one.backwards ()" till "… forward ()".

Bifogat hittar du skript med fasta inställningar som du kan ändra inom programmet och ett exempel där du kan ändra några av inställningarna med potentiometrar och starta och stoppa ljuscykeln med tryckknappar. Det ska inte vara för svårt att anpassa skripten till din egen layout av "andningsljuset".

Steg 3: Python -skripten

Pimoronis Python -bibliotek för Explorer HAT/pHAT gör det extremt enkelt att adressera komponenterna som är anslutna till HAT: s I/O -portar. Två exempel: "eh.two.motor.backwards (80)" driver enheten som är ansluten till PWM/motorport 2 med 80% maximal intensitet bakåt, "eh.output.three.flash ()" gör en LED ansluten för att mata ut port nummer tre blinkar tills det stoppas. Jag har genererat några varianter av ljuset, i princip lagt till ökande kontrollnivåer genom att lägga till upp till fyra tryckknappar och potentiometrar. Bifogat hittar du ett Python -program som heter "Breathing light fixed lin cosin.py "där alla fyra parameterinställningarna måste ändras inom programmet. Dessutom en version som kallas "Breathing light var lin cosin.py" där längden på de två dimningsfaserna kan justeras med två potentiometrar och den mest utarbetade versionen "Breathing light var lin cosin3.py" för de fyra potentiometrarna och tryckknappsversionen. Programmen är skrivna i Python 3.

I alla fall kan cykelprocessen framkallas och stoppas med två tryckknappar, i fyrknappsversionen kan du också avbryta och starta om processen. Dessutom kan fyra (färgade) lysdioder anslutas till de digitala utgångarna, vilket anger de specifika faserna. En cykel för enheten består av fyra faser:

- "inandnings" -fasen, där de övre lysdioderna dämpas lågt och de nedre lysdioderna ökar intensiteten

- fasen "håll andan", där de övre lysdioderna är avstängda och de nedre lysdioderna är inställda på max

- "utandnings" -fasen, där de nedre lysdioderna dämpas lågt och de övre lysdioderna ökar intensiteten

- fasen "stanna utandad", där de nedre lysdioderna är avstängda och de övre lysdioderna lyser maximalt.

Längden på alla fyra faserna definieras av en individuell numerisk parameter, som antingen kan fastställas i programmet och/eller kan justeras med en potentiometer.

En femte parameter definierar maximal intensitet. Det låter dig ställa in maximal ljusstyrka för lysdioderna, vilket kan vara praktiskt om du vill använda det som nattljus. Dessutom kan det tillåta dig att förbättra dimningsprocessen, eftersom jag har intrycket att det är svårt att se skillnad mellan 80 och 100% intensitet.

Jag lade till en valfri (sam) sinusfunktion för att öka/minska ljusstyrkan, eftersom det ger en smidigare anslutning mellan faserna. Prova gärna andra funktioner. T.ex. du kan eliminera pauserna och använda två olika (komplexa) sinusfunktioner för båda LED -kedjorna och justera frekvens och amplitud med potentiometrar.

# "Andnings" -lampan: version med två knappar och två potentiometrar

# en ändring av eldflugsexemplet för Pimoroni Explorer pHAT # här: sinoid ökning/minskning av motor/PWM -värden # för linjär funktion avstäng linjär och dämpad cosinofunktion # Denna version "var" läser analoga ingångar, åsidosätter fördefinierade inställningar # läser digital ingång, knappar för att starta och stoppa "" "för att starta när Pi slås på kan du använda Cron: Cron är ett Unix -program som används för att schemalägga jobb, och det har en praktisk @reboot -funktion som låter dig köra ett skript när din Pi startar. Öppna en terminal och skriv crontab -e för att redigera din crontab. Bläddra hela vägen till botten av filen, förbi alla rader som börjar #, och lägg till följande rad (förutsatt att din kod är på /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & Stäng och spara crontab (om du använder nano trycker du på control-x, y och enter för att avsluta och spara). "" "importtid import explorerhat as eh import matematiska konstanta värden #sinus xmax = 316 steg = 5 # stegbredd, t.ex. 315/5 ger 63 steg/cykel start_knapp = 0 # detta definierar tillståndet för en tryckknapp som är ansluten till ingångsport nr 1 stopp_knapp = 0 # detta definierar tillståndet för en tryckknapp ansluten till ingångsport nr 3 paus_1 = 0,02 # set längd av pauser i steg i "inandnings" -fasen, därigenom rampningshastighet och varaktighet paus_2 = 0,04 # ställer in "andas ut" rampningshastighet pause_3 = 1,5 # paus mellan inandnings- och utandningsfaser (håll inandad) pause_4 = 1,2 # paus i slutet av utandningen fas (håll utandad) max_intens = 0,9 # maximal intensitet/ljusstyrka max_intens_100 = 100*max_intens # samma i % # Kan göra det möjligt att optimera "andnings" intryck av lysdioder och minska flimmer. l_cosin = # lista med cosinus härledda värden (100> = x> = 0) l_lin = # lista med linjära värden (100> = x> = 0) # generera cosinus funktionslista för i inom intervall (0, 316, 3): # 315 ligger nära Pi*100, 105 steg # print (i) n_cosin = [(((math.cos (i/100))+1)/2)*100] #generera värde # print (n_cosin) l_cosin = l_cosin + n_cosin # lägg till värde till lista # print (l_cosin) # generera linjär lista för i i intervall (100, -1, -1): # räkna ner från 100 till noll n_lin = l_lin = l_lin + n_lin # print (l_lin) # visar en tråkig listutskrift () print ("" "För att starta ljuscyklerna, tryck på" Start "-knappen (Input One)" "") print () print ("" "För att stoppa lampan, tryck och håll "Stop" -knappen (ingång tre) "" ") print () # vänta tills Start -knappen trycks ned medan (start_knapp == 0): start_button = eh.input.one.read () # läs knapp nummer ett eh.output.one.blink () # blinka LED nummer en gång. sover (0,5) # läs två gånger i sekunden # kör tänds medan (stop_knapp == 0): # läs analoga ingångar ONE och TWO, definiera inställningar set_1 = eh.an alog.one.read () # definierar röd-> grön rampningshastighet pause_1 = set_1*0,02 # värden ligger mellan 0 och 0,13 sek/stegutskrift ("set_1:", set_1, " -> paus _1:", paus_1) set_2 = eh.analog.two.read () # definierar grönt -> rött ramping rate pause_2 = set_2*0.02 # värden kommer att ligga mellan 0 och 0,13 sek/stegutskrift ("set_2:", set_2, " -> paus _2: ", paus_2) #" inandnings "fas eh.output.one.on () # kan driva en lysdiod eller pip '' 'för x i intervallet (len (l_lin)): fx = max_intens*l_lin [x] # linjär kurva eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () '' 'för x i intervall (len (l_cosin)): fx = max_intens*l_cosin [x] # linjär kurva eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () # kontrollera om stoppknappen är nedtryckt stop_button = eh.input.three.read () # "Håll andan" paus i slutet av inandningsfasen eh.output.two.on () # tänd LED två eh.motor.one. bakåt (0) eh. motor. två. bakåt (max_intens_100) time.sleep (pause_3) eh.output.two.off () #kolla om stoppknappen trycks ned stop_button = eh.input.three.read () # "andas ut" fas eh.output.three.on () # slå på LED tre '' 'för x i intervall (len (l_lin)): fx = max_intens*l_lin [x] # linjär kurva eh.motor.one.backwards (max_intens_100-fx) eh.motor.two.backwards (fx) time.sleep (pause_2) '' 'för x i intervall (len (l_cosin)): fx = max_intens*l_cosin [x] # linjär kurva eh.motor.one.backwards (max_intens_100-fx) eh.motor.two. bakåt (fx) time.sleep (pause_2) eh.output.three.off () #kolla om stoppknappen trycks ner stop_button = eh.input.three.read () # paus mellan "andas ut" och "inhalerar" faser eh. output.four.on () eh.motor.one.backwards (max_intens_100) eh.motor.two.backwards (0) time.sleep (pause_4) eh.output.four.off () #kolla om stoppknappen trycks in stopp_knapp = eh.input.three.read () # avstängning, vrid alla utgångsportar eh.motor.one.stop () eh.motor.two.stop () eh.output.one.off () eh.output.two.off () eh.output.three.off () eh.output.four.off () -utskrift () print ("Hejdå hej")

Om du vill använda ljuset som en fristående enhet, t.ex. som sov- eller väckningsljus kan du lägga till en mobil strömkälla till Pi och få programmet att starta efter uppstart och använda "Cron" för att slå på eller av det vid vissa tidpunkter. Hur man använder "Cron" har beskrivit i detalj i någon annanstans.

Steg 4: Videoexempel

I det här steget hittar du ett antal videor som visar ljuset under normala (dvs. alla värden> 0, #1) och extrema förhållanden, eftersom alla värden är inställda på noll (#2), endast ramping (#3 ), och ingen rampning (#5 ).;

Steg 5: Några anmärkningar

Ursäkta felaktiga termer, stavfel och fel. Jag är varken modersmål i engelska, och jag har inte utarbetat kunskaper inom el, elektronik eller programmering. Vilket faktiskt betyder att jag försöker skriva en engelsk instruerbar om saker där jag knappt kan rätt termer på mitt eget språk. Så alla tips, korrigeringar eller idéer till förbättringar är välkomna. H.

Rekommenderad: