[Projekt] jukebox4kids (Jukebox für Kinder)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Zusammen,

    ein kleiner Nachtrag. Das P.S. könnt ihr vergessen, ich hatte tatsächlich überlesen, dass ich das schon in rc.local (Autostart) eingefügt habe.

    Die Buttons funktionieren auch alle wie sie sollen - das habe ich mit einem Script getestet, wo Anstelle der echo-Befehle mit einem Print("Button-Bezeichnung") reagiert wird. Die Frage ist also, wie genau der echo Befehl innerhalb des Pythonscriptes ausschauen muss. Ich teste weiter, dennoch wer die Lösung kennt ist herzlich eingeladen.

    Viele Grüße

    X-Ray

  • Hallo Zusammen,

    un die Lösung ist gefunden.

    1. Ermitteln der Karten-ID bei mir ist es KarteNr.1

    aplay -l

    **** Liste der Hardware-Geräte (PLAYBACK) ****

    Karte 0: ALSA [bcm2835 ALSA], Gerät 0: bcm2835 ALSA [bcm2835 ALSA]

    Sub-Geräte: 8/8

    Sub-Gerät #0: subdevice #0

    Sub-Gerät #1: subdevice #1

    Sub-Gerät #2: subdevice #2

    Sub-Gerät #3: subdevice #3

    Sub-Gerät #4: subdevice #4

    Sub-Gerät #5: subdevice #5

    Sub-Gerät #6: subdevice #6

    Sub-Gerät #7: subdevice #7

    Karte 0: ALSA [bcm2835 ALSA], Gerät 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]

    Sub-Geräte: 1/1

    Sub-Gerät #0: subdevice #0

    Karte 1: Device [USB Audio Device], Gerät 0: USB Audio [USB Audio]

    Sub-Geräte: 1/1

    Sub-Gerät #0: subdevice #0

    2. Dann die Datei asound.conf erstellen bzw. ändern mit:

    sudo nano /etc/asound.conf

    und folgendes eintragen

    pcm.!default {

    type hw

    card 1

    }

    ctl.!default {

    type hw

    card 1

    }

    3. Jetzt noch in der Datei index.php an Stelle von PCM bzw. Master (oder wie in der Anleitung von hailogugo) Speake eintragen und speichern.

    // change volume

    if(isset($urlparams['volume'])) {

    exec("/usr/bin/sudo amixer sset Speaker ".$urlparams['volume']."%");

    4. in zerobutton.py die bereits erwähnten zeilen für laut bzw leisen eintragen:

    lauter: check_call('amixer sset Speaker 1.5dB+', shell=True)

    leiser: check_call('amixer sset Speaker 1.5dB-', shell=True)

    Das war es. Buttons und Webinterfacefunktioniren jetzt prima.

    Sobald ich fertig bin gibt es auch ein par Bilder. Als Gehäuse habe ih mir übrigens einen Kinderspielkoffer besorgt.

    ein schönes WE

    X-Ray (jetzt wieder mit Durchblick 8o8))

  • Eine längere Zeit hatte ich mich nicht mehr mit dem Projekt auseinander gesetzt.

    Heute habe ich auf dem Breadboard mal die Schaltungen aufgebaut und getestet.

    Ich war zuerst ganz happy als alles ohne Probleme funktioniert hatte.

    Zum Schluss habe ich die Schaltung zum Hoch- und Runterfahren aufgebaut.

    Und was musste ich mit Entsetzen feststellen. Keinerlei Reaktionen auf den Taster.

    Alles nochmals genau überprüft, keinen Fehler festgestellt.

    Auf meinem Raspberry Pi sitzt eine Hifiberry Amp 2, die bekanntermaßen auch Pin 5 verwendet. Anscheinend verwenden alle Modelle der Hifiberry den PIN 5. Aber es kann doch nicht sein, dass jeglicher Besitzer einer Hifiberry den PIN 5 zum Hoch- und Runterfahren für sein Projekt nicht verwenden kann.

    Was gibt es den für Alternativen für mich?

    Kann ich einen anderen PIN verwenden, damit der Raspberry nur herunterfährt?

    Dann würde ich ihn über den Strom ausschalten und mit erneuter Stromzufuhr wieder neu starten.

    Ich bin mal auf Eure Antworten gespannt!

    Danke für die Hilfe,

    Dellex

  • Zum Runterfahren kannst du auch einen anderen Pin neben. Wenn bsp. Pin 11 nimmst setzt du dann einen Befehl sudo shutdown -p (ich glaube das ist der richtige Befehl zum direkten runterfahren). Wenn dein Pi dann aus ist kannst du einen zusätzlichen Ausschalter verwenden um das ganze Gerät komplett vom Strom zu trennen.

    Ich bin gerade in folgendem Thread noch über eine Verzögerungsausschaltung am testen. Vielleicht hast du dafür Zeit die Vorschläge nachzubauen. Fang aber ganz zum Schluss an.

    Damit habe ich es zukünftig vor.

    Verzögerungsschaltung

    Ich möchte eine Schaltung haben mit einer Verzögerung.

    In der Schaltung ist ein Schalter (mit zwei Kontakten / Öffner & Schließer-funktion), wenn dieser aktiv ist läuft der Pi ganz normal. Wenn der Schalter in Stellung zwei geht Schließt er einen PIN gegen GND, um so einen shutdown Befehl auszuführen und die Verzögerungsschaltung soll den Pi noch für 20-30 Sekunden mit Strom versorgen, so dass dieser herunterfahren kann. Hierbei soll die Verzögerungsschaltung nur die Stromversorgung zum Pi für die Zeit geschlosse halten.

    Ich hoffe du verstehst was ich damit meine. So wäre der Pin 5 nicht relevant und du gehst einfach direkt an PIN 2 oder 4 und 6 oder per USB dran.

  • Die folgenden Befehle aus der zerobutton.py sollten doch ausreichen, oder?!

    ......

    from subprocess import check_call

    def def_shutdown():

    check_call(['sudo', 'poweroff'])

    ......

    shut = Button(3, hold_time=2)

    ......

    shut.when_held = def_shutdown

    ......

    Ich muss anstatt Button 3 einfach einen anderen freien Button nehmen.

    Dann sollte doch wenn ich den Schalter länger als 2 sec. drücke der Raspberry runterfahren.

    Sorry, dass ich so blöd frage, aber ich bin momentan auf Geschäftsreise und kann es nicht einfach selbst ausprobieren.

  • Hallo

    @RPiNewbie0 hat funktioniert, danke.

    Ich habe jetzt alles soweit aufgebaut, es funktioniert alles bis auf "laut und leise"

    Die anderen Taster funktionieren alle ohne Probleme, nur laut und leiser funktioniert nicht, auch per Webinterface kann ich nicht lauter und leiser stellen.

    Set Volume funktioniert auch nicht im Webinterface.

    Ich kann auch am Desktop vom Raspberry die Lautstärke nicht ändern. Weder beim VLC Player noch in den Audio Einstellungen. Wenn ich auf Stumm schalte hat das keine Auswirkung.

    Kann mir da einer von euch helfen.

    PS: Danke an alle, die das Projekt möglich machen.

  • Hilfe, ich brauche dringend Eure Unterstützung!

    Ich habe heute auf dem Breadboard die Schaltungen aufgebaut und erfolgreich getestet.

    Auch der Shutdown auf einem anderen PIN hat gut funktioniert.

    Dann wollte ich noch eine rote LED einbauen und habe diese auf einen PIN gelegt.

    Da muss ich einen Fehler gemacht haben. Nach dem Start vom Raspberry hat diese LED kurz geleuchtet, ist ausgegangen, wieder kurz an und wieder aus.

    Jetzt reagiert keiner meiner Schalter mehr!!!

    Ich bin fix und fertig und total down. Jetzt steht das ganze Projekt auf dem Spiel.

    Schließe ich nur eine LED an, leuchtet diese. Die LED, die bei der Fehlschaltung eingebaut war, funktioniert nicht mehr.

    Ich benötige wirklich dringend Hilfe, wie ich Schritt für Schritt rausfinden kann, wo das Problem ist.

    Danke,

    Dellex

    Edit:

    Jetzt habe ich eine einfache Schaltung mit nur einem Schalter aufgebaut und den Zustand per Script in einer Dauerschleife abgefragt. Der Zustand wechselt, wenn ich den Taster drücke.

    Anschließend habe ich noch eine weitere Schaltung mit Taster und LED aufgebaut.

    Auch hier lässt sich mit dem Taster die LED schalten.

    hyle Hast Du eine Idee?

    3 Mal editiert, zuletzt von Dellex (23. Februar 2018 um 22:06)

  • Hallo liebe Bastler,

    ich bin nun auch durchgestartet mit dem Projekt und ich dachte ich teile meine Erlebnisse mit euch.

    Die Anleitung von hailogugo ist super und beschert erste Erfolgserlebnisse. :danke_ATDE:

    Ich hatte allerdings nicht Lust zwei Platinen zu löten (eine für den Hifiberry und eine für die Transistoren). Der Kabelsalat hat mich auch etwas abgeschreckt. Deshalb verwende ich ein Multiplexer Board um die GPIO Pinleiste des RPis zu verdreifachen. Damit kann ich den Hifiberry Miniamp direkt aufstecken und alle Pins trotzdem noch abgreifen. Meine Idee ist es nun eine eigene Aufsteckplatine zu löten für die Buttons.

    Folgendes ist mir aktuell aufgefallen: der GPIO26, der in der zerobutton.py (für Play/Pause) verwendet wird ist auch im Hifiberry Miniamp als (Shutdown) belegt. Das führte beim drücken von Play/Pause zum Knacken in den Lautsprechern. Ich habe statt GPIO26 nun den GPIO4 genommen. Das Problem tritt wohl bei hailogugo nicht auf, weil der Hifiberry mit einzelnen Leitungen angeschlossen wurde.

    Ich weiche allerdings etwas von der Anleitung ab. Ich habe keine GUI auf dem Raspi. Wichtig ist mir eine schnelle Bootzeit (momentan bin ich bei ca. 10 Sekunden ohne GUI).

    Eine richtige Optimierung des Linux habe ich aber noch nicht begonnen. Gefühlt sind 10 Sekunden noch zu lang. Daran werde ich noch arbeiten.

    Mal eine Frage zur Webgui: Mein dreijähriger hat da wohl noch keine Verwendung für denke ich. Nutzt ihr das wirklich?

    Eine weitere wichtige Modifikation ist die Begrenzung der maximalen Lautstärke fürs Kind. Der Hifiberry Miniamp hat ordentich Dampf. Mit dem 10cm Visaton Lautsprecher fliegen einem schon bei der hälfte der Lautstärke die Ohren weg. Vielleicht interessiert es ja jemanden. Dies kann man in der /etc/asound.conf erreichen über den Parameter "max_dB" (der Standardwert ist wohl 0):


    Das Thema mit dem Ein/Ausschalter habe ich selbst nicht. Kann gemäß der Anleitung perfekt mit GPIO3 / Pin 5 hoch und runterfahren (trotz Hifiberry Miniamp!)
    Finde den Mechanismus fürs Kind aber nicht so perfekt. Länger drücken um Auszuschalten und kurz Drücken fürs einschalten.

    Nächstes Ziel ist daher die automatische Abschaltung des RPis, wenn seit x Minuten keine Musik gespielt wurde. Ausschalten ist daher für mich quasi unnötig und das Kind muss nur den Einschalter betätigen.

    Die Idee mit der Verzögerungsschaltung ist aber auch gut. Ein richtiger Kippschalter ist intuitiver. Aufgrund der schlechten Antwortzeit des RPis aber auch nicht so toll. Werde das mal im Blick behalten.

    • Offizieller Beitrag

    Hi Dellex,

    klar, Ideen habe ich. ;) Schnell wird leider nichts, da das WE verplant ist und ich frühestens Sonntagabend antworten könnte.

    Du kannst mir/uns allerdings helfen, indem Du Dein Script und Pinbelegeung nochmals zeigen würdest. Sorry, aber irgendwann verliert man hier nach mittlerweile über 300 Beiträgen einfach den Überblick wer was wo gemacht hat...:blush:

    Also bitte Script zeigen und die Pins nennen, die Du wofür genommen hast, das wären essentielle Infos um helfen zu können.

    GuteIdee sorry, keine Zeit zum lesen - später evtl. :cool:

  • Hi @4ever-audi,

    schau mal etwas weiter oben, da habe ich ein ähnliches Problem mit den Lautstärkeknöpfen gelöst. Ich verwende anstelle des Hifiberry eine USB-Soundkarte. Anscheinend muss man dem VLC-Player in der Datei /etc/asound.conf expliziet mitteilen, welche Audiokarte verwendet wird - ich vermute auch für den originären Raspberry-Audioausgang. Bei mir existierte die Datei übrigens nicht und ich habe sie wie oben beschrieben erstellt.

    Danach spielte der VLC die Musik und ich konnte die Lautstärke mit den Knöpfen regeln. Je nachdem wir die Audiokarte bei Dir benannt ist, musst DU das Webinterface entsprechend wie oben bzw. bei hailogugo für den HifiBerry modifizieren

    ein schönes WE

    X-Ray

    P.S: Bin gerade auf den Spuren von hailogugo im Hinblick auf die Verzögerungsschaltung. Daher verzögert sich (kleines Wortspiel am Rande) die Fertigstellung der Jukebox noch etwas.

  • Hi hailogugo ,

    genau den thread habe ich vor ein paar Tagen gelesen und die Teile für die Schaltung mit dem NE555 bestellt. Wenn die läuft ist nur noch eine Flanke offen. Es wäre nämlich super, wenn man die Verzögerungsschaltung per Knopf /Schalter oder Softwäreseitig über die Raspberry auslösen kann.

    dann könnte man den shutdown täglich auf eine Zeit (z.B. 20h) einstellen oder über den Knopf ermöglichen. Evt kann man ja ein Relais oder Optoschalter verwenden.


    ein gute WE

    X-Ray

  • Auch wenn es vor zwei Tagen sehr übertrieben geklungen hatte, aber ich war aufrund des Fehlers wirklich total am Ende.

    Meine erste Vermutung, ich habe den Raspberry Pi oder die Hifiberry AMP2 geschrottet, haben mich nicht mehr losgelassen.

    Da mir verständlicher Weise meine Frau bei jedem Einkauf auf die Finger schaut, weil die Kosten inzwischen sich ganz schön

    angehäuft haben, hatte ich durch mein Fehlverhalten ein weiteres Problem.

    Trotdem habe ich die Lage ausgenutzt, dass meine Frau Nachtschicht arbeiten musste, und bin gleich am Samstag Morgen

    nach Frankfurt zum Conrad gefahren und habe mir einen neuen Raspberry Pi gekauft. Nur in der Hoffnung, ich habe dadurch mein

    Problem gelöst. Die Ernüchterung war groß, als mein erster kleiner Testaufbau immer noch nicht ging. Mir ist da schon wieder

    ganz schlecht geworden. Trotz dieser Situation habe ich mich nochmals darauf konzentriert, um den Fehler zu finden.

    Während der Phase, wo ich die LED intergriert habe, musste ich natürlich auch die zerobutton.py anpassen. Nachdem nichts mehr ging,

    habe ich die zerobutton.py aus dem Homeverzeichnis gelöscht und die ursprüngliche wieder vom PC auf den Raspberry Pi kopiert.

    Die Buttonbelegung habe ich natürlich entsprechend angepasst. Aber ihr könnt Euch bestimmt schon denken was ich Trottel vergessen habe!

    sudo chmod a+x zerobutton.py

    Ohne diesen Befehl geht natürlcih garnichts!

    Befehl ausgeführt. Und siehe da es hat wieder funktioniert. Ich war der glücklichste Mensch in diesem Moment.

    Die Muse mit dem ursprünglichen Raspberry PI die Schaltung nochmals aufzubauen hatte ich nicht mehr. Gekauft ist gekauft.

    Eben gerade habe ich nochmals die komplette Schaltung aufgebaut und alles hat funktioniert wie es sollte. Die böse LED werde ich nicht mehr enbauen!

    Die Holzarbeiten mit dem Gehäuse habe ich auch noch Gestern abgeschlossen.

    Jetzt bleibt eigentlich nur noch der Einbau übrig. Eigentlich, wenn da nicht das Löten dabei wäre ;)

    Unser Nachbar hat uns vor ein paar Wochen eine Einweisung in das Löten gegeben. Hat eigentlich ganz gut funktioniert.

    Aber die richtige Verkabelung und die Vorgehensweise macht mir noch Kopfzerbrechen. Dazu werde ich mich aber in Kürze nochmals hier

    mit konkreten Fragen melden.

    Ganz besonders freut mich die schnelle Hilfe hier im Forum!

    Natürlich durch Einige, aber hyle und hailogugo möchte ich besonders mal hervorheben!

    Ein großes Dankeschön!!!

    Bis die Tage,

    Dellex

    PS. Danke für das durchlesen meines nicht wirklich kurzen Textes :)

  • Wie schon erwähnt möchte ich am Wochenende die Elektronik einbauen.

    Wer kann mir mit Tipps beim Einbau bzw. Anschluss der Arcade-Taster helfen?

    Bestelllt habe ich mir eine Streifenrasterplatine zum Löten.

    Leider bin ich gerade auf Geschäftsreise und habe keine Möglichkeiten wie z.B. mit

    Fritzing meine Vorstellung meines Lötplans als Bild anzuzeigen.

    In den inzwischen schon 316 Beiträgen hier, sieht man nur bei einem Beitrag die Box auch von innen. Leider werde ich daraus nicht schlauer.

    Ich versuche mal meinen Plan des Aufbaus genauer zu schildern.

    Vom Ground aus des Raspberry PI gehe ich mit einem Jumperkabel auf einen Streifen der Platine. Von dort aus jeweils ein Kabel auf einen Anschluss des Tasters.

    Vom 3V3 Power des Raspberry per Jumperkabel auf ein beliebiges Loch.

    Von dort aus mit einem geeigneten Draht eine Powerlinie in der Horizontalen auflöten, wobei die Streifen der Platinen senkrecht verlaufen. Den Draht mit einem Lötpunkt eines Streifens verlöten, so dass der Power auf dem Streifen liegt. Dort als erstes den 10k Widerstand anlöten, dann per Kabel auf den zweiten Anschluss des Tasters. Von dort aus wieder auf den Streifen der Platine. Dann den 1k Widerstand anlöten und zum Schluss per Jumperkabel auf den entsprechenden GPIO.

    Die Arcade-Taster sehen so aus.

    Beim Testaufbau hatte ich noch das Problem, dass die Jumperkabel sehr locker auf der GPIO-Leiste lagen. Oft sind mir diese mit der kleinsten Berührung von alleine abgegangen.

    Wie habt ihr dies Problem gelöst?

    Habt ihr das Jumperkabel mit samt Stift auf die Platine festgelötet oder vorher abisoliert?

    Über jede hilfreiche Antwort freue ich mich!

    Nette Grüße,

    Dellex

  • Hallo zusammen !

    Ich habe das gleiche Setup wie bereits beschrieben - und in dem Beitrag von Dellex fotografiert.

    Das Setup klappt soweit problemlos - nur werde ich nicht ganz schlau aus dem RFID Kartenleser...

    Ich habe auch das Modell M302 (USB-Anschluss)

    Er piept auch brav wenn er Strom über den USB Port bekommt.

    Die Diode am Reader leuchtet daraufhin konstant rot.

    Nur, wenn ich eine Karte dagegen halte passiert nichts.

    Laut anderer Beschreibungen sollte er den gleichen Piepton von sich geben !?

    Oder muss er zunächst "installiert" werden ?

    Die Karten sind mit dem Reader zusammen geliefert werden - sollten also kompatibel sein !

    Ich bin gespannt auf Eure Antworten und freue mich auf das Projekt ! :)

    NACHTRAG...

    bei weiterer Recherche ist mir etwas aufgefallen...

    $ sudo lsusb -v liefert :

    Bus 001 Device 004: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

    Device Descriptor:

    bLength 18

    bDescriptorType 1

    bcdUSB 1.10

    bDeviceClass 255 Vendor Specific Class

    bDeviceSubClass 0

    bDeviceProtocol 0

    bMaxPacketSize0 8

    idVendor 0x1a86 QinHeng Electronics

    idProduct 0x7523 HL-340 USB-Serial adapter

    bcdDevice 2.62

    iManufacturer 0

    iProduct 2 USB2.0-Serial

    iSerial 0

    bNumConfigurations 1

    Configuration Descriptor:

    bLength 9

    bDescriptorType 2

    wTotalLength 39

    bNumInterfaces 1

    bConfigurationValue 1

    iConfiguration 0

    bmAttributes 0x80

    (Bus Powered)

    MaxPower 98mA

    Interface Descriptor:

    bLength 9

    bDescriptorType 4

    bInterfaceNumber 0

    bAlternateSetting 0

    bNumEndpoints 3

    bInterfaceClass 255 Vendor Specific Class

    bInterfaceSubClass 1

    bInterfaceProtocol 2

    iInterface 0

    Endpoint Descriptor:

    bLength 7

    bDescriptorType 5

    bEndpointAddress 0x82 EP 2 IN

    bmAttributes 2

    Transfer Type Bulk

    Synch Type None

    Usage Type Data

    wMaxPacketSize 0x0020 1x 32 bytes

    bInterval 0

    Endpoint Descriptor:

    bLength 7

    bDescriptorType 5

    bEndpointAddress 0x02 EP 2 OUT

    bmAttributes 2

    Transfer Type Bulk

    Synch Type None

    Usage Type Data

    wMaxPacketSize 0x0020 1x 32 bytes

    bInterval 0

    Endpoint Descriptor:

    bLength 7

    bDescriptorType 5

    bEndpointAddress 0x81 EP 1 IN

    bmAttributes 3

    Transfer Type Interrupt

    Synch Type None

    Usage Type Data

    wMaxPacketSize 0x0008 1x 8 bytes

    bInterval 1

    Device Status: 0x0000

    (Bus Powered)


    Das ist der RFID Reader... wenn ich den abnabele verschwindet er auch aus der USB-Liste...

    Nur wird der nicht - wie erwartet als Reader identifiziert...

    Irgendwas ist da komisch !??


    LG,

    Mark


    Einmal editiert, zuletzt von mtacki (27. Februar 2018 um 00:00)

  • mtacki

    Du musst den Reader im Skript registrieren. Steht entweder in meiner Anleitung oder auch bei Micz Flor beschrieben.

    Dellex

    Ich habe mir erstmal überlegt was auf die Platine muss. Dann habe ich aufgemalt wo die Teile hinkommen und wie diese verbindet werden. Als alles gelötet war habe ich an den Kabeln mit Klebeband geschrieben wo dieses angeschlossen werden muss.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!