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/ada…601.html#productDownloads
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.
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
import RPi.GPIO as GPIO
import time
servoPIN = 18 # der Servomotor wurde an den GPIO Pin 18 angeschlossen
# moegliche Servopositionen fuer dieses Beispiel
servoPositions = [4,6,8]
# Funktion zum setzen eines Winkels 0,90,180
# als Parameter wird die Position erwartet
def setServoCycle(p, position):
p.ChangeDutyCycle(position)
# eine Pause von 0,5 Sekunden
time.sleep(0.5)
# versuche
try:
# damit wir den GPIO Pin ueber die Nummer referenzieren koennen
GPIO.setmode(GPIO.BCM)
# setzen des GPIO Pins als Ausgang
GPIO.setup(servoPIN, GPIO.OUT)
p = GPIO.PWM(servoPIN, 40) # GPIO als PWM mit 40Hz
p.start(servoPositions[0]) # Initialisierung mit dem ersten Wert aus unserer Liste
# eine Endlos Schleife
while True:
# fuer jeden Wert in der Liste, mache...
for pos in servoPositions:
# setzen der Servopostion
setServoCycle(p, pos)
# durchlaufen der Liste in umgekehrter Reihenfolge
for pos in reversed(servoPositions):
setServoCycle(p, pos)
# wenn das Script auf dem Terminal / der Konsole abgebrochen wird, dann...
except KeyboardInterrupt:
p.stop()
# alle Pins zuruecksetzen
GPIO.cleanup()
Display More
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