Plotter Seriale Arduino: seno, coseno, onda quadra e triangolare
Usiamo il Serial Plotter dell’IDE Arduino per visualizzare graficamente nel tempo funzioni matematiche e forme d’onda generate dallo sketch.
Serial.print() e li osserviamo come grafici nel tempo con il Plotter Seriale.Cosa imparerai
- come usare il Plotter Seriale dell’IDE Arduino;
- come inviare una o più serie di dati tramite seriale;
- come disegnare seno e coseno nello stesso grafico;
- come generare un dente di sega;
- come simulare un’onda quadra;
- come generare un’onda triangolare;
- come separare correttamente più valori sulla stessa riga.
Che cos’è il Plotter Seriale
Il Plotter Seriale dell’IDE Arduino permette di rappresentare graficamente nel tempo i valori inviati dalla scheda. È uno strumento molto pratico per osservare l’andamento di sensori, variabili e funzioni senza utilizzare software esterni.
Esempi di visualizzazione dei dati tramite il Plotter Seriale di Arduino.
Materiale necessario
🧰 Kit Arduino consigliato
Molti progetti del sito utilizzano sensori, breadboard, LED e altri componenti elettronici. Un kit completo può essere comodo per sperimentare anche con il Plotter Seriale usando dati reali.
👉 Guarda il kit Arduino consigliatoLink 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 ArduinoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
Le forme d’onda generate
| Funzione | Come viene generata |
|---|---|
| Seno e coseno | sin() e cos() |
| Dente di sega | Valore crescente da 0 a 90 |
| Onda quadra | Blocchi ripetuti a 0 e 100 |
| Onda triangolare | Salita 0→100 e discesa 100→0 |
Codice Arduino commentato
// ==========================================================
// ARDUINO SERIAL PLOTTER - GENERATORE DI FUNZIONI
// Seno, coseno, dente di sega, onda quadra e triangolare
// ==========================================================
void setup() {
// Avvia la comunicazione seriale.
// Il Plotter Seriale dovrà usare lo stesso baud rate.
Serial.begin(9600);
}
void loop() {
// --------------------------------------------------------
// 1. SENO E COSENO
// --------------------------------------------------------
// La variabile viene incrementata da 0 a 90
// con passo 0.1 e invia due valori sulla stessa riga.
for (float angolo = 0; angolo <= 90; angolo += 0.1) {
// NOTA:
// sin() e cos() in Arduino lavorano in radianti.
// In questo esempio manteniamo direttamente il valore della variabile.
float seno = sin(angolo);
float coseno = cos(angolo);
// Due valori separati da uno spazio =
// due curve visualizzate contemporaneamente.
Serial.print(seno);
Serial.print(" ");
Serial.println(coseno);
delay(1);
}
// --------------------------------------------------------
// 2. DENTE DI SEGA
// --------------------------------------------------------
// Il valore sale progressivamente da 0 a 90
// e poi, al termine del ciclo, riparte da zero.
for (float i = 0; i <= 90; i += 1) {
Serial.println(i);
delay(1);
}
// --------------------------------------------------------
// 3. ONDA QUADRA - LIVELLO BASSO
// --------------------------------------------------------
// Mantiene il valore 0 per circa 101 campioni.
for (int a = 0; a <= 100; a++) {
int livelloBasso = 0;
Serial.println(livelloBasso);
delay(1);
}
// --------------------------------------------------------
// 4. ONDA QUADRA - LIVELLO ALTO
// --------------------------------------------------------
// Mantiene il valore 100 per altri 101 campioni.
for (int a = 0; a <= 100; a++) {
int livelloAlto = 100;
Serial.println(livelloAlto);
delay(1);
}
// --------------------------------------------------------
// 5. ONDA TRIANGOLARE - SALITA
// --------------------------------------------------------
for (float i = 0; i <= 100; i += 1) {
Serial.println(i);
delay(1);
}
// --------------------------------------------------------
// 6. ONDA TRIANGOLARE - DISCESA
// --------------------------------------------------------
for (float i = 100; i >= 0; i -= 1) {
Serial.println(i);
delay(1);
}
}
Seno e coseno: attenzione ai radianti
Nel codice la variabile angolo viene incrementata fino a 90, ma le funzioni sin() e cos() di Arduino interpretano il parametro in radianti, non in gradi.
float gradi = 45.0;
float radianti = gradi * PI / 180.0;
float valore = sin(radianti);
Come visualizzare due curve contemporaneamente
Nel blocco seno/coseno lo sketch invia due valori sulla stessa riga:
Serial.print(seno);
Serial.print(" ");
Serial.println(coseno);
Lo spazio separa i due valori e il Plotter Seriale li interpreta come due serie distinte.
Dente di sega
La funzione cresce progressivamente da 0 a 90. Quando il ciclo termina, il programma passa alla sezione successiva; se isolassi soltanto questo blocco e lo ripetessi continuamente, vedresti il classico andamento crescente con ritorno brusco allo zero.
Onda quadra
L’onda quadra viene simulata inviando molti campioni consecutivi a 0 e poi molti campioni consecutivi a 100.
| Fase | Valore inviato | Campioni |
|---|---|---|
| Basso | 0 | circa 101 |
| Alto | 100 | circa 101 |
Onda triangolare
Qui il valore sale da 0 a 100 e subito dopo scende da 100 a 0. È un ottimo esempio per capire come un semplice contatore possa diventare una forma d’onda grafica.
Aprire il Plotter Seriale
Dopo aver caricato lo sketch, apri il Plotter Seriale dall’IDE Arduino e imposta lo stesso baud rate utilizzato nel codice, cioè 9600 baud.
Esempi del Plotter Seriale
Come usare il Plotter con un sensore vero
Una volta capito il principio puoi sostituire le funzioni matematiche con la lettura di un sensore.
void setup() {
Serial.begin(9600);
}
void loop() {
// Legge il valore analogico 0...1023
int valore = analogRead(A0);
// Lo invia al Plotter Seriale
Serial.println(valore);
delay(10);
}
Questo permette di osservare graficamente, per esempio, un potenziometro, un sensore di luce, un microfono o un flex sensor.
Scarica lo sketch
⬇️ Scarica il generatore di funzioniDebug rapido
- controlla che Arduino sia collegato alla porta corretta;
- verifica che il baud rate sia 9600 sia nello sketch sia nel Plotter;
- non aprire contemporaneamente due programmi che occupano la stessa porta seriale;
- se vuoi più curve, stampa più valori sulla stessa riga separandoli correttamente;
- se il grafico è troppo veloce, aumenta
delay(); - se seno e coseno non corrispondono agli angoli attesi, ricorda che
sin()ecos()usano radianti.
Varianti del progetto
- visualizzare un potenziometro in tempo reale;
- confrontare due sensori contemporaneamente;
- generare una sinusoide con gradi convertiti in radianti;
- modificare ampiezza e offset delle forme d’onda;
- visualizzare dati di temperatura e pressione;
- osservare il rumore di un ingresso analogico.
Cosa devi ricordare
- Il Plotter Seriale trasforma valori seriali in grafici nel tempo.
- La comunicazione seriale del progetto usa 9600 baud.
- Più valori sulla stessa riga generano più curve.
sin()ecos()lavorano in radianti.- Dente di sega, onda quadra e triangolare possono essere generate con semplici cicli
for. - Lo stesso strumento è utilissimo per visualizzare sensori reali.
Domande frequenti
Posso usare il Plotter Seriale senza sensori?
Sì. Questo progetto ne è un esempio: le forme d’onda vengono generate matematicamente direttamente nel codice.
Come mostro due segnali nello stesso grafico?
Stampa i due valori sulla stessa riga, separati da spazio o da un formato compatibile con la versione dell’IDE utilizzata, e chiudi la riga con Serial.println().
Perché sin(90) non vale 1?
Perché Arduino interpreta 90 come 90 radianti, non 90 gradi. Per lavorare in gradi devi prima convertire il valore in radianti.
Posso usare il Plotter con un sensore analogico?
Sì. Basta leggere il sensore con analogRead() e inviare il valore con Serial.println().

