Innholdsfortegnelse:

White Noise Night Light: 11 trinn (med bilder)
White Noise Night Light: 11 trinn (med bilder)

Video: White Noise Night Light: 11 trinn (med bilder)

Video: White Noise Night Light: 11 trinn (med bilder)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, November
Anonim
White Noise Night Light
White Noise Night Light
White Noise Night Light
White Noise Night Light

Dette er et prosjekt jeg laget for 1-åringen min til jul. Ærlig talt var det en fornuft til stede for meg og min kone. Det er en hvit støymaskin som kan spille flere forskjellige lyder valgt gjennom et webgrensesnitt, og inneholder også lys som endrer farge basert på tiden (rødt lys betyr å være i sengen, gult betyr at du kan spille i rommet ditt, og grønt betyr at det er ok å komme ut). Siden sønnen min er for ung til å fortelle tid, virket et fargebasert nattlys som en veldig god idé.

Det er et veldig enkelt prosjekt, og siden jeg allerede har skrevet koden, er det kanskje 1 av 5 på vanskelighetsskalaen. Hvis du har småbarn som plager deg altfor tidlig om morgenen, vil du lage en.

Trinn 1: Deleliste

Deleliste
Deleliste
Deleliste
Deleliste
Deleliste
Deleliste

1. Raspberry Pi Zero W

2. En slags sak (jeg brukte denne fra Amazon)

3. Blinkt fra Pimoroni

4. Høyttaler Phat fra Pimoroni (Du kan også bruke en annen DAC med billige høyttalere)

Du må ha noen grunnleggende loddeferdigheter for å sette sammen høyttaleren phat, det er en lenke med trinnvise instruksjoner fra produktsiden, slik at du ikke kan skru det opp.

5. [VALGFRITT] Panelmontert mikro -USB -kabel - fra Adafruit

6. noen tilkoblingsledninger eller -hoppere

Det er det!

Trinn 2: Brenn Raspbian og hekt opp brettene

Brenne Raspbian og koble opp tavlene
Brenne Raspbian og koble opp tavlene

Jeg bruker Raspian Stretch lite for denne bygningen. Så brenn det til en microSD med det verktøyet som fungerer for deg, og slå deretter på pi. Hvis du trenger hjelp til å få en hodeløs pi til å koble til hjemmets wifi og aktivere ssh, er det mange opplæringsprogrammer på nettet som kan vise deg hvordan du gjør det, men du må sørge for at du har gjort det for resten av dette å jobbe.

Ved å bruke https://pinout.xyz kan du trekke opp begge brettene og få pinouts på dette nettstedet. Blinkt -kortene krever bare 4 tilkoblinger, og Speaker Phat trenger 9.

Det skal se ut som bildet når det er ferdig. Nå må vi teste at alt fungerer.

Trinn 3: Installere nødvendig programvare

Nå som vi er koblet til, må vi installere programvaren som kreves for å kjøre Blinkt og Speaker Phat -kortene. SSH inn til pi, og du vil finne deg selv i hjemmekatalogen. Skriv inn følgende:

krølle https://get.pimoroni.com/blinkt | bash

og så når det er fullført, dette:

curl -sS https://get.pimoroni.com/speakerphat | bash

Det vil installere alt som trengs for begge Pimoroni -platene. Hvis du skriver inn ls -kommandoen, bør du se en Pimoroni -katalog. Så la oss skrive litt kode og teste Blinkt -brettet.

Trinn 4: Skrive noen kode og teste den ut

Lag en katalog kalt "skript" ved å skrive mkdir -skript, så beholder vi alt vi trenger for å kjøre der inne. Så cd -skript for å komme deg inn i den mappen.

Det vi ønsker er røde, svake lys om natten, gule svake lys for stille spilletid og litt lysere grønne lys når det er ok å komme ut. For meg ønsket jeg rødt lys fra 19:30 til 06:15, og klokken 6:15 ble de gule i en time, og deretter til slutt grønn klokken 7:15. Jeg ville også at de skulle slå seg av klokken 08.30 når ingen sannsynligvis ville være i rommet.

Det er to måter å gjøre dette på. Den første (måten jeg valgte å gjøre det på) er med fire forskjellige skript, kjørt fra cron -jobber. Den andre måten å gjøre det på er et skript, som inkluderer en tidsfunksjon som kjøres ved oppstart. Jeg skrev faktisk manuset for å gjøre det på den måten først, men det virket mindre effektivt enn å gjøre det basert på cron, så jeg byttet det. Gi meg beskjed hvis du vil ha "ett skript" -metoden, så kan jeg legge den ut i kommentarene.

Så la oss starte med det røde skriptet. Skriv touch red.py, deretter nano red.py. Skriv deretter inn følgende kode.

#!/usr/bin/env python

import blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.3) blinkt.set_pixel (3, 128, 0, 0) blinkt.set_pixel (4, 128, 0, 0) #setter piksler 3 og 4 til rødt blinkt.show ()

Gjør det samme for yellow.py og green.py.

gul.py:

#!/usr/bin/env python

import blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.2) blinkt.set_pixel (2, 128, 128, 0) blinkt.set_pixel (3, 128, 128, 0) blinkt.set_pixel (4, 128, 128, 0) blinkt.set_pixel (5, 128, 128, 0) #sets piksler 2, 3, 4 og 5 til gul blinkt.show ()

grønn.py:

#!/usr/bin/env python

import blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.2) blinkt.set_all (0, 128, 0) #setter alle piksler til grønt blinkt.show ()

Og til slutt vil vi at et skript skal fjerne Blinkt når det ikke er nødvendig (lightsout.py):

#!/usr/bin/env python

import blinkt blinkt.set_clear_on_exit (True) blinkt.set_brightness (0.1) blinkt.set_all (0, 0, 0) #setter alle piksler til blinkt.show ()

Det er det. For å teste skriver du python red.py og ser om de to midterste pikslene lyser rødt. Skriv deretter inn python lightsout.py for å fjerne den. Det er det! Deretter må vi sette dem i cron -fanen slik at de kjører når vi vil.

Trinn 5: Legge til disse skriptene til Cron

I SSH -terminalen skriver du crontab -e

bla til slutten av filen og legg til følgende linjer:

15 6 * * * python /home/pi/scripts/yellow.py15 7 * * * python /home/pi/scripts/green.py 30 8 * * * python /home/pi/scripts/lightsout.py 30 19 * * * python /home/pi/scripts/red.py

Det setter opp skriptene til å kjøre på tidspunktene beskrevet i forrige trinn, fortsett og juster disse for å passe dine behov.

Det er det for nattlyset! Superenkelt. La oss nå gå videre til å sette opp White Noise -delen av denne bygningen.

Trinn 6: Test av høyttaleren Phat

Den enkleste måten (etter min mening) å teste Speaker Phat er ved å installere sox og kjøre litt statisk fra kommandolinjen.

sudo apt-get install sox

Når det er installert, kan vi prøve noen eksempler på spillekommandoer. Denne skal høres ut som bølger.

play -n synth brownnoise synth pinknoise mix synth 0 0 0 10 10 40 trapezium amod 0.1 30

Hvor avslappende! Ctrl+c vil stoppe det. Men hva er det? Det er en haug med LED -er på tvers av høyttaleren Phat som lyser opp, og vi kan ikke få det til å forstyrre våre Blinkt -lys. Så la oss slå dem av.

For å gjøre dette må vi endre /etc/asound.conf -filen og fjerne VU -målerpluggen, slik at den ikke engang prøver å drive lysdiodene i utgangspunktet. Jeg gjorde dette ved ganske enkelt å gi det nytt navn. Skriv denne kommandoen mv /etc/asound.conf /etc/asound.conf.bak Jeg fant dette gjennom litt googling, så det kan være en bedre måte.

Sox fungerer, og det er flott, men jeg planla å bruke noen loopable MP3-er for den hvite støydelen på denne maskinen, så jeg trengte en annen spiller, helst noe veldig lett. mpg123 er det jeg bestemte meg for. Installer det nå med sudo apt-get install mpg123

Ok, nå som vi vet at Speaker Phat fungerer som forventet, er det på tide å bygge grensesnittet og tilhørende skript.

Trinn 7: Sette opp en liten webserver og Webapp

Flask er et mikroweb -rammeverk skrevet i Python. Den gir all funksjonalitet vi trenger for webserveren (som kommer til å fungere som en app). Installer den med følgende kommando:

pip3 installasjonskolbe

Det vil ta litt tid, så vent. Når den er fullført, må vi bygge opp mappene vi må hente fra når nettstedet kjøres, og disse mappene har spesifikke navn. La oss starte med et sted å være vert for nettstedet. Fra hjemmekatalogen lager du en ny katalog kalt www med mkdir www. Nå cd www inn i den katalogen. Her trenger vi ytterligere to kataloger, en som heter statisk og en annen som kalles maler.

Vi trenger også et sted å sette våre loopbare MP3 -er. Jeg lagde en katalog i hjemmekatalogen som heter "lyder" for dette. Jeg fant MP3 -ene mine ved å søke etter loopable hvite MP3 -filer på Google. Mange ledige steder å trekke fra. Jeg brukte WinSCP til å laste opp filene.

Det kan være lurt å teste dem med omxplayer -kommandoen nedenfor og leke med --vol -### -delen for å slå inn riktig volumnivå for rommet ditt. Igjen vil Ctrl+C stoppe spilleren.

Nå som vi har alle de på plass, kan vi skrive litt python for å stå opp på webserveren når pi starter. Gå tilbake til www -katalogen og start en ny fil som heter webapp.py (nano webapp.py) og sett inn følgende kode

webbapp.py:

#!/usr/bin/python

fra kolbeimport Flask, render_template, request, redirect import os app = Flask (_ name_) @app.route ('/') def index (): return render_template ('index.html') @app.route ('/rain', methods = ['POST']) def rain (): os.system ("mpg123 -f 8000 --loop -1 ~/scripts/sounds/rain.mp3") return redirect ('/') @app.route ('/waves', methods = ['POST']) def waves (): os.system ("mpg123 -f 20500 --loop -1 ~/scripts/sounds/waves.mp3") return redirect ('/') @app.route ('/whitenoise', methods = ['POST']) def whitenoise (): os.system ("mpg123 --loop -1 ~/scripts/sounds/whitenoise.mp3") returomdirigering (' /') @app.route ('/stop ', methods = [' POST ']) def stop (): os.system ("killall mpg123") returomdirigering ('/') hvis _name_ ==' _main_ ': app.run (debug = True, host = '0.0.0.0')

Som du kan se vil denne webappen ha 5 sider, en for indeksen, 3 for 3 forskjellige lyder (bølge, regn og hvite lyder) og 1 til å stoppe. Alle de fire sider som ikke er indeks, omdirigerer tilbake til indeksen ('/') etter at de har utført kommandoen som er sendt til omxplayer, så vi trenger bare å lage en index.html, og ingenting annet. Jeg bruker killall her som stoppfunksjon, fordi jeg ikke kunne finne en bedre måte å sende en "stop" -kommando til omxplayer. Hvis du vet om en bedre måte å gjøre dette på, vil jeg gjerne høre det!

La oss nå sette sammen index.html.

Trinn 8: Bygg nettstedet

Å bygge nettstedet
Å bygge nettstedet
Å bygge nettstedet
Å bygge nettstedet
Å bygge nettstedet
Å bygge nettstedet
Å bygge nettstedet
Å bygge nettstedet

Dette er bildene jeg brukte til bygningen min, men lag gjerne dine egne. Alle må lagres i den statiske mappen vi lagde tidligere. Index.html -filen vi skal lage her må være i malmappen. Det er ganske viktig, ellers vil ingenting av det fungere. Her er koden for min index.html (igjen, dette er bare enkel html, så endre den på en hvilken som helst måte som fungerer for deg).

Siden Instructables ikke lar meg legge ut rå HTML, er her en lenke til filen slik den finnes på Dropbox -en min:

www.dropbox.com/s/n5xf2btftk5sz9b/index.ht…

Men hvis det noen gang dør, er HTML -filen bare en fancy CSS, og en enkel 2x2 -tabell med de fire ikonene som knapper med innleggsverdier slik:

form action = "/whitenoise" metode = "post"

input src = "/static/whitenoise.png" value = "Hvit støy"

Bør være ganske enkelt å lage deg selv.

Det siste trinnet er å sørge for at webapp.py kjører ved oppstart, igjen, jeg gjorde dette ved å legge det til crontab. Så skriv igjen crontab -e og legg til følgende til slutten:

@reboot python3 /home/pi/www/webapp.py

Start deretter pi på nytt, pek en nettleser på en annen maskin (telefonen) til IP -en til pi (best hvis du kan gjøre dette statisk) og se om det fungerte. Klikk på knappene og se om du får støy.

På en Android -telefon kan du bokmerke et nettsted på startskjermen, noe jeg gjorde med dette for å få det til å se ut som en app. Hvis du virkelig vil få det til å se "proff" ut, finn eller lag en passende.ico -fil og gi nettstedet sitt eget ikon som vil vises på telefonens startskjerm og ligner mye mer på en app. Mange opplæringsprogrammer på nettet om hvordan du legger til et ikon (favicon) på et nettsted.

Trinn 9: Sett alt i en sak

Jam alt i en sak
Jam alt i en sak
Jam alt i en sak
Jam alt i en sak
Jam alt i en sak
Jam alt i en sak

Nå som alt er testet og fungerer, er det på tide å sette alt i en sak.

Jeg bygde et standoff -feste for Raspberry Pi Zero ved å bruke litt plastrester jeg hadde rundt huset. Jeg boret deretter noen hull for panelmonteret mikro -USB, og ved hjelp av noen gullsmedfiler firkantet av hullet. Panelmonteringsledningen er litt stiv, så jeg kan kjøpe en rettvinklet adapter for mikro -USB -porten på Pi en gang i fremtiden.

Jeg kuttet en liten åpning i toppen av saken for høyttaleren å spille gjennom ved å bore to hull og koble dem til en Dremel. Boret deretter hullene i lokket for å montere Speaker Phat. For hva det er verdt, etter å ha tatt dette bildet, gikk jeg tilbake og laget noen flere hull fordi støyen virkelig ble fanget inne i saken. Jeg monterte Blinkt ved å bruke de plakatkittene fordi tingen ikke har noen monteringshull, men det ser ut til at kittet holder godt, så det vil klare seg.

Trinn 10: Det er det

Det er det!
Det er det!

Koble den til og du er ferdig. Her kjører min like etter klokken 20.00. Den grønne lysdioden på selve pien er ikke så lyssterk som dette bildet får den til å se ut.

Noen senere redigeringer jeg gjorde:

Jeg la til ytterligere 4 sider i webapp.py- og index.html -filene. De 4 er "rød", "gul", "grønn" og "av". Ganske selvforklarende. Jeg ønsket muligheten til å bytte den fra grønn tilbake til gul hvis kona og jeg følte meg ekstra slitne og ikke ville bli plaget.

@app.route ('/red', methods = ['POST']) def red (): os.system ("python ~/scripts/red.py") returomdirigering ('/')

I utgangspunktet det 4 ganger, kjører de 4 forskjellige skriptene, deretter noen flere knapper i indeksen som kaller disse sidene.

Den andre endringen noterte jeg allerede, men jeg boret noen flere hull og utvidet den eksisterende åpningen rundt høyttaleren fordi støyen ikke slapp godt nok fra kabinettet.

Hvis jeg gjør ytterligere endringer, kommer jeg garantert tilbake hit og viser dem.

Trinn 11: Tillegg

Etter å ha bygd dette innså jeg at min kone og jeg begge ofte forlater telefonene våre nede når vi la barnet til sengs eller en lur. Så jeg la til en øyeblikkelig trykknapp til fysisk pin 36, og inkluderte følgende kode (jeg kalte den button.py) for å kjøre ved oppstart i rc.local:

#!/usr/bin/env python

importer RPi. GPIO som GPIO importtid import os import delprosess import re GPIO.setmode (GPIO. BOARD) # Bruk knappen for fysisk nummerering av skjema = 36 # Knappen er koblet til fysisk pin 16 GPIO.setup (knapp, GPIO. IN, pull_up_down = GPIO. PUD_UP) # Gjør knappen til en inngang, Aktiver Pull UP Resistor mens True: hvis GPIO.input (knapp) == 0: # Vent på knappetrykk returprosess = Falsk # Innledningsvis satt til at lyden er slått av s = delprosess. Popen (["ps", "ax"], stdout = subprocess. PIPE) for x i s.stdout: if re.search ("mpg123", x): returnprocess = True if returnprocess == False: os.system ("mpg123 --loop -1 /home/pi/scripts/sounds/whitenoise.mp3 & ") os.system (" python /home/pi/scripts/red.py ") else: os.system (" killall mpg123 ") os.system ("python /home/pi/scripts/lightsout.py")

Som du kan se, byttet jeg også til mpg123 fra omxplayer fordi det er mye lettere og enklere å bruke.

MEN av en eller annen grunn når jeg legger dette skriptet i rc.local, kjører det faktisk ved oppstart uten problemer. Men lyden er virkelig hakket. Når jeg kjører skriptet som normalt, i kitt, ingen slike problemer. Jeg har problemer med å feilsøke dette, så gi meg beskjed hvis noen har noen ideer! Takk.

Anbefalt: