Talaan ng mga Nilalaman:

White Noise Night Light: 11 Hakbang (na may Mga Larawan)
White Noise Night Light: 11 Hakbang (na may Mga Larawan)

Video: White Noise Night Light: 11 Hakbang (na may Mga Larawan)

Video: White Noise Night Light: 11 Hakbang (na may Mga Larawan)
Video: My job is to observe the forest and something strange is happening here. 2024, Nobyembre
Anonim
White Noise Light ng Gabi
White Noise Light ng Gabi
White Noise Light ng Gabi
White Noise Light ng Gabi

Ito ay isang proyekto na ginawa ko para sa aking 1 taong gulang para sa Pasko. Sa totoo lang, ito ay isang katinuan na naroroon para sa akin at sa aking asawa. Ito ay isang puting ingay ng makina na maaaring maglaro ng maraming magkakaibang mga tunog na napili sa pamamagitan ng isang web interface, at nagsasama rin ng mga ilaw na nagbabago ng kulay batay sa oras (ibig sabihin ng mga pulang ilaw ay nasa kama, dilaw nangangahulugang maaari kang maglaro sa iyong silid, at berde ay nangangahulugang ok lang upang lumabas). Dahil ang aking anak na lalaki ay napakabata pa upang sabihin ang oras, ang isang ilaw na nakabatay sa kulay sa gabi ay tila isang magandang ideya.

Napakadaling proyekto, at dahil nasulat ko na ang code, marahil isang 1 out of 5 sa scale ng kahirapan. Kung mayroon kang mga Toddler na abala sa ano mo sa iyo masyadong maaga sa umaga, gugustuhin mong makagawa ng isa.

Hakbang 1: Listahan ng Mga Bahagi

Listahan ng Mga Bahagi
Listahan ng Mga Bahagi
Listahan ng Mga Bahagi
Listahan ng Mga Bahagi
Listahan ng Mga Bahagi
Listahan ng Mga Bahagi

1. Raspberry Pi Zero W

2. Ilang uri ng kaso (Ginamit ko ang isang ito mula sa Amazon)

3. Blinkt mula sa Pimoroni

4. Speaker Phat mula sa Pimoroni (Maaari mo ring gamitin ang iba pang DAC na may murang mga nagsasalita)

Kakailanganin mong magkaroon ng ilang pangunahing mga kasanayan sa paghihinang upang pagsama-samahin ang speaker phat, mayroong isang link na may sunud-sunod na mga tagubilin mula sa pahina ng produkto, kaya hindi mo ito mai-screw up.

5. [OPSYONAL] I-mount ang panel ng micro USB cable - mula sa Adafruit

6. ilang koneksyon sa mga wire o jumper

Ayan yun!

Hakbang 2: Sunugin ang Raspbian at I-hook Up ang mga Lupon

Sunugin ang Raspbian at I-hook Up ang mga Lupon
Sunugin ang Raspbian at I-hook Up ang mga Lupon

Gumagamit ako ng Raspian Stretch lite para sa build na ito. Kaya't sunugin iyon sa isang microSD na may anumang tool na gumagana para sa iyo, pagkatapos ay sunugin ang pi. Kung kailangan mo ng tulong sa pagkuha ng isang walang ulo pi upang kumonekta sa wifi ng iyong bahay at paganahin ang ssh, maraming mga tutorial sa online na maaaring ipakita sa iyo kung paano ito gawin, ngunit kakailanganin mong tiyakin na nagawa mo iyon para sa natitirang bahagi nito magtrabaho.

Gamit ang https://pinout.xyz maaari mong hilahin ang parehong mga board at makuha ang kanilang mga pinout sa site na ito. Ang mga board na Blinkt ay nangangailangan lamang ng 4 na koneksyon, at ang Speaker Phat ay nangangailangan ng 9.

Ito ay dapat magmukhang larawan kapag natapos. Ngayon kailangan nating subukan na ang lahat ay gumagana.

Hakbang 3: Pag-install ng Kinakailangan na Software

Ngayong nakakonekta na kami, kakailanganin naming i-install ang software na kinakailangan upang patakbuhin ang mga board ng Blinkt at Speaker Phat. SSH sa pi, at makikita mo ang iyong sarili sa direktoryo ng bahay. Ipasok ang sumusunod:

kulutin https://get.pimoroni.com/blinkt | bash

at pagkatapos ay kumpleto na ito, ito:

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

I-install nito ang lahat ng kinakailangan para sa parehong mga board ng Pimoroni. Kung ipinasok mo ang utos ng ls, dapat mong makita ang isang direktoryo ng Pimoroni. Kaya't magsulat tayo ngayon ng ilang code at subukan ang Blinkt board.

Hakbang 4: Pagsulat ng Ilang Code at Pagsubok Ito

Gumawa ng isang direktoryo na tinatawag na "script" sa pamamagitan ng pagta-type ng mkdir script at panatilihin namin ang lahat ng kailangan namin upang tumakbo doon. Kaya cd script upang makuha ang iyong sarili sa folder na iyon.

Ngayon, ang nais namin ay ang mga pulang madilim na ilaw para sa oras ng gabi, mga dilaw na ilaw na ilaw para sa tahimik na oras ng pag-play, at bahagyang mas maliwanag na berdeng ilaw kapag ok na lumabas. Para sa akin, gusto ko ng mga pulang ilaw mula 7:30 ng hapon hanggang 6:15 ng umaga, at 6:15 ng umaga ay dilaw sila sa loob ng isang oras, at pagkatapos ay berde sa ganap na 7:15. Nais ko din na sila ay patayin sa ganap na 8:30 ng umaga nang walang sinuman na maaaring nasa silid.

Mayroong dalawang paraan upang magawa ito. Ang una (ang paraan na pinili ko upang gawin ito) ay may apat na magkakaibang mga script, na tumatakbo mula sa mga cron job. Ang iba pang paraan upang gawin ito, ay isang script, na nagsasama ng isang oras na pagpapaandar na pinapatakbo sa pagsisimula. Sinulat ko talaga ang script upang gawin ito sa ganoong paraan, ngunit tila hindi gaanong mahusay kaysa sa paggawa nito batay sa cron, kaya pinalitan ko ito. Kung nais mo ang pamamaraang "isang script", ipaalam sa akin at maaari ko itong mai-post sa mga komento.

Kaya, magsimula tayo sa pulang script. I-type ang touch red.py, pagkatapos nano red.py. Pagkatapos ay ipasok ang sumusunod na code.

#! / usr / bin / env python

import blinkt blinkt.set_clear_on_exit (Mali) blinkt.set_brightness (0.3) blinkt.set_pixel (3, 128, 0, 0) blinkt.set_pixel (4, 128, 0, 0) #sets pixel 3 at 4 hanggang sa pulang blinkt.show ()

Gawin ang pareho para sa yellow.py at green.py.

dilaw.py:

#! / usr / bin / env python

import blinkt blinkt.set_clear_on_exit (Mali) 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 pixel 2, 3, 4, at 5 hanggang dilaw na blinkt.show ()

berde.py:

#! / usr / bin / env python

i-import ang blinkt blinkt.set_clear_on_exit (Mali) blinkt.set_brightness (0.2) blinkt.set_all (0, 128, 0) nai-set ang lahat ng mga pixel sa berdeng blinkt.show ()

At sa wakas, nais namin ang isang script na i-clear ang Blinkt kapag hindi ito kinakailangan (lightsout.py):

#! / usr / bin / env python

i-import ang blinkt blinkt.set_clear_on_exit (True) blinkt.set_brightness (0.1) blinkt.set_all (0, 0, 0) nai-set ang lahat ng mga pixel upang i-off ang blinkt.show ()

Ayan yun. Upang subukan ang uri ng python red.py at makita kung ang dalawang gitnang mga pixel ay ilaw na pula. Pagkatapos i-type ang python lightsout.py upang limasin ito. Ayan yun! Susunod na itatakda namin ang mga nasa cron tab upang tumakbo sila sa kung kailan natin gusto ang mga ito.

Hakbang 5: Pagdaragdag ng Mga Script sa Cron

Sa SSH terminal type crontab -e

mag-scroll sa dulo ng file at idagdag ang mga sumusunod na linya:

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

Na nagtatakda ng mga script upang tumakbo sa mga oras na inilarawan sa nakaraang hakbang, magpatuloy at ayusin ang mga ito upang umangkop sa iyong mga pangangailangan.

Iyon lang para sa nightlight! Napakadali. Ngayon magpatuloy tayo sa pag-set up ng bahagi ng White Noise ng build na ito.

Hakbang 6: Pagsubok sa Speaker Phat

Ang pinakamadaling paraan (sa palagay ko) upang subukan ang Speaker Phat ay sa pamamagitan ng pag-install ng sox at pagpapatakbo ng ilang static mula sa linya ng utos.

sudo apt-get install sox

Kapag na-install na iyon, maaari naming subukan ang ilang mga sample na utos sa pag-play. Ang isang ito ay dapat na parang mga alon.

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

Nakakarelax! Ihihinto ito ng Ctrl + c. Ngunit, ano iyon Mayroong isang pangkat ng mga LED sa mukha ng Speaker Phat na nag-iilaw, at hindi namin ito makagambala sa aming mga ilaw na Blinkt. Kaya't hinahayaan na patayin ang mga iyon.

Upang magawa ito, kakailanganin nating baguhin ang /etc/asound.conf file at alisin ang VU meter plugin, kaya't hindi nito sinubukan na himukin ang mga LED sa unang lugar. Ginawa ko ito sa pamamagitan ng simpleng pagpapalit ng pangalan nito. I-type ang utos na ito mv /etc/asound.conf /etc/asound.conf.bak Natagpuan ko ito sa pamamagitan ng isang maliit na Googling, kaya maaaring may isang mas mahusay na paraan.

Gumagana ang Sox, at mahusay iyan, ngunit binalak kong gumamit ng ilang mga loopable MP3 para sa puting ingay na bahagi ng makina na ito, kaya't kailangan ko ng ibang manlalaro, mas mabuti ang isang bagay na talagang magaan ang timbang. mpg123 ang naayos ko. I-install iyon ngayon gamit ang sudo apt-get install mpg123

Ok, ngayong alam natin na ang Speaker Phat ay gumagana tulad ng inaasahan, oras upang buuin ang interface at mga kaukulang script.

Hakbang 7: Pagse-set up ng isang Maliit na Webserver at Webapp

Ang Flask ay isang micro web framework na nakasulat sa Python. Nagbibigay ito ng lahat ng pag-andar na kailangan namin para sa webserver (na kikilos bilang isang app). I-install ito sa sumusunod na utos:

pip3 install flask

Magtatagal iyon, kaya't maghintay ka. Kapag nakumpleto na, kakailanganin nating buuin ang mga folder na kakailanganin naming hilahin mula kapag tumatakbo ang website, at ang mga folder na ito ay may mga tukoy na pangalan. Magsimula tayo sa isang lugar upang i-host ang website. Mula sa direktoryo sa bahay, gumawa ng isang bagong direktoryo na tinatawag na www na may mkdir www. Ngayon cd www in sa direktoryo na. Dito kailangan namin ng dalawa pang direktoryo, ang isa ay tinatawag na static at isa pa na tinatawag na mga template.

Kailangan din namin ng isang lugar upang mailagay ang aming mga loopable MP3. Gumawa ako ng isang direktoryo sa direktoryo sa bahay na tinatawag na "tunog" para dito. Natagpuan ko ang aking mga MP3 sa pamamagitan ng paghahanap ng mga loopable whitenoise MP3 sa Google. Maraming mga libreng lugar upang makuha mula sa. Gumamit ako ng WinSCP upang mai-upload ang mga file.

Maaaring gusto mong subukan ang mga ito gamit ang utos ng omxplayer sa ibaba na naglalaro ng bahagi --vol - ### upang mag-dial sa tamang antas ng lakas ng tunog para sa iyong silid. Muli ang isang Ctrl + C ay titigil sa manlalaro.

Ngayong mayroon na tayong lahat sa mga lugar, hinahayaan na magsulat ng ilang sawa upang tumayo ang webserver kapag nagsimula ang pi. Bumalik sa direktoryo ng www at magsimula ng isang bagong file na tinatawag na webapp.py (nano webapp.py) at ipasok ang sumusunod na code

webbapp.py:

#! / usr / bin / python

mula sa flask import Flask, render_template, hiling, redirect import os app = Flask (_ name_) @ app.route ('/') def index (): return render_template ('index.html') @ app.route ('/ rain', pamamaraan = ['POST']) def rain (): os.system ("mpg123 -f 8000 --loop -1 ~ / script / tunog / ulan.mp3") bumalik sa pag-redirect ('/') @ app.route ('/ waves', mga pamamaraan = ['POST']) def waves (): os.system ("mpg123 -f 20500 --loop -1 ~ / script / tunog / alon.mp3") bumalik sa pag-redirect ('/') @ app.route ('/ whitenoise', mga pamamaraan = ['POST']) def whitenoise (): os.system ("mpg123 --loop -1 ~ / script / tunog / whitenoise.mp3") bumalik sa pag-redirect (' / ') @ app.route (' / stop ', mga pamamaraan = [' POST ']) def stop (): os.system ("killall mpg123") return redirect (' / ') kung _name_ ==' _main_ ': app.run (debug = True, host = '0.0.0.0')

Tulad ng nakikita mo ang webapp na ito ay magkakaroon ng 5 mga pahina, isa para sa index, 3 para sa 3 magkakaibang tunog (alon, ulan at whitenoise) at 1 pa upang huminto. Ang lahat ng 4 na mga pahina na hindi index ay nagre-redirect pabalik sa index ('/') pagkatapos nilang maipatupad ang utos na ipinadala sa omxplayer, kaya kailangan lang naming lumikha ng isang index.html, at wala nang iba pa. Gumagamit ako ng killall dito bilang isang stop function, dahil hindi ako makahanap ng isang mas mahusay na paraan upang magpadala ng isang "stop" na utos sa omxplayer. Kung alam mo ang isang mas mahusay na paraan ng paggawa nito, gusto kong marinig ito!

Ngayon ay pagsamahin natin ang index.html.

Hakbang 8: Pagbuo ng Website

Pagbuo ng Website
Pagbuo ng Website
Pagbuo ng Website
Pagbuo ng Website
Pagbuo ng Website
Pagbuo ng Website
Pagbuo ng Website
Pagbuo ng Website

Ito ang mga imaheng ginamit ko para sa aking build, ngunit huwag mag-atubiling gumawa ng iyong sarili. Lahat sila ay kailangang mai-save sa static folder na ginawa namin kanina. Ang index.html file na gagawin namin dito ay kailangang nasa folder ng mga template. Iyon ay medyo mahalaga, kung hindi man, wala sa ito ang gagana. Narito ang code para sa aking index.html (muli, ito ay simpleng html lamang, kaya't baguhin ito sa anumang paraan na gumagana para sa iyo).

Dahil hindi ako papayagan ng mga Instructable na mag-post ng hilaw na HTML, narito ang isang link sa file dahil mayroon ito sa aking Dropbox:

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

Ngunit kung sakaling mamatay iyon, ang HTML file ay ilang mga magarbong CSS, at isang simpleng 2x2 na talahanayan na may mga 4 na icon bilang mga pindutan na may mga halaga ng post tulad nito:

form action = "/ whitenoise" method = "post"

input src = "/ static / whitenoise.png" halaga = "Puting Ingay"

Dapat ay medyo madali upang gawing isa ang iyong sarili.

Ang huling hakbang ay upang matiyak na tumatakbo ang webapp.py sa pagsisimula, muli, ginawa ko ito sa pamamagitan ng pagdaragdag nito sa crontab. Kaya't muling i-type ang crontab -e at idagdag ang sumusunod sa dulo:

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

Pagkatapos ay i-reboot ang pi, ituro ang isang browser sa isa pang makina (iyong telepono) sa IP ng pi (pinakamahusay kung maaari mong gawin itong static) at tingnan kung gumana ito. I-click ang mga pindutan at tingnan kung nakakuha ka ng ingay.

Sa isang Android phone maaari kang mag-bookmark ng isang website sa iyong homescreen, na kung saan ang ginawa ko dito upang makatingin at makaramdam ako ng isang app. Kung nais mong talagang magmukha itong "pro" na maghanap o lumikha ng isang angkop na.ico file at bigyan ang website ng sarili nitong icon na lilitaw sa home screen ng iyong telepono at magmukhang mas katulad ng isang app. Maraming mga tutorial sa online kung paano magdagdag ng isang icon (favicon) sa isang website.

Hakbang 9: I-Jam ang Lahat sa isang Kaso

Jam Lahat sa isang Kaso
Jam Lahat sa isang Kaso
Jam Lahat sa isang Kaso
Jam Lahat sa isang Kaso
Jam Lahat sa isang Kaso
Jam Lahat sa isang Kaso

Ngayon na ang lahat ay nasubukan na at gumagana, oras upang i-plug ang lahat sa isang kaso.

Nagtayo ako ng isang standoff mount para sa Raspberry Pi Zero gamit ang ilang natirang plastik na mayroon ako sa paligid ng bahay. Pagkatapos ay nag-drill ako ng ilang mga butas para sa panel na nag-mount micro USB, at gumagamit ng ilang mga file ng mga alahas na naka-square sa butas. Ang panel mount cable ay medyo matigas, kaya maaari akong bumili ng tamang anggulo na adapter para sa micro USB port sa Pi minsan sa hinaharap.

Pinutol ko ang isang maliit na pambungad sa tuktok ng kaso para sa nagsasalita upang makapaglaro sa pamamagitan ng pagbabarena ng dalawang butas at ikonekta ang mga ito sa isang Dremel. Pagkatapos ay drill ang mga butas sa takip upang mai-mount ang Speaker Phat. Para sa kung ano ang kahalagahan nito, pagkatapos ng pagkuha ng litratong ito bumalik ako at gumawa ng ilan pang mga butas dahil ang ingay ay talagang nakulong sa loob ng kaso. Inilagay ko ang Blinkt gamit ang poster na masarap na bagay dahil ang bagay na iyon ay walang anumang mga butas sa pag-mount, ngunit ang masilya ay tila napakahusay, kaya't gagawin nito.

Hakbang 10: Iyon Ito

Ayan yun!
Ayan yun!

I-plug in at tapos ka na. Narito ang aking tumatakbo makalipas ang 8pm. Ang berdeng LED sa pi mismo ay hindi kasing-ilaw ng pagpapakita sa larawang ito.

Ang ilang pag-edit sa paglaon ay ginawa ko:

Nagdagdag ako ng 4 pang mga pahina sa mga webapp.py at index.html file. Ang 4 na iyon ay "pula", "dilaw", "berde", at "off". Medyo nagpapaliwanag sa sarili. Nais kong ang kakayahang ilipat ito mula sa berde pabalik sa dilaw kung ang asawa at ako ay nakadarama ng sobrang pagod at ayaw mag-abala.

@ app.route ('/ red', mga pamamaraan = ['POST']) def red (): os.system ("python ~ / scripts / red.py") return redirect ('/')

Karaniwan na 4 na beses, pinapatakbo ang 4 na magkakaibang mga script, pagkatapos ay ilang higit pang mga pindutan sa index na tumatawag sa mga pahinang iyon.

Ang iba pang pagbabago na nabanggit ko na, ngunit nag-drill ako ng ilan pang mga butas at pinalawak ang umiiral na pagbubukas sa paligid ng nagsasalita dahil ang ingay ay hindi makatakas sa enclosure nang sapat.

Kung gumawa ako ng anumang karagdagang mga pagbabago, siguraduhin kong bumalik dito at ilista ang mga ito.

Hakbang 11: Addendum

Matapos ang pagbuo nito ay napagtanto kong pareho kaming mag-asawa na madalas na iniiwan ang aming mga telepono sa ibaba kapag inilalagay ang bata para matulog o makatulog. Kaya nagdagdag ako ng isang pansamantalang pindutan ng push sa pisikal na pin 36, at isinama ang sumusunod na code (tinawag ko ito button.py) upang tumakbo sa startup sa rc.local:

#! / usr / bin / env python

i-import ang RPi. GPIO bilang oras ng pag-import ng GPIO i-import ang pag-import ng subprocess import muli GPIO.setmode (GPIO. BOARD) # Gumamit ng pisong Scheme ng Numero ng Physical Pin = 36 # Ang pindutan ay konektado sa pisikal na pin 16 GPIO.setup (pindutan, GPIO. IN, pull_up_down = GPIO. PUD_UP) # Gawing isang input ang pindutan, Paganahin ang Pull UP Resistor habang Totoo: kung GPIO.input (pindutan) == 0: # Maghintay para sa pindutan na pindutin ang returnprocess = Maling # Paunang itinakda sa tunog na off s = subprocess. Popen (["ps", "ax"], stdout = subprocess. PIPE) para sa x in s.stdout: kung re.search ("mpg123", x): returnprocess = True kung returnprocess == Mali: os.system ("mpg123 --loop -1 /home/pi/scripts/sounds/whitenoise.mp3 & ") os.system (" python /home/pi/scripts/red.py ") iba pa: os.system (" killall mpg123 ") os.system ("python /home/pi/scripts/lightout.py")

Tulad ng nakikita mo, lumipat din ako sa mpg123 mula sa omxplayer dahil mas magaan at simpleng gamitin ito.

Gayunpaman, para sa ilang kadahilanan kapag inilagay ko ang script na ito sa rc.local talagang tumatakbo ito sa pagsisimula nang walang anumang mga problema. Ngunit ang audio ay talagang choppy. Kapag pinatakbo ko ang script bilang normal, sa masilya, walang mga ganitong isyu. Nagkakaroon ako ng isang oras ng pagto-troubleshoot nito, kaya't kung ang sinuman ay may anumang mga ideya, mangyaring ipaalam sa akin! Salamat

Inirerekumendang: