İçindekiler:

Beyaz Gürültülü Gece Işığı: 11 Adım (Resimlerle)
Beyaz Gürültülü Gece Işığı: 11 Adım (Resimlerle)

Video: Beyaz Gürültülü Gece Işığı: 11 Adım (Resimlerle)

Video: Beyaz Gürültülü Gece Işığı: 11 Adım (Resimlerle)
Video: Ben gece sandım abi pardon 😂 2024, Temmuz
Anonim
Beyaz Gürültü Gece Lambası
Beyaz Gürültü Gece Lambası
Beyaz Gürültü Gece Lambası
Beyaz Gürültü Gece Lambası

Bu, 1 yaşındaki çocuğum için Noel için yaptığım bir proje. Dürüst olmak gerekirse, benim ve karım için bir akıl sağlığı hediyesiydi. Bu, bir web arayüzü aracılığıyla seçilen birden fazla farklı sesi çalabilen ve ayrıca zamana göre rengi değişen ışıklar içeren beyaz bir gürültü makinesidir (kırmızı ışıklar yatakta olun, sarı, odanızda çalabileceğiniz anlamına gelir ve yeşil, sorun değil anlamına gelir) çıkmak için). Oğlum zamanı söyleyemeyecek kadar küçük olduğu için, renk bazlı bir gece lambası gerçekten iyi bir fikir gibi görünüyordu.

Bu gerçekten kolay bir proje ve kodu zaten yazdığım için, zorluk ölçeğinde belki de 5 üzerinden 1'dir. Sabah çok erken saatlerde canınızı sıkan küçük çocuklarınız varsa, bir tane yapmak isteyeceksiniz.

Adım 1: Parça Listesi

Parça listesi
Parça listesi
Parça listesi
Parça listesi
Parça listesi
Parça listesi

1. Ahududu Pi Sıfır W

2. Bir çeşit vaka (Bunu Amazon'dan kullandım)

3. Pimoroni'den Blinkt

4. Pimoroni'den Hoparlör Phat (Ucuz hoparlörlü başka DAC'leri de kullanabilirsiniz)

Hoparlör phat'ı bir araya getirmek için bazı temel lehimleme becerilerine sahip olmanız gerekecek, ürün sayfasında adım adım talimatlar içeren bir bağlantı var, bu yüzden onu berbat edemezsiniz.

5. [İSTEĞE BAĞLI] Panele monte mikro USB kablosu - Adafruit'ten

6. bazı bağlantı telleri veya atlama telleri

Bu kadar!

2. Adım: Raspbian'ı Yak ve Panoları Bağla

Raspbian'ı Yak ve Panoları Bağla
Raspbian'ı Yak ve Panoları Bağla

Bu yapı için Raspian Stretch lite kullanıyorum. Bu yüzden, işinize yarayan herhangi bir araçla bunu bir microSD'ye yazın, ardından pi'yi çalıştırın. Evinizin kablosuz ağına bağlanmak ve ssh'yi etkinleştirmek için başsız bir pi almak için yardıma ihtiyacınız varsa, çevrimiçi olarak bunu nasıl yapacağınızı gösterebilecek çok sayıda öğretici var, ancak bunun geri kalanı için bunu yaptığınızdan emin olmanız gerekecek. çalışmak.

Http://pinout.xyz kullanarak bu sitede her iki kartı da çekebilir ve pinout'larını alabilirsiniz. Blinkt kartları sadece 4 bağlantı gerektirir ve Speaker Phat 9'a ihtiyaç duyar.

Bittiğinde fotoğraftaki gibi görünmelidir. Şimdi her şeyin çalıştığını test etmemiz gerekiyor.

3. Adım: Gerekli Yazılımın Yüklenmesi

Artık bağlı olduğumuza göre, Blinkt ve Speaker Phat kartlarını çalıştırmak için gereken yazılımı yüklememiz gerekecek. Pi'ye SSH girin ve kendinizi ana dizinde bulacaksınız. Aşağıdakileri girin:

kıvrılma https://get.pimoroni.com/blinkt | bash

ve sonra bu tamamlandığında, bu:

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

Bu, her iki Pimoroni kartı için gereken her şeyi kuracaktır. ls komutunu girerseniz, bir Pimoroni dizini görmelisiniz. Şimdi biraz kod yazalım ve Blinkt kartını test edelim.

Adım 4: Bazı Kodlar Yazmak ve Test Etmek

mkdir scripts yazarak "scripts" adında bir dizin oluşturun ve çalıştırmamız gereken her şeyi orada tutalım. Kendinizi o klasöre sokmak için cd komut dosyaları.

Şimdi, istediğimiz şey gece için kırmızı loş ışıklar, sessiz oyun süresi için sarı loş ışıklar ve dışarı çıkmak için uygun olduğunda biraz daha parlak yeşil ışıklar. Benim için, akşam 7:30'dan 06:15'e kadar kırmızı ışıklar istedim ve sabah 6:15'te bir saat boyunca sarıya dönerlerdi ve son olarak sabah 7:15'te yeşile dönerlerdi. Ayrıca, odada kimsenin olmaması muhtemel olduğunda sabah 8: 30'da kapanmalarını istedim.

Bunu yapmanın iki yolu vardır. Birincisi (bunu yapmayı seçtiğim yol), cron işlerinden çalıştırılan dört farklı komut dosyasıyla. Bunu yapmanın diğer yolu, başlangıçta çalıştırılan bir zaman işlevini içeren bir komut dosyasıdır. Aslında senaryoyu ilk önce bu şekilde yapmak için yazdım, ancak cron'a göre yapmaktan daha az verimli görünüyordu, bu yüzden değiştirdim. "Bir komut dosyası" yöntemini istiyorsanız, bana bildirin, yorumlarda yayınlayabilirim.

Öyleyse, kırmızı komut dosyasıyla başlayalım. touch red.py, ardından nano red.py yazın. Ardından aşağıdaki kodu girin.

#!/usr/bin/env piton

flasht.set_clear_on_exit(Yanlış) blurt.set_brightness(0.3) blurt.set_pixel(3, 128, 0, 0) blurt.set_pixel(4, 128, 0, 0) #piksel 3 ve 4'ü kırmızı yanıp sönmeye ayarlar.show()

Yellow.py ve green.py için de aynısını yapın.

sarı.py:

#!/usr/bin/env piton

yanıp sönme flasht.set_clear_on_exit(Yanlış) blurt.set_brightness(0.2) blurt.set_pixel(2, 128, 128, 0) flasht.set_pixel(3, 128, 128, 0) blurt.set_pixel(4, 128, 128, 0) flasht.set_pixel(5, 128, 128, 0) #2, 3, 4 ve 5 numaralı pikselleri sarı olarak ayarlar blurt.show()

yeşil.py:

#!/usr/bin/env piton

yanıp sönme flasht.set_clear_on_exit(Yanlış) blurt.set_brightness(0.2) blurt.set_all(0, 128, 0) #tüm pikselleri yeşil olarak ayarlar blurt.show()

Ve son olarak, gerekmediğinde Blinkt'i temizleyecek bir komut dosyası istiyoruz (lightsout.py):

#!/usr/bin/env piton

flasht.set_clear_on_exit(True) blurt.set_brightness(0.1) blurt.set_all(0, 0, 0) #tüm pikselleri kapalı olarak ayarlar blurt.show()

Bu kadar. python red.py tipini test etmek ve ortadaki iki pikselin kırmızı yandığını görmek için. Ardından temizlemek için python lightout.py yazın. Bu kadar! Ardından, cron sekmesinde bunları istediğimiz zaman çalışacak şekilde ayarlamamız gerekecek.

Adım 5: Bu Komut Dosyalarını Cron'a Ekleme

SSH terminal tipinde crontab -e

dosyanın sonuna gidin ve aşağıdaki satırları ekleyin:

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

Bu, komut dosyalarını önceki adımda açıklanan zamanlarda çalışacak şekilde ayarlar, devam edin ve bunları ihtiyaçlarınıza göre ayarlayın.

Gece lambası için bu kadar! Süper kolay. Şimdi bu yapının Beyaz Gürültü bölümünü kurmaya geçelim.

Adım 6: Hoparlör Phat'ı Test Etme

Speaker Phat'ı test etmenin en kolay yolu (bence) sox yüklemek ve komut satırından biraz statik çalıştırmaktır.

sudo apt-get kurulumu sox

Bu yüklendikten sonra, bazı örnek oynatma komutlarını deneyebiliriz. Bu dalgalar gibi ses çıkarmalı.

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

Ne kadar rahatlatıcı! Ctrl+c onu durduracaktır. Ama bu nedir? Hoparlör Phat'ın yüzünde bir sürü LED yanıyor ve bunun Blinkt ışıklarımıza müdahale etmesine izin veremeyiz. Öyleyse bunları kapatalım.

Bunu yapmak için, /etc/asound.conf dosyasını değiştirmemiz ve VU metre eklentisini kaldırmamız gerekecek, böylece ilk etapta LED'leri çalıştırmayı denemeyecektir. Bunu basitçe yeniden adlandırarak yaptım. Bu komutu yazın mv /etc/asound.conf /etc/asound.conf.bak Bunu biraz Googling aracılığıyla buldum, bu yüzden daha iyi bir yol olabilir.

Sox çalışıyor ve bu harika, ancak bu makinenin beyaz gürültü kısmı için bazı döngülenebilir MP3'ler kullanmayı planladım, bu yüzden farklı bir oynatıcıya, tercihen gerçekten hafif bir şeye ihtiyacım vardı. mpg123 benim karar verdiğim şey. Bunu şimdi sudo apt-get install mpg123 ile kurun

Tamam, artık Speaker Phat'ın beklendiği gibi çalıştığını bildiğimize göre, arayüzü ve ilgili komut dosyalarını oluşturma zamanı.

7. Adım: Küçük Bir Web Sunucusu ve Web Uygulaması Kurma

Flask, Python ile yazılmış bir mikro web çerçevesidir. Web sunucusu için ihtiyacımız olan tüm işlevleri sağlar (bir uygulama olarak işlev görecektir). Aşağıdaki komutla yükleyin:

pip3 yükleme şişesi

Bu biraz zaman alacak, bu yüzden bekleyin. Tamamlandığında, web sitesi çalıştığında çekmemiz gereken klasörleri oluşturmamız gerekecek ve bu klasörlerin belirli adları var. Web sitesini barındıracak bir yerle başlayalım. Ana dizinden, mkdir www ile www adında yeni bir dizin oluşturun. Şimdi bu dizine cd www. Burada, biri static ve diğeri şablon olarak adlandırılan iki dizine daha ihtiyacımız var.

Ayrıca loopable MP3'lerimizi koyacak bir yere ihtiyacımız var. Bunun için ana dizinde "sesler" adında bir dizin oluşturdum. MP3'lerimi Google'da loopable whitenoise MP3'leri arayarak buldum. Çekilecek çok sayıda ücretsiz yer. Dosyaları yüklemek için WinSCP kullandım.

Odanız için doğru ses seviyesini aramak için aşağıdaki omxplayer komutuyla --vol -### bölümüyle oynayarak bunları test etmek isteyebilirsiniz. Yine bir Ctrl+C oynatıcıyı durduracaktır.

Artık tüm bunları yerine getirdiğimize göre, pi başladığında web sunucusunu ayağa kaldırmak için biraz python yazalım. www dizinine geri dönün ve webapp.py (nano webapp.py) adlı yeni bir dosya başlatın ve aşağıdaki kodu girin

webbapp.py:

#!/usr/bin/python

şişeden import Flask, render_template, request, yönlendirme import os app = Flask(_name_) @app.route('/') def index(): render render_template('index.html') @app.route('/rain', yöntemler = ['POST']) def rain(): os.system("mpg123 -f 8000 --loop -1 ~/scripts/sounds/rain.mp3") dönüş yönlendirme('/') @app.route ('/waves', yöntemler = ['POST']) def wave(): os.system("mpg123 -f 20500 --loop -1 ~/scripts/sounds/waves.mp3") return yönlendirme('/') @app.route('/whitenoise', yöntemler = ['POST']) def whitenoise(): os.system("mpg123 --loop -1 ~/scripts/sounds/whitenoise.mp3") return yönlendirme(' /') @app.route('/stop', yöntemler = ['POST']) def stop(): os.system("killall mpg123") return yönlendirme('/') eğer _name_ == '_main_': app.run(debug=Doğru, host='0.0.0.0')

Gördüğünüz gibi, bu web uygulamasında biri dizin için, 3'ü 3 farklı ses için (dalga, yağmur ve beyaz gürültü) ve 1'i durdurmak için olmak üzere 5 sayfa olacaktır. 4 dizin olmayan sayfanın tümü, omxplayer'a gönderilen komutu yürüttükten sonra tekrar dizine ('/') yönlendirilir, bu nedenle yalnızca bir index.html oluşturmamız gerekir, başka bir şey değil. Burada bir durdurma işlevi olarak killall kullanıyorum çünkü omxplayer'a "dur" komutu göndermenin daha iyi bir yolunu bulamadım. Bunu yapmanın daha iyi bir yolunu biliyorsanız, duymayı çok isterim!

Şimdi index.html'yi bir araya getirelim.

8. Adım: Web Sitesini Oluşturma

Web Sitesini Oluşturmak
Web Sitesini Oluşturmak
Web Sitesini Oluşturmak
Web Sitesini Oluşturmak
Web Sitesini Oluşturma
Web Sitesini Oluşturma
Web Sitesini Oluşturmak
Web Sitesini Oluşturmak

Bunlar benim derlemem için kullandığım görüntüler, ancak kendinizinkini yapmaktan çekinmeyin. Hepsinin daha önce yaptığımız statik klasöre kaydedilmesi gerekiyor. Burada yapacağımız index.html dosyasının templates klasöründe olması gerekiyor. Bu oldukça önemli, aksi takdirde hiçbiri işe yaramaz. İşte index.html'imin kodu (yine, bu sadece basit bir html'dir, bu yüzden sizin için hangi şekilde çalışıyorsa onu değiştirin).

Instructables, ham HTML göndermeme izin vermediğinden, Dropbox'ımda olduğu gibi dosyaya bir bağlantı:

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

Ancak, bunun ölmesi durumunda, HTML dosyası sadece bir tür süslü CSS ve aşağıdaki gibi gönderi değerlerine sahip düğmeler olarak bu 4 simgeye sahip basit bir 2x2 tablodur:

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

Kendine bir tane yapmak oldukça kolay olmalı.

Son adım, webapp.py'nin başlangıçta çalıştığından emin olmak, yine bunu crontab'a ekleyerek yaptım. Bu yüzden bir kez daha crontab -e yazın ve sonuna aşağıdakini ekleyin:

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

Ardından pi'yi yeniden başlatın, başka bir makinedeki (telefonunuz) bir tarayıcıyı pi'nin IP'sine yönlendirin (en iyisi bunu statik hale getirebilirseniz) ve çalışıp çalışmadığına bakın. Düğmeleri tıklayın ve gürültü alıp almadığınızı görün.

Bir Android telefonda, bir web sitesini ana ekranınıza yer imlerine ekleyebilirsiniz; bu, bir uygulama gibi görünmesini ve hissetmesini sağlamak için bununla yaptım. Gerçekten "profesyonel" görünmesini istiyorsanız, uygun bir.ico dosyası bulun veya oluşturun ve web sitesine telefonunuzun ana ekranında görünecek ve daha çok bir uygulamaya benzeyen kendi simgesini verin. Bir web sitesine bir simgenin (favicon) nasıl ekleneceğine dair çevrimiçi birçok öğretici.

9. Adım: Her Şeyi Bir Kasaya Sıkıştırın

Her Şeyi Bir Kasaya Sıkıştırın
Her Şeyi Bir Kasaya Sıkıştırın
Her Şeyi Bir Kasaya Sıkıştırın
Her Şeyi Bir Kasaya Sıkıştırın
Her Şeyi Bir Kasaya Sıkıştırın
Her Şeyi Bir Kasaya Sıkıştırın

Artık her şey test edildiğine ve çalıştığına göre, hepsini bir davaya doldurmanın zamanı geldi.

Ahududu Pi Zero için evin etrafında kalan artık plastik kullanarak bir stand-off montajı yaptım. Daha sonra panel montajlı mikro USB için bazı delikler açtım ve bazı kuyumcu dosyalarını kullanarak delikten kareler oluşturdum. Panel montaj kablosu biraz sert, bu yüzden gelecekte bir ara Pi'deki mikro USB bağlantı noktası için dik açılı bir adaptör satın alabilirim.

İki delik delinerek ve bunları bir Dremel ile bağlayarak hoparlörün dışarı çıkması için kasanın üst kısmında küçük bir delik açtım. Ardından Hoparlör Phat'ı monte etmek için kapaktaki delikleri açın. Ne pahasına olursa olsun, bu fotoğrafı çektikten sonra geri döndüm ve birkaç delik daha açtım çünkü gürültü gerçekten kasanın içine hapsolmuştu. Blinkt'i bu poster macunu malzemesini kullanarak monte ettim çünkü şeyde montaj deliği yok, ama macun iyi tutuyor gibi görünüyor, bu yüzden işe yarayacak.

Adım 10: İşte Bu

Bu kadar!
Bu kadar!

Takın ve işiniz bitti. İşte benimki akşam 8'den sonra çalışıyor. Pi üzerindeki yeşil LED, bu fotoğrafın göründüğü kadar parlak değil.

Daha sonra yaptığım bazı düzenlemeler:

webapp.py ve index.html dosyalarına 4 sayfa daha ekledim. Bu 4 "kırmızı", "sarı", "yeşil" ve "kapalı"dır. Oldukça açıklayıcı. Karım ve ben ekstra yorgun hissediyorsak ve rahatsız edilmek istemiyorsak, onu yeşilden sarıya çevirebilmeyi istedim.

@app.route('/red', yöntemler = ['POST']) def red(): os.system("python ~/scripts/red.py") return yönlendirme('/')

Temel olarak 4 kez, 4 farklı komut dosyasını çalıştırarak, ardından dizinde bu sayfaları çağıran birkaç düğme daha.

Diğer değişikliği daha önce not etmiştim, ancak gürültü muhafazadan yeterince iyi kaçmadığı için biraz daha delik açtım ve hoparlörün etrafındaki mevcut açıklığı genişlettim.

Herhangi bir ek değişiklik yaparsam, buraya geri dönüp onları listeleyeceğimden emin olacağım.

11. Adım: Ek

Bunu yaptıktan sonra, çocuğu yatağa ya da kestirmeye bırakırken, eşim ve ben sık sık telefonlarımızı alt katta bıraktığımızı fark ettim. Bu nedenle, fiziksel pim 36'ya anlık bir basma düğmesi ekledim ve başlangıçta rc.local'da çalıştırmak için aşağıdaki kodu (buna button.py adını verdim) ekledim:

#!/usr/bin/env piton

RPi. GPIO'yu GPIO olarak içe aktar içe aktarma zamanı içe aktarma alt işlemi içe aktarma GPIO.setmode(GPIO. BOARD) yeniden içe aktar # Fiziksel Pin Numaralandırma Düzenini Kullan buton=36 # Buton fiziksel pin 16'ya bağlı GPIO.setup(button, GPIO. IN, pull_up_down =GPIO. PUD_UP) # Düğmeyi bir giriş yap, Doğru iken Çekme Direncini Etkinleştir: eğer GPIO.input(button)==0: # Düğmeye basmayı bekle geri dönprocess = False # Başlangıçta ses kapalı olacak şekilde ayarlandı s = subprocess. Popen(s.stdout'ta x için ["ps", "ax"], stdout=subprocess. PIPE): 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") işletim sistemi.system("python /home/pi/scripts/lightsout.py")

Gördüğünüz gibi, çok daha hafif ve kullanımı basit olduğu için omxplayer'dan mpg123'e de geçtim.

ANCAK, nedense bu betiği rc.local'a koyduğumda, başlangıçta sorunsuz bir şekilde çalışıyor. Ama ses gerçekten çok dalgalı. Komut dosyasını normal olarak çalıştırdığımda, macun içinde böyle bir sorun yok. Bu sorunu gidermek için çok uğraşıyorum, bu yüzden herhangi birinin herhangi bir fikri varsa, lütfen bana bildirin! Teşekkürler.

Önerilen: