Inhaltsverzeichnis:

Raspitone: einfach zu bedienende Jukebox - Gunook
Raspitone: einfach zu bedienende Jukebox - Gunook

Video: Raspitone: einfach zu bedienende Jukebox - Gunook

Video: Raspitone: einfach zu bedienende Jukebox - Gunook
Video: Как спрятать данные в ячейках Excel? 2024, Juli
Anonim
Raspitone: einfach zu bedienende Jukebox
Raspitone: einfach zu bedienende Jukebox

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:

Bild
Bild

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

Die Verkabelung
Die Verkabelung
Die Verkabelung
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

Die Kiste
Die Kiste

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: