Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Himbeer-Teilbeschreibung:
- Schritt 2: Die IR-Fernbedienungscodes
- Schritt 3: Hauptprogramm
- Schritt 4: Raspberry Part: Autostart und Hinzufügen neuer Dateien
- Schritt 5: Die Energieverwaltung über Arduino Nano
- Schritt 6: Die Verkabelung
- Schritt 7: Die Box
Video: Raspitone: einfach zu bedienende Jukebox - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
Hallo, mein nächstes Projekt ist, wie ich es gewohnt bin, ein nicht sehr nützliches Projekt:
Dies ist eine Jukebox basierend auf einem Raspberry 3 B+
Ich weiß, so etwas geht ganz einfach mit einem Smartphone und einem Bluetooth-Lautsprecher.
Aber für mein Projekt hatte ich zwei harte Voraussetzungen:
Ich wollte etwas "Vintage" machen.
Und insgesamt, angesichts der Tatsache, dass meine Dame definitiv hoffnungslos für Computer oder Bluetooth oder irgendetwas anderes aus dem 21. (und sogar 20.)
Die Spezifikationen waren also wie folgt:
Ein einziger Druckknopf zum Starten der Maschine
Ein Touchscreen (sehr einfach), um die Musik zu verwalten.
Eine einzige Berührung des Bildschirms, um die Maschine zu stoppen.
Und für einen guten Klang ………
Lieferungen
Dafür habe ich verwendet:
1 Himbeere 3 B+
1 altes Heimkino, das aufgrund von DVD-Reader OOS unbrauchbar war (ein altes Samsung 2.1 mit einem Woofer und 2 Lautsprechern, die ich an die Box angepasst habe)
1 HIFIBERRY DIGI+ Board (mit optischem Ausgang für die Endstufe)
1 kapazitiver Touchscreen 7 (meiner ist Makeasy für Himbeere mit HDMI-Eingang und wird über USB mit Strom versorgt, aber jeder HDMI-Touchscreen sollte in Ordnung sein)
1 Netzteil 5V 5A
1 Relaisschild
1 Arduino Nano zur Verwaltung des Ein-/Ausschaltvorgangs
1 IR-LED zum Ansteuern des Heimkinos (geführt von einem 2N2222 NPN-Transistor)
1 IR-Empfänger (für die IR-Codes, die Teil des Projekts lernen, bekomme ich meine von einer alten Multimedia-Festplatte mit Fernbefehl)
3 LEDs
1 Schalter für Wartungsmodus
1 Schalter zum Arbeiten am Arduino (während des Uploads wird das Arduino zurückgesetzt)
einige JST- und Dupont-Anschlüsse
Und für die Kiste
Holz und Sperrholz (aber ich werde die Herstellung der Box nicht ausführlich beschreiben). nur um zu sagen, dass in Bezug auf den Boomer in der Box 10 mm Sperrholz und 18 mm Holz obligatorisch sind, wenn Sie die Jukebox beim Spielen nicht durch das Wohnzimmer kreuzen sehen möchten !!!!
Schritt 1: Himbeer-Teilbeschreibung:
Der Raspi muss verschiedene Dinge bewältigen:
1) die Befehle zum Heimkino (über IR-Fernbedienung)
2) die Musikdateien
3) der Touchscreen
4) Der Herzschlag zum Arduino (der den Wdt (Watch Dog Timer) verwaltet)
Gestartet habe ich von einer Raspbian-Strech-Distribution auf einer 16-G-SD-Karte (Da wir nur Dateien von der SD-Karte lesen, ist die Verwendung einer HDD nicht erforderlich). Ich werde keine Zeit mit diesem Teil verbringen, da das Web voller Tuto darüber ist.
Sehen wir uns die verschiedenen Teile in den nächsten Schritten an….
Schritt 2: Die IR-Fernbedienungscodes
Da ich den Schaltplan des Heimkinos nicht finden konnte, habe ich mich entschieden, es per Fernsteuerung anzusteuern
Der erste Schritt, den ich ausführen musste, war, Raspi die Codes des Heimkino-Fernbedienungsbefehls zu lernen. Dafür habe ich das sehr gute Tuto in Instructables von Austin Stanton IR-Codes verwendet
Ich hatte einige Unterschiede, wahrscheinlich aufgrund der neuen Version, da die Instructables ziemlich alt sind, die Datei hardware.conf existiert nicht mehr (zumindest habe ich sie nicht gefunden)
Es scheint auch, dass der im Tuto verwendete Transistor ein PNP-Transistor ist, für meinen Teil habe ich einen 2N2222 verwendet, der NPN ist, aber das Ergebnis ist das gleiche. (außer der Verkabelung !!!!!!!!)
Die Pinbelegung ist in /boot/config.txt angegeben:
#autorisation de lirc le 08.07.2019dtoverlay=lirc-rpi, gpio_out_pin=22, gpio_in_pin=23
Die IR-LED wird so mit Pin22 des Raspi verbunden.
Eine wichtige Anmerkung: Beim Erlernen der Codes für Raspi ist es zwingend erforderlich, die im Befehl aufgeführten Schlüsselwörter zu verwenden
irrecord --list-namespace
Hier ist die Datei, die ich für meine Jukebox erstellt habe:
pi@raspitone:/etc/lirc $ cat lircd.conf
# Bitte nehmen Sie sich die Zeit, diese Datei wie in # https://sourceforge.net/p/lirc-remotes/wiki/Check… beschrieben fertigzustellen und anderen zur Verfügung zu stellen, indem Sie sie an # # senden
# Diese Konfigurationsdatei wurde automatisch generiert
# using lirc-0.9.4c(default) on Thu May 9 17:33:37 2019 # Verwendete Befehlszeile: -d /dev/lirc0 /root/lircd.conf
# Kernel-Version (uname -r): 4.14.98-v7+ # # Remote-Name (aus Konfigurationsdatei): jukebox
# Marke des entfernten Geräts, das Sie in der Hand halten: # Modellnummer des entfernten Geräts:
# Info-URL des Remote-Geräts:
# Verfügt das Remote-Gerät über ein gebündeltes Aufnahmegerät, z. B., a
# USB-Dongle?:
# Für gebündelte USB-Geräte: USB-Anbieter-ID, Produkt-ID
# und Gerätezeichenfolge (verwenden Sie dmesg oder lsusb):
# Art des gesteuerten Geräts
# (TV, VCR, Audio, DVD, Satellit, Kabel, HTPC, …):
# Von dieser Fernbedienung gesteuerte(s) Gerät(e):
Fernbedienung starten
Namensjukebox
Bit 16
Flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
Kopfstück 4470 4496
ein 542 1693
Null 542 581
ptrail 553
pre_data_bits 16
pre_data 0xC2CA
Lücke 107863
toggle_bit_mask 0x0
Frequenz 38000
Startcodes
KEY_POWER 0x807F
KEY_AUX 0x8877
KEY_VOLUMEUP 0xCC33
KEY_VOLUMEDOWN 0xDC23
Endecodes
Fernbedienung beenden
Wie Sie sehen, brauche ich nur 4 Befehle, um das Heimkino anzusteuern
Einschalten / Ausschalten)
AUX => zum Umschalten auf den optischen Eingangskanal (da der HC immer auf DVD-Reader startet)
Und Lautstärke +/-
Die entsprechenden Befehle werden über die LIRC-Befehle ausgeführt:
Beispiel: "SEND_ONCE Jukebox KEY_VOLUMEUP senden"
Schritt 3: Hauptprogramm
Das Hauptprogramm ist in Python geschrieben:
Da ich neu in Python bin, denke ich, dass es viele Verbesserungen geben kann, aber es läuft….
Die Spezifikationen:
1) den grafischen Bildschirm verwalten:
Dafür habe ich APPJAR verwendet, das TKINTER ist, aber zivilisiert für Studenten (mein Fall), das bedeutet viel einfacher zu bedienen, wahrscheinlich mit weniger Möglichkeiten, aber es war genug für meinen Zweck.
2) spielen Sie die mp3-Dateien ab:
Ich habe mplayer für Python verwendet.
3) Generieren Sie Zufallszahlen für das Spielen im Shuffle-Modus:
Da ich nicht jedes Quartal den gleichen Song hören wollte, habe ich mir ein kleines Programm gebaut, um zu prüfen, ob die Nummer in der x-Vorherigen-Nummernliste (x je nach Länge der Playlist) nicht vorhanden war.
Die randint-Funktion in Python ist meines Erachtens nicht so "zufällig".
4) sende den "Heartbeat" an den Arduino
5) Dateiplayer verwalten:
Da Mplayer asynchron ist, kann Python beim Starten der Datei nicht wissen, wann sie fertig ist (zumindest habe ich keinen einfachen Weg gefunden).
Um das zu beheben, habe ich die mplayer-Befehle verwendet, die die Länge der Datei und den Fortschritt in der aktuellen Datei angeben
Sowohl für 4 als auch für 5 habe ich die Möglichkeit von Appjar genutzt, um eine periodische Aufgabe zu generieren (da appjar ein Ereignisprogramm ist, ist dies eine Möglichkeit, ein periodisches Ereignis zu erstellen). die funktion ist:
#******************** start taskman *********************app.registerEvent(taskman)
p.setPollTime(1000)
Taskman für "Task Manager", was eine Def im Programm ist, die alle Ereignisse verwaltet, die nicht auf dem Bildschirm sind (Ende der abgespielten Datei, Fortschrittsbalken füllen, Herzschlag an Nano senden, ….)
Nach dem Start sieht der Bildschirm so aus:
Hier ist das Programm:(kann über Notepad++ oder Geany geöffnet werden)
Schritt 4: Raspberry Part: Autostart und Hinzufügen neuer Dateien
Wenn Sie sich das Programm ansehen, können Sie sehen, dass ich einige Bash-Dateien verwende:
1) Start_jukebox:
Tatsächlich besteht der Zweck darin, das Heimkino einzuschalten und auf den D. IN-Eingang (optischer Eingang in meinem Heimkino) umzuschalten.
pi@raspitone:/bin $ cat start_jukebox#!/bin/bash
Senden SEND_ONCE Jukebox KEY_POWER
Schlaf 7
Senden SEND_ONCE Jukebox KEY_AUX
Schlaf 2
2) stop_jukebox:
So schalten Sie das Heimkino aus
pi@raspitone:/bin $ cat stop_jukebox
#!/bin/bash
Senden SEND_ONCE Jukebox KEY_POWER
Diese beiden Bash-Dateien werden von Python mit dem Befehl os.system aufgerufen
Um das Python-Skript zu starten, habe ich eine kleine Bash gemacht
pi@raspitone:~ $ cat dem_jukebox.bash#!/bin/bash
cd /home/pi
python jukebox_gui.py
Für den Autostart im GUI-Modus habe ich gerade die Autostart-Datei in /etc/xdg/lxsession/LXDE-pi. modifiziert
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"
Punkt-rpi
Hinzufügen neuer mp3-Dateien:
Um neue Dateien hinzuzufügen, habe ich es vorgezogen, ein kleines dediziertes Python-Skript zu erstellen:
new_song_file.py
Ich werde zuerst die Organisation der Systemdateien erklären:
Alle Dateien sind in /home/pi
mp3-Dateien werden im Verzeichnis /home/pi/Music gespeichert
Jeder Künstler hat sein eigenes Unterverzeichnis, in dem die zugehörigen MP3-Dateien gespeichert sind
pi@raspitone:~/Music/Mike_oldfield $ ls -ltotal 760516
-rwxr----- 1 pi pi 2254923 30. Juni 2017 A_New_Beginning.mp3
-rwxr----- 1 pi pi 2691736 30. Juni 2017 Arrival.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 Chariots.mp3
Im Verzeichnis Documents finden wir die erstellte Liste der abzuspielenden Dateien.
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
Wir können auch die Playlist-Daten finden (diese werden jedoch vom Python-Skript erstellt)
Das kleine Python-Skript fügt die neuen Songs, die in Music gespeichert sind, in die list.txt ein, nachdem die Titel im UNIX-Format formatiert wurden
Hier ist das Skript: (kann über Notepad ++ oder Geany geöffnet werden)
Schritt 5: Die Energieverwaltung über Arduino Nano
Da ich etwas einfach zu starten haben wollte, beschloss ich, es mit einem kleinen Nano zu machen:
Das Prinzip:
Beim Drücken des Starttasters werden alle Geräte mit Strom versorgt, der Nano startet (1 oder 2 Sekunden) und übernimmt das Powermanagement durch Auslösen eines Relais, das die Tasterkontakte überbrückt.
Dann wartet Nano 35 Sekunden, um den Heartbeat von Raspberry zu empfangen (bedeutet, dass der Startvorgang abgeschlossen ist und das Jukebox-Programm läuft).
Solange Nano den Herzschlag empfängt, hält es das Relais an (Watchdog-Timer)
Wenn kein Heartbeat mehr auftritt (dh das Jukebox-Programm ist gestoppt) wartet Nano 20 Sekunden (um sicherzustellen, dass die Raspi vollständig gestoppt wird), um das Power-Relais freizugeben.
Die Jukebox ist dann komplett ausgeschaltet
Ich habe einen Schalter hinzugefügt, um einen Eingang des Nanos zu aktivieren, um den Wartungsmodus anzuzeigen (ich verwende die Jukebox, um meine anderen Raspi-Server über ssh und vnc zu verwalten). Nano deaktiviert dann den Watchdog-Prozess
Anmerkung:
der Eingang für den Herzschlag von Raspi muss heruntergezogen werden (aber die 3.3V von Raspi werden von Nano als High-Level angesehen)
Es könnte mit NE555 gemacht werden, aber ich bin faul und habe immer ein paar Nanos in meiner Schublade !!!!
Hier ist das kurze C-Programm (kann mit Notepad++ geöffnet werden)
Schritt 6: Die Verkabelung
Für den Bildschirm:
Raspi verwendet ein HDMI-Kabel und ein USB-Kabel, um den Bildschirm mit Strom zu versorgen und anzusteuern.
Für die Frontplatte:
Auch ein USB-Kabel wird vom Raspi angeschlossen, um neue Dateien hochladen oder Backups erstellen zu können.
Ein USB-Kabel wird vom Nano angeschlossen, um auf die Soft zugreifen zu können (bei Bedarf für Modifikationen)
Ich stecke auch einen drahtlosen Tastatur-Dongle an die Himbeere, um Wartungsarbeiten durchführen zu können, ohne den externen USB-Stecker zu verwenden
Da Raspberry und Arduino verwendet werden, ist die Verkabelung recht einfach.
Alles befindet sich auf einer Streifenmatrixplatine.
Von Himbeere werden 2 GPIO verwendet:
Pin22 für IR-LED
Pin 27 für Herzschlag zu Arduino
auf Arduino
Pin 2 wird als Interrupt-Pin für den Heartbeat von Raspi verwendet.
Die Pins 3 bis 5 werden zum Ansteuern der LEDs verwendet (Start, Wdt, Maintenance).
Pin 6 ist für den Wartungsschalter.
Pin 7 wird an Relaisschirm ausgegeben.
Hier die Fritzing-Datei:
Schritt 7: Die Box
Ich werde nicht viel beschreiben, was ich gemacht habe, da es von der Endstufe und den verwendeten Lautsprechern abhängt.
Als Information befindet sich das Heimkino im Boden der Box.
Gleich über den Lautsprechern:
1 Tieftöner
2 mittlere Lautsprecher, die ich modifiziert habe, um sie in die Box einzufügen.
An der Spitze:
Die Frontplatte mit dem Bildschirm, den LEDs, den Schaltern und den USB-Steckern.
Das Holz:
Für die Lautsprecher, die Seitenwände oben und unten habe ich 18 mm Holzbretter verwendet.
Die Vorderseite besteht aus 10 mm Sperrholz mit 40 mm Schrauben.
Um die Verkabelung und die Wartung (bei Bedarf!!!) zu erleichtern, habe ich die Schaltung auf eine Schublade hinter der Frontplatte gelegt
Um eine Überhitzung zu vermeiden, habe ich unten in der Rückwand ein großes Loch gemacht und ich habe einen 5V-Lüfter (8 cm) auf der Rückwand direkt neben der Schaltung angebracht.
Das obige Bild soll nur eine Idee geben.
Das war's !!!!!!!!!
Danke, dass du mich gelesen hast
Und bis zum nächsten Mal für neue Abenteuer
Empfohlen:
DIY So zeigen Sie die Zeit auf dem M5StickC ESP32 mit Visuino an - Einfach zu tun: 9 Schritte
DIY So zeigen Sie die Zeit auf dem M5StickC ESP32 mit Visuino an - Einfach zu machen: In diesem Tutorial lernen wir, wie Sie den ESP32 M5Stack StickC mit Arduino IDE und Visuino programmieren, um die Zeit auf dem LCD anzuzeigen
M5STACK So zeigen Sie Temperatur, Feuchtigkeit und Druck auf dem M5StickC ESP32 mit Visuino an - Einfach zu tun: 6 Schritte
M5STACK So zeigen Sie Temperatur, Luftfeuchtigkeit und Druck auf dem M5StickC ESP32 mit Visuino an - Einfach zu machen: In diesem Tutorial lernen wir, wie Sie den ESP32 M5Stack StickC mit Arduino IDE und Visuino programmieren, um Temperatur, Luftfeuchtigkeit und Druck mit dem ENV-Sensor (DHT12, BMP280, BMM150)
DIY, wie man eine cool aussehende Uhr macht – StickC – Einfach zu tun: 8 Schritte
DIY Wie man eine cool aussehende Uhr macht - StickC - Einfach zu machen: In diesem Tutorial lernen wir, wie man ESP32 M5Stack StickC mit Arduino IDE und Visuino programmiert, um eine Zeit auf dem LCD anzuzeigen und die Zeit auch mit den StickC-Tasten einzustellen
So stellen Sie ganz einfach ein DIY-Luftgebläse zu Hause her – wikiHow
So stellen Sie ganz einfach ein DIY-Luftgebläse zu Hause her: In diesem Video habe ich ganz einfach ein Luftgebläse aus Haushaltsgegenständen hergestellt
Einfach schlafen: 5 Schritte (mit Bildern)
Schlaf einfach: Hallo, mein Name ist Jakob. Ich bin allergisch gegen Hausstaubmilben und habe Asthma. Dies ist die Inspiration für dieses Projekt. Für mein erstes Jahr bei MCT bekamen wir den Auftrag, ein Projekt von Grund auf neu zu erstellen und all das Wissen, das wir in diesem Jahr gewonnen haben, zu nutzen. Ich habe mich entschieden