Innholdsfortegnelse:

Et pustelys kontrollert av en bringebær Pi: 5 trinn
Et pustelys kontrollert av en bringebær Pi: 5 trinn

Video: Et pustelys kontrollert av en bringebær Pi: 5 trinn

Video: Et pustelys kontrollert av en bringebær Pi: 5 trinn
Video: KUKA DeviceConnector ENG Веб-семинар от KUKA Nordic 2024, Juli
Anonim
Et pustelys kontrollert av en bringebær Pi
Et pustelys kontrollert av en bringebær Pi

"Breathing Exercise Light" beskrevet her er et enkelt og relativt billig pulserende lys som kan støtte deg i pusteoppgavene og hjelpe deg med å holde en konstant pustrytme. Den kan også brukes f.eks. som et beroligende nattlys for barn. I det nåværende stadiet er det mer en fungerende prototype.

Du kan også bruke det som et billig og enkelt å bygge eksempel for "fysisk databehandling" med en Raspberry Pi, f.eks. som skal brukes som et pedagogisk prosjekt på nybegynnernivå. Her har du analoge (rotasjonspotensiometer) og digitale innganger (trykknapp) samt digital (LED) og PWM -utgang (LED -kjeder), og effekten av endringer er direkte synlig.

Lyset går gjennom repeterende sirkler som består av fire faser: en grønn (øvre) til rød (nedre) overgang, en fase bare rød, en rød-til-grønn overgang og en grønn fase. Lengden på disse fasene er definert av konstanter som kan endres av potensiometre. Prosessen kan startes, settes på pause, gjenopptas og stoppes ved å trykke på knappene. Lysdioder indikerer den nåværende fasen. Den er basert på eksempelet "Firefly Light" av Pimoroni (se her). I likhet med "Firefly Light" krever det en Raspberry Pi (Zero), Pimoroni Explorer pHAT (eller HAT) og to IKEA SÄRDAL LED -lyskjeder. De senere er koblet til de to PMW/motorportene til pHAT. I stedet for å bruke en krukke, har jeg plassert lysdiodene i en IKEA bilderamme. Jeg har prøvd å optimalisere det opprinnelige "firefly light" python -skriptet litt, implementert en valgfri sinusfunksjon for endringer i lysstyrke/ pulsbredde og har introdusert to "hold" -faser mellom dimmefasene. Mens jeg endret parametrene for å finne et lettere mønster som føles mer behagelig, fant jeg ut at enheten kan være nyttig for å støtte et veldig klart definert, vanlig pustemønster. Derfor kan noen av dere synes dette "pustelyset" er nyttig for meditasjon eller trening. Siden Explorer pHAT har fire digitale og fire analoge innganger, er det veldig enkelt å regulere opptil fire forskjellige parametere ved hjelp av skyve- eller rotasjonspotensiometre, og å innføre start/omstart/stopp -funksjoner for lysene ved hjelp av trykknapper. Dette lar deg bruke enheten og optimalisere parametrene til dine behov uten at en skjerm må være koblet til Pi.

I tillegg kommer Explorer pHAT med fire digitale utganger, som gjør det mulig å legge til lysdioder eller summer, pluss to 5V- og to bakkeporter og to PWM-utganger for motorer eller lignende enheter. Sørg for at du bruker riktige motstander for å redusere spenningen til lysdiodene dine.

Pimoronis Explorer pHAT python -bibliotek gjør det ekstremt enkelt å kontrollere alle disse I/O -portene.

I denne instruerbare versjonen av enheten med 0, 2 og 4 potensiometre og knapper er beskrevet. Velg den som passer dine behov.

For å kjøre enheten autonomt kan man enten bruke en strømpakke eller kombinasjonen av et Pimoroni LiPo -mellomlegg og et LiPo -batteri, som beskrevet for "Firefly Light".

Oppdaterte versjoner 28. desember 2018: 'fire potensiometre og fire trykknapper' versjon lagt til. Des. 30: kode for 4-poti-versjon og fritzing-bilder lagt til.

Trinn 1: Materialer brukt / påkrevd

Materialer brukt / påkrevd
Materialer brukt / påkrevd
Materialer brukt / påkrevd
Materialer brukt / påkrevd
Materialer brukt / påkrevd
Materialer brukt / påkrevd

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

- Pimoroni Explorer pHAT (10 GBP på Pimoroni, Storbritannia). Valgfritt: et enkelt radhode, hoppekabler

- IKEA SÄRDAL LED-kjedelys m/ 12 lysdioder (2 x 3,99 € hver på IKEA Tyskland), eller lignende 3-5V LED-kjede.- IKEA RIBBA bilderamme (13 x 18 cm, 2,49 € på IKEA Tyskland).

- Et stykke PU -skum (2 x 18 x 13,5 cm), for å holde lysdiodene. Alternativt kan styro -skum brukes.

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

- To ark farget gjennomsiktig papir (9 x 13,5 cm hver). Jeg brukte rødt og grønt.

- Et stykke tynt, svært ugjennomsiktig plastark (18 x 13,5 cm), som fungerer som den ytre skjermen. Jeg brukte et tynt hvitt polykarbonatark. Valgfritt, for den justerbare versjonen:

For å justere ramping timing og platåvarighet, eller alternativt andre parametere som lysstyrke.- 10, 20 eller 50 kOhm potensiometre (opptil fire, jeg brukte to 10 kOhm henholdsvis fire 50 Ohm).

Som start/stopp/pause/gjenoppta knapper:- Trykknapper (opptil fire, jeg brukte fire eller to)

Som indikatorer for fasene i sirkelen:- Fargede lysdioder og nødvendige motstander (vil avhenge av egenskapene til lysdiodene du vil bruke).

  1. ca 140 Ohm for 5,2 -> 2, 2 V (gul, oransje, rød; noen grønne lysdioder),
  2. ca 100 Ohm for 5,3 -> 3,3 V (noen grønne, blå, hvite lysdioder)

- Kabler og et brødbrett

Valgfritt, for en batteridrevet versjon:

  • 5V mikro-USB-strømforsyning, eller
  • Pimoroni Zero LiPo -mellomlegg og et LiPo -batteri

Trinn 2: Lazout og montering

Lazout og forsamling
Lazout og forsamling
Lazout og forsamling
Lazout og forsamling
Lazout og forsamling
Lazout og forsamling

Monter Explorer pHAT som beskrevet av produsenten. Jeg har lagt til en enkelt rad kvinnelig overskrift for forenklet tilkobling av jumperkabler til pHATs I/O -porter. Sett opp din Pi og installer Pimoroni -biblioteket for Explorer HAT/pHAT, som beskrevet av Pimoroni. Slå av Pi og fest pHAT på Pi. Fjern batteripakkene fra LED -kjedene ved å kutte ledningene og tinne enden av ledningene. Klipp to 2x mannlige startkabler i midten, tinn enden av ledningene. Lodd jumperkablene til LED -kjedene, og isoler loddepunktene ved hjelp av enten tape eller krympeslange. Før lodding må du kontrollere hvilke av ledningene som må kobles til pluss- eller bakkeporter, og merke dem deretter. Jeg brukte jumperwires med forskjellige farger. Klipp skummet for å holde lysdiodene, diffusoren og skjermarkene i riktig størrelse. På LED-holdeplaten merker du posisjonene der lysdiodene skal plasseres og stanser 3-5 mm hull i skummet. Sett deretter inn de 24 lysdiodene på de angitte posisjonene. Legg de fargede papirene og diffusorplatene på LED -platen (se bilder), de plasserer rammen over pakningen. Fest skumlagene i rammen, f.eks. ved hjelp av teip. Fest LED -stripekablene til "motor" -portene på Explorer pHAT. For den justerbare versjonen plasserer du potensiometre, trykknapper, kontroll -lysdioder (og/eller summer) og motstander på brødbrettet og kobler dem til de tilhørende portene på Explorer pHAT.

Start Pi og installer de nødvendige bibliotekene, som beskrevet på Pimoroni -nettstedet, og kjør deretter det medfølgende Python 3 -skriptet. Hvis en av LED -kjedene ikke fungerer, kan den være koblet i feil retning. Da kan du enten endre pluss/minus -tilkoblingene på pHAT eller gjøre en endring i programmet, f.eks. endre "eh.motor.one.backwards ()" til "… forwards ()".

Vedlagt finner du skript med faste innstillinger du kan endre i programmet og et eksempel der du kan endre noen av innstillingene med potensiometre, og starte og stoppe lyssyklusen med trykknapper. Det bør ikke være for vanskelig å tilpasse skriptene til din egen utforming av "pustelyset".

Trinn 3: Python -skriptene

Pimoronis Python -bibliotek for Explorer HAT/pHAT gjør det ekstremt enkelt å adressere komponentene som er festet til HATs I/O -porter. To eksempler: "eh.two.motor.backwards (80)" driver enheten som er festet til PWM/motorport 2 med 80% maksimal intensitet i bakoverretning, "eh.output.three.flash ()" får en LED tilkoblet til utgang port nummer tre blinker til den stoppes. Jeg har generert noen få varianter av lyset, og legger i utgangspunktet til økende kontrollnivåer ved å legge til opptil fire trykknapper og potensiometre. Vedlagt finner du et Python -program som heter "Breathing light fixed lin cosin.py "der alle fire parameterinnstillingene må endres i programmet. I tillegg en versjon kalt "Breathing light var lin cosin.py" hvor lengden på de to dimmefasene kan justeres ved hjelp av to potensiometre og den mest utførlige versjonen "Breathing light var lin cosin3.py" for fire potensiometer og trykknappversjon. Programmene er skrevet i Python 3.

I alle tilfeller kan sykkelprosessen fremkalles og stoppes ved hjelp av to trykknapper. I fireknappsversjonen kan du også avbryte og starte prosessen på nytt. I tillegg kan fire (fargede) lysdioder kobles til de digitale utgangsportene, som angir de spesifikke fasene. En syklus av enheten består av fire faser:

- "inhalasjonsfasen", der de øvre lysdiodene er dimmet lavt og de nedre lysdiodene øker intensiteten

- "hold pusten" -fasen, der de øvre lysdiodene er slått av og de nedre lysdiodene er satt til maksimum

- "pust ut" -fasen, der de nedre lysdiodene er dimmet lavt og de øvre lysdiodene øker intensiteten

- "stay exhaled" -fasen, der de nedre lysdiodene er slått av og de øvre lysdiodene lyser maksimalt.

Lengden på alle fire fasene er definert av en individuell numerisk parameter, som enten kan fikses i programmet og/eller kan justeres ved hjelp av et potensiometer.

En femte parameter definerer maksimal intensitet. Den lar deg angi maksimal lysstyrke for lysdiodene, noe som kan være nyttig hvis du vil bruke den som nattlys. I tillegg kan det tillate deg å forbedre dimmingsprosessen, ettersom jeg har inntrykk av at det er vanskelig å se en forskjell mellom 80 og 100% intensitet.

Jeg la til en valgfri (co-) sinusfunksjon for økning/reduksjon av lysstyrke, da det gir en jevnere forbindelse mellom fasene. Prøv gjerne andre funksjoner. F.eks. du kan eliminere pausene og bruke to forskjellige (komplekse) sinusfunksjoner for begge LED -kjeder og justere frekvens og amplitude med potensiometre.

# "Pustende" lampe: to knapper og to potensiometerversjon

# en modifikasjon av ildflueksemplet for Pimoroni Explorer pHAT # her: sinoid økning/reduksjon av motor/PWM -verdier # for lineær funksjon unmute lineær og demp cosinfunksjon # Denne versjonen "var" leser analoge innganger, overstyrer forhåndsdefinerte innstillinger # leser digital inngang, knapper for å starte og stoppe "" "for å starte når du slår på Pi, du kan bruke Cron: Cron er et Unix -program som brukes til å planlegge jobber, og den har en praktisk @reboot -funksjon som lar deg kjøre et skript når Pi starter. Åpne en terminal, og skriv crontab -e for å redigere crontab. Rull helt til bunnen av filen, forbi alle linjene som begynner #, og legg til følgende linje (forutsatt at koden er på /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & Lukk og lagre crontab (hvis du bruker nano, trykk deretter på control-x, y og enter for å avslutte og lagre). "" "importtid import explorerhat as eh import matematiske konstante verdier #sinus xmax = 316 trinn = 5 # trinns bredde, f.eks. 315/5 gir 63 trinn/syklus start_knapp = 0 # dette definerer tilstanden til en trykknapp som er koblet til inngangsport nr. 1 stopp_knapp = 0 # dette definerer tilstanden til en trykknapp som er koblet til inngangsport nr. 3 pause_1 = 0,02 # sett lengde av pauser i trinn i "inhalering" -fasen, og derved rampehastighet og varighet pause_2 = 0,04 # angir "puster ut" rampinghastighet pause_3 = 1,5 # pause mellom inhalasjons- og utpustingsfaser (hold inhalert) pause_4 = 1,2 # pause ved slutten av pusten fase (hold utpustet) max_intens = 0,9 # maksimal intensitet/lysstyrke max_intens_100 = 100*max_intens # det samme i % # Kan tillate å optimalisere "pustende" inntrykk av lysdioder og redusere flimring. l_cosin = # liste med cosinus -avledede verdier (100> = x> = 0) l_lin = # liste med lineære verdier (100> = x> = 0) # generer cosinus -funksjonsliste for i i området (0, 316, 3): # 315 er nær Pi*100, 105 trinn # print (i) n_cosin = [(((math.cos (i/100))+1)/2)*100] #generate value # print (n_cosin) l_cosin = l_cosin + n_cosin # legg til verdi til liste # print (l_cosin) # generer lineær liste for i i område (100, -1, -1): # tell ned fra 100 til null n_lin = l_lin = l_lin + n_lin # print (l_lin) # viser en kjedelig listeutskrift () print ("" "For å starte lyssyklusene, trykk på" Start "-knappen (Input One)" "") print () print ("" "For å stoppe lyset, trykk og hold inne "Stop" -knappen (Input Three) "" ") print () # vent til Start -knappen blir trykket mens (start_button == 0): start_button = eh.input.one.read () # read knapp nummer én eh.output.one.blink () # blink LED nummer én gang. sover (0,5) # les to ganger i sekundet # kjør lyser mens (stopp_knapp == 0): # les analoge innganger ONE og TWO, definer innstillinger set_1 = eh.an alog.one.read () # definerer rød-> grønn ramping rate pause_1 = set_1*0.02 # verdier vil variere mellom 0 og 0,13 sek/trinns utskrift ("set_1:", set_1, " -> pause _1:", pause_1) set_2 = eh.analog.two.read () # definerer grønt -> rødt ramping rate pause_2 = set_2*0.02 # verdier vil variere mellom 0 og 0,13 sek/trinns utskrift ("set_2:", set_2, " -> pause _2: ", pause_2) #" inhalasjons "fase eh.output.one.on () # kan kjøre en LED eller pip '' '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 in range (len (l_cosin)): fx = max_intens*l_cosin [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 () # sjekk om stoppknappen er trykket stop_button = eh.input.three.read () # "Hold pusten" pause på slutten av innåndingsfasen eh.output.two.on () # slå på LED to eh.motor.one. bakover (0) eh. motor. to. bakover (max_intens_100) time.sleep (pause_3) eh.output.two.off () #sjekk om stoppknappen er trykket stop_button = eh.input.three.read () # "pust ut" fase eh.output.three.on () # slå på 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. bakover (fx) time.sleep (pause_2) eh.output.three.off () #sjekk om stoppknappen er trykket stop_button = eh.input.three.read () # pause mellom fasene "pust ut" og "inhalerer" eh. output.four.on () eh.motor.one.backwards (max_intens_100) eh.motor.two.backwards (0) time.sleep (pause_4) eh.output.four.off () #sjekk om stoppknappen er trykket stopp_knapp = eh.input.three.read () # shutdown, slå av alle utgangsportene 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 ("Bye bye")

Hvis du vil bruke lyset som en frittstående enhet, f.eks. Som sove- eller vekkebelysning kan du legge til en mobil strømkilde til Pi og få programmet til å starte etter oppstart og bruke "Cron" til å slå det på eller av på bestemte tidspunkter. Hvordan du bruker "Cron" har beskrevet i store detaljer andre steder.

Trinn 4: Videoeksempler

I dette trinnet finner du en rekke videoer som viser lyset under normale (dvs. alle verdier> 0, #1) og ekstreme forhold, ettersom alle verdier er satt til null (#2), bare ramping (#3 ), og ingen ramping (#5 og #6).

Trinn 5: Noen bemerkninger

Beklager feil ord, skrivefeil og feil. Jeg er verken morsmål i engelsk, og jeg har heller ikke utdypet kunnskap innen elektro, elektronikk eller programmering. Noe som faktisk betyr at jeg prøver å skrive en engelsk instruerbar om ting der jeg knapt vet de riktige begrepene på mitt eget språk. Derfor er alle tips, korreksjoner eller forbedringsideer velkomne. H.

Anbefalt: