[MicroPython] SG90 Servo-Motor mit Einzeltaster ansteuern
Verfasst: Dienstag 5. November 2024, 07:52
Hallo liebe Forengemeinde,
zunächst einmal kurz zu meinen Skills: wenig bis gar nicht vorhanden
Ich baue aktuell eine Shuttersteuerung auf, bei der eine Blende auf Tastendruck für eine vordefinierbare Zeit (bspw. 3 sek) geschlossen werden soll.
Danach soll der Servo wieder in die Ausgangslage drehen.
Okay, wahrscheinlich werden jetzt einige gähnen oder mit den Augen rollen, aber als ich mich das letzte mal intensiver mit sowas beschäftigt habe, war basic auf nem Commodore VC20 der letzte heiße Shice
Hierzu habe ich bereits ein sehr nützliches script gefunden, welches ich im Anschluss anhänge.
Das script stammt von dieser Seite (auf der auch die Beschaltung dargestellt ist): https://www.elektronik-kompendium.de/si ... 706261.htm
In diesem Beispiel wird die Bewegung mittels zweier Taster gesteuert.
Wie bereits geschrieben möchte ich das mittels eines Tasters lösen.
Und jetzt meine Frage: An welcher Stelle muss ich das script abändern? Und vor allem wie?
Ich würde mich freuen, falls mir da jemand Tipps geben könnte!
Vielen Dank im Voraus
Mario
zunächst einmal kurz zu meinen Skills: wenig bis gar nicht vorhanden
Ich baue aktuell eine Shuttersteuerung auf, bei der eine Blende auf Tastendruck für eine vordefinierbare Zeit (bspw. 3 sek) geschlossen werden soll.
Danach soll der Servo wieder in die Ausgangslage drehen.
Okay, wahrscheinlich werden jetzt einige gähnen oder mit den Augen rollen, aber als ich mich das letzte mal intensiver mit sowas beschäftigt habe, war basic auf nem Commodore VC20 der letzte heiße Shice

Hierzu habe ich bereits ein sehr nützliches script gefunden, welches ich im Anschluss anhänge.
Das script stammt von dieser Seite (auf der auch die Beschaltung dargestellt ist): https://www.elektronik-kompendium.de/si ... 706261.htm
Code: Alles auswählen
# Bibliotheken laden
from machine import Pin, PWM
import time
# GPIO für Steuersignal
servo_pin = 28
# GPIO für Taster
btn_pin_up = 14
btn_pin_down = 15
# Wert für 0 Grad
valueMin = 0
# Wert für 180 Grad
valueMax = 180
# Position in Grad
value = 90
# Positionsänderung in Grad
step = 10
# Initialisierung der Taster
btn_up = Pin(btn_pin_up, Pin.IN, Pin.PULL_UP)
btn_up_last = time.ticks_ms()
btn_down = Pin(btn_pin_down, Pin.IN, Pin.PULL_UP)
btn_down_last = time.ticks_ms()
# Initialisierung PWM-Signal
servo = PWM(Pin(servo_pin))
servo.freq(50)
# Taster-Auswertung UP
def push_up(pin):
global value, valueMin, valueMax, step, btn_up, btn_up_last
if pin is btn_up:
# Taster entprellen
if time.ticks_diff(time.ticks_ms(), btn_up_last) > 200:
value = value + step
# Begrenzung des Wertebereichs
if value < valueMin: value = valueMin
if value > valueMax: value = valueMax
servo_control(value)
btn_up_last = time.ticks_ms()
# Taster-Auswertung DOWN
def push_down(pin):
global value, valueMin, valueMax, btn_down, btn_down_last
if pin is btn_down:
# Taster entprellen
if time.ticks_diff(time.ticks_ms(), btn_down_last) > 200:
value = value - step
# Begrenzung des Wertebereichs
if value < valueMin: value = valueMin
if value > valueMax: value = valueMax
servo_control(value)
btn_down_last = time.ticks_ms()
# Funktion: Servo steuern
def servo_control(value, minDuty=1638, maxDuty=8192):
# Tastverhältnis berechnen
newDuty = int(maxDuty - (value - valueMin) * (maxDuty - minDuty) / (valueMax - valueMin) )
# Datenausgabe
print('Grad:', value)
print('Duty:', newDuty)
print()
# PWM-Signal ändern
servo.duty_u16(newDuty)
# Hauptprogramm
print('STRG + C zum Benden')
print()
try:
# Grundposition
servo_control(value)
# Interrupt für Taster UP
btn_up.irq(trigger=Pin.IRQ_FALLING, handler=push_up)
# Interrupt für Taster DOWN
btn_down.irq(trigger=Pin.IRQ_FALLING, handler=push_down)
# Wiederholung (damit das Programm weiterläuft)
while True:
time.sleep(1)
except (KeyboardInterrupt):
pass
finally:
servo.deinit()
print('Beendet')
Wie bereits geschrieben möchte ich das mittels eines Tasters lösen.
Und jetzt meine Frage: An welcher Stelle muss ich das script abändern? Und vor allem wie?
Ich würde mich freuen, falls mir da jemand Tipps geben könnte!
Vielen Dank im Voraus
Mario