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 3 Delta (x86 Intel N5105, Windows 10/11 ou Ubuntu) avec son coprocesseur Arduino compatible (ATmega32U4) relié aux deux 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. Côté hôte : pip install pinpong puis python3. Côté MCU : l'ATmega32U4 apparaît comme un port COM — programmez-le avec l'Arduino IDE (carte « Arduino Leonardo »).
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)