Servo ansteuern mit Midi Output von E-Piano.

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Grüß euch alle.

    Kurz zu mir ich bin Tischler und mache dieses Jahr meinen Tischlermeister. Leider bin ich ziemlicher Anfänger auf dem Raspberry Gebiet aber es ist wahnsinnig interessant.

    Bei diesem Meisterstück verbaue ich meine E-Piano Tastatur und habe somit auch einen Midi Ausgang in meinem Möbel.

    Und über diesen Midi Ausgang will ich von Midi-Out zu Usb in den Raspberry PI B+ fahren und dann meinen Servo ansteuern. Und damit würde ich gerne eine geheime Schublade öffnen lassen.

    Das wäre mein Servo: https://www.conrad.at/de/p/adafruit-…roductDownloads

    Ich habe zufällig ein Video auf Youtube gefunden, wo jemand schon ein Programm geschrieben hat, wo er den Code zur Verfügung gestellt hat um die Midi Daten auszulesen.

    Und anstatt eines Servomotors steuert er sogar ein Pneumatikpumpe an oder sowas ähnliches.

    Hier das Video und seine Dateien von Github.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    https://github.com/rydercalmdown/batman_door_opener

    Von dem Projekt kann ich schon sehr viel verwenden bis auf die Pneumatik. Da muss ich noch meinen Servo anhängen.

    Im Endeffekt will ich bei einer bestimmten Abfolge den Servomotor um 180 grad drehen, und nach 5 Sekunden soll er sich zurück auf 0 Grad drehen.

    Ich hab mich jetzt auch noch ein wenig informiert um den Servo anzusteuern.

    Bei den meisten ist eine Frequenz von 50Hz, aber so wie ich das aus meinem Datenblatt rauslese hat meiner 40Hz.

    40Hz wären 25 Ms also habe ich bei 0 Grad: (1x25)/100 = 4; und für 180 Grad: (2x25)/100 = 8

    Jedenfalls hab ich einen Testdurchlauf gemacht und mein Servo zuckt aber bei jedem Schritt rum als würde die Spannung oder die Frequenz nicht passen.

    Ich habe den Servo auf die 5Volt angeschlossen. Bräuchte ich dazwischen eventuell einen Widerstand?

    Im Endeffekt wäre der Servo ja sehr selten an also nicht so schlimm aber irgendwann wird er dann auch eingehen wenn er immer so zuckt oder?

    Hier wäre noch der Code den ich getestet hab

    Ich kann leider erst am Wochenende den Midi Out testen weil mein Klavier schon in einem Prototypen in der Firma verbaut ist.

    Aber habt ihr eine Idee was es mit dem Servo haben könnte?

    Und vielleicht eine saubere Lösung um die beiden Codes miteinander zu verbinden?

    Würde mich sehr über eure Antworten freuen

    Mfg Phiano

  • Phiano Willkommen im Forum!

    Ich nehme mal an, dass der Raspi/GPIO viel zu wenig Strom liefern kann für (D)einen Servo.

    Aus dem Datenblatt:

    Zitat

    The Raspberry Pi is a wonderful little computer, but one thing it isn't very good at is

    controlling DC Servo Motors - these motors need very specific and repetitive timing pulses

    to set the position. Instead of asking the Pi Linux kernel to send these signals, pop on this

    handy HAT! It adds the capability to control 16 Servos with perfect timing. It can also do

    PWM up to 1.6 KHz with 12 bit precision, all completely free-running.

    Zitat

    Current Draw Requirements

    Nearly all servos are designed to run on about 5 or 6v. Keep in mind that a lot of servos

    moving at the same time (particularly large powerful ones) will need a lot of current. Even

    micro servos will draw several hundred mA when moving. So me High-to rque servo s

    will draw mo re than 1A each under load.

    Du benötigst passende Zusatzhardware (z.B. ein HAT), mit zusätzlicher Spannungsversorgung für die Servos. Siehe z.B. im Datenblatt.

  • Okay weil die Mindestspannung genau 5v ist oder?

    Würde einer mit 4,8 Volt funktionieren ohne HAT?

    Ich hab jetzt mal das Paket von dem Video von Github drüber gespielt und der Raspi hat beim Pip geschriehen

    "the scripts pip are installed in which is not on path"

    habe mich mal auf google umgesehen aber das einzige was ich gefunden hab ist das hier

    Add export PATH="$PATH:/Library/Frameworks/Python.framework/Versions/3.8/bin" to the .bash_profile file in your home dir. From terminal: $ echo -e 'export PATH="$PATH:/Library/Frameworks/Python.framework/Versions/3.8/bin"' >> $HOME/.bash_profile

    Kann mir das jemand nicht so verwirrend sagen was ich genau eingeben muss damit der Pfad geändert wird?

    habe einige Sachen mit export probiert aber daraus wurde kein richtiger Befehl.

    und wie habe ich keine Berechtigung wenn ich den Befehl "~/.bashrc" eingebe?

  • Sorry, Phiano, ich glaube, bezüglich der Servo-Ansteuerung musst Du Dich noch deutlich weiter informieren.

    Oder vielleicht antwortet hier noch jemand der Experten. Ich bin es bei Servos absolut nicht.

    Und das mit der Installation aus dem Github-Repo erscheint mir auch etwas "merkwürdig".

    Da geht Python2 und Python3 teilweise durcheinander. Oder zumindest scheint es mir so.

    Wenn Du hier Probleme beschreibst, ist es für alle hilfreich, wenn Du es genau beschreibst und die Kommandos und auch die Fehlermeldungen komplett postest. Und zwar als Codeblock. Das ist das Icon </> oben in der Editorzeile.

  • Hab mir jetzt noch einen HAT und einen 4,8 Volt bestellt. Werde einfach mal am Freitag testen.

    Und die Midi Ausgabe werde ich auch gleich testen ob es funktioniert trotz des "Fehlers". Wo ich nicht genau weiß ob es überhaupt ein Fehler ist da es ja nur einen Pfad betrifft.

    Ich kann heute Abend nochmal sein Projekt ausführen und den Codeblock hier posten.

  • Okay also ich hab jetzt mal beides getestet. 4,8 Volt funktioniert soweit und der Hat mit dem 5 Volt auch.

    Das nächste was ich getestet hab war der MIDI Output vom E-Piano.

    Das war echt schwieriger als gedacht überhaupt zu prüfen ob da was rausgelesen werden kann. Mein Mac hat nämlich nichts erkannt.

    Also mit meinem Windows Rechner und dem Programm MIDI Ox konnte ich dann die Daten auslesen bzw. die Tasten die ich drücke.

    Da ich kein Usb Anschluss habe wie der in dem Video, bräuchte ich an der Stelle eine andere Lösung.

    Hat irgendjemand von euch eine Idee wie ich die Midi Daten mit dem Raspberry auslesen kann durch ein MIDI Interface?

    Hab bis jetzt nur Programme gefunden wo es in die andere Richtung funktioniert. Also wo der Raspi MIDI Daten verschickt.

    EDIT: Im Requirements Ordner sind ja 4 Sachen die er für sein Programm benötigt.

    Code
    mido==1.2.9
    python-rtmidi==1.4.7
    nanoleafapi==2.0.0
    RPi.GPIO

    Das Mido wird ja zum auslesen verwendet oder?

    Würde das in meinem Fall auch irgendwie funktionieren können?

    Das Problem ist nähmlich wenn ich sein Programm ausführe dann erkennt er die Tasten nicht.

    Aber das liegt wohl auch daran, dass er an seinen E-Piano mit einer USB Schnittstelle arbeitet und

    nicht direkt mit dem MIDI IN/OUT Ausgängen.

  • Also hier ist ein Code der auf Windows über Terminal mit Python3 funktioniert.

    Ich kann die Sequenz auch auslösen mit den Klaviertasten. Aber wenn ich den gleichen Code mit dem Raspi probiere dann funktioniert es nicht.

    Habt ihr ne Ahnung woran das liegen könnte?

    Da ich hier kaum antworten bekomme wollte ich mal nebenbei fragen ob ich irgendwo anders in dem Forum meinen Beitrag posten soll?

    Ich finde das Projekt ziemlich interessant aber es kommt mir vor als würde ich alleine damit stehen ;(

  • Ich finde das Projekt ziemlich interessant aber es kommt mir vor als würde ich alleine damit stehen

    Das ist auch ein ziemlich "exotisches" Projekt, wovon hier sehr wahrscheinlich keiner genug Erfahrungen hat um helfen zu können.


    Okay hat sich erledigt es funktioniert jetzt.

    :bravo2:

    Ich bin neugierig. Woran lag es denn?

  • In der Zeile 29 bei i = pygame.midi.Input(input_id)

    habe ich bei der (input_id) einfach nur 3 reinschreiben müssen weil das die ID von meinem Piano war.

    die kann man auch auslesen mit print input_id.

Jetzt mitmachen!

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