servo.py

micro:bit V2 (BBC micro:bit v2) · Archivo : servo.py · Lenguaje : MicroPython · Uso : Piloter un servo d'angle avec le potentiomètre ou les boutons

El servo de ángulo sigue un potenciómetro leído en la entrada analógica pin0: MicroPython genera de forma nativa el periodo de 20 ms y el impulso de 500-2500 µs. Pulsar A impone 90° y el ángulo sale en la matriz.

Material necesario

Una BBC micro:bit V2 (nRF52833, matriz LED 5×5, botones A/B, acelerómetro + brújula, micrófono y altavoz) alimentada por USB o pila. 1 servo SG90 + 1 potenciómetro de 10 kΩ; alimentación externa de 5 V aconsejable para el servo.

Cableado

Potenciómetro: cursor a pin0, pistas a 3V3 y GND. Servo: señal a pin1, + a 5 V externo, masas comunes.

Funcionamiento

read_analog() devuelve 0-1023 convertido a 0-180°; set_analog_pulse_us aplica el impulso estándar. El filtro de 3° evita el temblor del servo cerca del valor.

Ejecución

Abre python.microbit.org, pega el programa MicroPython y envíalo a la placa (la micro:bit aparece como unidad MICROBIT). Pulsa reset para relanzar.

Variantes

Sustituye el potenciómetro por la inclinación (accelerometer.get_x) para un brazo sin piezas, o memoriza posiciones con pulsación larga.

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.

← Volver a la ficha