analogique.py
El ADC de 10 bits del ATmega sube a un CSV con marca de tiempo en el disco del PC: la tarjeta de adquisición de 20 € con almacenamiento ilimitado, correcciones de calibración en pandas en vez de C.
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 sensor analógico 0-5 V (el 32U4 es de 5 V, al revés que los SBC de 3,3 V).
Cableado
Señal en A0 del conector, GND común. Entrada 5 V máx: los sensores 0-10 V piden divisor.
Funcionamiento
read_analog dispara una conversión en el MCU y devuelve el bruto por el puente serie; el CSV se escribe con flush continuo. 10 Hz es la zona cómoda del puente. 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
Trazador en tiempo real con matplotlib (el PC lo permite), o alertas por umbral con notificación de escritorio.
analogique.py
#!/usr/bin/env python3
# Capteur analogique sur A0 du MCU -> CSV cote hote, 10 Hz.
from pinpong.board import Board, Pin
import time, csv, datetime
Board().begin()
capteur = Pin(Pin.A0, Pin.IN)
with open("mesures.csv", "a", newline="") as f:
w = csv.writer(f)
if f.tell() == 0:
w.writerow(["horodatage", "brut", "volts"])
print("Acquisition 10 Hz (Ctrl-C pour finir)")
try:
while True:
brut = capteur.read_analog() # 0..1023 (10 bits MCU)
volts = brut * 5.0 / 1023.0 # reference 5 V du 32U4
w.writerow([datetime.datetime.now().isoformat(timespec="seconds"),
brut, round(volts, 3)])
f.flush() # survit a un crash
time.sleep(0.1)
except KeyboardInterrupt:
print("\nJournal clos.")