Basi · 10 min di lettura

Cos'è GND? Perché serve una massa comune con Arduino e sensori

Cos'è GND e perché serve una massa comune: tensione di riferimento, alimentatore esterno e GND di Arduino, loop di massa, massa a stella e terra di rete.

La risposta breve a cos'è GND: è il punto di riferimento a 0 volt rispetto al quale si misurano tutte le tensioni del circuito. Il nome viene dall'inglese "ground"; in italiano si parla di massa, a volte di negativo. Il pin 5V di Arduino significa in realtà "5 volt rispetto a GND"; anche i 2,5 V in uscita da un sensore hanno senso solo rispetto a una massa. La maggior parte dei guasti misteriosi dei principianti, servo che tremano, sensori che leggono valori assurdi e schede che si resettano da sole, nasce in realtà da un solo filo mancante: la massa comune.

In questo articolo spiego con un paragone semplice perché GND è un "riferimento", mostro come unire correttamente le masse con un alimentatore esterno, spiego con i numeri da dove nascono loop di massa e rumore e ti insegno a separare la massa dei motori da quella dei sensori con la massa a stella. Vedremo anche la differenza tra la massa del circuito e la terra delle prese di casa e i casi in cui le masse vengono tenute separate di proposito. Le basi dell'alimentazione sono in come alimentare Arduino.

Cos'è GND? Perché la tensione si misura tra due punti?

La tensione non è una proprietà di un singolo punto, ma la differenza di potenziale tra due punti. Pensala come l'altezza: quando dici che un tavolo è "alto 80 cm" usi senza accorgertene il pavimento come riferimento. Se lo stesso tavolo è al 10° piano di un palazzo, la sua altezza sul livello del mare supera i 30 metri. In elettronica GND è quel "pavimento". Quando appoggi il puntale nero del multimetro su GND e quello rosso su un punto, leggi la tensione di quel punto rispetto a GND. Sposta il puntale nero altrove e lo stesso punto mostra un valore completamente diverso. Per questo, quando in un circuito diciamo "5 V", intendiamo sempre "rispetto al GND di questo circuito".

TermineSignificatoDove lo trovi
GND / 0VPunto di riferimento del circuitoArduino, ESP32, Pico e tutti i moduli
Negativo (-)Morsetto di ritorno dell'alimentatore, di solito collegato a GNDPile, alimentatori, alimentatori da banco
VCC / VIN / 5V / 3V3Alimentazione positiva rispetto a GNDPin di alimentazione di moduli e schede
COMMorsetto comune; spesso GND, ma nei relè è il contatto comuneRelè, pulsanti, strumenti
AGND / DGNDMasse analogica e digitale separate, unite in un puntoADC, audio e misure di precisione
Massa telaioMassa collegata al contenitore metallicoApparecchi con involucro, veicoli
Terra di protezione (PE)Il filo giallo-verde della presa, per la sicurezzaImpianto di rete a 230 V

Perché serve una massa comune?

Quando Arduino invia un segnale a un servo o a un modulo, in realtà dice "il mio pin è a 5 V rispetto al mio GND". Il ricevitore legge quel segnale rispetto al proprio GND. Se le masse dei due dispositivi non sono collegate, non esiste un pavimento comune; per il servo i 5 V di Arduino possono valere 5 V, 2 V o -3 V. C'è anche un problema più di fondo: la corrente scorre sempre in un circuito chiuso. La corrente di segnale esce dal pin di Arduino, attraversa l'ingresso del ricevitore e deve tornare attraverso GND. Senza percorso di ritorno il segnale non si forma correttamente, oppure i fili fanno da antenna e raccolgono disturbi. In breve: se due dispositivi si scambiano segnali, le loro masse devono essere collegate.

Alimentatore esterno e Arduino: unire le masse

Servomotore MG996R
I servo potenti come l'MG996R assorbono oltre 1 A sotto sforzo; vanno alimentati con una sorgente esterna da 5-6 V, non dal pin 5V di Arduino.

Il caso più comune: un servo, un motore o una striscia LED è alimentato da un adattatore separato perché assorbe più corrente di quanta Arduino possa fornire. Nel collegamento corretto si uniscono solo le masse, i positivi restano separati. Così la corrente del carico arriva dall'alimentatore esterno e vi ritorna, mentre Arduino fornisce solo il segnale. La tabella mostra il collegamento di un servo MG996R alimentato da un adattatore esterno da 5 V; la stessa logica vale per un MOSFET che comanda una striscia LED da 12 V o per una scheda driver per motori.

FiloDove vaPerché?
Servo rosso (+)Adattatore esterno +5 VLa corrente del motore non passa da Arduino
Servo marrone (-)GND dell'adattatore esternoPercorso di ritorno della corrente del motore
Servo arancione (segnale)Arduino D9Segnale PWM di posizione
PonticelloTra il GND dell'adattatore e il GND di ArduinoRiferimento comune per il segnale
+5 V dell'adattatore al 5V di ArduinoNon collegareLe due sorgenti potrebbero spingersi corrente a vicenda
C++ (Arduino IDE)
1// Harici 5 V ile servo, ortak GND / servo on an external 5 V supply, common GND
2#include <Servo.h>
3
4const int SERVO_PIN = 9;   // turuncu sinyal kablosu / orange signal wire
5Servo servo;
6
7void setup() {
8  servo.attach(SERVO_PIN);
9}
10
11void loop() {
12  for (int a = 0; a <= 180; a += 2) {   // 0 -> 180 derece / degrees
13    servo.write(a);
14    delay(15);
15  }
16  for (int a = 180; a >= 0; a -= 2) {   // 180 -> 0 derece / degrees
17    servo.write(a);
18    delay(15);
19  }
20}
Se dimentichi il ponticello, molto probabilmente il servo non si muove affatto o vibra a caso, perché il segnale PWM non ha un percorso di ritorno. Anche il contrario è pericoloso: unire i positivi di due sorgenti fa sì che una spinga corrente nell'altra anche se le tensioni differiscono di poche centinaia di millivolt, e i regolatori si scaldano. La regola è semplice: le masse si uniscono, i positivi restano separati. Trovi l'assorbimento dei servo e come alimentarli bene nella guida al servomotore.

Guasti reali: "il servo non funziona", "il sensore impazzisce"

SintomoCausa legata alla massaSoluzione
Il servo non gira o vibraIl GND dell'alimentatore esterno non è collegato ad ArduinoUnisci le due masse con un filo corto
Arduino si resetta quando parte il motoreLa corrente del motore ritorna dal GND di Arduino e la tensione calaPorta il GND del motore direttamente all'alimentatore, massa a stella
Il sensore analogico salta con il motore accesoCaduta di tensione della corrente del motore su un filo di massa comuneSepara il GND del sensore dal percorso del motore
Caratteri senza senso sulla serialeLe masse delle due schede non sono collegateCollega GND oltre a TX e RX
La striscia LED non si accende mai con il MOSFETIl negativo dell'alimentatore a 12 V non è collegato al GND di ArduinoUnisci il source del MOSFET e le due masse
Il valore cambia toccandoIngresso flottante o massa allentataAggiungi pull-up/pull-down e controlla il filo di GND

Arduino che si resetta quando parte un motore è il guasto più disorientante della tabella, perché il cablaggio sembra "giusto". Per una diagnosi dettagliata puoi seguire anche i passi di Arduino si resetta da solo; con un ESP32 lo stesso problema di solito si presenta come messaggio di brownout.

Loop di massa e rumore: anche il filo di massa è una resistenza

Poiché negli schemi GND è disegnato con una sola linea, pensiamo che valga esattamente 0 V ovunque. In realtà le piste della breadboard, i ponticelli e le saldature hanno una piccola resistenza. La legge di Ohm qui è spietata: V = I × R. Se la corrente di ritorno di un motore da 2 A passa in un filo di massa con resistenza totale di 0,1 Ω, tra i suoi due capi nasce una differenza di 0,2 V. Se un sensore analogico condivide quel filo, il suo "0 V" ora si trova 0,2 V più in alto. Sull'ADC a 10 bit di Arduino Uno è un errore di circa 41 punti (0,2 / 5 × 1023). Se il motore è pilotato in PWM, questo scarto sale e scende centinaia di volte al secondo e vedi le letture saltare.

Un loop di massa nasce quando tra due dispositivi c'è più di un percorso di GND. Per esempio, se Arduino è collegato al computer via USB e anche, con un altro filo, a un alimentatore collegato a terra, la corrente di massa può circolare su due percorsi e quell'anello chiuso fa da antenna per i campi magnetici vicini. Il risultato è il ronzio nei circuiti audio o un'ondulazione a 50 Hz nelle misure. La soluzione non è tagliare il GND, ma lasciare un solo percorso ed evitare che le correnti forti condividano un filo con i segnali sensibili.

Massa a stella: separare la massa dei motori e dei sensori

Modulo di alimentazione per breadboard MB102
I moduli di alimentazione come l'MB102 forniscono 5 V o 3,3 V ai due binari laterali; i GND dei due binari sono uniti sul modulo e formano un buon punto a stella.

La massa a stella significa che tutti i fili di GND si incontrano in un unico punto centrale invece di essere collegati a catena. La grande corrente del motore torna al negativo dell'alimentatore con un proprio filo spesso, mentre le masse di Arduino, sensori e circuiti di segnale raggiungono lo stesso punto con fili sottili separati. Così la caduta di tensione dovuta alla corrente del motore resta nel filo del motore e non sposta il riferimento dei sensori. In pratica segui questi passi:

  1. Scegli il negativo dell'alimentatore o un morsetto a vite come punto stella.
  2. Porta il GND del driver del motore (L298N, MOSFET, bobina del relè) direttamente a quel punto con un filo corto e spesso.
  3. Collega il GND di Arduino allo stesso punto con un filo separato; non farlo passare dal GND del driver.
  4. Collega il GND dei sensori analogici al pin GND di Arduino, così sensore e ADC condividono lo stesso riferimento.
  5. Metti un condensatore ceramico da 100 nF sui morsetti del motore e un elettrolitico da 100-470 µF all'ingresso di alimentazione del driver.
  6. Tieni i fili dei motori il più possibile lontani da quelli di segnale e attorciglia tra loro i fili di ogni motore.
Le piste sottili di una breadboard non sono pensate per più di qualche centinaio di milliampere e hanno un'alta resistenza di contatto. Non far passare le correnti dei motori nella breadboard; collega i fili dei motori e dell'alimentazione a morsetti a vite o direttamente alla scheda driver e usa la breadboard solo per i segnali. Perché i condensatori aiutano lo trovi in cos'è un condensatore.

Misurare il rumore: un semplice test di GND con Arduino

Invece di indovinare quanto è buona la tua massa, puoi misurarla. Costruisci un partitore di tensione con due resistenze da 10 kΩ tra 5V e GND e collega il punto centrale ad A0; quel punto dovrebbe restare fisso a 2,5 V. Il codice seguente fa 200 letture di fila su A0 e stampa la differenza tra la più alta e la più bassa come rumore picco-picco in millivolt. Misura prima con il motore spento, poi con il motore acceso; poi riorganizza i fili di GND a stella e misura di nuovo.

C++ (Arduino IDE)
1// Basit GND gürültü ölçer / simple ground noise meter
2const int SENSOR_PIN = A0;   // ölçülen sinyal / signal under test
3const int SAMPLES = 200;     // yaklaşık 22 ms'lik örnek / about 22 ms of samples
4const float VREF = 5.0;      // Uno ADC referansı / Uno ADC reference
5
6void setup() {
7  Serial.begin(115200);
8}
9
10void loop() {
11  int minV = 1023, maxV = 0;
12  long sum = 0;
13  for (int i = 0; i < SAMPLES; i++) {
14    int v = analogRead(SENSOR_PIN);
15    if (v < minV) minV = v;
16    if (v > maxV) maxV = v;
17    sum += v;
18  }
19  float avgVolt = sum / (float)SAMPLES * VREF / 1023.0;
20  float ripplemV = (maxV - minV) * VREF / 1023.0 * 1000.0;   // tepe-tepe / peak-to-peak
21
22  Serial.print("ortalama / average: ");
23  Serial.print(avgVolt, 3);
24  Serial.print(" V   tepe-tepe / peak-to-peak: ");
25  Serial.print(ripplemV, 0);
26  Serial.println(" mV");
27  delay(500);
28}

In un circuito ben realizzato il rumore picco-picco è di circa 1-2 punti dell'ADC, cioè 5-10 mV. Se sale sopra i 50 mV con il motore acceso, qualche filo condivide il percorso di massa con il motore. 200 mV o più di solito indicano un GND allentato, corrente del motore che passa dalla breadboard o un alimentatore esterno mai collegato. Questo semplice test dimostra in pochi minuti che, nella maggior parte dei casi di "sensore che impazzisce", il problema non è il sensore ma la massa.

Quando le masse vengono tenute separate di proposito?

L'unica eccezione a "unisci tutte le masse" è l'isolamento galvanico. Un optoisolatore o un relè trasmette il segnale con la luce o con un campo magnetico e non lascia alcun collegamento elettrico tra i due lati. In quel caso le masse dei due lati restano separate di proposito: una è il lato Arduino, l'altra il lato rete o del motore rumoroso. Nei moduli relè con ponticello JD-VCC, togliendo il ponticello e alimentando la bobina con una sorgente separata, il GND di quella sorgente non va collegato ad Arduino; è proprio lo scopo dell'isolamento. Per i dettagli leggi cos'è un optoisolatore e cos'è un modulo relè. Senza isolamento, due circuiti che si scambiano segnali hanno bisogno di un GND comune.

La terra di rete è uguale al GND del circuito?

No. Il filo giallo-verde delle prese è la terra di protezione e arriva davvero a un dispersore piantato nel terreno. Il suo compito è la sicurezza: se la fase tocca l'involucro metallico di un apparecchio, la corrente scorre lungo questo percorso e il fusibile o il differenziale interrompe il circuito. Il GND di un circuito con Arduino è solo il riferimento di quel circuito e, in un progetto alimentato a pile o con un adattatore, non ha alcun collegamento con la terra. In alcuni adattatori e computer il GND del circuito può essere collegato alla terra di protezione, ed è una delle cause dei loop di massa. Nei progetti hobbistici non cercare mai di collegare da solo il GND del circuito al neutro o alla terra della rete.

La tensione di rete può uccidere. Nei progetti collegati alla rete tramite relè o optoisolatore, il GND del lato a bassa tensione non si unisce mai al lato rete e tra i due si lascia almeno qualche millimetro di distanza di isolamento. Se non sei sicuro, fai realizzare la parte di rete a un elettricista.

Massa comune con moduli a 5 V su ESP32 e Pico

L'ESP32 e il Raspberry Pi Pico lavorano a 3,3 V; per collegare un modulo a 5 V metti in mezzo un convertitore di livello. Il convertitore ha pin GND sul lato basso (LV) e su quello alto (HV) e vanno collegati entrambi; può tradurre i segnali dei due lati solo rispetto a un riferimento comune. Lo stesso vale se l'ESP32 è alimentato via USB e una striscia LED a 12 V da un adattatore separato: il source del MOSFET, il negativo dell'adattatore e il GND dell'ESP32 devono incontrarsi in un punto. Come funzionano i convertitori lo trovi in convertitore di livello logico.

Checklist del GND

  • Le masse dei due dispositivi che si scambiano segnali sono collegate?
  • Con alimentatori esterni, sono unite solo le masse e separati i positivi?
  • Le correnti di motori, relè e strisce LED tornano all'alimentatore senza passare dal pin GND di Arduino?
  • I sensori analogici sono su un percorso di massa che non porta corrente dei motori?
  • I fili di GND sono più spessi di quelli di segnale e il più corti possibile?
  • Dove un optoisolatore o un relè con JD-VCC fa da isolamento, i due lati sono davvero separati?
  • Nel dubbio, hai verificato il collegamento tra i punti di GND con il multimetro in modalità continuità (bip)?

GND è il filo più silenzioso ma più importante del circuito: se è fatto bene nessuno lo nota, se lo dimentichi va tutto storto. Se non sai misurare la continuità con il multimetro, come usare il multimetro ti semplifica il lavoro. Nell'app BlueGrays trovi progetti che richiedono un alimentatore esterno, come servomotori, un'auto robot con L298N, un robot che evita gli ostacoli, una lampada a 230 V con relè e l'irrigazione intelligente, ognuno con schema e codice passo passo, per seguire sullo schema ogni collegamento di massa.

Domande frequenti

Cos'è GND e a cosa serve?

GND (ground, massa) è il punto di riferimento a 0 volt rispetto al quale si misurano tutte le tensioni di un circuito. È anche il percorso da cui la corrente torna all'alimentatore. Quando si dice che un pin di Arduino è a 5V o 3,3V, il valore è sempre riferito a GND.

GND è la stessa cosa della terra?

In elettronica GND è il riferimento proprio del circuito e non deve per forza essere collegato alla terra. La terra di protezione giallo-verde della presa va a un dispersore nel terreno per la sicurezza. In un progetto Arduino alimentato a pile o con un adattatore, GND non ha alcun collegamento con la terra di rete.

Il GND di un alimentatore esterno va collegato ad Arduino?

Sì. Se un dispositivo alimentato da una sorgente esterna riceve segnali da Arduino, le due masse devono essere unite. Si uniscono solo le masse, i positivi restano separati. Altrimenti il segnale non ha riferimento comune né percorso di ritorno e il servo vibra o non funziona.

Cosa succede se GND non è collegato?

Il dispositivo ricevente non riesce a interpretare correttamente la tensione; i servo si muovono a caso, la seriale mostra caratteri senza senso e i sensori danno letture instabili. In alcuni casi la corrente ritorna per percorsi inattesi e può danneggiare i pin.

Il negativo (-) è uguale a GND?

Nella maggior parte dei circuiti con una sola alimentazione il negativo è usato come GND, quindi in pratica è lo stesso punto. Con alimentazioni duali come ±12 V, però, GND è il punto centrale e il negativo è a -12 V. Per questo conviene guardare il simbolo di GND sullo schema.

Come si evita un loop di massa?

Lascia un solo percorso di GND tra due dispositivi, separa i fili dei motori ad alta corrente dalle masse dei sensori sensibili e unisci tutto in un unico punto a stella. Se serve, separa elettricamente i due lati con optoisolatori o moduli isolati.

Vedi tutti i progetti
Utilizzo del servomotore
#35Principiante
Premium

Utilizzo del servomotore

Il braccio di un piccolo servomotore ruota a turno in tre posizioni: tutto all'inizio, esattamente a metà e tutto alla fine, aspettando due secondi a ogni fermata. L'Arduino dice al motore a quale ang

4.7(48)
67
Funzionamento del servomotore con potenziometro
#36Principiante
Premium

Funzionamento del servomotore con potenziometro

Mentre giri la manopola del potenziometro, il braccio del servomotore ruota insieme a lei: un'estremità della manopola corrisponde a zero gradi, l'altra a mezzo giro. L'Arduino legge di continuo la po

4.6(37)
53
Auto controllata via Bluetooth con L298N
#80Avanzato
Premium

Auto controllata via Bluetooth con L298N

Trasforma il telefono in un telecomando e guida la tua auto robot. L'Arduino riceve tramite un modulo Bluetooth i comandi di un'app di controllo remoto sul telefono e fa girare le ruote con un driver

5.0(38)
65
Robot che evita gli ostacoli
#81Avanzato
Premium

Robot che evita gli ostacoli

Che ne dite di costruire un veicolo intelligente che trova la propria strada? L'Obstacle Avoiding Robot scruta costantemente l'ambiente circostante grazie al sensore a ultrasuoni posto davanti a lui.

5.0(38)
49
Lampadina 220V con pulsante (Push)
#19Avanzato
Premium

Lampadina 220V con pulsante (Push)

Finché tieni premuto il pulsante, una vera lampadina da 220 volt resta accesa, e si spegne appena lo lasci. Il piccolo segnale dell'Arduino non può accendere la lampadina direttamente, quindi in mezzo

4.4(30)
38
Stazione di irrigazione intelligente
#83Avanzato
Premium

Stazione di irrigazione intelligente

Un giardiniere che annaffia le tue piante da solo, così non si seccano mentre sei in vacanza. Un sensore di umidità misura quanto è bagnata la terra; quando diventa secca, l'Arduino accende la pompa d

5.0(42)
57
Misurare l'intensità luminosa con LDR
#11Principiante

Misurare l'intensità luminosa con LDR

Vuoi vedere quanto è luminosa la tua stanza sotto forma di numero? L'LDR, un piccolo componente sensibile alla luce, misura la luce ambiente e l'Arduino scrive il valore sullo schermo del computer ogn

4.6(81)
140
Voltmetro digitale con display LCD
#56Intermedio
Premium

Voltmetro digitale con display LCD

Scopri quanta tensione dà una pila o un alimentatore con uno strumento costruito da te. Un partitore fatto di due resistenze abbassa la tensione alta a un livello che la scheda può leggere, e l'Arduin

4.5(27)
36