Inhoudsopgave:
- Stap 1: Gebruikte/benodigde materialen
- Stap 2: Lazout en montage
- Stap 3: De Python-scripts
- Stap 4: Videovoorbeelden
- Stap 5: Enkele opmerkingen
Video: Een ademlicht bestuurd door een Raspberry Pi - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Het hier beschreven "Breathing Exercise Light" is een eenvoudig en relatief goedkoop pulserend licht dat u kan ondersteunen bij uw ademhalingsoefeningen en u kan helpen een constant ademhalingsritme aan te houden. Het kan ook worden gebruikt b.v. als rustgevend nachtlampje voor kinderen. In de huidige fase is het meer een werkend prototype.
Je kunt het ook gebruiken als een goedkoop en eenvoudig te bouwen voorbeeld voor "physical computing" met een Raspberry Pi, b.v. te gebruiken als educatief project op beginnersniveau, Hier heb je analoge (draaipotentiometer) en digitale ingangen (drukknop) evenals digitale (LED) en PWM-uitgang (LED-kettingen), en de effecten van veranderingen zijn direct zichtbaar.
Het licht loopt door zich herhalende cirkels die uit vier fasen bestaan: een overgang van groen (boven) naar rood (onder), een fase van alleen rood, een overgang van rood naar groen en een fase van alleen groen. De lengte van deze fasen wordt bepaald door constanten die kunnen worden gewijzigd door potentiometers. Het proces kan worden gestart, gepauzeerd, hervat en gestopt door op drukknoppen te drukken. LED's geven de huidige fase aan. Het is gebaseerd op het voorbeeld "Firefly Light" van Pimoroni (zie hier). Net als bij de "Firefly Light" heb je een Raspberry Pi (Zero), de Pimoroni Explorer pHAT (of HAT) en twee IKEA SÄRDAL LED-lichtkettingen nodig. De laatste worden aangesloten op de twee PMW/motorpoorten van de pHAT. In plaats van een pot te gebruiken, heb ik de LED's in een IKEA fotolijst geplaatst. Ik heb geprobeerd het originele "firefly light" python-script een beetje te optimaliseren, een optionele sinusfunctie te implementeren voor de veranderingen in helderheid / pulsbreedte en heb twee "hold" -fasen tussen de dimfasen geïntroduceerd. Terwijl ik de parameters aanpaste om een lichtpatroon te vinden dat comfortabeler aanvoelt, ontdekte ik dat het apparaat kan helpen bij het ondersteunen van een zeer duidelijk gedefinieerd, regelmatig ademhalingspatroon. Daarom kunnen sommigen van jullie dit "Ademhalingslicht" nuttig vinden voor meditatie- of trainingsdoeleinden. Omdat de Explorer pHAT vier digitale en vier analoge ingangen heeft, is het heel eenvoudig om tot vier verschillende parameters te regelen met behulp van schuif- of draaipotentiometers, en om start/herstart/stop-functies voor de lichten te introduceren met behulp van drukknoppen. Hierdoor kunt u het apparaat gebruiken en de parameters naar uw behoeften optimaliseren zonder dat er een monitor op de Pi hoeft te worden aangesloten.
Daarnaast wordt de Explorer pHAT geleverd met vier digitale out-poorten, die het mogelijk maken om LED's of zoemers toe te voegen, plus twee 5V en twee Ground-poorten en twee PWM-out-poorten voor motoren of soortgelijke apparaten. Zorg ervoor dat u de juiste weerstanden gebruikt om de spanning voor uw LED's te verlagen.
Pimoroni's Explorer pHAT python-bibliotheek maakt het uiterst eenvoudig om al deze I/O-poorten te besturen.
In deze instructable worden versies van het apparaat met 0, 2 en 4 potentiometers en knoppen beschreven. Kies degene die bij uw behoeften past.
Om het apparaat autonoom te laten werken, zou men ofwel een powerpack kunnen gebruiken, ofwel de combinatie van een Pimoroni LiPo-shim en een LiPo-batterij, zoals beschreven voor de "Firefly Light".
Bijgewerkte versies 28 dec. 2018: versie 'vier potentiometers en vier drukknoppen' toegevoegd. Dec. 30: code voor 4-poti versie en fritzing afbeeldingen toegevoegd.
Stap 1: Gebruikte/benodigde materialen
- Raspberry Pi Zero (4,80 GBP bij Pimoroni, VK) en een micro SD-kaart (>= 8 GB) met Raspian
- Pimoroni Explorer pHAT (10 GBP bij Pimoroni, VK). Optioneel: een enkele rij header, startkabels
- IKEA SÄRDAL LED-kettingverlichting met 12 LED's (2 x, € 3,99 bij IKEA Duitsland), of een vergelijkbare 3-5V LED-ketting.- IKEA RIBBA fotolijst (13 x 18 cm, € 2,49 bij IKEA Duitsland).
- Een stuk PU-schuim (2 x 18 x 13,5 cm), om de LED's vast te houden. Als alternatief kan piepschuim worden gebruikt.
- Een stuk ondoorzichtig plastic (18 x 13,5 cm), dat dienst doet als diffusor.
- Twee vellen gekleurd transparant papier (elk 9 x 13,5 cm). Ik gebruikte rood en groen.
- Een stuk dun, zeer ondoorzichtig plastic vel (18 x 13,5 cm), dat dienst doet als buitenste scherm. Ik gebruikte een dunne witte polycarbonaat plaat. Optioneel, voor de afstembare versie:
Om de ramping-timing en plateauduur aan te passen, of andere parameters zoals helderheid.- 10, 20 of 50 kOhm potentiometers (tot vier, ik gebruikte twee 10 kOhm respectievelijk vier 50 Ohm).
Als start / stop / pauze / hervat-knoppen: - Drukknoppen (maximaal vier, ik gebruikte vier of twee)
Als indicatoren voor de fasen van de cirkel: - Gekleurde LED's en de benodigde weerstanden (hangt af van de kenmerken van de LED's die u gaat gebruiken).
- ongeveer 140 Ohm voor 5,2 -> 2, 2 V (geel, oranje, rood; enkele groene LED's),
- ongeveer 100 Ohm voor 5,3 -> 3,3 V (sommige groene, blauwe, witte LED's)
- Startkabels en een breadboard
Optioneel, voor een batterij aangedreven versie:
- 5V Micro-USB-voedingspakket, of
- Pimoroni Zero LiPo-shim en een LiPo-batterij
Stap 2: Lazout en montage
Monteer de Explorer pHAT zoals beschreven door de fabrikant. Ik heb een enkele rij vrouwelijke header toegevoegd voor de vereenvoudigde aansluiting van startkabels op de pHATs I/O-poorten. Stel je Pi in en installeer de Pimoroni-bibliotheek voor de Explorer HAT/pHAT, zoals beschreven door Pimoroni. Zet de Pi uit en bevestig de pHAT op de Pi. Verwijder de batterijpakketten van de LED-kettingen door de draden door te knippen en het uiteinde van de draden te vertinnen. Knip twee 2x mannelijke startkabels in het midden door, vertin het uiteinde van de draden. Soldeer de startkabels aan de LED-kettingen en isoleer de soldeerpunten met plakband of krimpkous. Controleer voor het solderen welke van de draden op plus- of massapoorten moeten worden aangesloten en markeer ze dienovereenkomstig. Ik heb jumperdraden met verschillende kleuren gebruikt. Snijd het schuim om de LED's, de diffusor en schermplaten op de juiste maat te houden. Markeer op de LED-houderplaat de posities waar de LED's moeten worden geplaatst en pons gaten van 3-5 mm in het schuim. Plaats vervolgens de 24 LED's op de aangegeven posities. Plaats de gekleurde papieren en diffusorplaten op de LED-plaat (zie afbeeldingen), ze plaatsen het frame boven de verpakking. Bevestig de schuimlagen in het frame, b.v. plakband gebruiken. Bevestig de LED strip kabels aan de “motor” poorten van de Explorer pHAT. Voor de afstembare versie plaats je potentiometers, drukknoppen, controle-LED's (en/of zoemers) en weerstanden op het breadboard en verbind je deze met de bijbehorende poorten op de Explorer pHAT.
Start uw Pi en installeer de vereiste bibliotheken, zoals beschreven op de Pimoroni-website, voer vervolgens het meegeleverde Python 3-script uit. Als een van de LED-kettingen niet werkt, is deze mogelijk in de verkeerde richting aangesloten. Dan kunt u ofwel de plus/min-aansluitingen op de pHAT wijzigen of een wijziging aanbrengen in het programma, b.v. verander "eh.motor.one.backwards()" in "… forwards()".
Bijgevoegd vindt u scripts met vaste instellingen die u binnen het programma kunt wijzigen en een voorbeeld waarbij u enkele instellingen kunt wijzigen met potentiometers, en de lichtcyclus kunt starten en stoppen met behulp van drukknoppen. Het moet niet al te moeilijk zijn om de scripts aan te passen aan uw eigen lay-out van het “ademlicht”.
Stap 3: De Python-scripts
Pimoroni's Python-bibliotheek voor de Explorer HAT/pHAT maakt het uiterst eenvoudig om de componenten die zijn aangesloten op de I/O-poorten van de HAT's te adresseren. Twee voorbeelden: "eh.two.motor.backwards(80)" stuurt het apparaat aangesloten op PWM/motorpoort 2 aan met 80% maximale intensiteit in achterwaartse richting, "eh.output.three.flash()" maakt een LED aangesloten om poort nummer drie uit te voeren, flits totdat het wordt gestopt. Ik heb een paar variaties van het licht gegenereerd, in feite het toevoegen van toenemende niveaus van controle door maximaal vier drukknoppen en potentiometers toe te voegen..py" waarbij alle vier de parameterinstellingen binnen het programma moeten worden gewijzigd. Daarnaast een versie genaamd "Ademlicht var lin cosin.py" waarbij de lengte van de twee dimfasen kan worden aangepast met behulp van twee potentiometers en de meest uitgebreide versie "Ademlicht var lin cosin3.py" voor de versie met vier potentiometers en drukknoppen. De programma's zijn geschreven in Python 3.
In alle gevallen kan het cyclusproces worden opgeroepen en gestopt met behulp van twee drukknoppen, in de versie met vier knoppen kunt u het proces ook onderbreken en opnieuw starten. Daarnaast kunnen er vier (gekleurde) LED's worden aangesloten op de digitale uitgangspoorten, die de specifieke fasen aangeven. Een cyclus van het apparaat bestaat uit vier fasen:
- de "inhale" fase, waarbij de bovenste LED's laag worden gedimd en de onderste LED's de intensiteit verhogen
- de fase "houd je adem in", waarbij de bovenste LED's uit zijn en de onderste LED's op maximum staan
- de "uitademingsfase", waarbij de onderste LED's laag worden gedimd en de bovenste LED's de intensiteit verhogen
- de fase "blijf uitademen", waarbij de onderste LED's uit zijn en de bovenste LED's maximaal branden.
De lengte van alle vier fasen wordt bepaald door een individuele numerieke parameter, die in het programma kan worden vastgelegd en/of kan worden aangepast met behulp van een potentiometer.
Een vijfde parameter definieert de maximale intensiteit. Hiermee kun je de maximale helderheid van de LED's instellen, wat handig kan zijn als je hem als nachtlampje wilt gebruiken. Daarnaast kun je het dimproces misschien verbeteren, omdat ik de indruk heb dat het moeilijk is om een verschil tussen 80 en 100% intensiteit te zien.
Ik voegde een optionele (co-)sinusfunctie toe voor het verhogen/verlagen van de helderheid, omdat dit een soepelere verbinding tussen de fasen geeft. Probeer gerust andere functies uit. bijv. u kunt de pauzes elimineren en twee verschillende (complexe) sinusfuncties gebruiken voor beide LED-ketens en de frequentie en amplitude aanpassen met potentiometers.
# De "ademhalings" -lamp: versie met twee knoppen en twee potentiometers
# een wijziging van het firefly-voorbeeld voor de Pimoroni Explorer pHAT # hier: sinoïde toename/afname van motor/PWM-waarden # voor lineaire functie dempen van lineaire en dempen cosin-functie # Deze versie "var" leest analoge ingangen, heft vooraf gedefinieerde instellingen op # leest digitale ingang, knoppen om te starten en te stoppen """ om te starten bij het inschakelen van de Pi kunt u gebruik maken van Cron: Cron is een Unix-programma dat wordt gebruikt om taken in te plannen, en het heeft een handige @reboot-functie waarmee u een script kunt uitvoeren wanneer je Pi opstart. Open een terminal en typ crontab -e om je crontab te bewerken. Scroll helemaal naar de onderkant van het bestand, voorbij alle regels die beginnen met #, en voeg de volgende regel toe (ervan uitgaande dat je code op /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & Sluit en sla je crontab op (als je nano gebruikt, druk dan op control-x, y en enter om af te sluiten en op te slaan). """ importeer tijd importeer explorerhat as eh importeer wiskundige constante waarden #sinus xmax = 316 stap = 5 # stapbreedte, bijv. 315/5 geeft 63 stappen/cyclus start_button = 0 # dit definieert de status van een drukknop aangesloten op ingangspoort nr. 1 stop_button = 0 # dit definieert de status van een drukknop aangesloten op ingangspoort nr. 3 pause_1 = 0,02 # stelt lengte in aantal pauzes binnen stappen in de "inademing"-fase, waardoor de snelheid en duur toenemen pauze_2 = 0,04 # stelt de uitademingsfrequentie in pause_3 = 1,5 # pauze tussen inademings- en uitademingsfasen (inademen blijven) pause_4 = 1,2 # pauze aan het einde van de uitademing fase (uitademen) max_intens = 0,9 # maximale intensiteit/helderheid max_intens_100= 100*max_intens # hetzelfde in % # Kan de "ademhalings"-indruk van LED's optimaliseren en flikkeringen verminderen. l_cosin= # lijst met afgeleide cosinuswaarden (100 >= x >=0) l_lin= # lijst met lineaire waarden (100 >= x >=0) # genereer cosinusfunctielijst voor i binnen bereik (0, 316, 3): # 315 ligt dicht bij Pi*100, 105 stappen # print (i) n_cosin = [(((math.cos (i/100))+1)/2)*100] #generate value # print (n_cosin) l_cosin = l_cosin + n_cosin #voeg waarde toe aan lijst # print (l_cosin) # genereer lineaire lijst voor i binnen bereik (100, -1, -1): # aftellen van 100 naar nul n_lin= l_lin=l_lin + n_lin # print (l_lin) # toont een saaie lijst print () print ("""Om de lichtcycli te starten, druk op de "Start"-knop (Input One)""") print () print ("""Om te stoppen het licht, houd de "Stop"-knop (Input Three)""") print () # wacht tot de Start-knop wordt ingedrukt terwijl (start_button==0): start_button=eh.input.one.read() # read knop nummer één eh.output.one.blink() # knipperende LED nummer één keer.slaap (0.5) # lees twee keer per seconde #run brandt terwijl (stop_button==0): # lees analoge ingangen EEN en TWEE, definieer instellingen set_1 =eh.an alog.one.read() # definieert rood-> groen ramping rate pause_1=set_1*0.02 # waarden liggen tussen 0 en 0,13 sec/stap print ("set_1:", set_1, " -> pause _1:", pause_1) set_2=eh.analog.two.read() # definieert groen -> rood ramping rate pause_2=set_2*0.02 # waarden zullen variëren tussen 0 en 0.13 sec/stap print ("set_2:", set_2, " -> pause _2: ", pause_2) # "inhalatie" fase eh.output.one.on() # kan een LED of pieper ''' aansturen voor x binnen bereik (len(l_lin)): fx=max_intens*l_lin [x] # lineaire curve eh.motor.one.backwards(fx) eh.motor.two.backwards(max_intens_100-fx) time.sleep(pause_1) eh.output.one.off() ''' voor x binnen bereik (len(l_cosin)): fx=max_intens*l_cosin [x] # lineaire curve eh.motor.one.backwards(fx) eh.motor.two.backwards(max_intens_100-fx) time.sleep(pause_1) eh.output.one.off() # controleer of de stopknop is ingedrukt stop_button=eh.input.three.read() # "Houd je adem in" pauze aan het einde van de inademingsfase eh.output.two.on() # zet LED twee aan eh.motor.one.achteruit(0) eh.motor.twee.achteruit(max_intens_100) time.sleep(pause_3) eh.output.two.off() #controleer of de stopknop is ingedrukt stop_button=eh.input.three.read() # "exhale" fase eh.output.three.on() # zet LED drie ''' aan voor x binnen bereik (len(l_lin)): fx=max_intens*l_lin [x] # lineaire curve eh.motor.one.backwards(max_intens_100-fx) eh.motor.two.backwards(fx) time.sleep(pause_2) ''' voor x binnen bereik (len(l_cosin)): fx=max_intens*l_cosin [x] # lineaire curve eh.motor.one.backwards(max_intens_100-fx) eh.motor.two. backwards(fx) time.sleep(pause_2) eh.output.three.off() #controleer of de stopknop is ingedrukt stop_button=eh.input.three.read() # pauzeer tussen de fasen "uitademen" en "inademen" eh. output.four.on() eh.motor.one.backwards(max_intens_100) eh.motor.two.backwards(0) time.sleep(pause_4) eh.output.four.off() #controleer of de stopknop is ingedrukt stop_knop =eh.input.three.read() # shutdown, zet alle uitgangspoorten uit eh.motor.one.stop() eh.motor.two.stop() eh.output.one.off() eh.output.two.off() eh.output.three.off() eh.output.four.off() afdrukken () afdrukken ("Tot ziens")
Als u de lamp als stand-alone apparaat wilt gebruiken, b.v. als slaap- of wake-up light, kun je een mobiele stroombron aan de Pi toevoegen en het programma laten starten na het opstarten en "Cron" gebruiken om het op bepaalde tijden in of uit te schakelen. Het gebruik van "Cron" is elders uitgebreid beschreven.
Stap 4: Videovoorbeelden
In deze stap vindt u een aantal video's die het licht laten zien onder normale (dwz alle waarden > 0, #1) en extreme omstandigheden, aangezien alle waarden op nul (#2) staan, alleen ramping (#3 ), en geen ramping (#5 ).;
Stap 5: Enkele opmerkingen
Excuses voor eventuele verkeerde termen, typefouten en fouten. Ik ben geen moedertaalspreker van het Engels en heb ook geen uitgebreide kennis van elektriciteit, elektronica of programmeren. Wat eigenlijk betekent dat ik een Engelse instructable probeer te schrijven over dingen waar ik in mijn eigen taal nauwelijks de juiste termen ken. Dus alle hints, correcties of ideeën voor verbetering zijn welkom. H
Aanbevolen:
Robot: Two Ways Mobile bestuurd door Windows Phone .: 6 stappen (met afbeeldingen)
Robot: Two Ways Mobile Gecontroleerd door Windows Phone.: Lijst: Arduino Uno L 293 (Bridge) HC SR-04 (Sonar Module) HC 05 (Bluetooth Module) Tg9 (Micro Servo) Motor met Versnellingsbak (Twee) Batterijhouder (voor 6 AA) Contach Lenzen Houder Draden (mannelijke naar vrouwelijke pinnen) Kabelbinders Hot Lijm (plakken
[WIP] Een Drawbot maken die wordt bestuurd door een Myo-armband: 11 stappen
[WIP] Een Drawbot maken die wordt bestuurd door een Myo-armband: Hallo allemaal! Een paar maanden geleden besloten we om het idee aan te pakken om een open-frame drawbot te bouwen die alleen een Myo-band gebruikte om hem te besturen. Toen we voor het eerst aan het project begonnen, wisten we dat het zou moeten worden opgesplitst in een paar verschillende p
Kerstboomlicht bestuurd door een stuk speelgoed. 12 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Kerstboomlicht bestuurd door een stuk speelgoed.: Gegroet makers! Kerstmis en nieuwjaar komen eraan. Het betekent een feeststemming, cadeaus en natuurlijk een kerstboom versierd met felle kleurrijke lichtjes. Voor mij zijn kerstverlichting op de massamarkt te saai. Om kinderen een plezier te doen, heb ik een unieke C
DIY-videogame bestuurd door hoofdbeweging (Augmented Reality): 4 stappen
DIY-videogame bestuurd door hoofdbeweging (Augmented Reality): ik wil je laten zien hoe gemakkelijk het tegenwoordig is om een eigen spel te maken dat kan worden bestuurd door je lichaam te bewegen. Je hebt alleen een laptop met webcam en enige programmeervaardigheid nodig. Als je geen laptop en webcam hebt of niet weet hoe je moet programmeren, kun je
Geweldige bewegende versnellingen bestuurd door geweldige knoppen (wordt vervolgd): 9 stappen
Awesome Moving Gears bestuurd door Awesome Buttons (wordt vervolgd): Fysiek / elektronisch game-ontwerp voor UCLA Design Media Arts met Eddo Stern. Dit instructable is onvolledig. Het project loopt nog