endlagen-kalibrieren
Bauteil: Miuzei Micro Servo 9g · Kategorie: servo
Werkzeug-Sample: die sicheren Endpunkte einer eigenen Mechanik finden. Der Servo wird in feinen 5-µs-Schritten bewegt; steht der Bolzen / die Klappe am gewuenschten Punkt, zeigt A+B den aktuellen Puls-Wert an. Diesen Wert notieren und in bolzen-schalten eintragen.
Hintergrund: Bauteil-README, “Servo an einer Mechanik mit Endanschlag”.
Material
| Anzahl | Bauteil |
|---|---|
| 1 | micro:bit V2.2 |
| 1 | Miuzei Micro Servo 9g (Metallgetriebe) |
| 1 | deine Mechanik (am besten zuerst entkoppelt oder grob mittig montiert) |
| 3 | Jumperkabel |
| — | optional: Batteriebox 3x 1.5 V |
Verkabelung
P0 -> Signal (orange/gelb)
3V -> + (rot) (oder externe Batteriebox, GND gemeinsam)
GND -> - (braun/schwarz)
Details / Batteriebox: Bauteil-README.
Foto der Verkabelung
Nach dem Test ein Foto in wiring/ ablegen und hier einbinden:
Wie der Code funktioniert
set_puls(us)gibt einen Impuls vonusMikrosekunden aus (write_analog(us / 20000 * 1023)).START_USist der Wert beim Einschalten. Der Servo springt beim ersten Tastendruck dorthin - darum vorher entkoppeln oder mittig montieren. Kennst du dein Fenster schon grob,START_USz. B. auf950setzen.- Knopf A gedrueckt halten ->
ussinkt inSCHRITT-Schritten (langsam,sleep(30)), Knopf B ->ussteigt. MIN_US/MAX_USsind harte Grenzen (500 / 2500), damit der Servo nie ueberdreht.- Jede Aenderung geht per
print()auch auf die serielle Konsole (Open Serial im Editor).
Programm
Ganzer Code, Quelle main.py (hier automatisch eingefuegt):
# Sample: endlagen-kalibrieren (Miuzei Micro Servo 9g, Metallgetriebe)
# Board: BBC micro:bit V2.2
# Sprache: MicroPython
#
# Ziel: Die sicheren Endpunkte einer eigenen Mechanik herausfinden.
# Der Servo wird in FEINEN Schritten bewegt, bis der Bolzen / die
# Klappe genau am Anschlag steht - dort A+B druecken, der Sketch
# zeigt den Puls-Wert (in Mikrosekunden). Diesen Wert notieren
# und spaeter in "bolzen-schalten" eintragen.
#
# --------------------------------------------------------------------------
# Verkabelung (wie alle Servo-Samples)
# --------------------------------------------------------------------------
# Servo orange/gelb (Signal) -> P0
# Servo rot (+) -> 3V (oder externe Batteriebox, GND gemeinsam)
# Servo braun/schwarz (-) -> GND
#
# WICHTIG: Am besten mit ENTKOPPELTEM Servo starten oder den Servo grob in
# Mittelstellung montieren. Der Sketch startet bei START_US und springt
# beim ersten Tastendruck genau dorthin.
# --------------------------------------------------------------------------
from microbit import *
START_US = 1500 # Startwert. Kennst du dein Fenster schon grob,
# hier z. B. 950 eintragen, dann startet er dort.
SCHRITT = 5 # us pro Schritt - klein lassen, damit nichts anschlaegt
MIN_US = 500 # harte Grenzen, damit der Servo nicht ueberdreht
MAX_US = 2500
pin0.set_analog_period(20) # 20 ms = 50 Hz
us = START_US
def set_puls(u):
pin0.write_analog(int(u / 20000 * 1023))
set_puls(us)
print("Start bei", us, "us")
while True:
if button_a.is_pressed() and button_b.is_pressed():
# aktuellen Wert ablesen
display.scroll(us)
print("--> aktueller Puls:", us, "us")
sleep(300)
elif button_a.is_pressed():
if us > MIN_US:
us -= SCHRITT
set_puls(us)
print(us)
sleep(30) # langsam, damit man rechtzeitig loslassen kann
elif button_b.is_pressed():
if us < MAX_US:
us += SCHRITT
set_puls(us)
print(us)
sleep(30)
Auf den micro:bit uebertragen
https://python.microbit.org/v/3 -> Code einfuegen -> Connect -> Send to micro:bit. Details: ../../../../docs/setup.md.
Kalibrier-Ablauf
- Servo entkoppelt oder grob mittig montiert anschliessen, Sketch starten.
- Open Serial oeffnen.
- Mechanik ankoppeln (falls entkoppelt gestartet).
- Mit A langsam Richtung erste Endlage fahren. Stoppen, sobald der Servo anfaengt zu brummen oder haerter zu klingen - das ist der Anschlag.
- Ein kleines Stueck mit B zurueck (ca. 30 µs = 6 Schritte) = Sicherheitsmarge.
- A+B druecken -> Wert vom Display / Serial ablesen und als Wert 1 notieren (zusammen mit der Lage, z. B. “Bolzen eingefahren” oder “Box offen”).
- Dasselbe mit B Richtung zweite Endlage -> als Wert 2 notieren (wieder mit Lage, z. B. “Bolzen ausgefahren” oder “Box zu”).
-
Die beiden Werte im Programm eintragen - welche Variable, haengt vom Sample ab:
Lage bolzen-schalten box-startprogramm eingefahren / offen PULS_REINPULS_AUFausgefahren / zu PULS_RAUSPULS_ZUWelcher Wert zu welcher Lage gehoert, entscheidet die Mechanik, nicht die Reihenfolge der Messung. Faehrt es spaeter verkehrt herum, beide Werte einfach tauschen.
Erwartetes Verhalten
- A/B halten -> Servo wandert langsam, Werte laufen im Serial mit
- A+B -> aktueller µs-Wert scrollt ueber die LED-Matrix
Moegliche Erweiterungen
SCHRITT= 1 fuer noch feinere Kalibrierung- zweite Taste am Pin fuer “grob / fein” umschalten
- den zuletzt mit A+B bestaetigten Wert dauerhaft anzeigen