Notre robot Otto utilise des servomoteurs à rotation continue — différents des servos standard :
Le Pico utilise un PWM 16-bit — plus précis que la micro:bit. Les valeurs vont de 0 à 65535 :
# Valeurs PWM pour servo à rotation continue (16-bit, 50Hz)
STOP = 4915 # ~1.5 ms → servo arrêté
CW_MAX = 3276 # ~1.0 ms → rotation max sens aiguille
CCW_MAX = 6553 # ~2.0 ms → rotation max sens inverse
# Formule : duty = (temps_ms / 20ms) * 65535
# 1.0ms → 3276, 1.5ms → 4915, 2.0ms → 6553from machine import Pin, PWM
import time
# Créer les objets PWM sur GP15 et GP16
servo_gauche = PWM(Pin(15))
servo_droit = PWM(Pin(16))
# Régler la fréquence à 50Hz (20ms de période)
servo_gauche.freq(50)
servo_droit.freq(50)
# Définir les constantes de vitesse
STOP = 4915
CW_MAX = 3276
CCW_MAX = 6553
# Envoyer le signal d'arrêt
servo_gauche.duty_u16(STOP)
servo_droit.duty_u16(STOP)from machine import Pin, PWM
import time
servo_gauche = PWM(Pin(15))
servo_droit = PWM(Pin(16))
servo_gauche.freq(50)
servo_droit.freq(50)
STOP = 4915
CW_MAX = 3276
CCW_MAX = 6553
# Test : tourne dans un sens pendant 2 secondes
servo_gauche.duty_u16(CW_MAX)
time.sleep(2)
# Arrête
servo_gauche.duty_u16(STOP)
time.sleep(1)
# Tourne dans l'autre sens
servo_gauche.duty_u16(CCW_MAX)
time.sleep(2)
# Arrête
servo_gauche.duty_u16(STOP)Chaque servo est légèrement différent. Si ton servo tourne encore avec la valeur STOP = 4915, ajuste légèrement :
from machine import Pin, PWM
import time
servo = PWM(Pin(15))
servo.freq(50)
# Trouve le point exact où le servo s'arrête
# Commence par 4915 et ajuste par ±50 jusqu'à arrêt complet
STOP = 4915 # modifie ce nombre si le servo ne s'arrête pas
servo.duty_u16(STOP)
print("Le servo devrait être arrêté. Ajuste STOP si besoin.")Trouve la valeur exacte de STOP pour tes deux servos. Note-les ! Ils peuvent être légèrement différents (ex: servo gauche = 4900, servo droit = 4930).
Programme un servo pour qu'il démarre doucement, accélère progressivement jusqu'à la vitesse max, puis décélère et s'arrête. Utilise une boucle for avec des valeurs PWM intermédiaires.
Branche les deux servos. Envoie CW_MAX sur les deux en même temps. Observe : si les servos sont face à face (comme dans le robot), ils doivent tourner dans des sens opposés pour aller "dans la même direction". Identifie quelles valeurs font "avancer" le robot.