PROGETTI ARDUINO

  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti
  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti

Progetto 137
​ Visualizzazione dati con Serial Plotter

🚀 Introduzione

Vuoi osservare l’andamento dei sensori sotto forma di grafico, senza utilizzare un display esterno? 📈💻

In questo progetto utilizzerai il Serial Plotter dell’Arduino IDE per visualizzare in tempo reale temperatura, umidità e luminosità ambientale.
​
Arduino leggerà i dati da un sensore DHT22 e da una fotoresistenza, applicherà un piccolo filtro alle misurazioni e invierà i valori al computer attraverso la porta USB.

👉 Il Serial Plotter trasforma automaticamente i numeri ricevuti in linee grafiche, permettendo di osservare variazioni, picchi e tendenze.

🎯 Cosa realizzerai
​

Con Arduino creerai un sistema che:
  • 🌡️ misura la temperatura ambientale;
  • 💧 misura l’umidità relativa;
  • 💡 rileva il livello di luminosità;
  • 📉 filtra il rumore della fotoresistenza;
  • 💻 invia i dati al computer;
  • 📊 visualizza tre grafici contemporaneamente;
  • 🔄 aggiorna automaticamente le misurazioni;
  • ⚠️ segnala gli errori del sensore DHT22;
  • ⏱️ utilizza millis() senza bloccare Arduino;
  • 🧮 converte i valori in scale facilmente confrontabili.

🧰 Materiale necessario


  • 1x Arduino UNO;
  • 1x sensore DHT22;
  • 1x resistenza da 10 kΩ, se utilizzi il DHT22 senza modulo;
  • 1x fotoresistenza LDR;
  • 1x resistenza da 10 kΩ per il partitore;
  • cavetti jumper;
  • breadboard;
  • cavo USB;
  • computer con Arduino IDE.
​
Il cavo USB viene utilizzato sia per alimentare Arduino sia per inviare i dati al Serial Plotter.

🛒 Non hai ancora i componenti?

Molti dei progetti presenti su progettiarduino.com utilizzano componenti elettronici di base come LED, resistenze, sensori e breadboard.
Se stai iniziando con Arduino, il modo più semplice è utilizzare un kit completo per principianti, che include quasi tutti i componenti necessari per realizzare molti dei progetti presenti sul sito.

👉 Kit Arduino consigliato:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4b3dxjW

📘 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.
https://amzn.to/4rfzjXE
​

📚 Librerie necessarie
​

Per utilizzare il sensore DHT22 devi installare:
  • DHT sensor library;
  • Adafruit Unified Sensor.
​
Per installarle:
  1. apri Arduino IDE;
  2. seleziona Sketch → Include Library → Manage Libraries;
  3. cerca DHT sensor library;
  4. installa la libreria sviluppata da Adafruit;
  5. installa anche Adafruit Unified Sensor quando richiesto.
​
Per il Serial Plotter non è necessaria alcuna libreria aggiuntiva.

🔌 Schema di collegamento
​

Sensore DHT22
Se utilizzi un modulo DHT22 già assemblato:
  • VCC → 5V;
  • GND → GND;
  • DATA → pin digitale 2.
​
Se utilizzi il sensore senza modulo:
  • pin 1 VCC → 5V;
  • pin 2 DATA → pin digitale 2;
  • pin 3 → non collegato;
  • pin 4 GND → GND;
  • resistenza da 10 kΩ tra DATA e 5V.
Osserva il sensore dalla parte della griglia frontale prima di identificare i pin.

Fotoresistenza LDR
Realizza un partitore di tensione:
  • un terminale della fotoresistenza → 5V;
  • terminale opposto → A0;
  • resistenza da 10 kΩ tra A0 e GND.
Il punto centrale tra fotoresistenza e resistenza deve essere collegato al pin analogico A0.
Foto

💻 Codice Arduino
​

Il programma invia al computer tre valori:
  • temperatura;
  • umidità;
  • luminosità.
​
Ogni dato viene preceduto da un’etichetta:
Temperatura:23.4
Umidita:51.0
Luminosita:67


Le misurazioni vengono separate tramite tabulazioni e terminate con un ritorno a capo.
​
Questo formato permette al Serial Plotter di riconoscere automaticamente le tre serie di dati.
​/*
  ============================================================
  Progetto 137 - Visualizzazione dati con Serial Plotter
  Mostra temperatura, umidita e luminosita in tempo reale
  ============================================================
*/

#include <DHT.h>

// Configurazione del sensore DHT22
#define PIN_DHT 2
#define TIPO_DHT DHT22

// Pin analogico collegato alla fotoresistenza
#define PIN_LUCE A0

// Intervallo tra due aggiornamenti.
// Il DHT22 non deve essere interrogato troppo velocemente.
const unsigned long INTERVALLO_LETTURA = 2000;

// Numero di campioni utilizzati per filtrare
// la lettura della fotoresistenza
const byte NUMERO_CAMPIONI = 20;

// Oggetto utilizzato per controllare il DHT22
DHT dht(PIN_DHT, TIPO_DHT);

// Ultimi valori ambientali validi
float temperatura = 0.0;
float umidita = 0.0;
int luminositaPercentuale = 0;

// Indica se l'ultima lettura del DHT22 è valida
bool sensoreDhtValido = false;

// Memorizza il momento dell'ultimo aggiornamento
unsigned long ultimaLettura = 0;

void setup() {
  // Avvia la comunicazione seriale.
  // La stessa velocità deve essere selezionata
  // anche nella finestra del Serial Plotter.
  Serial.begin(115200);

  // Avvia il sensore DHT22
  dht.begin();

  // Attende brevemente la stabilizzazione del sensore
  delay(1000);

  // Esegue subito una prima acquisizione
  leggiSensori();
  inviaDatiSeriali();

  ultimaLettura = millis();
}

void loop() {
  // Esegue una nuova lettura quando è trascorso
  // l'intervallo previsto, senza usare delay()
  if (millis() - ultimaLettura >= INTERVALLO_LETTURA) {
    ultimaLettura = millis();

    leggiSensori();
    inviaDatiSeriali();
  }
}

void leggiSensori() {
  // Legge temperatura e umidità dal DHT22
  float nuovaTemperatura = dht.readTemperature();
  float nuovaUmidita = dht.readHumidity();

  // Aggiorna i valori soltanto quando
  // entrambe le letture sono valide
  if (!isnan(nuovaTemperatura) &&
      !isnan(nuovaUmidita)) {
    temperatura = nuovaTemperatura;
    umidita = nuovaUmidita;
    sensoreDhtValido = true;
  } else {
    // In caso di errore conserva gli ultimi dati validi
    // e segnala il problema attraverso una serie dedicata
    sensoreDhtValido = false;
  }

  // Acquisisce una lettura filtrata della fotoresistenza
  int valoreLuce = leggiLuceFiltrata();

  // Converte il valore analogico in una percentuale
  luminositaPercentuale = map(
    valoreLuce,
    0,
    1023,
    0,
    100
  );

  // Mantiene il risultato tra 0 e 100
  luminositaPercentuale = constrain(
    luminositaPercentuale,
    0,
    100
  );
}

int leggiLuceFiltrata() {
  unsigned long somma = 0;

  // Esegue più letture ravvicinate
  // per ridurre oscillazioni e rumore
  for (byte i = 0; i < NUMERO_CAMPIONI; i++) {
    somma += analogRead(PIN_LUCE);

    // Breve pausa necessaria alla stabilizzazione dell'ADC
    delayMicroseconds(200);
  }

  // Restituisce la media dei campioni acquisiti
  return somma / NUMERO_CAMPIONI;
}

void inviaDatiSeriali() {
  /*
    Ogni serie utilizza il formato:

    Etichetta:valore

    Le serie vengono separate con una tabulazione.
    println() termina il gruppo di dati e permette
    al Serial Plotter di disegnare un nuovo punto.
  */

  Serial.print("Temperatura:");
  Serial.print(temperatura, 1);
  Serial.print('\t');

  Serial.print("Umidita:");
  Serial.print(umidita, 1);
  Serial.print('\t');

  Serial.print("Luminosita:");
  Serial.print(luminositaPercentuale);
  Serial.print('\t');

  // Invia 1 quando il DHT22 funziona
  // e 0 quando l'ultima lettura è fallita
  Serial.print("StatoDHT:");

  if (sensoreDhtValido) {
    Serial.println(1);
  } else {
    Serial.println(0);
  }
}
​Apri il Serial Plotter impostando 115200 baud. Vedrai quattro linee: temperatura, umidità, luminosità e stato del DHT22.

⚙️ Come funziona
​

Arduino legge temperatura e umidità dal sensore DHT22 ogni due secondi.
La fotoresistenza viene letta più volte e i risultati vengono mediati per ridurre il rumore.
​
I valori vengono quindi inviati alla porta seriale con questa struttura:
Serial.print("Temperatura:");
Serial.print(temperatura);
Serial.print('\t');

Serial.print("Umidita:");
Serial.print(umidita);
Serial.print('\t');

Serial.print("Luminosita:");
Serial.println(luminosita);


La tabulazione \t separa le diverse serie.

Serial.println() termina la riga e indica al Serial Plotter che il gruppo di misurazioni è completo.

📊 Come aprire il Serial Plotter
​

Dopo aver caricato il programma:
  1. collega Arduino al computer;
  2. apri Arduino IDE;
  3. seleziona la porta corretta;
  4. vai su Tools → Serial Plotter;
  5. imposta la velocità a 115200 baud.
​
Dovrebbero apparire tre linee con le relative etichette:
  • Temperatura;
  • Umidita;
  • Luminosita.
​
👉 Non aprire contemporaneamente il Serial Monitor e il Serial Plotter, perché entrambi utilizzano la stessa porta seriale.

🧪 Esperimenti da provare
​

Dopo aver aperto il Serial Plotter puoi:
  • coprire lentamente la fotoresistenza;
  • accendere e spegnere una lampada;
  • avvicinare una mano al DHT22;
  • aprire una finestra;
  • confrontare mattina e sera;
  • osservare quanto rapidamente reagiscono i diversi sensori.
​
👉 Il grafico permette di vedere fenomeni che sarebbero meno evidenti osservando soltanto valori numerici.

🧠 Perché è un progetto importante
​

Con questo progetto impari a:
  • utilizzare il Serial Plotter;
  • inviare più dati sulla porta seriale;
  • formattare correttamente le serie;
  • visualizzare sensori in tempo reale;
  • leggere temperatura e umidità;
  • filtrare un ingresso analogico;
  • convertire valori in percentuale;
  • controllare la validità delle letture;
  • aggiornare i dati tramite millis();
  • analizzare l’andamento di un sistema.
​
👉 Il Serial Plotter è uno strumento molto utile per testare sensori, calibrare soglie e individuare problemi nei progetti Arduino.

🔄 Varianti possibili
​

Vuoi migliorare il progetto?
  • 📈 aggiungi la temperatura percepita;
  • 🔋 visualizza la tensione di una batteria;
  • ⚡ mostra corrente e potenza;
  • 🌬️ collega un sensore di qualità dell’aria;
  • 📉 aggiungi una media mobile;
  • 🎛️ utilizza un potenziometro per modificare una soglia;
  • 🚨 mostra una linea di allarme;
  • 💾 salva contemporaneamente i dati su microSD;
  • ⏰ aggiungi data e ora con RTC DS3231;
  • 📶 invia i dati tramite Wi-Fi;
  • 🖥️ crea una dashboard sul computer;
  • 🧮 normalizza tutte le serie tra 0 e 100.

Foto
Foto

© ProgettiArduino.com 2026 - Fancello Salvatore
​ Layout, immagini e testi sono di esclusiva proprietà di www.progettiarduino.com 
Privacy Policy