nano_plot.py
El trazador integrado del IDE tiene límites: este puente Python + matplotlib muestra en directo la primera columna de las medidas del Nano, con desplazamiento sobre 200 puntos. Una dependencia más (matplotlib) para curvas compartibles.
Hardware
Un Arduino Nano clásico (ATmega328P a 16 MHz, formato DIL de 30 patillas para breadboard, USB mini-B, lógica de 5 V, pin RESET abajo a la izquierda). PC con Python 3, pyserial, matplotlib; Nano emitiendo valores por Serial (p. ej. potentiomete-plot.ino).
Cableado
Cable USB estándar; el ritmo 115200 del sketch debe coincidir con el script.
Funcionamiento
Un deque de longitud fija desplaza la ventana; set_data + draw_idle redibuja sin recrear la figura. El reparto por tabulación tolera columnas de depuración extra.
Ejecución
En el IDE de Arduino, selecciona la placa Arduino Nano y el procesador ATmega328P, elige el puerto serie y carga. El rail de 5 V de la placa conviene a sensores de 5 V; si no, usa 3,3 V en pines compatibles.
Variantes
Guarda cada ventana en CSV para el análisis diferido o traza varias columnas (sensor + consigna) en la misma gráfica.
nano_plot.py
#!/usr/bin/env python3
"""Trace en direct les valeurs serie d'un Arduino Nano.
Lit les lignes "valeur\t..." et dessine la premiere colonne.
Usage : python nano_plot.py [port]
"""
import sys
from collections import deque
import matplotlib.pyplot as plt
import serial
PORT = sys.argv[1] if len(sys.argv) > 1 else "COM7"
N = 200 # points affiches
def principal() -> None:
carte = serial.Serial(PORT, 115200, timeout=1)
serie = deque(maxlen=N)
fig, ax = plt.subplots()
ligne, = ax.plot([], [])
ax.set_ylim(0, 5.2)
ax.set_title("Nano A0 (V)")
plt.ion()
fig.show()
while True:
ligne_txt = carte.readline().decode(errors="replace")
try:
valeur = float(ligne_txt.split("\t")[0])
except ValueError:
continue
serie.append(valeur)
ligne.set_data(range(len(serie)), serie)
ax.set_xlim(0, max(len(serie), 50))
fig.canvas.draw_idle()
if __name__ == "__main__":
try:
principal()
except KeyboardInterrupt:
print("Arrete.")