servo.py
El servo en el conector obedece a una función Python: la librería traduce el ángulo a PWM de 50 Hz en el timer del 32U4. El PC añade lo que Arduino no sabe: cámara, IA, base de datos.
Hardware necesario
Una LattePanda Alpha (x86 Intel m3-7Y30, Windows 10 o Linux) con su coprocesador ATmega32U4 compatible Arduino Leonardo en los conectores de 50 pines. 1 servo SG90 + alimentación externa de 5 V (nunca el 5 V del conector para más de un micro-servo).
Cableado
Señal en D9 del conector de 50 pines, + a la alimentación externa, masas comunes (GND del conector unido al de la alimentación).
Funcionamiento
Pin.PWM_OCR configura el timer material del MCU; la función angle convierte grados → ciclo de trabajo. El puente serie añade ~1 ms, invisible para la mecánica. El ATmega32U4 es un Leonardo auténtico: prográmelo como « Arduino Leonardo » en el IDE por su puerto COM interno. En el anfitrión, la librería Python lattepanda de DFRobot habla con él por serie.
Para ir más lejos
Apuntado servido por detección de rostro OpenCV (el verdadero interés del dúo 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)