servo.py
Le servo d'angle suit un potentiomètre lu sur l'entrée analogique pin0 : la période 20 ms et l'impulsion 500-2500 µs sont générées nativement par MicroPython. Un appui sur A impose 90°, l'angle s'affiche sur la matrice.
Matériel requis
Une BBC micro:bit V2 (nRF52833, matrice 5×5 LED, boutons A/B, accéléromètre + boussole, microphone et haut-parleur) alimentée par USB ou pile. 1 servo d'angle SG90 + 1 potentiomètre 10 kΩ ; alimentation externe 5 V conseillée pour le servo.
Câblage
Potentiomètre : curseur sur pin0, pistes sur 3V3 et GND. Servo : signal sur pin1, + sur 5 V externe, masses communes.
Fonctionnement
read_analog() renvoie 0-1023 converti en 0-180° ; set_analog_pulse_us applique l'impulsion standard. Le filtre de 3° évite le tremblement du servo autour de la valeur.
Exécution
Ouvrez python.microbit.org, collez le programme MicroPython et envoyez-le vers la carte (la micro:bit apparaît comme lecteur MICROBIT). Appuyez sur reset pour relancer.
Variantes
Remplacez le potentiomètre par l'inclinaison (accelerometer.get_x) pour un bras sans pièce, ou mémorisez des positions sur appui long.
servo.py
# Servo d'angle sur pin1 : angle suivi depuis l'entree analogique pin0.
from microbit import *
# MicroPython micro:bit : pulse servo via pin1.set_analog_period(20ms)
# puis set_analog_pulse_us(500..2500).
pin1.set_analog_period(20)
def angle_vers_pulse(a):
# 0 degre = 500 us ; 180 degres = 2500 us (standard servo).
return 500 + int(a * 2000 / 180)
dernier_angle = -1
while True:
brut = pin0.read_analog() # 0..1023 (potentiometre)
angle = brut * 180 // 1023
if abs(angle - dernier_angle) > 3: # filtre anti-bruit
dernier_angle = angle
pin1.set_analog_pulse_us(angle_vers_pulse(angle))
display.show(str(angle))
# Bouton A : position 90 degres ; bouton B : balayage auto.
if button_a.was_pressed():
pin1.set_analog_pulse_us(angle_vers_pulse(90))
display.show(Image.TARGET)
sleep(20)
# Potentiometre : curseur sur pin0, 3V3 d'un cote, GND de l'autre.
# Servo : signal sur pin1, VCC externe 5V, GND commun.