servo.py

LattePanda 3 Delta (id : lattepanda-3) · 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 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)

← Retour à la fiche