Hi,
ich versuche mich neu mit Python und starte damit den Servo drehen zu lassen. Soweit klappt das.
Nun dachte ich "wie könnte der Servo auf die volle Stunde drehen". Also 3 Uhr 90 Grad; 6 180 Grad; 20 Uhr dazwischen usw...
Wie liesst man die Stunde in Python ein? - Vielleicht hat jemand sowas schon gemacht?
Als Grund-Skript hab ich dieses zum erlernen benutzt:
import RPi.GPIO as gpio
import time
# Servo-GPIO (PWM-GPIO 18, Pin 12)
servopin = 18
# GPIO initialisieren
gpio.setmode(gpio.BCM)
gpio.setup(servopin, gpio.OUT)
# PWM-Frequenz auf 50 Hz setzen
servo = gpio.PWM(servopin, 50)
# PWM starten, Servo auf 0 Grad
servo.start(2.5)
# Umrechnung Grad in Tastverhaeltnis
def setservo(winkel):
if winkel < 0:
winkel = 0
if winkel > 180:
winkel = 180
pwm = winkel/18 + 2.5
servo.ChangeDutyCycle(pwm)
try:
# Endlosschleife Servoansteuerung
while True:
# 90 Grad
setservo(90)
time.sleep(1)
# 180 Grad
setservo(180)
time.sleep(1)
# 0 Grad
setservo(0)
time.sleep(1)
except KeyboardInterrupt:
# Abbruch mit [Strg][C],
# Servo auf 0 Grad, PWM beenden
servo.ChangeDutyCycle(2.5)
servo.stop()
gpio.cleanup()
Quelle: http://www.netzmafia.de/skripten/hardwa ... index.html
Danke für jeden Tipp
JB
Servo als Uhr
- __blackjack__
- User
- Beiträge: 13938
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@JasonB: Schau Dir mal das `datetime`-Modul an.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
@JasonB: eingerückt wird mit 4 Leerzeichen pro Ebene, nicht zwei.
Konstanten schreibt man komplett gross: SERVO_PIN
Man sollte nicht ausführbaren Code und Funktionsdefinitionen mischen und alles in Funktionen packen.
Der Kommentar vor der Funktion setservo ist falsch, da die Funktion ja tatsächlich das macht, was der Funktionsname sagt.
Man sollte immer aufräumen, nicht nur, bei Strg+C.
Konstanten schreibt man komplett gross: SERVO_PIN
Man sollte nicht ausführbaren Code und Funktionsdefinitionen mischen und alles in Funktionen packen.
Der Kommentar vor der Funktion setservo ist falsch, da die Funktion ja tatsächlich das macht, was der Funktionsname sagt.
Man sollte immer aufräumen, nicht nur, bei Strg+C.
Code: Alles auswählen
import RPi.GPIO as gpio
import time
# Servo-GPIO (PWM-GPIO 18, Pin 12)
SERVO_PIN = 18
SERVO_ZERO = 2.5
# Umrechnung Grad in Tastverhaeltnis
def setservo(servo, winkel):
if winkel < 0:
winkel = 0
if winkel > 180:
winkel = 180
pwm = winkel / 18 + SERVO_ZERO
servo.ChangeDutyCycle(pwm)
def main():
# GPIO initialisieren
gpio.setmode(gpio.BCM)
gpio.setup(SERVO_PIN, gpio.OUT)
# PWM-Frequenz auf 50 Hz setzen
servo = gpio.PWM(SERVO_PIN, 50)
servo.start(SERVO_ZERO)
try:
# Endlosschleife Servoansteuerung
while True:
# 90 Grad
setservo(90)
time.sleep(1)
# 180 Grad
setservo(180)
time.sleep(1)
# 0 Grad
setservo(0)
time.sleep(1)
except KeyboardInterrupt:
# Abbruch mit [Strg][C],
pass
finally:
# Servo auf 0 Grad, PWM beenden
servo.ChangeDutyCycle(SERVO_ZERO)
servo.stop()
gpio.cleanup()
if __name__ == "__main__":
main()
Hi,
danke für Eure Hinweise und Korrekturen. Dies sind meine allerersten eigenen Zeilen und ich lerne die Konventionen (noch).
Habe nun mal raus, wie ich eine Stunde als Integer definiere und dann den Winkel berechne.
Also Servo soll bei 18 Uhr auf 270 Grad drehen z.B. - versuche als nächsten Schritt den Servo entsprechend zu bewegen.
Irgendwie muss nun die Variable "winkel" zum Servo. Mmmm
- Widme mich nun dem Code von oben dazu. Hoffe das wird. Sorry, wenn ich noch so untechnisch bin...
Danke nochmals - werde weiter hier stöbern..
JB
danke für Eure Hinweise und Korrekturen. Dies sind meine allerersten eigenen Zeilen und ich lerne die Konventionen (noch).
Habe nun mal raus, wie ich eine Stunde als Integer definiere und dann den Winkel berechne.
Code: Alles auswählen
import time
stunde=time.strftime('%H', time.localtime())
intstunde=int(stunde)
winkel=intstunde*15
print (winkel)
Irgendwie muss nun die Variable "winkel" zum Servo. Mmmm

Danke nochmals - werde weiter hier stöbern..
JB
- __blackjack__
- User
- Beiträge: 13938
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@JasonB: Man formatiert die Stunde nicht erst als Zeichenkette nur um die dann wieder in eine Zahl umzuwandeln. Man kann auch mit dem `time`-Modul die einzelnen Bestandteile eines Zeitpunkts als Zahlen bekommen, aber da würde ich gleich das `datetime`-Modul verwenden.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Code: Alles auswählen
import datetime
stunde = datetime.datetime.now().hour
winkel = stunde * 15
@Sirius3: Wieder etwas gelernt.
Wegen dem Servo habe ich keine Sorgen, denn dann baue ich die Uhr auf "Halbkreis" und verteile die Zeit auf 180 Grad.
(360 Grad-Servos erkennen wohl nicht die aktuelle Gradzahl ohne weiteres, so dass mir das als LernProjekt reicht.)
Schöne Woche
JB
Wegen dem Servo habe ich keine Sorgen, denn dann baue ich die Uhr auf "Halbkreis" und verteile die Zeit auf 180 Grad.
(360 Grad-Servos erkennen wohl nicht die aktuelle Gradzahl ohne weiteres, so dass mir das als LernProjekt reicht.)
Schöne Woche
JB