servo.py
Le servo branché sur le connecteur obéit à une fonction Python : la bibliothèque traduit l'angle en PWM 50 Hz sur le timer du 32U4. Le PC ajoute ce que l'Arduino ne sait pas faire : caméra, IA, base de données.
Matériel requis
Une LattePanda Alpha (x86 Intel m3-7Y30, Windows 10 ou Linux) avec son coprocesseur ATmega32U4 compatible Arduino Leonardo sur les connecteurs 50 broches. 1 servo SG90 + alimentation 5 V externe (jamais le 5 V du connecteur pour plus d'un micro-servo).
Branchement
Signal sur D9 du connecteur 50 broches, + sur l'alimentation externe, masses communes (GND du connecteur relié à celui de l'alimentation).
Fonctionnement
Pin.PWM_OCR configure le timer matériel du MCU ; la fonction angle convertit degrés → rapport cyclique. Le pont série ajoute ~1 ms, invisible pour la mécanique. L'ATmega32U4 est un vrai Leonardo : brochez-le en « Arduino Leonardo » dans l'IDE via son port COM interne. Côté hôte, la bibliothèque DFRobot lattepanda (Python) dialogue avec lui par série.
Pour aller plus loin
Pointage asservi sur détection de visage OpenCV (le vrai intérêt du duo x86+MCU).
servo.py
#!/usr/bin/env python3
# Servo d'angle sur D9 — PinPong commande le PWM du 32U4.
from pinpong.board import Board, Pin
from pinpong.libs.adc_stepper import * # modules PWM/servo inclus
import time
Board().begin()
servo = Pin(Pin.D9, Pin.PWM_OCR)
def angle(degres): # 0..180 -> duty 2,5..12,5 %
duty = 25 + int(degres * 100 / 180) # base 1000 = 100 %
servo.write_analog(duty * 21) # 10 bits : 0..1023
print("Balayage 0-180-0")
for a in list(range(0, 181, 10)) + list(range(180, -1, -10)):
angle(a)
print(f"{a} degres")
time.sleep(0.08)