servo.py

LattePanda Alpha · Fichier : servo.py · Langage : Python · Usage : Piloter un servo depuis le PC

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)

← Retour à la fiche