Innehållsförteckning:

Raspitone: lätt att använda Jukebox: 7 steg
Raspitone: lätt att använda Jukebox: 7 steg

Video: Raspitone: lätt att använda Jukebox: 7 steg

Video: Raspitone: lätt att använda Jukebox: 7 steg
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, December
Anonim
Raspitone: lätt att använda Jukebox
Raspitone: lätt att använda Jukebox

Hej, mitt nästa projekt är, som jag brukar göra, ett inte särskilt användbart projekt:

Detta är en jukebox baserad på en Raspberry 3 B+

Jag vet, något liknande kan enkelt göras med en smartphone och en Bluetooth -högtalare.

Men för mitt projekt hade jag två hårda förutsättningar:

Jag ville göra något "vintage".

Och totalt sett, med tanke på det faktum att min dam är definitivt hopplös för dator eller bluetooth eller något annat från 2000 -talet, (och till och med 20: e), var jag tvungen att göra något väldigt enkelt att använda ………..

Så, specifikationerna var följande:

En enda tryckknapp för att starta maskinen

En pekskärm (mycket enkel) för att hantera musiken.

En knapptryckning på skärmen för att stoppa maskinen.

Och för att få ett bra ljud ………..

Tillbehör

Till detta använde jag:

1 Hallon 3 B+

1 gammal hemmabio som var värdelös på grund av DVD -läsare OOS (en gammal Samsung 2.1 med en bashögtalare och 2 högtalare som jag modifierade för att passa till boxen)

1 HIFIBERRY DIGI+ -kort (med optisk utgång för effektförstärkaren)

1 kapacitiv pekskärm 7 (min är Makeasy för hallon med HDMI -ingång och drivs via USB men vilken HDMI -pekskärm som helst ska vara OK)

1 strömförsörjning 5V 5A

1 reläsköld

1 Arduino nano för att hantera strömmen PÅ/AV

1 IR ledde för att driva hemmabio (ledd drivs av en 2N2222 NPN -transistor)

1 IR -mottagare (för IR -kodens inlärning av projektet får jag min från en gammal multimediahårddisk med fjärrkommando)

3 led

1 omkopplare för underhållsläge

1 switch för arbete på arduino (under uppladdningen återställs arduino)

några JST- och Dupont -kontakter

Och för lådan

Trä och plywood (men jag kommer inte att djupt beskriva tillverkningen av lådan). bara för att säga att när det gäller boomer inuti lådan är 10 mm plywood och 18 mm trä obligatoriskt om du inte vill se Jukeboxen korsa vardagsrummet medan du spelar !!!!

Steg 1: Beskrivning av hallon:

Raspi måste hantera olika saker:

1) kommandon till hemmabio (via IR -fjärrkontroll)

2) musikfilerna

3) pekskärmen

4) Hjärtslag till Arduino (som hanterar Wdt (vakthund timer))

Jag började från en Raspbian strech -distribution på ett 16 G SD -kort (Eftersom vi bara kommer att läsa filer från SD -kortet är det inte nödvändigt att använda en hårddisk). Jag kommer inte att spendera tid på den här delen eftersom webben är full av instruktioner om det..

Låt oss se de olika delarna i nästa steg….

Steg 2: IR -fjärrkoder

Eftersom jag inte kunde hitta kretsplanen för hemmabio, bestämde jag mig för att köra den via fjärrkommandon

Det första steget jag var tvungen att slutföra var att lära mig Raspi koder för fjärrkommandot för hemmabio. För det använde jag den mycket bra handledningen i Instructables från Austin Stanton IR -koder

Jag hade vissa skillnader, förmodligen på grund av ny version eftersom instruktionerna är ganska gamla, filen hardware.conf finns inte längre (åtminstone hittade jag den inte)

Det verkar också som att transistorn som används i tuto är en PNP -transistor, för min del använde jag en 2N2222 som är NPN men resultatet är detsamma. (Förutom kablage !!!!!!!!)

Stifttilldelningen ges i /boot/config.txt:

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

IR -lysdioden kommer att vara så ansluten till pin22 på Raspi.

En viktig anmärkning: när man lär sig koderna till Raspi är det obligatoriskt att använda nyckelorden som anges i kommandot

irrecord --list-namespace

Här är filen jag byggde för min jukebox:

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

# Ta dig tid att slutföra den här filen enligt beskrivningen i # https://sourceforge.net/p/lirc-remotes/wiki/Check… # och gör den tillgänglig för andra genom att skicka den till # #

# Denna konfigurationsfil genererades automatiskt

# använder lirc -0.9.4c (standard) tors 9 maj 17:33:37 2019 # Kommandorad används: -d /dev /lirc0 /root/lircd.conf

# Kärnversion (uname -r): 4.14.98 -v7+ # # Fjärranamn (från konfigurationsfilen): jukebox

# Märke på fjärrenhet, det du håller i handen: # Fjärrenhet modell nr:

# Fjärranslutningsinformation:

# Har fjärrenheten en medföljande inspelningsenhet e. g., a

# usb -dongel?:

# För medföljande USB -enheter: usb -leverantörs -id, produkt -id

# och enhetssträng (använd dmesg eller lsusb):

# Typ av enhet kontrollerad

# (TV, video, ljud, DVD, satellit, kabel, HTPC, …):

# Enheter som styrs av den här fjärrkontrollen:

börja fjärrkontrollen

namn jukebox

bitar 16

flaggor SPACE_ENC | CONST_LENGTH

eps 30

aeps 100

rubrik 4470 4496

en 542 1693

noll 542 581

ptrail 553

pre_data_bits 16

pre_data 0xC2CA

gap 107863

toggle_bit_mask 0x0

frekvens 38000

börja koder

KEY_POWER 0x807F

KEY_AUX 0x8877

KEY_VOLUMEUP 0xCC33

KEY_VOLUMEDOWN 0xDC23

slutkoder

avsluta fjärrkontrollen

Som du kan se behöver jag bara 4 kommandon för att köra hemmabio

Ström (PÅ/AV)

AUX => för att växla till den optiska ingångskanalen (eftersom HC alltid startar på DVD -läsare)

Och volym +/-

De relaterade kommandona körs via LIRC -kommandona:

till exempel: "skicka SEND_ONCE jukebox KEY_VOLUMEUP"

Steg 3: Huvudprogram

Huvudprogrammet är skrivet i Python:

Eftersom jag är ny i Python antar jag att det finns många förbättringar som kan göras, men det körs ….

Specifikationerna:

1) hantera den grafiska skärmen:

För detta använde jag APPJAR som är TKINTER men civiliserad för studenter (mitt fall), det betyder mycket lättare att använda, förmodligen med mindre möjligheter, men det var tillräckligt för mitt syfte.

2) spela upp mp3 -filer:

Jag använde mplayer för python.

3) generera slumpmässiga nummer för att spela i blandningsläge:

Eftersom jag inte ville höra samma låt varje kvartal, byggde jag ett litet program för att kontrollera om numret inte fanns i listan x föregående nummer (x beroende på spellistans längd).

Randint -funktionen i python är inte så "slumpmässig" så långt jag såg.

4) skicka "hjärtslaget" till Arduino

5) hantera filspelare:

Eftersom Mplayer är asynkron, när filen startas finns det inget sätt att veta för Python när den är klar (åtminstone hittade jag inte ett enkelt sätt)

För att lösa det använde jag mplayer -kommandona som gav filens längd och framstegen i den aktuella filen

För både 4 och 5 använde jag möjligheten som Appjar gav för att generera en periodisk uppgift (eftersom appjar är ett händelseprogram är detta ett sätt att skapa en periodisk händelse). funktionen är:

#******************** starta taskman ********************** app.registerEvent (taskman)

p.setPollTime (1000)

Uppgiftsman för "uppgiftshanteraren" som är en def i programmet som hanterar alla vad som inte är skärmhändelser (slutet av den spelade filen, fylla i förloppsindikator, skicka hjärtslag till Nano, …)

När skärmen väl startat ser ut så här:

Bild
Bild

Här är programmet: (kan öppnas via Anteckningar ++ eller Geany)

Steg 4: Hallon del: autostart och Lägg till nya filer

Om du tittar på programmet kan du se att jag använder några bash -filer:

1) Start_jukebox:

Faktum är att syftet är att slå på hemmabio och växla till D. IN -ingången (optisk ingång i min hemmabio)

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

skicka SEND_ONCE jukebox KEY_POWER

sova 7

skicka SEND_ONCE jukebox KEY_AUX

sova 2

2) stop_jukebox:

För att stänga av hemmabio

pi@raspitone:/bin $ cat stop_jukebox

#!/bin/bash

skicka SEND_ONCE jukebox KEY_POWER

Dessa två bash -filer anropas av Python med kommandot os.system

För att starta Python -skriptet gjorde jag en liten bash

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

cd /home /pi

python jukebox_gui.py

För automatisk start i GUI-läge har jag precis ändrat autostart-filen 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

Lägga till nya mp3 -filer:

För att lägga till nya filer föredrog jag att göra ett litet dedikerat Python -skript:

new_song_file.py

Jag kommer först att förklara systemfilernas organisation:

Alla filer finns i /home /pi

mp3 -filer lagras i/home/pi/Musik -katalogen

Varje artist har sin egen underkatalog som är värd för de relaterade mp3 -filerna

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

-rwxr ----- 1 pi pi 2254923 juni 30 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 Vagnar.mp3

I katalogen Dokument kan vi hitta den inbyggda listan över filer att spela.

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 också hitta spellistans data (men detta är byggt av Python -skriptet)

Det lilla Python -manuset lägger till de nya låtarna, sparade i musik, i list.txt efter att ha formaterat titlarna i UNIX -format

Här är skriptet: (kan öppnas via Anteckningar ++ eller Geany)

Steg 5: Energihanteringen Via Arduino Nano

Eftersom jag ville ha något lätt att börja, bestämde jag mig för att göra det gjort av en liten nano:

Principen:

När du trycker på startknappen är alla enheter drivna, nano startar (1 eller 2 sekunder) och tar över energihanteringen genom att utlösa ett relä som shuntar tryckknappens kontakter.

Därefter väntar Nano i 35 sekunder på att få hjärtslaget från Hallon (betyder att startprocessen är klar och jukebox -programmet körs).

Så länge nano tar emot hjärtslaget håller den reläet på (vakthundstimer)

Om ingen hjärtslag längre (betyder att jukebox -programmet är stoppat) väntar Nano i 20 sekunder (för att vara säker på att raspin är helt stoppad) för att släppa strömreläet.

Jukeboxen är sedan helt avstängd

Jag lade till en switch för att aktivera en ingång från nano för att ange underhållsläge (jag använder jukeboxen för att hantera mina andra raspiservrar via ssh et vnc). Nano inaktiverar sedan vakthundsprocessen

Anmärkning:

ingången för hjärtslaget från Raspi måste dras ner (men 3.3V från Raspi anses vara hög nivå av Nano)

Det kan göras med NE555 men jag är lat och har alltid några nano i lådan !!!!

Här är det korta C -programmet (kan öppnas med Anteckningar ++)

Steg 6: Kablarna

Kablarna
Kablarna
Kablarna
Kablarna

För skärmen:

En HDMI -kabel och en USB -kabel används på Raspi för att driva och driva skärmen.

För frontpanelen:

En USB -kabel är också ansluten från Raspi för att kunna ladda upp nya filer eller göra säkerhetskopior.

En USB -kabel är ansluten från Nano för att kunna komma åt soften (för ändringar om det behövs)

Jag ansluter också en trådlös tangentbordsdongel på hallon för att kunna utföra underhåll utan att använda den externa USB -kontakten

Eftersom Raspberry och Arduino används är kablarna ganska enkla.

Allt finns på en bandmatrisskiva.

Från hallon 2 används GPIO:

Pin22 för IR LED

Pin 27 för hjärtslag till Arduino

på Arduino

Pin 2 används som avbrottsstift för hjärtslaget från Raspi.

Stiften 3 till 5 används för att driva lysdioderna (Start, Wdt, underhåll).

Stift 6 är för underhållsbrytaren.

Stift 7 matas ut till reläskärm.

Här är fritzing -filen:

Steg 7: Boxen

Lådan
Lådan

Jag kommer inte att beskriva mycket vad jag gjorde eftersom det beror på effektförstärkaren och de högtalare som används.

Som information finns hemmabio i botten av lådan.

Strax över högtalarna:

1 bashögtalare

2 mellanhögtalare, som jag modifierade för att sätta in dem i lådan.

På toppen:

Frontpanelen med skärmen, lysdioderna, switcharna och USB -kontakterna.

Skogen:

För högtalarna, sidopanelerna topp och botten använde jag 18 mm träplanka.

Framsidan är 10 mm plywood med 40 mm skruvar.

För att underlätta kablage och underhåll (vid behov !!!) lägger jag kretsen på en låda bakom den främre panelen

För att undvika överhettning görs ett stort hål på undersidan av den bakre panelen och jag sätter en 5V fläkt (8 cm) på den bakre panelen precis bredvid kretsen.

Bilden ovan är bara för att ge en idé.

Så det är det !!!!!!!!!

Tack för att du läste mig

Och vi ses nästa gång för nya äventyr

Rekommenderad: