Innholdsfortegnelse:

Raspitone: enkel å bruke Jukebox: 7 trinn
Raspitone: enkel å bruke Jukebox: 7 trinn

Video: Raspitone: enkel å bruke Jukebox: 7 trinn

Video: Raspitone: enkel å bruke Jukebox: 7 trinn
Video: Сериал - "Сваты" (1-й сезон 1-я серия) фильм комедия для всей семьи 2024, November
Anonim
Raspitone: enkel å bruke Jukebox
Raspitone: enkel å bruke Jukebox

Hei, mitt neste prosjekt er, som jeg pleier å gjøre, et lite nyttig prosjekt:

Dette er en jukeboks basert på en Raspberry 3 B+

Jeg vet, noe slikt kan enkelt gjøres med en smarttelefon og en Bluetooth -høyttaler.

Men for prosjektet mitt hadde jeg to harde forutsetninger:

Jeg ville lage noe "vintage".

Og totalt sett, siden damen min definitivt er håpløs for datamaskin eller bluetooth eller noe annet fra det 21. århundre (og til og med det 20.), måtte jeg gjøre noe veldig enkelt å bruke ………

Så spesifikasjonene var som følger:

En enkelt trykknapp for å starte maskinen

En berøringsskjerm (veldig enkel) for å administrere musikken.

Et enkelt trykk på skjermen for å stoppe maskinen.

Og for å ha en god lyd ………

Rekvisita

Til dette brukte jeg:

1 Bringebær 3 B+

1 gammel hjemmekino som var ubrukelig på grunn av DVD -leser OOS (en gammel Samsung 2.1 med en woofer og 2 høyttalere som jeg endret for å passe til boksen)

1 HIFIBERRY DIGI+ -kort (med optisk utgang for effektforsterkeren)

1 kapasitiv berøringsskjerm 7 (min er lett å gjøre for bringebær med HDMI -inngang og drives via USB, men enhver HDMI -berøringsskjerm skal være OK)

1 strømforsyning 5V 5A

1 reléskjerm

1 Arduino nano for å styre strømmen PÅ/AV

1 IR førte til å drive hjemmekinoen (ledet drevet av en 2N2222 NPN -transistor)

1 IR -mottaker (for læring av IR -koder i prosjektet, får jeg min fra en gammel multimedie -harddisk med fjernkommando)

3 led

1 bryter for vedlikeholdsmodus

1 bryter for arbeid på arduino (under opplasting blir arduinoen tilbakestilt)

noen JST- og Dupont -kontakter

Og for boksen

Tre og kryssfiner (men jeg vil ikke beskrive dypt hvordan boksen er laget). bare for å si at når det gjelder boomer inne i esken, er 10 mm kryssfiner og 18 mm tre obligatorisk hvis du ikke vil se Jukebox krysse stua mens du spiller !!!!

Trinn 1: Beskrivelse av bringebærdel:

Raspi må håndtere forskjellige ting:

1) kommandoene til hjemmekinoen (via IR -fjernkontroll)

2) musikkfilene

3) berøringsskjermen

4) Hjerteslag til Arduino (som administrerer Wdt (vakthundtimer))

Jeg begynte fra en Raspbian strech -distribusjon på et 16 G SD -kort (Siden vi bare vil lese filer fra SD -kortet, er det ikke nødvendig å bruke en harddisk). Jeg vil ikke bruke tid på denne delen ettersom nettet er fullt av veiledning om det..

La oss se de forskjellige delene i de neste trinnene ….

Trinn 2: IR -fjernkodene

Siden jeg ikke fant kretsplanen for hjemmekinoen, bestemte jeg meg for å kjøre den via fjernkommandoer

Det første trinnet jeg måtte fullføre var å lære å Raspi kodene til fjernkontrollen for hjemmekino. For det brukte jeg den veldig gode tutoen i Instructables fra Austin Stanton IR -koder

Jeg hadde noen forskjeller, sannsynligvis på grunn av ny versjon ettersom instruksjonene er ganske gamle, hardware.conf -filen eksisterer ikke lenger (i det minste fant jeg den ikke)

Det ser også ut til at transistoren som brukes i tutoen er en PNP -transistor, for min del brukte jeg en 2N2222 som er NPN, men resultatet er det samme. (Bortsett fra kabling !!!!!!!!)

Pin -tildelingen er gitt i /boot/config.txt:

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

IR -LED -en vil være koblet til pin22 på Raspi.

En viktig kommentar: når du lærer kodene til Raspi, er det obligatorisk å bruke søkeordene som er oppført i kommandoen

irrecord --list-namespace

Her er filen jeg bygde for jukeboksen min:

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

# Ta deg tid til å fullføre denne filen som beskrevet i # https://sourceforge.net/p/lirc-remotes/wiki/Check… # og gjør den tilgjengelig for andre ved å sende den til # #

# Denne konfigurasjonsfilen ble automatisk generert

# bruker lirc -0.9.4c (standard) Tor 9. mai 17:33:37 2019 # Kommandolinje brukt: -d /dev /lirc0 /root/lircd.conf

# Kernel versjon (uname -r): 4.14.98 -v7+ # # Fjernnavn (fra konfigurasjonsfil): jukebox

# Merke på ekstern enhet, tingen du holder i hånden: # Ekstern enhet modell nr:

# Ekstern informasjon info url:

# Har den eksterne enheten en medfølgende oppfangingsenhet e. g., a

# usb -dongle?:

# For medfølgende USB -enheter: USB -leverandør -ID, produkt -ID

# og enhetsstreng (bruk dmesg eller lsusb):

# Type enhet kontrollert

# (TV, videospiller, lyd, DVD, satellitt, kabel, HTPC, …):

# Enhet (er) kontrollert av denne fjernkontrollen:

begynne eksternt

navn jukebox

biter 16

flagg SPACE_ENC | CONST_LENGTH

eps 30

aeps 100

topptekst 4470 4496

en 542 1693

null 542 581

ptrail 553

pre_data_bits 16

pre_data 0xC2CA

gap 107863

toggle_bit_mask 0x0

frekvens 38000

begynne koder

KEY_POWER 0x807F

KEY_AUX 0x8877

KEY_VOLUMEUP 0xCC33

KEY_VOLUMEDOWN 0xDC23

sluttkoder

ende fjernkontroll

Som du kan se, trenger jeg bare 4 kommandoer for å kjøre hjemmekinoen

Strøm (PÅ/AV)

AUX => for å bytte til den optiske inngangskanalen (ettersom HC alltid starter på DVD -leser)

Og volum +/-

De relaterte kommandoene utføres via LIRC -kommandoene:

for eksempel: "send SEND_ONCE jukeboks KEY_VOLUMEUP"

Trinn 3: Hovedprogram

Hovedprogrammet er skrevet i Python:

Siden jeg er ny i Python antar jeg at det er mye forbedring som kan gjøres, men det går ….

Spesifikasjonene:

1) administrer den grafiske skjermen:

For dette brukte jeg APPJAR som er TKINTER, men sivilisert for studenter (saken min), dette betyr mye lettere å bruke, sannsynligvis med færre muligheter, men det var nok til mitt formål.

2) Spill mp3 -filene:

Jeg brukte mplayer for python.

3) generer tilfeldige tall for å spille i blandemodus:

Ettersom jeg ikke ønsket å høre den samme sangen hvert kvartal, bygde jeg et lite program for å sjekke om tallet ikke var tilstede i listen x forrige tall (x avhengig av lengden på spillelisten).

Randint -funksjonen i python er ikke så "tilfeldig" så langt jeg så.

4) send "hjerteslag" til Arduino

5) administrer filspilleren:

Siden Mplayer er asynkron, er det ingen måte å vite for Python når filen er startet (i det minste fant jeg ikke en enkel måte)

For å løse at jeg brukte mplayer -kommandoene som ga lengden på filen og fremdriften i den nåværende filen

For både 4 og 5 brukte jeg muligheten gitt av Appjar til å generere en periodisk oppgave (ettersom appjar er et hendelsesprogram er dette en måte å lage en periodisk hendelse på). funksjonen er:

#******************* start oppgavemann ********************** app.registerEvent (taskman)

p.setPollTime (1000)

Taskman for "task manager" som er en def i programmet som administrerer alle det som ikke er skjermhendelser (slutten av den spilte filen, fyll ut fremdriftslinjen, send hjerteslag til Nano, …)

Når skjermen har startet, ser den slik ut:

Bilde
Bilde

Her er programmet: (kan åpnes via Notisblokk ++ eller Geany)

Trinn 4: Bringebærdel: Autostart og Legge til nye filer

Hvis du ser på programmet, kan du se at jeg bruker noen bash -filer:

1) Start_jukebox:

Hensikten er faktisk å slå på hjemmekinoen og gå over til D. IN -inngangen (optisk inngang i min hjemmekino)

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

send SEND_ONCE jukeboks KEY_POWER

sove 7

send SEND_ONCE jukeboks KEY_AUX

sove 2

2) stop_jukebox:

Slå av hjemmekinoen

pi@raspitone:/bin $ cat stop_jukebox

#!/bin/bash

send SEND_ONCE jukeboks KEY_POWER

Disse to bash -filene kalles av Python med kommandoen os.system

For å starte Python -skriptet laget jeg en liten bash

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

cd /home /pi

python jukebox_gui.py

For automatisk start i GUI-modus endret jeg nettopp autostartfilen i/etc/xdg/lxsession/LXDE-pi

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

@pcmanfm --desktop --profil LXDE-pi

@xscreensaver -no -splash

@lxterminal --command = "dem_jukebox.bash"

punkt-rpi

Legge til nye mp3 -filer:

For å legge til nye filer foretrakk jeg å lage et lite dedikert Python -skript:

new_song_file.py

Jeg vil først forklare systemfilorganisasjonen:

Alle filene er i /home /pi

mp3 -filer lagres i/home/pi/Music -katalogen

Hver artist har sin egen undermappe som er vert for de relaterte mp3 -filene

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

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

-rwxr ----- 1 pi pi 2691736 30. juni 2017 Ankomst.mp3

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

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

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

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

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

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

-rwxr ----- 1 pi pi 9403263 30. juni 2017 vogner.mp3

I katalogen Dokumenter finner vi den bygde listen over filer som skal spilles av.

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

Vi kan også finne spillelistedata (men dette er bygget av Python -skriptet)

Det lille Python -skriptet legger til de nye sangene, lagret i musikk, i list.txt etter å ha formatert tittlene i UNIX -format

Her er skriptet: (kan åpnes via Notisblokk ++ eller Geany)

Trinn 5: Strømstyring via Arduino Nano

Ettersom jeg ønsket å ha noe enkelt å starte, bestemte jeg meg for å gjøre det gjort av en liten nano:

Prinsippet:

Når du trykker på startknappen, får alle enhetene strøm, nano starter (1 eller 2 sekunder) og tar over strømstyringen ved å utløse et relé som skifter trykknappkontaktene.

Deretter venter Nano i 35 sekunder for å motta hjerteslag fra bringebær (betyr at startprosessen er fullført og jukeboksprogrammet kjører).

Så lenge nano mottar hjerteslag, holder den reléet på (Watch dog timer)

Hvis ingen hjerterytme lenger (betyr at jukeboksprogrammet er stoppet) venter Nano i 20 sekunder (for å være sikker på at raspi er helt stoppet) for å slippe strømreléet.

Jukeboksen slås deretter helt av

Jeg la til en bryter for å aktivere en inngang fra nano for å indikere vedlikeholdsmodus (jeg bruker jukeboksen til å administrere mine andre raspi -servere via ssh et vnc). Nano deaktiverer deretter vakthundprosessen

Bemerke:

inngangen for hjerteslag fra Raspi må trekkes ned (men 3.3V fra Raspi regnes som høyt nivå av Nano)

Det kan gjøres med NE555, men jeg er lat og har alltid noen nano i skuffen min !!!!

Her er det korte C -programmet (kan åpnes med Notisblokk ++)

Trinn 6: Kabling

Kabling
Kabling
Kabling
Kabling

For skjermen:

En HDMI -kabel og en USB -kabel brukes på Raspi for å drive og drive skjermen.

For frontpanelet:

En USB -kabel er også koblet til fra Raspi for å kunne laste opp nye filer eller ta sikkerhetskopier.

En USB -kabel er tilkoblet fra Nano for å få tilgang til soften (for endringer om nødvendig)

Jeg kobler også til en trådløs tastaturdongle på bringebæret for å kunne utføre vedlikehold uten å bruke den eksterne USB -kontakten

Når Raspberry og Arduino brukes, er kablingen ganske enkel.

Alt er plassert på et stripmatrisekort.

Fra bringebær 2 brukes GPIO:

Pin22 for IR LED

Pin 27 for hjerteslag til Arduino

på Arduino

Pinne 2 brukes som en avbruddsnål for hjerteslaget fra Raspi.

Pins 3 til 5 brukes til å kjøre LED -lampene (Start, Wdt, Maintenance).

Pin 6 er for vedlikeholdsbryteren.

Pin 7 er utgang til reléskjerm.

Her er fritzing -filen:

Trinn 7: Boksen

Boksen
Boksen

Jeg vil ikke beskrive mye hva jeg gjorde, da det avhenger av effektforsterkeren og høyttalerne som brukes.

Som informasjon er hjemmekinoen plassert i bunnen av esken.

Litt over høyttalerne:

1 bashøyttaler

2 mellomhøyttalere, som jeg modifiserte for å sette dem inn i esken.

På toppen:

Frontpanelet med skjermen, lysdiodene, bryterne og USB -pluggene.

Skogen:

For høyttalerne, sidepanelene topp og bunn brukte jeg 18 mm treplank.

Forsiden er 10 mm kryssfiner med 40 mm skruer.

For å lette kablingen og vedlikeholdet (om nødvendig !!!) la jeg kretsen på en skuff bak frontpanelet

For å unngå overoppheting gjøres et stort hull på bunnen av den bakre panelen, og jeg legger en 5V vifte (8 cm) på den bakre panelen like ved kretsen.

Bildet ovenfor er bare for å gi en ide.

Så det er det !!!!!!!!!

Takk for at du leste meg

Og vi sees neste gang for nye eventyr

Anbefalt: