📈 Arduino • Processing • Grafico seriale

Grafico con Arduino e Processing usando un potenziometro

Leggiamo un valore analogico con Arduino, lo inviamo al PC tramite porta seriale e lo trasformiamo in un grafico in tempo reale con Processing.

DifficoltàIntermedia
IngressoA0
ComunicazioneSeriale 9600 baud
In poche parole: Arduino misura la posizione del potenziometro, invia il valore via USB/seriale e Processing legge la stessa porta per disegnare il grafico sullo schermo del computer.

Cosa imparerai

  • come leggere un ingresso analogico;
  • come inviare dati con Serial.println();
  • come leggere la porta seriale da Processing;
  • come convertire una stringa seriale in un numero;
  • come usare map() per adattare i valori all’altezza del grafico;
  • come sostituire il potenziometro con altri sensori analogici.

Come funziona il progetto

In questo progetto Arduino invia al computer i valori del potenziometro, compresi indicativamente tra 0 e 1023. Processing riceve ogni valore terminato da un carattere di nuova riga e lo rappresenta graficamente.

Grafico Arduino con Processing

Esempio del grafico realizzato con Arduino e Processing.

Materiale necessario

🔌 Arduino Uno
🎚️ Potenziometro
🧩 Breadboard
🔗 Cavetti jumper
💻 Computer
🖥️ Processing

🧰 Kit Arduino consigliato

Molti progetti del sito utilizzano potenziometri, breadboard, cavetti e componenti di base. Un kit completo può essere comodo per iniziare.

👉 Guarda il kit Arduino consigliato

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

📘 Vuoi imparare Arduino passo dopo passo?

Se vuoi approfondire e realizzare progetti più completi, puoi dare un’occhiata anche ai miei libri dedicati ad Arduino. All’interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.

👉 Scopri i miei libri su Arduino

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

Software necessario

Oltre all’Arduino IDE serve Processing, usato per leggere la seriale e disegnare il grafico.

👉 Vai alla pagina di Processing

Schema del circuito

Schema Arduino potenziometro per grafico Processing

schema del potenziometro collegato ad Arduino.

Collegamento del potenziometro

Pin potenziometroCollegamento
Estremo 15 V
Centrale / cursoreA0
Estremo 2GND
Concetto chiave: ruotando il potenziometro cambia la tensione presente su A0. L’ADC di Arduino converte questa tensione in un valore digitale.

Codice Arduino commentato

Arduino: invio del valore analogico alla seriale
// ==========================================================
// ARDUINO + PROCESSING
// Invio di un valore analogico via seriale
// ==========================================================

void setup() {

 // Avvia la comunicazione seriale a 9600 baud.
 // Processing dovrà usare la stessa velocità.
 Serial.begin(9600);
}

void loop() {

 // Legge il potenziometro collegato ad A0.
 // Su Arduino Uno il valore è normalmente 0...1023.
 int valore = analogRead(A0);

 // Invia il valore seguito da un carattere di nuova riga.
 // Processing userà '\n' per capire quando una misura è completa.
 Serial.println(valore);

 // Piccola pausa tra una misura e la successiva.
 delay(2);
}

Codice Processing commentato

Processing: grafico in tempo reale
import processing.serial.*;

// Porta seriale usata per comunicare con Arduino
Serial myPort;

// Posizione orizzontale corrente del grafico
int xPos = 1;

// Valore ricevuto dalla seriale
float inByte = 0;

void setup() {

 // Dimensione della finestra del grafico
 size(400, 300);

 // Mostra nell'area console tutte le porte seriali disponibili.
 // Serve per individuare quella usata da Arduino.
 println(Serial.list());

 // Apre la prima porta dell'elenco a 9600 baud.
 // Se Arduino non è sulla porta [0], modifica l'indice.
 myPort = new Serial(this, Serial.list()[0], 9600);

 // Genera serialEvent() solo quando arriva '\n'
 myPort.bufferUntil('\n');

 // Sfondo nero iniziale
 background(0);
}

void draw() {

 // Disegna una linea verticale proporzionale
 // al valore ricevuto dalla seriale.
 stroke(127, 34, 255);
 line(xPos, height, xPos, height - inByte);

 // Quando raggiunge il bordo destro,
 // riparte da sinistra e pulisce il grafico.
 if (xPos >= width) {
 xPos = 0;
 background(0);
 }
 else {
 xPos++;
 }
}

void serialEvent(Serial myPort) {

 // Legge una riga completa dalla seriale
 String inString = myPort.readStringUntil('\n');

 if (inString != null) {

 // Elimina spazi e caratteri superflui
 inString = trim(inString);

 // Converte la stringa ricevuta in numero
 inByte = float(inString);

 // Mostra il valore nella console
 println(inByte);

 // Converte 0...1023 nell'altezza
 // disponibile nella finestra del grafico.
 inByte = map(inByte, 0, 1023, 0, height);
 }
}

Come lavorano insieme Arduino e Processing

ArduinoProcessing
Legge A0Attende dati seriali
Invia un numero con Serial.println()Riceve una riga completa
Trasmette a 9600 baudApre la porta a 9600 baud
Produce valori 0–1023Li converte nell’altezza del grafico

La scelta della porta seriale

Nel codice Processing apre Serial.list()[0]. Questo funziona solo se Arduino è effettivamente la prima porta dell’elenco.

La riga println(Serial.list()); serve proprio per vedere le porte disponibili. Se Arduino compare, per esempio, come terza voce, dovrai usare Serial.list()[2].

Errore molto comune: non puoi tenere contemporaneamente aperto il Monitor Seriale dell’Arduino IDE e usare la stessa porta in Processing. Chiudi il Monitor Seriale prima di avviare lo sketch Processing.

Risultato del progetto

Finestra Processing con grafico Arduino

Esempio dell’output grafico visualizzato in Processing.

Risultato Arduino grafico Processing

Usare altri sensori

Il potenziometro è soltanto il modo più semplice per generare un valore analogico variabile. Lo stesso principio può essere utilizzato con molti sensori analogici.

  • fotoresistenza LDR;
  • sensore di temperatura analogico;
  • sensore di pressione;
  • sensore di luce;
  • joystick;
  • sensori di umidità o livello con uscita analogica.

Velocità di aggiornamento

Nello sketch Arduino il tempo tra due misure è controllato da delay(2). Aumentando questo valore il grafico si aggiorna più lentamente; diminuendolo arrivano più campioni in un secondo.

Per applicazioni più evolute è possibile sostituire delay() con una temporizzazione tramite millis() o micros().

Scarica i file originali

⬇️ Processing: arduino_processing.pde

⬇️ Arduino: arduinograficoprocessing.ino

Debug rapido

  • controlla che il cursore del potenziometro sia collegato ad A0;
  • verifica che Arduino e Processing usino entrambi 9600 baud;
  • controlla quale indice di Serial.list() corrisponde ad Arduino;
  • chiudi il Monitor Seriale prima di avviare Processing;
  • se il grafico rimane fermo, verifica che Arduino stia realmente inviando dati;
  • se Processing segnala porta occupata, chiudi eventuali programmi che la stanno usando.

Varianti del progetto

  • visualizzare più sensori contemporaneamente;
  • disegnare una linea continua invece di barre verticali;
  • aggiungere scala e griglia;
  • mostrare anche il valore numerico;
  • salvare i campioni su file;
  • aggiungere pulsanti nell’interfaccia Processing per inviare comandi ad Arduino.

Cosa devi ricordare

  • Arduino acquisisce il dato analogico.
  • Serial.println() invia ogni misura al PC.
  • Processing legge la porta seriale e interpreta ogni riga.
  • map() adatta il valore 0–1023 all’altezza del grafico.
  • La porta seriale scelta in Processing deve essere quella di Arduino.
  • Lo stesso sistema può rappresentare molti altri sensori analogici.

Domande frequenti

Perché Processing non trova Arduino?

Controlla l’elenco prodotto da Serial.list() e modifica l’indice usato in Serial.list()[0].

Posso usare il Monitor Seriale insieme a Processing?

Normalmente no sulla stessa porta seriale, perché un solo programma alla volta può aprirla.

Posso usare un sensore al posto del potenziometro?

Sì. Se il sensore fornisce un’uscita analogica compatibile con Arduino, puoi inviare il suo valore allo stesso modo.

Posso visualizzare due sensori contemporaneamente?

Sì, ma devi definire un formato seriale che contenga più valori e modificare lo sketch Processing per separarli e disegnarli.