respiration.py
El PWM del 32U4 sigue una sinusoide calculada en el PC: la rampa es perfectamente suave porque el x86 tiene tiempo de sobra para 50 puntos por segundo. La demostración visual de la pareja anfitrión-MCU.
Hardware necesario
Una LattePanda 3 Delta (x86 Intel N5105, Windows 10/11 o Ubuntu) con su coprocesador Arduino compatible (ATmega32U4) conectado a los dos conectores de 50 pines. 1 LED + resistencia de 330 Ω en D3.
Cableado
Ánodo en D3 por 330 Ω, GND. D3 es un pin PWM del ATmega (marcado ~ en los esquemas).
Funcionamiento
write_analog escribe en el registro OCR del timer; la fase sinusoide se recalcula cada vuelta. La latencia serie (~1 ms) queda tapada por el paso de 20 ms. Lado anfitrión: pip install pinpong y python3. Lado MCU: el ATmega32U4 aparece como puerto COM — prográmelo con el Arduino IDE (placa « Arduino Leonardo »).
Para ir más lejos
Degradado de dirección (color = hora del día), o respiración sincronizada con un audio.
respiration.py
#!/usr/bin/env python3
# Rampe de luminosite sur D3 (PWM du 32U4) — cycle complet 4 s.
from pinpong.board import Board, Pin
import time, math
Board().begin()
led = Pin(Pin.D3, Pin.PWM_OCR)
print("Respiration (Ctrl-C pour sortir)")
try:
t0 = time.time()
while True:
phase = (time.time() - t0) % 4.0 / 4.0 # 0..1
duty = int(512 + 511 * math.sin(2 * math.pi * phase))
led.write_analog(duty) # 0..1023
time.sleep(0.02)
except KeyboardInterrupt:
led.write_analog(0)
print("\nLED eteinte")