Cuprins:

Raspitone: Jukebox ușor de utilizat: 7 pași
Raspitone: Jukebox ușor de utilizat: 7 pași

Video: Raspitone: Jukebox ușor de utilizat: 7 pași

Video: Raspitone: Jukebox ușor de utilizat: 7 pași
Video: Голубая стрела (1958) фильм 2024, Noiembrie
Anonim
Raspitone: Jukebox ușor de utilizat
Raspitone: Jukebox ușor de utilizat

Bună ziua, următorul meu proiect este, așa cum făceam, un proiect nu foarte util:

Acesta este un tonomat bazat pe un Raspberry 3 B +

Știu, așa ceva se poate face cu ușurință cu un smartphone și un difuzor Bluetooth.

Dar pentru proiectul meu, aveam două condiții prealabile:

Am vrut să fac ceva „vintage”.

Și, în general, dat fiind faptul că doamna mea este definitiv lipsită de speranță pentru computer sau bluetooth sau orice altceva din secolul al XXI-lea (și chiar al XX-lea), a trebuit să fac ceva foarte simplu de utilizat …

Deci, specificațiile au fost după cum urmează:

Un singur buton pentru a porni aparatul

Un ecran tactil (foarte simplu) pentru a gestiona muzica.

O singură atingere pe ecran pentru a opri aparatul.

Și pentru a avea un sunet bun ………

Provizii

Pentru aceasta am folosit:

1 Zmeură 3 B +

1 home cinema vechi care a fost inutil datorită cititorului de DVD OOS (un Samsung 2.1 vechi cu woofer și 2 difuzoare pe care le-am modificat pentru a se potrivi la cutie)

1 placă HIFIBERRY DIGI + (cu ieșire optică pentru amplificatorul de putere)

1 ecran tactil capacitiv de 7 (al meu este Makeasy pentru zmeură cu intrare HDMI și alimentat prin USB, dar orice ecran tactil HDMI ar trebui să fie OK)

1 alimentare de alimentare 5V 5A

1 scut de releu

1 Arduino nano pentru a gestiona procesul de pornire / oprire

1 led IR pentru a conduce home cinema (condus de un tranzistor 2N2222 NPN)

1 receptor IR (pentru o parte a proiectului de învățare a codurilor IR, o primesc pe a mea de pe un hard disk multimedia vechi cu comandă de la distanță)

3 led-uri

1 comutator pentru modul de întreținere

1 comutator pentru lucrul pe arduino (în timpul încărcării, arduino este resetat)

niște conectori JST și Dupont

Și pentru cutie

Lemn și placaj (dar nu voi descrie profund realizarea cutiei). doar să spun că, în ceea ce privește boomerul din interiorul cutiei, placajul de 10 mm și lemnul de 18 mm sunt obligatorii dacă nu doriți să vedeți Jukebox traversând camera de zi în timp ce jucați !!!!

Pasul 1: Descrierea piesei zmeură:

Raspi trebuie să gestioneze diferite lucruri:

1) comenzile către home cinema (prin telecomandă IR)

2) fișierele muzicale

3) ecranul tactil

4) Bătăile inimii către Arduino (care gestionează Wdt (cronometrul câinelui de supraveghere))

Am început de la o distribuție Raspbian strech pe un card SD de 16 G (Deoarece vom citi doar fișiere de pe cardul SD, nu este necesară utilizarea unui HDD). Nu voi petrece timp pe această parte, deoarece web-ul este plin de tuto despre asta..

Să vedem diferitele părți în pașii următori ….

Pasul 2: Codurile de la distanță IR

Deoarece nu am putut găsi planul de circuit al home cinema-ului, am decis să îl conduc prin intermediul comenzilor de la distanță

Primul pas pe care a trebuit să-l parcurg a fost să învăț să Raspi codurile comenzii de la distanță Home cinema.

Am avut unele diferențe, probabil din cauza versiunii noi, deoarece instructabilele sunt destul de vechi, fișierul hardware.conf nu mai există (cel puțin nu l-am găsit)

Se pare, de asemenea, că tranzistorul utilizat în tuto este un tranzistor PNP, din partea mea am folosit un 2N2222 care este NPN, dar rezultatul este același. (Cu excepția cablării !!!!!!!!)

Alocarea pinului este dată în /boot/config.txt:

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

LED-ul IR va fi astfel conectat la pinul 22 al Raspi.

O remarcă importantă: atunci când învățați codurile către Raspi, este obligatoriu să utilizați cuvintele cheie enumerate în comandă

irrecord --list-namespace

Iată fișierul pe care l-am construit pentru tonomatul meu:

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

# Vă rugăm să luați timp pentru a finaliza acest fișier așa cum este descris în # https://sourceforge.net/p/lirc-remotes/wiki/Check… # și puneți-l la dispoziția altora, trimițându-l la # #

# Acest fișier de configurare a fost generat automat

# folosind lirc-0.9.4c (implicit) pe Joi 9 mai 17:33:37 2019 # Linia de comandă utilizată: -d / dev / lirc0 /root/lircd.conf

# Versiunea kernel (uname -r): 4.14.98-v7 + # # Numele la distanță (conform fișierului de configurare): jukebox

# Marca dispozitivului la distanță, ceea ce ții în mână: # Modelul dispozitivului la distanță nr:

# Adresa URL a informațiilor dispozitivului la distanță:

# Dispozitivul la distanță are un dispozitiv de captare la pachet e. g., a

# USB dongle?:

# Pentru dispozitive USB incluse: codul furnizorului USB, codul produsului

# și șirul dispozitivului (utilizați dmesg sau lsusb):

# Tipul dispozitivului controlat

# (TV, VCR, Audio, DVD, Satelit, Cablu, HTPC, …):

# Dispozitive controlate de această telecomandă:

începe la distanță

nume tonomat

biții 16

steaguri SPACE_ENC | CONST_LENGTH

eps 30

aeps 100

antet 4470 4496

unul 542 1693

zero 542 581

ptrail 553

pre_data_bits 16

pre_data 0xC2CA

107863

toggle_bit_mask 0x0

frecvența 38000

începe codurile

KEY_POWER 0x807F

KEY_AUX 0x8877

KEY_VOLUMEUP 0xCC33

KEY_VOLUMEDOWN 0xDC23

coduri finale

terminați la distanță

După cum puteți vedea, am nevoie doar de 4 comenzi pentru a conduce Home Cinema

Putere (PORNIT / OPRIT)

AUX => pentru a comuta la canalul de intrare optică (deoarece HC pornește întotdeauna pe cititorul de DVD)

Și Volumul +/-

Comenzile aferente sunt executate prin comenzile LIRC:

de exemplu: „irsend SEND_ONCE jukebox KEY_VOLUMEUP”

Pasul 3: Programul principal

Programul principal este scris în Python:

Deoarece sunt nou în Python, cred că se pot face multe îmbunătățiri, dar rulează …

Specificațiile:

1) gestionați ecranul grafic:

Pentru aceasta, am folosit APPJAR care este TKINTER dar civilizat pentru student (cazul meu), asta înseamnă mult mai ușor de utilizat, probabil cu mai puține posibilități, dar a fost suficient pentru scopul meu.

2) redați fișierele mp3:

Am folosit mplayer pentru python.

3) generați numere aleatorii pentru redare în modul shuffle:

Deoarece nu am vrut să aud aceeași melodie în fiecare trimestru, am construit un mic program pentru a verifica dacă numărul nu era prezent în lista de numere anterioare x (x în funcție de lungimea listei de redare).

Funcția randint în python nu este atât de "aleatorie" din câte am văzut.

4) trimiteți „bătăile inimii” către Arduino

5) gestionați fișierele player:

Deoarece Mplayer este asincron, când fișierul este pornit nu există nicio modalitate de a ști pentru Python când este terminat (cel puțin nu am găsit o modalitate simplă)

Pentru a rezolva acest lucru, am folosit comenzile mplayer care indică lungimea fișierului și progresul în fișierul curent

Atât pentru 4 cât și pentru 5 am folosit posibilitatea dată de Appjar de a genera o sarcină periodică (deoarece appjar este un program de evenimente, acesta este un mod de a crea un eveniment periodic). funcția este:

# ******************* începe taskman ********************* app.registerEvent (taskman)

p.setPollTime (1000)

Taskman pentru „task manager”, care este o definiție a programului care gestionează toate evenimentele de pe ecran (sfârșitul fișierului redat, completează bara de progres, trimite bătăile inimii către Nano,…)

Odată pornit, ecranul arată astfel:

Imagine
Imagine

Iată programul: (poate fi deschis prin Notepad ++ sau Geany)

Pasul 4: Raspberry Part: pornire automată și adăugarea de fișiere noi

Dacă vă uitați la program, puteți vedea că folosesc câteva fișiere bash:

1) Start_jukebox:

De fapt, scopul este de a porni Home Cinema și de a trece la intrarea D. IN (intrare optică în Home Cinema)

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

trimite SEND_ONCE tonomat KEY_POWER

dormi 7

trimiteți SEND_ONCE tonomatul KEY_AUX

dormi 2

2) stop_jukebox:

Pentru a opri Home Cinema

pi @ raspitone: / bin $ cat stop_jukebox

#! / bin / bash

trimite SEND_ONCE tonomat KEY_POWER

Aceste două fișiere bash sunt apelate de Python cu comanda os.system

Pentru a începe scriptul Python am făcut un mic bash

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

cd / home / pi

python jukebox_gui.py

Pentru pornirea automată în modul GUI tocmai am modificat fișierul de pornire automată în / etc / xdg / lxsession / LXDE-pi

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

@pcmanfm --desktop --profile LXDE-pi

@xscreensaver -no-splash

@lxterminal --command = "dem_jukebox.bash"

punct-rpi

Adăugarea de fișiere mp3 noi:

Pentru a adăuga fișiere noi, am preferat să creez un mic script dedicat Python:

new_song_file.py

Mai întâi voi explica organizarea fișierelor de sistem:

Toate fișierele sunt în / home / pi

fișierele mp3 sunt stocate în directorul / home / pi / Music

Fiecare artist are propriul său subdirector care găzduiește fișierele mp3 aferente

pi @ raspitone: ~ / Music / 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 Sosire.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 Castaway_ (Instrumental).mp3

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

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

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

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

În directorul Documente putem găsi lista construită a fișierelor de redat.

pi @ raspitone: ~ / Documents $ cat list.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

De asemenea, putem găsi datele listelor de redare (dar aceasta este construită de scriptul Python)

Micul script Python adaugă noile melodii, salvate în Muzică, în list.txt după ce a formatat titlurile în format UNIX

Iată scriptul: (poate fi deschis prin Notepad ++ sau Geany)

Pasul 5: Gestionarea energiei prin Arduino Nano

Întrucât am vrut să am ceva ușor de început, am decis să fac asta de către un nano mic:

Principiul:

Când apăsați butonul de pornire, dispozitivele sunt toate alimentate, nano pornește (1 sau 2 secunde) și preia gestionarea energiei prin declanșarea unui releu care shuntează contactele butonului.

Apoi Nano așteaptă 35 de secunde pentru a primi bătăile inimii de la Raspberry (înseamnă că procesul de pornire este finalizat și programul jukebox rulează).

Atâta timp cât nano primește bătăile inimii, acesta menține releul pornit

Dacă nu mai există bătăi de inimă (înseamnă că programul tonomatului este oprit) Nano așteaptă 20 de secunde (pentru a fi sigur că raspi-ul este complet oprit) pentru a elibera releul de alimentare.

Tonomatul este apoi complet oprit

Am adăugat un comutator pentru a activa o intrare a nano-ului pentru a indica modul de întreținere (folosesc tonomatul pentru a-mi gestiona celelalte servere raspi prin ssh și vnc). Nano dezactivează apoi procesul câinelui de pază

Observație:

intrarea pentru bătăile inimii de la Raspi trebuie să fie trasă în jos (dar 3,3V de la Raspi este considerat ca fiind de nivel înalt de către Nano)

S-ar putea face cu NE555, dar sunt leneș și am întotdeauna niște nano-uri în sertarul meu !!!!

Iată programul scurt C (poate fi deschis cu Notepad ++)

Pasul 6: Cablarea

Cablarea
Cablarea
Cablarea
Cablarea

Pentru ecran:

Un cablu HDMI și un cablu USB sunt utilizate pe Raspi pentru a alimenta și conduce ecranul.

Pentru panoul frontal:

Un cablu USB este, de asemenea, conectat de la Raspi pentru a putea încărca fișiere noi sau face copii de rezervă.

Un cablu USB este conectat de la Nano pentru a putea accesa softul (pentru modificări dacă este necesar)

Conectez, de asemenea, un dongle de tastatură wireless pe zmeură pentru a putea face întreținere fără a utiliza mufa USB externă

Pe măsură ce se folosesc Raspberry și Arduino, cablarea este destul de simplă.

Totul este situat pe o placă matricială.

De la zmeură 2 GPIO se folosesc:

Pin22 pentru LED IR

Pinul 27 pentru bătăile inimii la Arduino

pe Arduino

Pinul 2 este folosit ca pin de întrerupere pentru bătăile inimii de la Raspi.

Pinii de la 3 la 5 sunt folosiți pentru conducerea ledurilor (Start, Wdt, Maintenance).

Pinul 6 este pentru comutatorul de întreținere.

Pinul 7 este ieșit la scutul de releu.

Iată fișierul fritzing:

Pasul 7: Cutia

Cutia
Cutia

Nu voi descrie foarte mult ce am făcut deoarece depinde de amplificatorul de putere și de difuzoarele utilizate.

Ca informație, home cinema-ul este situat în partea de jos a casetei.

Chiar peste boxe:

1 woofer

2 difuzoare medii, pe care le-am modificat pentru a le introduce în cutie.

Deasupra:

Panoul frontal cu ecranul, LED-urile, comutatoarele și mufele USB.

Lemnul:

Pentru difuzoare, panourile laterale de sus și de jos am folosit scândură de lemn de 18 mm.

Partea din față este din placaj de 10 mm cu șuruburi de 40 mm.

Pentru a facilita cablarea și întreținerea (dacă este necesar !!!) am pus circuitele pe un sertar în spatele panoului frontal

Pentru a evita supraîncălzirea, se face o gaură mare pe partea inferioară a panoului din spate și am pus un ventilator de 5V (8 cm) pe panoul din spate chiar lângă circuit.

Imaginea de mai sus este doar pentru a da o idee.

Deci asta este !!!!!!!!!

Mulțumesc că m-ai citit

Și ne vedem data viitoare pentru noi aventuri

Recomandat: