a-b-drehen
Bauteil: Miuzei Micro Servo 9g · Kategorie: servo
Knopf A gedrueckt halten dreht den Servo in die eine Richtung, Knopf B in die andere. A + B zusammen bringt ihn zurueck auf 0 Grad. Erstes Servo-Beispiel - die Verkabelung ist fuer alle Servo-Samples gleich.
Material
| Anzahl | Bauteil |
|---|---|
| 1 | micro:bit V2.2 |
| 1 | Miuzei Micro Servo 9g (Metallgetriebe) |
| 3 | Jumperkabel (oder Krokoklemmen + Servo-Adapter) |
| — | optional: Batteriebox 3x 1.5 V (siehe Stromversorgung) |
Masse fuers CAD: ../../../../hardware/servo/miuzei-9g-servo/
Verkabelung
micro:bit Servo (3-poliges Kabel)
+---------+ +---------------------+
| P0 |--------| orange/gelb Signal |
| 3V |--------| rot + |
| GND |--------| braun/schwarz - |
+---------+ +---------------------+
Stromversorgung: Ein einzelner unbelasteter Servo laeuft meist direkt am
3V-Pin. Zittert er oder startet der micro:bit neu -> externe Batteriebox
(3x 1.5 V = 4.5 V): + an Servo rot, - an Servo braun und an micro:bit
GND (gemeinsame Masse), Signal an P0, 3V bleibt frei. Verdrahtung im
Detail: Bauteil-README, “Anschluss mit externer Batteriebox”.
Foto der Verkabelung
Nach dem Test ein Foto in wiring/ ablegen und hier einbinden:
Wie der Code funktioniert
pin0.set_analog_period(20)+servo_winkel(grad)wie in allen Servo-Samples (rechnet 0..180 Grad inwrite_analog(26..123)um).- A + B zuerst pruefen (
button_a.is_pressed() and button_b.is_pressed()), sonst wuerde ein Druck auf beide nur hoch- oder runterdrehen. is_pressed()(nichtwas_pressed()): solange der Knopf gehalten wird, aendert sichwinkeljeden Durchlauf umSCHRITTGrad.SCHRITTundsleep(20)bestimmen zusammen das Dreh-Tempo.- Die Anzeige wird nur bei Aenderung neu gesetzt - sonst flackert die Matrix.
Programm
Ganzer Code, Quelle main.py (hier automatisch eingefuegt):
# Sample: a-b-drehen (Miuzei Micro Servo 9g, Metallgetriebe)
# Board: BBC micro:bit V2.2
# Sprache: MicroPython
#
# Ziel: Knopf A gedrueckt halten -> Servo dreht in die eine Richtung,
# Knopf B gedrueckt halten -> in die andere Richtung.
# A + B zusammen -> zurueck auf 0 Grad.
#
# --------------------------------------------------------------------------
# Verkabelung (3-poliges Servokabel)
# --------------------------------------------------------------------------
# Servo orange/gelb (Signal) -> P0
# Servo rot (+) -> 3V (oder externe Batteriebox, dann GND
# gemeinsam - siehe Bauteil-README)
# Servo braun/schwarz (-) -> GND
# --------------------------------------------------------------------------
from microbit import *
pin0.set_analog_period(20) # 20 ms = 50 Hz
def servo_winkel(grad):
grad = max(0, min(180, grad))
duty = int(26 + grad * (123 - 26) / 180) # ca. 0.5 ms .. 2.4 ms
pin0.write_analog(duty)
SCHRITT = 3 # Grad pro Schleifendurchlauf (Tempo)
winkel = 0
servo_winkel(winkel)
letzte_anzeige = -1
while True:
# A + B zuerst pruefen, sonst wuerde es nur hoch- oder runterzaehlen
if button_a.is_pressed() and button_b.is_pressed():
winkel = 0
elif button_a.is_pressed():
winkel = winkel + SCHRITT
elif button_b.is_pressed():
winkel = winkel - SCHRITT
winkel = max(0, min(180, winkel))
servo_winkel(winkel)
# Anzeige nur bei Aenderung neu setzen (kein Flackern)
if winkel != letzte_anzeige:
display.show(str(winkel // 10)) # grobe Anzeige 0..18
letzte_anzeige = winkel
sleep(20)
Auf den micro:bit uebertragen
https://python.microbit.org/v/3 -> Code einfuegen -> Connect -> Send to micro:bit. Details: ../../../../docs/setup.md.
Erwartetes Verhalten
- Start: Servo auf 0 Grad, Matrix zeigt
0 - A halten -> Servo dreht Richtung 180 Grad (Anzeige zaehlt hoch bis
18) - B halten -> Servo dreht zurueck Richtung 0 Grad
- A + B zusammen -> Servo springt auf 0 Grad
Moegliche Erweiterungen
SCHRITTgroesser/kleiner fuer schnelleres/langsameres Drehen- kurzer Tastendruck = kleiner Schritt, langer Druck = schnelles Drehen
- Endanschlaege enger setzen (z. B. 10..170 Grad), falls der Servo brummt