İçindekiler:

Raspitone: Kullanımı Kolay Müzik Kutusu: 7 Adım
Raspitone: Kullanımı Kolay Müzik Kutusu: 7 Adım

Video: Raspitone: Kullanımı Kolay Müzik Kutusu: 7 Adım

Video: Raspitone: Kullanımı Kolay Müzik Kutusu: 7 Adım
Video: Очередной рейс (1958) фильм 2024, Aralık
Anonim
Raspitone: Kullanımı kolay Müzik Kutusu
Raspitone: Kullanımı kolay Müzik Kutusu

Merhaba, bir sonraki projem, eskiden yaptığım gibi pek kullanışlı olmayan bir proje:

Bu, Raspberry 3 B+ tabanlı bir müzik kutusu

Biliyorum, böyle bir şey bir akıllı telefon ve Bluetooth hoparlör ile kolayca yapılabilir.

Ancak projem için iki zor ön şartım vardı:

"Eski" bir şey yapmak istedim.

Ve genel olarak, leydimin 21. yüzyıldan (ve hatta 20. yüzyıldan) bilgisayar, bluetooth veya başka bir şey için kesinlikle umutsuz olduğu gerçeği göz önüne alındığında, kullanımı çok basit bir şey yapmak zorunda kaldım………

Yani, özellikler aşağıdaki gibiydi:

Makineyi başlatmak için tek bir basma düğmesi

Müziği yönetmek için bir dokunmatik ekran (çok basit).

Makineyi durdurmak için ekrana tek bir dokunuş.

Ve iyi bir sese sahip olmak için ………

Gereçler

Bunun için kullandım:

1 Ahududu 3 B+

DVD okuyucu OOS nedeniyle işe yaramayan 1 eski ev sineması (woofer'lı eski bir Samsung 2.1 ve kutuya sığacak şekilde değiştirdiğim 2 hoparlör)

1 HIFIBERRY DIGI+ kartı (güç Amplifikatörü için optik çıkışlı)

1 kapasitif dokunmatik ekran 7 (benimki HDMI girişli ahududu için Makeasy'dir ve USB ile çalışır, ancak herhangi bir HDMI dokunmatik ekran sorunsuz olmalıdır)

1 güç kaynağı 5V 5A

1 röle kalkanı

Güç AÇMA/KAPAMA sürecini yönetmek için 1 Arduino nano

1 IR, ev sinemasını sürmek için yol açtı (2N2222 NPN transistörü tarafından yönlendirilir)

1 IR alıcısı (projenin IR kodlarını öğrenme kısmı için, benimkini uzaktan komutla eski bir Multimedya sabit diskinden alıyorum)

3 led

Bakım modu için 1 anahtar

Arduino üzerinde çalışmak için 1 anahtar (yükleme sırasında arduino sıfırlanır)

bazı JST ve Dupont konektörleri

Ve kutu için

Ahşap ve kontrplak (ancak kutunun yapımını derinlemesine anlatmayacağım). Sadece kutunun içindeki boomer ile ilgili olarak, oyun oynarken Jukebox'ın oturma odasını geçmesini istemiyorsanız 10 mm kontrplak ve 18 mm ahşap zorunludur !!!!

Adım 1: Ahududu Parça Açıklaması:

Raspi'nin farklı şeyleri yönetmesi gerekiyor:

1) ev sinemasına giden komutlar (IR uzaktan kumanda aracılığıyla)

2) müzik dosyaları

3) dokunmatik ekran

4) Arduino'nun kalp atışı (Wdt'yi yöneten (izleme köpeği zamanlayıcı))

16 G SD kartta Raspbian strech dağıtımından başladım (Sadece SD karttan dosya okuyacağımız için HDD kullanımı gerekli değildir). Web bu konuda eğitimlerle dolu olduğu için bu kısımda zaman harcamayacağım..

Sonraki adımlarda farklı bölümleri görelim….

Adım 2: IR Uzaktan Kodları

Ev sinemasının devre planını bulamadığım için uzaktan kumanda ile sürmeye karar verdim.

Tamamlamam gereken ilk adım, Ev sineması uzaktan kumandasının kodlarını Raspi'ye öğrenmekti. Bunun için Austin Stanton IR kodlarından Instructables'taki çok iyi öğreticiyi kullandım.

Talimatlar oldukça eski olduğundan, muhtemelen yeni sürüm nedeniyle bazı farklılıklar vardı, Hardware.conf dosyası artık mevcut değil (en azından ben bulamadım)

Ayrıca öğreticide kullanılan transistör bir PNP transistörü gibi görünüyor, benim açımdan NPN olan bir 2N2222 kullandım ama sonuç aynı.(kablo hariç !!!!!!!!)

Pin ataması /boot/config.txt dosyasında verilmiştir:

#autorisation de lirc le 2019-07-08dtoverlay=lirc-rpi, gpio_out_pin=22, gpio_in_pin=23

IR LED'i Raspi'nin pin22'sine bağlanacaktır.

Önemli bir not: Raspi kodlarını öğrenirken komutta listelenen anahtar kelimeleri kullanmak zorunludur

kayıt dışı --list-ad alanı

Müzik kutum için oluşturduğum dosya:

pi@raspitone:/etc/lirc $ kedi lircd.conf

# Lütfen bu dosyayı # https://sourceforge.net/p/lirc-remotes/wiki/Check… # içinde açıklandığı gibi bitirmek için zaman ayırın ve # # adresine göndererek başkalarının kullanımına açın.

# Bu yapılandırma dosyası otomatik olarak oluşturuldu

# kullanarak lirc-0.9.4c(varsayılan) 9 Mayıs Perşembe 17:33:37 2019 # Kullanılan komut satırı: -d /dev/lirc0 /root/lircd.conf

# Çekirdek sürümü (uname -r): 4.14.98-v7+ # # Uzak ad (yapılandırma dosyası itibariyle): jukebox

# Uzak cihazın markası, elinizde tuttuğunuz şey: # Uzak cihazın model numarası:

# Uzak cihaz bilgisi url'si:

# Uzak cihazda paketlenmiş bir yakalama cihazı var mı e. g., bir

#usb dongle'ı?:

# Birlikte verilen USB cihazları için: usb satıcı kimliği, ürün kimliği

# ve aygıt dizesi (dmesg veya lsusb kullanın):

# Kontrol edilen cihaz tipi

# (TV, VCR, Ses, DVD, Uydu, Kablo, HTPC, …):

# Bu uzaktan kumandayla kontrol edilen cihaz(lar):

uzaktan başla

isim müzik kutusu

bit 16

bayraklar SPACE_ENC|CONST_LENGTH

eps 30

aeps 100

başlık 4470 4496

bir 542 1693

sıfır 542 581

ptrail 553

pre_data_bits 16

pre_data 0xC2CA

boşluk 107863

toggle_bit_mask 0x0

frekans 38000

kodları başlat

KEY_POWER 0x807F

KEY_AUX 0x8877

KEY_VOLUMEUP 0xCC33

KEY_VOLUMEDOWN 0xDC23

bitiş kodları

uzaktan kumandayı sonlandır

Gördüğünüz gibi, Ev Sinemasını sürmek için sadece 4 komuta ihtiyacım var

Güç açık / kapalı)

AUX => optik giriş kanalına geçmek için (HC her zaman DVD okuyucuda başladığından)

Ve Hacim +/-

İlgili komutlar LIRC komutları aracılığıyla yürütülür:

örneğin: "SEND_ONCE müzik kutusunu KEY_VOLUMEUP irsend"

Adım 3: Ana Program

Ana program Python'da yazılmıştır:

Python'da yeni olduğum için yapılabilecek çok fazla iyileştirme olduğunu tahmin ediyorum, ancak çalışıyor….

Özellikler:

1) grafik ekranı yönetin:

Bunun için TKINTER olan ancak öğrenci için uygar olan APPJAR'ı kullandım (benim durumum) bu, kullanımı çok daha kolay, muhtemelen daha az imkanla, ancak amacıma yetti.

2) mp3 dosyalarını oynatın:

Python için mplayer kullandım.

3) karışık modda oynamak için rastgele sayılar oluşturun:

Her üç ayda bir aynı şarkıyı duymak istemediğimden, numaranın önceki x numaralar listesinde olup olmadığını kontrol etmek için küçük bir program oluşturdum (x çalma listesinin uzunluğuna bağlı olarak).

Python'daki randint işlevi, gördüğüm kadar "rastgele" değil.

4) "kalp atışını" Arduino'ya gönderin

5) dosya oynatıcısını yönetin:

Mplayer eşzamansız olduğundan, dosya başlatıldığında Python'un bittiğini bilmenin bir yolu yoktur (en azından basit bir yol bulamadım)

Bunu çözmek için dosyanın uzunluğunu ve mevcut dosyadaki ilerlemeyi veren mplayer komutlarını kullandım.

Hem 4 hem de 5 için, periyodik bir görev oluşturmak için Appjar tarafından verilen olasılığı kullandım (appjar bir olay programı olduğundan, bu, periyodik bir olay yaratmanın bir yoludur). işlev:

#*********************** görev adamını başlat *************************app.registerEvent(görev adamı)

p.setPollTime(1000)

Ekranda olmayan tüm olayları yöneten programda bir tanım olan "görev yöneticisi" için Görev Adamı (oynatılan dosyanın sonu, ilerleme çubuğunu doldurma, Nano'ya kalp atışı gönderme, ….)

Başladıktan sonra ekran şöyle görünür:

resim
resim

İşte program:(Notepad++ veya Geany ile açılabilir)

Adım 4: Ahududu Bölümü:otomatik başlatma ve Yeni Dosya Ekleme

Programa bakarsanız, bazı bash dosyalarını kullandığımı görebilirsiniz:

1) Start_jukebox:

Aslında amaç Ev sinemasını açmak ve D. IN girişine geçmektir (Ev sinemamdaki optik giriş)

pi@raspitone:/bin $ kedi start_jukebox#!/bin/bash

SEND_ONCE müzik kutusunu gönder KEY_POWER

uyku 7

SEND_ONCE müzik kutusunu KEY_AUX gönder

uyku 2

2) stop_jukebox:

Ev sinemasını kapatmak için

pi@raspitone:/bin $ kedi stop_jukebox

#!/bin/bash

SEND_ONCE müzik kutusunu gönder KEY_POWER

Bu iki bash dosyası Python tarafından os.system komutuyla çağrılır.

Python betiğini başlatmak için küçük bir bash yaptım

pi@raspitone:~ $ kedi dem_jukebox.bash#!/bin/bash

cd /ev/pi

python jukebox_gui.py

GUI modunda otomatik başlatma için /etc/xdg/lxsession/LXDE-pi içindeki otomatik başlatma dosyasını değiştirdim

pi@raspitone:/etc/xdg/lxsession/LXDE-pi $ cat autostart@lxpanel --profile LXDE-pi

@pcmanfm --desktop --profil LXDE-pi

@xscreensaver -sıçrama yok

@lxterminal --command="dem_jukebox.bash"

nokta-rpi

Yeni mp3 dosyaları ekleme:

Yeni dosyalar eklemek için küçük bir Python betiği oluşturmayı tercih ettim:

new_song_file.py

Önce sistem dosyalarının organizasyonunu anlatacağım:

Tüm dosyalar /home/pi dizinindedir

mp3 dosyaları /home/pi/Music dizininde saklanır

Her sanatçının ilgili mp3 dosyalarını barındıran kendi alt dizini vardır.

pi@raspitone:~/Music/Mike_oldfield $ ls -ltoplam 760516

-rwxr----- 1 pi pi 2254923 haziran 30 2017 A_New_Beginning.mp3

-rwxr----- 1 pi pi 2691736 haziran 30 2017 Arrival.mp3

-rwxr----- 1 pi pi 8383244 haziran 30 2017 Ascension.mp3

-rwxr----- 1 pi pi 5410816 haziran 30 2017 Blue_Night.mp3

-rwxr----- 1 pi pi 13125199 haziran 30 2017 Castaway_(Instrumental).mp3

-rwxr----- 1 pi pi 12903583 haziran 30 2017 Castaway.mp3

-rwxr----- 1 pi pi 2969869 haziran 30 2017 Celt.mp3

-rwxr----- 1 pi pi 9047745 haziran 30 2017 Chariots_(Instrumental).mp3

-rwxr----- 1 pi pi 9403263 haziran 30 2017 Chariots.mp3

Belgeler dizininde oynatılacak dosyaların yerleşik listesini bulabiliriz.

pi@raspitone:~/Belgeler $ kedi listesi.txtFranz_Ferdinand/Michael_live.mp3

Franz_Ferdinand/evil_and_a_heathen.mp3

Franz_Ferdinand/Walk_Away_live.mp3

Franz_Ferdinand/love_and_destroy.mp3

Franz_Ferdinand/his_fffire.mp3

Franz_Ferdinand/eleanor_put_your_boots_on.mp3

Franz_Ferdinand/missing_you.mp3

Franz_Ferdinand/this_fire_(playgroup_remix).mp3

Franz_Ferdinand/Jacqueline.mp3

Çalma listesi verilerini de bulabiliriz (ancak bu Python betiği tarafından oluşturulmuştur)

Küçük Python betiği, başlıkları UNIX biçiminde biçimlendirdikten sonra, Müzik'e kaydedilen yeni şarkıları list.txt dosyasına ekler.

İşte betik:(Notepad++ veya Geany ile açılabilir)

Adım 5: Arduino Nano Üzerinden Güç Yönetimi

Başlaması kolay bir şeye sahip olmak istediğim için küçük bir nano ile yapmaya karar verdim:

İlke:

Başlat düğmesine basıldığında tüm cihazlara güç sağlanır, nano başlatılır (1 veya 2 saniye) ve düğme kontaklarını şöntleyen bir röleyi tetikleyerek güç yönetimini devralır.

Ardından Nano, Raspberry'den kalp atışını almak için 35 saniye bekler (başlatma işleminin tamamlandığı ve müzik kutusu programının çalıştığı anlamına gelir).

Nano kalp atışını aldığı sürece röleyi açık tutar (Watch dog timer)

Artık kalp atışı yoksa (müzik kutusu programının durduğu anlamına gelir) Nano, güç rölesini serbest bırakmak için 20 saniye (raspi'nin tamamen durduğundan emin olmak için) bekler.

Müzik kutusu daha sonra tamamen kapatılır

Bakım modunu belirtmek için nano girişini etkinleştirmek için bir anahtar ekledim (diğer raspi sunucularımı ssh et vnc aracılığıyla yönetmek için müzik kutusunu kullanıyorum). Nano daha sonra bekçi köpeği sürecini devre dışı bırakır

Açıklama:

Raspi'den gelen kalp atışı girişinin aşağı çekilmesi gerekiyor (ancak Raspi'den gelen 3.3V, Nano tarafından yüksek seviye olarak kabul ediliyor)

NE555 ile yapılabilir ama tembelim ve çekmecemde her zaman biraz nano var !!!!

İşte kısa C programı (Notepad++ ile açılabilir)

Adım 6: Kablolama

Kablolama
Kablolama
Kablolama
Kablolama

Ekran için:

Raspi'de ekranı çalıştırmak ve çalıştırmak için bir HDMI kablosu ve bir USB kablosu kullanılır.

Ön panel için:

Yeni dosyalar yükleyebilmek veya yedekleme yapabilmek için Raspi'den bir USB kablosu da bağlanır.

Yazılıma erişebilmek için Nano'dan bir USB kablosu bağlanır (gerekirse değişiklikler için)

Ayrıca harici USB fişini kullanmadan bakım yapabilmek için ahududuya kablosuz klavye dongle takıyorum.

Raspberry ve Arduino kullanıldığı için kablolama oldukça basittir.

Hepsi bir şerit matris kartında bulunur.

Ahudududan 2 GPIO kullanılır:

IR LED için Pin22

Arduino'ya kalp atışı için Pin 27

Arduino'da

Pin 2, Raspi'den gelen kalp atışı için bir kesme pini olarak kullanılır.

3 ila 5 arası pinler ledleri sürmek için kullanılır (Start, Wdt, Maintenance).

Pim 6 bakım anahtarı içindir.

Pin 7, röle kalkanına çıkıştır.

İşte fritzing dosyası:

7. Adım: Kutu

Kutu
Kutu

Güç amplifikatörüne ve kullanılan hoparlörlere bağlı olduğu için ne yaptığımı çok fazla açıklamayacağım.

Bilgi olarak ev sineması kutunun altında bulunur.

Hoparlörlerin hemen üzerinde:

1 woofer

Kutuya yerleştirmek için değiştirdiğim 2 orta boy hoparlör.

Yukarıda:

Ekranlı ön panel, LED'ler, anahtarlar ve USB fişleri.

Odun:

Hoparlörler için yan paneller üstte ve altta 18 mm ahşap tahta kullandım.

Ön taraf 40 mm vidalı 10 mm kontrplaktır.

Kablolama ve bakımı kolaylaştırmak için (gerekirse!!!) Devreyi ön panelin arkasındaki bir çekmeceye koydum.

Aşırı ısınmayı önlemek için arka panelin altına büyük bir delik açıldı ve arka panele devrenin hemen yanına 5V'luk bir fan (8 cm) koydum.

Yukarıdaki resim sadece fikir vermek içindir.

Yani bu kadar !!!!!!!!!

beni okuduğunuz için teşekkür ederim

Ve bir dahaki sefere yeni maceralarda görüşmek üzere

Önerilen: