Spisu treści:

Raspitone: łatwy w użyciu Jukebox: 7 kroków
Raspitone: łatwy w użyciu Jukebox: 7 kroków

Wideo: Raspitone: łatwy w użyciu Jukebox: 7 kroków

Wideo: Raspitone: łatwy w użyciu Jukebox: 7 kroków
Wideo: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, Lipiec
Anonim
Raspitone: łatwy w użyciu Jukebox
Raspitone: łatwy w użyciu Jukebox

Witam, mój następny projekt jest, jak zwykle, niezbyt przydatnym projektem:

To szafa grająca oparta na Raspberry 3 B+

Wiem, coś takiego można łatwo zrobić za pomocą smartfona i głośnika Bluetooth.

Ale w przypadku mojego projektu miałem dwa trudne warunki wstępne:

Chciałem zrobić coś „vintage”.

I ogólnie biorąc, biorąc pod uwagę fakt, że moja pani jest definitywnie beznadziejna dla komputera, bluetooth lub czegokolwiek innego z XXI wieku (a nawet XX), musiałem zrobić coś bardzo prostego w obsłudze…

Tak więc specyfikacje były następujące:

Jeden pojedynczy przycisk do uruchomienia maszyny

Ekran dotykowy (bardzo prosty) do zarządzania muzyką.

Jedno dotknięcie ekranu, aby zatrzymać maszynę.

I mieć dobry dźwięk ………

Kieszonkowe dzieci

Do tego użyłem:

1 Malina 3 B+

1 stare kino domowe, które było bezużyteczne ze względu na czytnik DVD OOS (stary Samsung 2.1 z głośnikiem niskotonowym i 2 głośnikami, które zmodyfikowałem tak, aby pasowały do pudełka)

1 płyta HIFIBERRY DIGI+ (z wyjściem optycznym dla wzmacniacza mocy)

1 pojemnościowy ekran dotykowy 7 (mój to Makeasy for Raspberry z wejściem HDMI i zasilaniem przez USB, ale każdy ekran dotykowy HDMI powinien być w porządku)

1 zasilacz 5V 5A

1 osłona przekaźnika

1 Arduino nano do zarządzania procesem włączania/wyłączania zasilania

1 dioda IR do sterowania kinem domowym (doprowadzona przez tranzystor NPN 2N2222)

1 odbiornik IR (do nauki kodów IR w ramach projektu otrzymuję swój ze starego multimedialnego dysku twardego z pilotem)

3 diody

1 przełącznik trybu konserwacji

1 przełącznik do pracy na arduino (podczas wgrywania arduino jest resetowane)

niektóre złącza JST i Dupont

I za pudełko

Drewno i sklejka (ale nie będę szczegółowo opisywał wykonania pudełka). wystarczy powiedzieć, że jeśli chodzi o boomer wewnątrz pudełka, 10 mm sklejki i 18 mm drewna są obowiązkowe, jeśli nie chcesz widzieć Jukeboxa przechodzącego przez salon podczas gry!!!!

Krok 1: Opis części Raspberry:

Raspi musi zarządzać różnymi rzeczami:

1) komendy do kina domowego (za pomocą pilota IR)

2) pliki muzyczne

3) ekran dotykowy

4) Bicie serca Arduino (które zarządza Wdt (zegarem zegarka))

Zacząłem od dystrybucji Raspbian strech na karcie SD 16G (ponieważ będziemy czytać tylko pliki z karty SD, użycie HDD nie jest konieczne). Nie będę spędzał czasu na tej części, ponieważ sieć jest pełna korepetycji na ten temat..

Zobaczmy różne części w kolejnych krokach….

Krok 2: Kody pilota na podczerwień

Ponieważ nie mogłem znaleźć planu obwodu kina domowego, postanowiłem sterować nim za pomocą zdalnych poleceń

Pierwszym krokiem, który musiałem wykonać, było nauczenie się Raspi kodów zdalnego polecenia kina domowego. W tym celu użyłem bardzo dobrego samouczka w Instruktażach z kodów IR Austina Stantona

Miałem pewne różnice, prawdopodobnie z powodu nowej wersji, ponieważ instrukcje są dość stare, plik hardware.conf już nie istnieje (przynajmniej go nie znalazłem)

Wydaje się również, że tranzystor użyty w tuto jest tranzystorem PNP, ze swojej strony użyłem 2N2222, który jest NPN, ale wynik jest taki sam (z wyjątkiem okablowania !!!!!!!)

Przypisanie pinów jest podane w /boot/config.txt:

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

Dioda podczerwieni zostanie tak podłączona do pinu 22 Raspi.

Jedna ważna uwaga: podczas nauki kodów Raspi obowiązkowe jest użycie słów kluczowych wymienionych w poleceniu

irrecord --list-namespace

Oto plik, który zbudowałem dla mojej szafy grającej:

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

# Poświęć trochę czasu na ukończenie tego pliku, jak opisano w # https://sourceforge.net/p/lirc-remotes/wiki/Check… # i udostępnij go innym, wysyłając go do # #

# Ten plik konfiguracyjny został wygenerowany automatycznie

# używanie lirc-0.9.4c(default) w czwartek 9 maja 17:33:37 2019 # Użyta linia poleceń: -d /dev/lirc0 /root/lircd.conf

# Wersja jądra (uname -r): 4.14.98-v7+ # # Zdalna nazwa (od pliku konfiguracyjnego): jukebox

# Marka zdalnego urządzenia, rzecz, którą trzymasz w dłoni: # Model zdalnego urządzenia nr:

# Adres URL informacji o zdalnym urządzeniu:

# Czy zdalne urządzenie ma dołączone urządzenie przechwytujące? g., a

# klucz USB?:

# W przypadku dołączonych urządzeń USB: identyfikator dostawcy USB, identyfikator produktu

# i ciąg urządzenia (użyj dmesg lub lsusb):

# Rodzaj kontrolowanego urządzenia

# (TV, magnetowid, audio, DVD, satelita, kabel, HTPC, …):

# Urządzenia sterowane za pomocą tego pilota:

zacznij zdalnie

nazwa szafy grającej

bity 16

flagi SPACE_ENC|CONST_LENGTH

eps 30

aeps 100

nagłówek 4470 4496

jeden 542 1693

zero 542 581

ptrail 553

pre_data_bits 16

pre_data 0xC2CA

przerwa 107863

toggle_bit_mask 0x0

częstotliwość 38000

rozpocznij kody

KEY_POWER 0x807F

KEY_AUX 0x8877

KEY_VOLUMEUP 0xCC33

KEY_VOLUMEDOWN 0xDC23

kody końcowe

koniec pilota

Jak widać, do kierowania kinem domowym wystarczą 4 polecenia

Zasilanie włącz / wyłącz)

AUX => przełączanie na optyczny kanał wejściowy (ponieważ HC zawsze uruchamia się na czytniku DVD)

I głośność +/-

Powiązane polecenia są wykonywane za pomocą poleceń LIRC:

na przykład: "irsend SEND_ONCE jukebox KEY_VOLUMEUP"

Krok 3: Program główny

Główny program jest napisany w Pythonie:

Ponieważ jestem nowy w Pythonie, myślę, że można zrobić wiele ulepszeń, ale działa….

Specyfikacja:

1) zarządzać ekranem graficznym:

Do tego wykorzystałem APPJAR czyli TKINTER ale cywilizowany dla studenta (mój przypadek) oznacza to dużo łatwiejszy w obsłudze, prawdopodobnie z mniejszymi możliwościami, ale do moich celów wystarczył.

2) odtwarzać pliki mp3:

Użyłem mplayera dla Pythona.

3) generuj losowe liczby do gry w trybie losowym:

Ponieważ nie chciałem słyszeć tej samej piosenki co kwartał, zbudowałem mały program do sprawdzania, czy numer nie występuje na liście x poprzednich numerów (x w zależności od długości playlisty).

Funkcja randint w Pythonie nie jest tak "losowa", o ile widziałem.

4) wyślij "bicie serca" do Arduino

5) zarządzać odtwarzaczem plików:

Ponieważ Mplayer jest asynchroniczny, kiedy plik jest uruchamiany, nie ma możliwości sprawdzenia, czy Python jest gotowy (przynajmniej nie znalazłem prostego sposobu)

Aby rozwiązać ten problem, użyłem poleceń mplayer podających długość pliku i postęp w bieżącym pliku

Zarówno w przypadku 4, jak i 5 wykorzystałem daną przez Appjara możliwość wygenerowania zadania okresowego (ponieważ appjar jest programem zdarzeń, jest to sposób na utworzenie zdarzenia okresowego). funkcja to:

#******************** uruchom Taskmana **********************app.registerEvent(taskman)

p.setPollTime(1000)

Taskman dla "menedżera zadań", który jest def w programie zarządzającym wszystkim, co nie jest zdarzeniami ekranowymi (koniec odtwarzanego pliku, wypełnianie paska postępu, wysyłanie bicia serca do Nano, ….)

Po uruchomieniu ekran wygląda tak:

Obraz
Obraz

Oto program: (można go otworzyć za pomocą Notepad ++ lub Geany)

Krok 4: Część Raspberry: autostart i dodawanie nowych plików

Jeśli spojrzysz na program, zobaczysz, że używam kilku plików bash:

1) Start_jukebox:

W rzeczywistości celem jest włączenie kina domowego i przejście na wejście D. IN (wejście optyczne w moim kinie domowym)

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

irsend SEND_ONCE szafa grająca KEY_POWER

spać 7

irsend SEND_ONCE szafa grająca KEY_AUX

spać 2

2) stop_jukebox:

Aby wyłączyć kino domowe

pi@raspitone:/bin $ kot stop_jukebox

#!/kosz/bash

irsend SEND_ONCE szafa grająca KEY_POWER

Te dwa pliki bash są wywoływane przez Pythona za pomocą polecenia os.system

Aby uruchomić skrypt Pythona zrobiłem mały bash

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

cd /home/pi

python jukebox_gui.py

Do auto startu w trybie GUI właśnie zmodyfikowałem plik autostartu w /etc/xdg/lxsession/LXDE-pi

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

@pcmanfm --desktop --profile LXDE-pi

@xscreensaver - bez powitania

@lxterminal --command="dem_jukebox.bash"

punkt-rpi

Dodawanie nowych plików mp3:

Aby dodać nowe pliki, wolałem zrobić mały dedykowany skrypt Pythona:

nowa_piosenka_plik.py

Najpierw wyjaśnię organizację plików systemowych:

Wszystkie pliki znajdują się w /home/pi

Pliki mp3 są przechowywane w katalogu /home/pi/Music

Każdy artysta ma swój własny podkatalog, w którym znajdują się powiązane pliki mp3

pi@raspitone:~/Muzyka/Mike_oldfield $ ls -ltotal 760516

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

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

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

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

-rwxr----- 1 pi pi 13125199 juin 30 2017 Rozbitek_(Instrumental).mp3

-rwxr----- 1 pi pi 12903583 30 czerwca 2017 Rozbitek.mp3

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

-rwxr----- 1 pi pi 9047745 juin 30 2017 Rydwany_(Instrumental).mp3

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

W katalogu Dokumenty możemy znaleźć zbudowaną listę plików do odtworzenia.

pi@raspitone:~/Dokumenty $ lista kotów.txtFranz_Ferdinand/Michael_live.mp3

Franz_Ferdinand/zło_i_pogan.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

Możemy również znaleźć dane list odtwarzania (ale są one tworzone przez skrypt Pythona)

Mały skrypt Pythona dodaje nowe utwory zapisane w Muzyce w pliku list.txt po sformatowaniu tytułów w formacie UNIX

Oto skrypt: (można go otworzyć za pomocą Notepad ++ lub Geany)

Krok 5: Zarządzanie energią przez Arduino Nano

Ponieważ chciałem mieć coś łatwego na start, postanowiłem zrobić to małym nano:

Zasada:

Po naciśnięciu przycisku start wszystkie urządzenia są zasilane, nano uruchamia się (1 lub 2 sekundy) i przejmuje zarządzanie energią poprzez wyzwolenie przekaźnika, który bocznikuje styki przycisku.

Następnie Nano czeka przez 35 sekund na otrzymanie bicia serca z Raspberry (oznacza to, że proces uruchamiania został zakończony i program jukebox działa).

Dopóki nano odbiera bicie serca, utrzymuje przekaźnik włączony (zegar Watch dog)

Jeśli nie ma już bicia serca (oznacza to, że program szafy grającej jest zatrzymany) Nano czeka przez 20 sekund (aby mieć pewność, że raspi jest całkowicie zatrzymany), aby zwolnić przekaźnik mocy.

Szafa grająca jest wtedy całkowicie wyłączona

Dodałem przełącznik, aby aktywować wejście nano, aby wskazać tryb konserwacji (używam szafy grającej do zarządzania moimi innymi serwerami raspi przez ssh et vnc). Nano następnie dezaktywuje proces Watch Dog

Uwaga:

wejście dla bicia serca z Raspi musi zostać ściągnięte (ale 3,3 V z Raspi jest uważane za wysoki poziom przez Nano)

Dałoby się to zrobić z NE555, ale jestem leniwy i zawsze mam w szufladzie trochę nano !!!!

Oto krótki program w C (można go otworzyć za pomocą Notepad ++)

Krok 6: Okablowanie

Okablowanie
Okablowanie
Okablowanie
Okablowanie

Na ekranie:

Kabel HDMI i kabel USB są używane w Raspi do zasilania i obsługi ekranu.

Dla panelu przedniego:

Kabel USB jest również podłączony do Raspi, aby móc przesyłać nowe pliki lub tworzyć kopie zapasowe.

Kabel USB jest podłączony z Nano, aby móc uzyskać dostęp do oprogramowania (w razie potrzeby do modyfikacji)

Podłączam również klucz sprzętowy klawiatury bezprzewodowej do maliny, aby móc dokonywać konserwacji bez użycia zewnętrznej wtyczki USB

Ponieważ używane są Raspberry i Arduino, okablowanie jest dość proste.

Całość znajduje się na płycie matrycy paskowej.

Z malin 2 GPIO stosowane są:

Pin22 dla diody podczerwieni

Pin 27 dla bicia serca do Arduino

na Arduino

Pin 2 jest używany jako pin przerwania dla bicia serca z Raspi.

Piny 3 do 5 służą do sterowania diodami (Start, Wdt, Konserwacja).

Pin 6 jest dla przełącznika serwisowego.

Pin 7 jest wyprowadzony na ekran przekaźnika.

Oto skręcający się plik:

Krok 7: Pudełko

Pudełko
Pudełko

Nie będę dużo opisywał, co zrobiłem, ponieważ zależy to od wzmacniacza mocy i użytych głośników.

Informacyjnie kino domowe znajduje się w dolnej części pudełka.

Tuż nad głośnikami:

1 głośnik niskotonowy

2 średnie głośniki, które zmodyfikowałem, aby wstawić je do pudełka.

Na szczycie:

Panel przedni z ekranem, diodami LED, przełącznikami i wtyczkami USB.

Drewno:

W przypadku głośników, paneli bocznych górną i dolną użyłem deski drewnianej 18 mm.

Przód to sklejka 10 mm z wkrętami 40 mm.

Aby ułatwić okablowanie i konserwację (w razie potrzeby!!!) położyłem obwody na szufladzie za panelem przednim

Aby uniknąć przegrzania, w dolnej części tylnego panelu zrobiono duży otwór, a na tylnym panelu, tuż obok obwodów, umieściłem wentylator 5V (8 cm).

Powyższy obrazek ma tylko dać pomysł.

Więc to jest to !!!!!!!!!

Dziękuję za przeczytanie mnie

I do zobaczenia następnym razem na nowe przygody

Zalecana: