Πίνακας περιεχομένων:

Raspitone: εύκολο στη χρήση Jukebox: 7 βήματα
Raspitone: εύκολο στη χρήση Jukebox: 7 βήματα

Βίντεο: Raspitone: εύκολο στη χρήση Jukebox: 7 βήματα

Βίντεο: Raspitone: εύκολο στη χρήση Jukebox: 7 βήματα
Βίντεο: Как спрятать данные в ячейках Excel? 2024, Νοέμβριος
Anonim
Raspitone: εύκολο στη χρήση Jukebox
Raspitone: εύκολο στη χρήση Jukebox

Γεια σας, το επόμενο έργο μου είναι, όπως συνήθιζα να κάνω, ένα όχι πολύ χρήσιμο έργο:

Αυτό είναι ένα jukebox βασισμένο σε ένα Raspberry 3 B+

Ξέρω, κάτι τέτοιο μπορεί εύκολα να γίνει με ένα smartphone και ένα ηχείο Bluetooth.

Αλλά για το έργο μου, είχα δύο δύσκολες προϋποθέσεις:

Wantedθελα να φτιάξω κάτι «vintage».

Και συνολικά, δεδομένου του γεγονότος ότι η κυρία μου είναι σίγουρα απελπιστική για υπολογιστή ή bluetooth ή οτιδήποτε άλλο από τον 21ο αιώνα, (και ακόμη και τον 20ο), έπρεπε να κάνω κάτι πολύ απλό στη χρήση ………

Έτσι, οι προδιαγραφές ήταν οι εξής:

Ένα μόνο κουμπί για να ξεκινήσει το μηχάνημα

Μια οθόνη αφής (πολύ απλή) για τη διαχείριση της μουσικής.

Ένα μόνο άγγιγμα στην οθόνη για να σταματήσει το μηχάνημα.

Και για να έχετε έναν καλό ήχο ………

Προμήθειες

Για αυτό χρησιμοποίησα:

1 Βατόμουρο 3 Β+

1 παλιός οικιακός κινηματογράφος που ήταν άχρηστος λόγω του προγράμματος ανάγνωσης DVD OOS (ένα παλιό Samsung 2.1 με γούφερ και 2 ηχεία που τροποποίησα για να ταιριάζει στο κουτί)

1 πλακέτα HIFIBERRY DIGI+ (με οπτική έξοδο για τον ενισχυτή ισχύος)

1 χωρητική οθόνη αφής 7 (η δική μου είναι Makeasy για βατόμουρο με είσοδο HDMI και τροφοδοτείται μέσω USB, αλλά οποιαδήποτε οθόνη αφής HDMI θα πρέπει να είναι εντάξει)

1 ισχύς 5V 5A

1 ασπίδα ρελέ

1 Arduino nano για τη διαχείριση της διαδικασίας ενεργοποίησης/απενεργοποίησης

1 IR οδήγησε να οδηγήσει τον οικιακό κινηματογράφο (οδηγείται από τρανζίστορ 2N2222 NPN)

1 δέκτης IR (για τους κώδικες IR που μαθαίνουν μέρος του έργου, παίρνω τον δικό μου από έναν παλιό σκληρό δίσκο πολυμέσων με απομακρυσμένη εντολή)

3 led

1 διακόπτης για λειτουργία συντήρησης

1 διακόπτης για εργασία στο arduino (κατά τη μεταφόρτωση γίνεται επαναφορά του arduino)

μερικούς συνδετήρες JST και Dupont

Και για το κουτί

Ξύλο και κόντρα πλακέ (αλλά δεν θα περιγράψω βαθιά την κατασκευή του κουτιού). απλώς για να πω ότι, όσον αφορά το μπουμ μέσα στο κουτί, το κόντρα πλακέ 10 mm και το ξύλο 18 mm είναι υποχρεωτικά αν δεν θέλετε να δείτε το Jukebox να διασχίζει το σαλόνι ενώ παίζετε !!!!

Βήμα 1: Περιγραφή τμήματος βατόμουρου:

Το Raspi πρέπει να διαχειριστεί διαφορετικά πράγματα:

1) οι εντολές στον οικιακό κινηματογράφο (μέσω τηλεχειριστηρίου IR)

2) τα αρχεία μουσικής

3) την οθόνη αφής

4) Ο καρδιακός παλμός στο Arduino (που διαχειρίζεται το Wdt (ρολόι σκύλου ρολογιού))

Ξεκίνησα από μια διανομή strep Raspbian σε μια κάρτα SD 16 G (Καθώς θα διαβάσουμε μόνο αρχεία από την κάρτα SD, η χρήση ενός σκληρού δίσκου δεν είναι απαραίτητη). Δεν θα αφιερώσω χρόνο σε αυτό το κομμάτι, καθώς ο ιστός είναι γεμάτος από μαθήματα γι 'αυτό.

Ας δούμε τα διαφορετικά μέρη στα επόμενα βήματα….

Βήμα 2: Οι απομακρυσμένοι κωδικοί IR

Δεδομένου ότι δεν μπορούσα να βρω το σχέδιο κυκλώματος του home cinema, αποφάσισα να το οδηγήσω μέσω απομακρυσμένων εντολών

Το πρώτο βήμα που έπρεπε να ολοκληρώσω ήταν να μάθω να Raspi τους κωδικούς της τηλεχειριστηρίου Home cinema. Για αυτό χρησιμοποίησα το πολύ καλό tuto στο Instructables από Austin Stanton IR codes

Είχα κάποιες διαφορές, πιθανώς λόγω νέας έκδοσης καθώς οι οδηγίες είναι μάλλον παλιές, το αρχείο hardware.conf δεν υπάρχει πλέον (τουλάχιστον δεν το βρήκα)

Φαίνεται επίσης ότι το τρανζίστορ που χρησιμοποιείται στο tuto είναι ένα τρανζίστορ PNP, από την πλευρά μου χρησιμοποίησα ένα 2N2222 που είναι NPN αλλά το αποτέλεσμα είναι το ίδιο. (Εκτός από την καλωδίωση !!!!!!!!)

Η ανάθεση καρφιτσών δίνεται στο /boot/config.txt:

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

Το IR LED θα είναι τόσο συνδεδεμένο με το pin22 του Raspi.

Μια σημαντική παρατήρηση: κατά την εκμάθηση των κωδικών στο Raspi είναι υποχρεωτική η χρήση των λέξεων -κλειδιών που αναφέρονται στην εντολή

irrecord-λίστα-ονόματα χώρου

Εδώ είναι το αρχείο που έχτισα για το jukebox μου:

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

# Αφιερώστε χρόνο για να ολοκληρώσετε αυτό το αρχείο όπως περιγράφεται στο # https://sourceforge.net/p/lirc-remotes/wiki/Check… # και κάντε το διαθέσιμο σε άλλους στέλνοντάς το στο # #

# Αυτό το αρχείο διαμόρφωσης δημιουργήθηκε αυτόματα

# χρησιμοποιώντας lirc -0.9.4c (προεπιλογή) Πέμ 9 Μαΐου 17:33:37 2019 # Χρησιμοποιείται η γραμμή εντολών: -d /dev /lirc0 /root/lircd.conf

# Έκδοση πυρήνα (uname -r): 4.14.98 -v7+ # # Απομακρυσμένο όνομα (ως αρχείο ρυθμίσεων): jukebox

# Μάρκα απομακρυσμένης συσκευής, το πράγμα που κρατάτε στο χέρι σας: # Μοντέλο απομακρυσμένης συσκευής nr:

# Url πληροφοριών απομακρυσμένης συσκευής:

# Η απομακρυσμένη συσκευή διαθέτει ομαδοποιημένη συσκευή λήψης e. ζ., α

# usb dongle;:

# Για ομαδοποιημένες συσκευές USB: αναγνωριστικό προμηθευτή usb, αναγνωριστικό προϊόντος

# και συμβολοσειρά συσκευής (χρησιμοποιήστε dmesg ή lsusb):

# Ελεγχόμενος τύπος συσκευής

# (Τηλεόραση, βίντεο, ήχος, DVD, δορυφόρος, καλώδιο, HTPC,…):

# Συσκευές που ελέγχονται από αυτό το τηλεχειριστήριο:

ξεκινήσει απομακρυσμένα

όνομα jukebox

κομμάτια 16

σημαίες SPACE_ENC | CONST_LENGTH

eps 30

aeps 100

κεφαλίδα 4470 4496

ένα 542 1693

μηδέν 542 581

ptrail 553

pre_data_bits 16

pre_data 0xC2CA

κενό 107863

toggle_bit_mask 0x0

συχνότητα 38000

έναρξη κωδικών

KEY_POWER 0x807F

KEY_AUX 0x8877

KEY_VOLUMEUP 0xCC33

KEY_VOLUMEDOWN 0xDC23

τελικούς κωδικούς

τελικό τηλεχειριστήριο

Όπως μπορείτε να δείτε, χρειάζομαι μόνο 4 εντολές για να οδηγήσω το Home Cinema

Ισχύς (ON/OFF)

AUX => για μετάβαση στο κανάλι οπτικής εισόδου (καθώς το HC ξεκινά πάντα στο πρόγραμμα ανάγνωσης DVD)

Και τόμος +/-

Οι σχετικές εντολές εκτελούνται μέσω των εντολών LIRC:

για παράδειγμα: "irsend SEND_ONCE jukebox KEY_VOLUMEUP"

Βήμα 3: Κύριο πρόγραμμα

Το κύριο πρόγραμμα είναι γραμμένο σε Python:

Καθώς είμαι νέος στην Python, υποθέτω ότι υπάρχει μεγάλη βελτίωση που μπορεί να γίνει, αλλά λειτουργεί….

Οι προδιαγραφές:

1) διαχειριστείτε τη γραφική οθόνη:

Για αυτό, χρησιμοποίησα το APPJAR που είναι TKINTER αλλά πολιτισμένο για μαθητές (η περίπτωσή μου), αυτό σημαίνει πολύ πιο εύκολο στη χρήση, πιθανώς με λιγότερες δυνατότητες, αλλά ήταν αρκετό για τον σκοπό μου.

2) αναπαραγωγή αρχείων mp3:

Χρησιμοποίησα το mplayer για python.

3) δημιουργήστε τυχαίους αριθμούς για αναπαραγωγή σε λειτουργία τυχαίας αναπαραγωγής:

Καθώς δεν ήθελα να ακούω το ίδιο τραγούδι κάθε τρίμηνο, έφτιαξα ένα μικρό πρόγραμμα για να ελέγξω αν ο αριθμός δεν ήταν παρών στη λίστα με τους προηγούμενους αριθμούς (x ανάλογα με το μήκος της λίστας αναπαραγωγής).

Η συνάρτηση randint στον python δεν είναι τόσο "τυχαία" όσο είδα.

4) στείλτε τον "χτύπο της καρδιάς" στο Arduino

5) διαχείριση αρχείων αναπαραγωγής:

Καθώς το Mplayer είναι ασύγχρονο, όταν ξεκινά το αρχείο δεν υπάρχει τρόπος να γνωρίζουμε για την Python πότε έχει τελειώσει (τουλάχιστον δεν βρήκα έναν απλό τρόπο)

Για να το επιλύσω, χρησιμοποίησα τις εντολές mplayer δίνοντας το μήκος του αρχείου και την πρόοδο στο τρέχον αρχείο

Και για τα 4 και για τα 5 χρησιμοποίησα τη δυνατότητα που έδωσε το Appjar για να δημιουργήσω μια περιοδική εργασία (καθώς το appjar είναι ένα πρόγραμμα συμβάντων, αυτός είναι ένας τρόπος δημιουργίας περιοδικού συμβάντος). η συνάρτηση είναι:

#******************* έναρξη taskman ********************** app.registerEvent (taskman)

p.setPollTime (1000)

Taskman για το "task manager" που είναι ένα def στο πρόγραμμα που διαχειρίζεται όλα όσα δεν είναι συμβάντα οθόνης (τέλος του αναπαραγόμενου αρχείου, συμπλήρωση γραμμής προόδου, αποστολή καρδιακών παλμών στον Nano,….)

Μόλις ξεκινήσει η οθόνη μοιάζει με αυτό:

Εικόνα
Εικόνα

Εδώ είναι το πρόγραμμα: (μπορεί να ανοίξει μέσω Notepad ++ ή Geany)

Βήμα 4: Μέρος Raspberry: αυτόματη εκκίνηση και προσθήκη νέων αρχείων

Αν κοιτάξετε το πρόγραμμα, μπορείτε να δείτε ότι χρησιμοποιώ μερικά αρχεία bash:

1) Start_jukebox:

Στην πραγματικότητα ο σκοπός είναι να ενεργοποιήσετε τον οικιακό κινηματογράφο και να μεταβείτε στην είσοδο D. IN (οπτική είσοδος στον οικιακό μου κινηματογράφο)

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

irsend SEND_ONCE jukebox KEY_POWER

ύπνος 7

irsend SEND_ONCE jukebox KEY_AUX

ύπνος 2

2) stop_jukebox:

Για να απενεργοποιήσετε τον κινηματογράφο Home

pi@raspitone:/bin $ cat stop_jukebox

#!/bin/bash

irsend SEND_ONCE jukebox KEY_POWER

Αυτά τα δύο αρχεία bash καλούνται από την Python με την εντολή os.system

Για να ξεκινήσω το σενάριο Python έκανα ένα μικρό bash

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

cd /home /pi

python jukebox_gui.py

Για την αυτόματη εκκίνηση σε λειτουργία GUI, μόλις τροποποίησα το αρχείο αυτόματης εκκίνησης στο/etc/xdg/lxsession/LXDE-pi

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

@pcmanfm-Desktop --profile LXDE-pi

@xscreensaver -όχι -παφλασμός

@lxterminal --command = "dem_jukebox.bash"

point-rpi

Προσθήκη νέων αρχείων mp3:

Για να προσθέσω νέα αρχεία, προτίμησα να φτιάξω ένα μικρό αποκλειστικό σενάριο Python:

new_song_file.py

Θα εξηγήσω πρώτα την οργάνωση των αρχείων συστήματος:

Όλα τα αρχεία είναι στο /home /pi

Τα αρχεία mp3 μεταφέρονται στον κατάλογο/home/pi/Music

Κάθε καλλιτέχνης έχει τον δικό του υποκατάλογο που φιλοξενεί τα σχετικά αρχεία mp3

pi@raspitone:/Music/Mike_oldfield $ ls -συνολικά 760516

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

-rwxr ----- 1 pi pi 2691736 juin 30 2017 Άφιξη.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

Στον κατάλογο Έγγραφα μπορούμε να βρούμε την ενσωματωμένη λίστα αρχείων για αναπαραγωγή.

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

Μπορούμε επίσης να βρούμε τα δεδομένα των λιστών αναπαραγωγής (αλλά αυτό δημιουργείται από το σενάριο Python)

Το μικρό σενάριο Python προσθέτει τα νέα τραγούδια, αποθηκευμένα στη Μουσική, στη λίστα.

Εδώ είναι το σενάριο: (μπορεί να ανοίξει μέσω Notepad ++ ή Geany)

Βήμα 5: Διαχείριση ενέργειας μέσω Arduino Nano

Καθώς ήθελα να έχω κάτι εύκολο να ξεκινήσω, αποφάσισα να το κάνω από ένα μικρό νανο:

Ο ΔΙΕΥΘΥΝΤΗΣ:

Όταν πιέζετε το κουμπί εκκίνησης, όλες οι συσκευές τροφοδοτούνται, το nano ξεκινά (1 ή 2 δευτερόλεπτα) και αναλαμβάνει τη διαχείριση ενέργειας ενεργοποιώντας ένα ρελέ που αποκλείει τις επαφές του κουμπιού.

Στη συνέχεια, ο Nano περιμένει 35 δευτερόλεπτα για να λάβει τον καρδιακό παλμό από το Raspberry (σημαίνει ότι η διαδικασία έναρξης έχει ολοκληρωθεί και το πρόγραμμα jukebox εκτελείται).

Όσο το nano δέχεται τον καρδιακό παλμό διατηρεί το ρελέ ενεργοποιημένο (ρολόι χρονομέτρου σκύλου)

Εάν δεν υπάρχει πλέον καρδιακός παλμός (σημαίνει ότι το πρόγραμμα jukebox έχει σταματήσει) ο Nano περιμένει 20 δευτερόλεπτα (για να βεβαιωθείτε ότι η raspi έχει σταματήσει εντελώς) για να απελευθερώσει το ρελέ ισχύος.

Στη συνέχεια, το τζουκ μποξ τροφοδοτείται πλήρως

Πρόσθεσα έναν διακόπτη για να ενεργοποιήσω μια είσοδο του nano για να δείξει τη λειτουργία συντήρησης (χρησιμοποιώ το jukebox για να διαχειρίζομαι τους άλλους διακομιστές raspi μέσω ssh et vnc). Στη συνέχεια, ο Νάνο απενεργοποιεί τη διαδικασία του σκύλου ρολογιού

Παρατήρηση:

η είσοδος για τον καρδιακό παλμό από το Raspi πρέπει να μειωθεί (αλλά το 3.3V από το Raspi θεωρείται υψηλό επίπεδο από τον Nano)

Θα μπορούσε να γίνει με το NE555 αλλά είμαι τεμπέλης και έχω πάντα στο συρτάρι μου μερικά νανο !!!!

Εδώ είναι το σύντομο πρόγραμμα C (μπορεί να ανοίξει με το Σημειωματάριο ++)

Βήμα 6: Η καλωδίωση

Η Καλωδίωση
Η Καλωδίωση
Η Καλωδίωση
Η Καλωδίωση

Για την οθόνη:

Ένα καλώδιο HDMI και ένα καλώδιο USB χρησιμοποιούνται στο Raspi για τροφοδοσία και οδήγηση της οθόνης.

Για τον μπροστινό πίνακα:

Ένα καλώδιο USB είναι επίσης συνδεδεμένο από το Raspi για να μπορείτε να ανεβάζετε νέα αρχεία ή να δημιουργείτε αντίγραφα ασφαλείας.

Ένα καλώδιο USB είναι συνδεδεμένο από το Nano για να έχει πρόσβαση στο μαλακό (για τροποποιήσεις εάν είναι απαραίτητο)

Συνδέω επίσης ένα ασύρματο dongle πληκτρολογίου στο βατόμουρο για να μπορώ να κάνω συντήρηση χωρίς τη χρήση του εξωτερικού βύσματος USB

Καθώς χρησιμοποιούνται Raspberry και Arduino, η καλωδίωση είναι μάλλον απλή.

Όλα βρίσκονται σε πίνακα μήτρας λωρίδας.

Από βατόμουρο 2 GPIO χρησιμοποιούνται:

Pin22 για LED LED

Καρφίτσα 27 για τον καρδιακό παλμό στο Arduino

στο Arduino

Το pin 2 χρησιμοποιείται ως ακίδα διακοπής για τον καρδιακό παλμό από το Raspi.

Οι ακίδες 3 έως 5 χρησιμοποιούνται για την οδήγηση των led (Start, Wdt, Maintenance).

Ο πείρος 6 είναι για τον διακόπτη συντήρησης.

Η ακίδα 7 εξάγεται στη θωράκιση ρελέ.

Εδώ είναι το καταπληκτικό αρχείο:

Βήμα 7: Το κουτί

Το κιβώτιο
Το κιβώτιο

Δεν θα περιγράψω πολλά αυτό που έκανα καθώς εξαρτάται από τον ενισχυτή ισχύος και τα ηχεία που χρησιμοποιούνται.

Ως πληροφορία, ο οικιακός κινηματογράφος βρίσκεται στο κάτω μέρος του κουτιού.

Ακριβώς πάνω από τα ηχεία:

1 γούφερ

2 μεσαία ηχεία, τα οποία τροποποίησα για να τα τοποθετήσω στο κουτί.

Στην κορυφή:

Το μπροστινό πάνελ με την οθόνη, τα LED, τους διακόπτες και τα βύσματα USB.

Το ξύλο:

Για τα ηχεία, η πλάγια πλευρά πάνω και κάτω χρησιμοποίησα ξύλινη σανίδα 18 mm.

Η μπροστινή πλευρά είναι κόντρα πλακέ 10 mm με βίδες 40 mm.

Για να διευκολύνω την καλωδίωση και τη συντήρηση (αν χρειαστεί !!!) έβαλα το κύκλωμα σε ένα συρτάρι πίσω από το μπροστινό πάνελ

Για να αποφευχθεί η υπερθέρμανση, γίνεται μια μεγάλη τρύπα στο κάτω μέρος του πίσω πάνελ και βάζω έναν ανεμιστήρα 5V (8 cm) στο πίσω πάνελ ακριβώς δίπλα στο κύκλωμα.

Η παραπάνω εικόνα είναι μόνο για να δώσει μια ιδέα.

Αρα αυτο ειναι !!!!!!!!!

Ευχαριστώ που με διαβάζετε

Και τα λέμε την επόμενη φορά για νέες περιπέτειες

Συνιστάται: