Raspitone: gebruiksvriendelijke jukebox - Ajarnpa
Raspitone: gebruiksvriendelijke jukebox - Ajarnpa
Anonim
Raspitone:gemakkelijk te gebruiken Jukebox
Raspitone:gemakkelijk te gebruiken Jukebox

Hallo, mijn volgende project is, zoals ik altijd deed, een niet erg nuttig project:

Dit is een jukebox gebaseerd op een Raspberry 3 B+

Ik weet het, zoiets kan gemakkelijk worden gedaan met een smartphone en een Bluetooth-luidspreker.

Maar voor mijn project had ik twee harde voorwaarden:

Ik wilde iets "vintage" maken.

En over het algemeen, gezien het feit dat mijn dame definitief hopeloos is voor computer of bluetooth of iets anders uit de 21e eeuw, (en zelfs 20e), moest ik iets heel eenvoudigs doen om te gebruiken…………

Dus de specificaties waren als volgt:

Een enkele drukknop om de machine te starten

Een touchscreen (heel eenvoudig) om de muziek te beheren.

Een enkele aanraking op het scherm om de machine te stoppen.

En om een goed geluid te hebben ……

Benodigdheden

Hiervoor gebruikte ik:

1 Framboos 3 B+

1 oude thuisbioscoop die nutteloos was vanwege dvd-lezer OOS (een oude Samsung 2.1 met een woofer en 2 luidsprekers die ik heb aangepast om in de doos te passen)

1 HIFIBERRY DIGI+ kaart (met optische uitgang voor de eindversterker)

1 capacitief touchscreen 7 (de mijne is Makeasy voor Raspberry met HDMI-ingang en gevoed via USB, maar elk HDMI-aanraakscherm zou in orde moeten zijn)

1 voeding 5V 5A

1 relais schild

1 Arduino nano om het AAN/UIT-proces te beheren

1 IR-led om de thuisbioscoop aan te sturen (led aangedreven door een 2N2222 NPN-transistor)

1 IR-ontvanger (voor het leren van de IR-codes van het project, haal ik de mijne van een oude multimedia-harde schijf met afstandsbediening)

3 led's

1 schakelaar voor onderhoudsmodus

1 schakelaar voor het werken op de arduino (tijdens het uploaden wordt de arduino gereset)

sommige JST- en Dupont-connectoren

En voor de doos

Hout en multiplex (maar ik zal het maken van de doos niet diepgaand beschrijven). gewoon om te zeggen dat, met betrekking tot de boomer in de doos, 10 mm multiplex en 18 mm hout verplicht zijn als je de Jukebox tijdens het spelen niet door de woonkamer wilt zien lopen !!!!

Stap 1: Framboos-onderdeelbeschrijving:

De Raspi moet verschillende dingen regelen:

1) de commando's naar de thuisbioscoop (via IR-afstandsbediening)

2) de muziekbestanden

3) het touchscreen:

4) De hartslag naar de Arduino (die de Wdt (watch dog timer) beheert)

Ik ben begonnen met een Raspbian strech-distributie op een 16 G SD-kaart (Omdat we alleen bestanden van de SD-kaart zullen lezen, is het gebruik van een HDD niet nodig). Ik zal hier geen tijd aan besteden, want het web staat er vol met tutorials over.

Laten we de verschillende onderdelen in de volgende stappen bekijken….

Stap 2: De IR-afstandsbedieningscodes

Omdat ik het circuitplan van de thuisbioscoop niet kon vinden, besloot ik hem via afstandsbedieningen te besturen

De eerste stap die ik moest voltooien, was om Raspi de codes van de afstandsbediening van de thuisbioscoop te leren. Daarvoor gebruikte ik de zeer goede tutorial in Instructables van Austin Stanton IR-codes

Ik had enkele verschillen, waarschijnlijk vanwege de nieuwe versie, omdat de instructables vrij oud zijn, het hardware.conf-bestand niet meer bestaat (ik heb het tenminste niet gevonden)

Het lijkt er ook op dat de transistor die in de tuto wordt gebruikt een PNP-transistor is, van mijn kant heb ik een 2N2222 gebruikt die NPN is, maar het resultaat is hetzelfde. (behalve de bekabeling !!!!!!!!)

De pintoewijzing wordt gegeven in /boot/config.txt:

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

De IR LED wordt zo aangesloten op pin 22 van de Raspi.

Een belangrijke opmerking: bij het leren van de codes voor Raspi is het verplicht om de trefwoorden te gebruiken die in de opdracht worden vermeld

irrecord --list-namespace

Hier is het bestand dat ik heb gemaakt voor mijn jukebox:

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

# Neem de tijd om dit bestand af te werken zoals beschreven in # https://sourceforge.net/p/lirc-remotes/wiki/Check… # en maak het beschikbaar voor anderen door het te sturen naar # #

# Dit configuratiebestand is automatisch gegenereerd

# met lirc-0.9.4c (standaard) op do 9 mei 17:33:37 2019 # Gebruikte opdrachtregel: -d /dev/lirc0 /root/lircd.conf

# Kernelversie (uname -r): 4.14.98-v7+ # # Externe naam (vanaf configuratiebestand): jukebox

# Merk afstandsbediening, het ding dat je in je hand houdt: # Afstandsbediening model nr:

# Informatie-url op afstand:

# Heeft het externe apparaat een gebundeld opnameapparaat e. g., a

# USB stick?:

# Voor gebundelde USB-apparaten: usb-verkoper-ID, product-ID

# en apparaatstring (gebruik dmesg of lsusb):

# Type apparaat bestuurd

# (TV, VCR, Audio, DVD, Satelliet, Kabel, HTPC, …):

# Apparaat(en) bediend door deze afstandsbediening:

op afstand beginnen

naam jukebox

beetjes 16

vlaggen SPACE_ENC|CONST_LENGTH

eps 30

aeps 100

kop 4470 4496

een 542 1693

nul 542 581

ptrail 553

pre_data_bits 16

pre_data 0xC2CA

tussenruimte 107863

toggle_bit_mask 0x0

frequentie 38000

begin codes

KEY_POWER 0x807F

KEY_AUX 0x8877

KEY_VOLUMEUP 0xCC33

KEY_VOLUMEDOWN 0xDC23

eindcodes

afstandsbediening beëindigen

Zoals je kunt zien, heb ik slechts 4 commando's nodig om de Home Cinema te besturen

Inschakelen / uitschakelen)

AUX => om over te schakelen naar het optische ingangskanaal (omdat de HC altijd start op dvd-lezer)

En Volume +/-

De gerelateerde commando's worden uitgevoerd via de LIRC-commando's:

bijvoorbeeld: "verzend SEND_ONCE jukebox KEY_VOLUMEUP"

Stap 3: Hoofdprogramma

Het hoofdprogramma is geschreven in Python:

Aangezien ik nieuw ben in Python, denk ik dat er veel verbetering mogelijk is, maar het werkt ….

De specificaties:

1) beheer het grafische scherm:

Hiervoor heb ik APPJAR gebruikt, wat TKINTER is maar beschaafd voor studenten (mijn geval), dit betekent veel gemakkelijker te gebruiken, waarschijnlijk met minder mogelijkheden, maar het was genoeg voor mijn doel.

2) speel de mp3-bestanden af:

Ik gebruikte mplayer voor python.

3) genereer willekeurige getallen om in de shuffle-modus te spelen:

Omdat ik niet elk kwartaal hetzelfde nummer wilde horen, heb ik een klein programma gebouwd om te controleren of het nummer niet in de x vorige nummerslijst stond (x afhankelijk van de lengte van de afspeellijst).

De randint-functie in python is niet zo "willekeurig" voor zover ik heb gezien.

4) stuur de "hartslag" naar de Arduino

5) bestanden speler beheren:

Omdat Mplayer asynchroon is, is er bij het starten van het bestand geen manier om voor Python te weten wanneer het klaar is (ik heb tenminste geen eenvoudige manier gevonden)

Om dat op te lossen heb ik de mplayer-commando's gebruikt die de lengte van het bestand en de voortgang in het huidige bestand aangeven

Voor zowel 4 als 5 heb ik de door Appjar geboden mogelijkheid gebruikt om een periodieke taak te genereren (aangezien appjar een evenementenprogramma is, is dit een manier om een periodieke gebeurtenis aan te maken). de functie is:

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

p.setPollTime(1000)

Taskman voor "task manager", een def in het programma die alle gebeurtenissen beheert die geen scherm zijn (einde van het afgespeelde bestand, voortgangsbalk vullen, hartslag naar Nano sturen, ….)

Eenmaal gestart ziet het scherm er als volgt uit:

Afbeelding
Afbeelding

Hier is het programma:(kan worden geopend via Notepad++ of Geany)

Stap 4: Raspberry Part: autostart en nieuwe bestanden toevoegen

Als je naar het programma kijkt, kun je zien dat ik enkele bash-bestanden gebruik:

1) Start_jukebox:

In feite is het de bedoeling om de thuisbioscoop aan te zetten en over te schakelen naar de D. IN-ingang (optische ingang in mijn thuisbioscoop)

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

irsend SEND_ONCE jukebox KEY_POWER

slaap 7

irsend SEND_ONCE jukebox KEY_AUX

slapen 2

2) stop_jukebox:

De thuisbioscoop uitschakelen

pi@raspitone:/bin $ cat stop_jukebox

#!/bin/bash

irsend SEND_ONCE jukebox KEY_POWER

Deze twee bash-bestanden worden door Python aangeroepen met de opdracht os.system

Om het Python-script te starten heb ik een kleine bash gemaakt

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

cd /home/pi

python jukebox_gui.py

Voor de automatische start in GUI-modus heb ik zojuist het autostart-bestand gewijzigd in /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"

punt-rpi

Nieuwe mp3-bestanden toevoegen:

Om nieuwe bestanden toe te voegen, heb ik er de voorkeur aan gegeven een klein speciaal Python-script te maken:

new_song_file.py

Ik zal eerst de organisatie van de systeembestanden uitleggen:

Alle bestanden staan in /home/pi

mp3-bestanden worden opgeslagen in de map /home/pi/Music

Elke artiest heeft zijn eigen submap waarin de gerelateerde mp3-bestanden worden gehost

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

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

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

-rwxr----- 1 pi pi 8383244 30 juni 2017 Hemelvaart.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 Chariots.mp3

In de map Documenten kunnen we de ingebouwde lijst met af te spelen bestanden vinden.

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

We kunnen ook de afspeellijstgegevens vinden (maar dit is gebouwd door het Python-script)

Het kleine Python-script voegt de nieuwe nummers, opgeslagen in Muziek, toe aan de list.txt nadat de titels in UNIX-formaat zijn geformatteerd

Hier is het script:(kan worden geopend via Notepad++ of Geany)

Stap 5: Het energiebeheer via Arduino Nano

Omdat ik iets gemakkelijks wilde hebben om te beginnen, besloot ik het te laten doen door een kleine nano:

Het principe:

Bij het indrukken van de startknop worden de apparaten allemaal gevoed, de nano start (1 of 2 seconden) en neemt het energiebeheer over door een relais te triggeren dat de drukknopcontacten shunt.

Dan wacht Nano 35 seconden om de hartslag van Raspberry te ontvangen (betekent dat het startproces is voltooid en het jukebox-programma wordt uitgevoerd).

Zolang nano de hartslag ontvangt, blijft het relais ingeschakeld (Watch dog-timer)

Als er geen hartslag meer is (betekent dat het jukebox-programma is gestopt) wacht Nano 20 seconden (om er zeker van te zijn dat de raspi volledig is gestopt) om het vermogensrelais vrij te geven.

De jukebox is dan volledig uitgeschakeld

Ik heb een schakelaar toegevoegd om een ingang van de nano te activeren om de onderhoudsmodus aan te geven (ik gebruik de jukebox om mijn andere raspi-servers te beheren via ssh et vnc). Nano deactiveert vervolgens het waakhondproces

Opmerking:

de ingang voor de hartslag van Raspi moet naar beneden worden getrokken (maar de 3.3V van Raspi wordt door Nano als hoog niveau beschouwd)

Het zou kunnen met NE555 maar ik ben lui en heb altijd wat nano's in mijn la !!!!

Hier is het korte C-programma (te openen met Notepad++)

Stap 6: De bekabeling

De bekabeling
De bekabeling
De bekabeling
De bekabeling

Voor het scherm:

Een HDMI-kabel en een USB-kabel worden op Raspi gebruikt om het scherm van stroom te voorzien en aan te sturen.

Voor het voorpaneel:

Ook wordt er een USB-kabel aangesloten vanaf de Raspi om nieuwe bestanden te kunnen uploaden of back-ups te kunnen maken.

Er is een USB-kabel aangesloten vanaf de Nano om toegang te krijgen tot de soft (voor aanpassingen indien nodig)

Ik sluit ook een draadloze toetsenborddongle aan op de Raspberry om onderhoud te kunnen plegen zonder de externe USB-stekker te gebruiken

Aangezien Raspberry en Arduino worden gebruikt, is de bekabeling vrij eenvoudig.

Alles bevindt zich op een stripmatrixbord.

Van Raspberry 2 wordt GPIO gebruikt:

Pin22 voor IR-LED

Pin 27 voor hartslag naar Arduino

op Arduino

Pin 2 wordt gebruikt als interruptpin voor de hartslag van Raspi.

Pinnen 3 t/m 5 worden gebruikt voor het aansturen van de led's (Start, Wdt, Onderhoud).

Pin 6 is voor de onderhoudsschakelaar.

Pin 7 wordt uitgevoerd naar relaisscherm.

Hier is het fritzing-bestand:

Stap 7: De doos

De doos
De doos

Ik zal niet veel beschrijven wat ik heb gedaan omdat het afhangt van de eindversterker en de gebruikte luidsprekers.

Ter informatie bevindt zich de home cinema in de bodem van de doos.

Even over de speakers:

1 woofer

2 middelgrote luidsprekers, die ik heb aangepast om ze in de doos te plaatsen.

Bovenop:

Het frontpaneel met het scherm, de LED's, de schakelaars en de USB-stekkers.

Het hout:

Voor de luidsprekers, de zijpanelen aan de bovenzijde en de onderkant heb ik 18 mm houten plank gebruikt.

De voorkant is 10 mm multiplex met 40 mm schroeven.

Om de bekabeling en het onderhoud (indien nodig!!!) te vergemakkelijken heb ik de schakelingen op een lade achter het voorpaneel gelegd

Om oververhitting te voorkomen is er een groot gat gemaakt aan de onderkant van het achterpaneel en heb ik een 5V ventilator (8 cm) op het achterpaneel geplaatst, net naast het circuit.

Bovenstaande foto is puur om een idee te geven.

Dus dat is het !!!!!!!!!

Bedankt voor het lezen van mij

En tot de volgende keer voor nieuwe avonturen