respiration.py

LattePanda Alpha · Archivo : respiration.py · Lenguaje : Python · Uso : Respiration LED en PWM piloté par Python

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 Alpha (x86 Intel m3-7Y30, Windows 10 o Linux) con su coprocesador ATmega32U4 compatible Arduino Leonardo en los 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. 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

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")

← Volver a la ficha