In questo tutorial imparerai come leggere il segnale di velocità o tachimetro di una ventola a 3 o 4 fili usando un Arduino.
Le ventole sono un componente essenziale in molti dispositivi elettronici, fornendo raffreddamento e ventilazione per evitare il surriscaldamento. Monitorare la velocità di una ventola può essere cruciale per mantenere prestazioni ottimali e prevenire possibili guasti.
Componenti necessari
Di seguito la lista dei componenti necessari. Ho aggiunto i LED nel caso volessi far lampeggiare un LED di avviso se la velocità della ventola scende sotto una certa soglia.

Arduino Uno

Set di fili Dupont

Breadboard

Cavo USB per Arduino UNO

Kit resistori e LED
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Tipi di ventole
Esistono moltissimi tipi di ventole. In questo tutorial ci concentreremo sulle ventole comunemente usate per il raffreddamento in computer, stampanti 3D, piccoli raffreddatori evaporativi e simili. La maggior parte di queste ventole sono brushless DC ventole con 2, 3 o 4 fili che funzionano a 12V.
Ventola DC a 2 fili
Le ventole DC a 2 fili sono il tipo più semplice di ventole DC. Hanno due fili: uno rosso per l’alimentazione (VCC) e uno nero per la massa (GND). Qui sotto una foto di una tipica ventola a 2 fili.

Queste ventole girano a velocità fissa, ma la velocità può essere modificata tramite Pulse Width Modulation (PWM). Vedi il nostro tutorial su How To Control Fan using Arduino . Le ventole a 2 fili non forniscono un segnale di velocità leggibile direttamente. Tuttavia, puoi usare un magnete e un sensore Hall per crearne uno tuo: Build Arduino Tachometer Using A3144 Hall Effect Sensor
Ventola DC a 3 fili
Le ventole DC a 3 fili hanno i due fili usuali per alimentazione e massa (rosso e nero) e un filo aggiuntivo (tipicamente giallo) chiamato filo tachimetro (TACH). Questo filo fornisce un segnale a impulsi che indica la velocità di rotazione della ventola. Leggendo questo segnale puoi monitorare la velocità o RPM (giri al minuto) della ventola.

Il segnale tachimetro è generato da un sensore ad effetto Hall o da un sensore ottico che rileva il passaggio di marcature o magneti sul rotore o motore della ventola. L’uscita è un impulso, e la frequenza degli impulsi (e la loro durata) corrisponde alla velocità della ventola.
La maggior parte delle ventole di raffreddamento per computer sono a 3 fili, ma sono usate anche in molti altri dispositivi. Qui sotto una foto di una piccola ventola DC a 3 fili da 12V per stampante 3D:

Ventola DC a 4 fili
Le ventole a 4 fili sono il tipo più avanzato e offrono funzionalità aggiuntive. Hanno quattro fili: uno per l’alimentazione (di solito rosso), uno per la massa (di solito nero), uno per il segnale di velocità (di solito giallo) e uno per il controllo della velocità (di solito blu).
La velocità della ventola è regolata inviando un segnale PWM ( Pulse Width Modulation ) sul filo di controllo della velocità, che è collegato a un MOSFET che controlla il motore. Vedi il seguente schema elettrico.

Qui sotto una foto di una tipica ventola DC a 4 fili da 12V usata come ventola di raffreddamento per computer:

Puoi controllare la velocità di una ventola a 2 o 3 fili allo stesso modo costruendo tu stesso il circuito di controllo. Dai un’occhiata al nostro tutorial su How To Control Fan using Arduino per maggiori dettagli.
In sintesi, le ventole a 2 e 3 fili solitamente girano a velocità costante. Le ventole a 3 fili forniscono un segnale tachimetro per monitorare la velocità. Le ventole a 4 fili solitamente girano a velocità variabile, controllata tramite un segnale PWM sul quarto filo, ma permettono anche di monitorare la velocità tramite il terzo filo.
Comprendere il segnale di velocità della ventola
Come detto sopra, all’interno di una ventola a 3 o 4 fili c’è tipicamente un Hall Effect Sensor che rileva il passaggio di due magneti attaccati alla parte rotante della ventola per misurare la velocità. Di solito si usano due magneti per evitare una distribuzione di massa irregolare delle parti rotanti, che causerebbe vibrazioni. Vedi l’immagine sotto.

Il segnale di velocità può essere misurato usando una resistenza di pull-up e collegando un oscilloscopio come mostrato nel circuito sopra. Qui una foto del mio oscilloscopio mentre mostra il segnale tachimetro di una piccola ventola.

Come puoi vedere, il segnale tachimetro o di velocità è un impulso rettangolare con duty cycle del 50% e frequenza che corrisponde alla velocità di rotazione della ventola. Più la ventola gira veloce, più breve sarà la durata dell’impulso e viceversa.
Se guardi bene, vedrai che la tensione di picco dell’impulso è intorno a 5V, mentre la ventola è da 12V. Questo perché sto usando un circuito leggermente diverso, che discuteremo in dettaglio nella prossima sezione.
Collegare il segnale di velocità a un Arduino
In questa sezione ti mostro come collegare il segnale di velocità (segnale tachimetro) di una ventola a 3 o 4 fili a un Arduino per misurare la velocità della ventola.
Non puoi semplicemente collegare il filo giallo di una ventola a 3 o 4 fili a un ingresso digitale di un Arduino per leggere la velocità. Non funzionerà! Hai bisogno di un pull-up resistor . Lo schema di collegamento qui sotto ti mostra come fare.

Collega una resistenza da 1KΩ o 10KΩ al pin +5V e al pin 2 del tuo Arduino. Nell’esempio sopra uso una resistenza da 1KΩ, ma qualsiasi resistenza tra 1KΩ e 10KΩ va bene ed è comunemente usata come pull-up. Poi collega anche il filo giallo tachimetro della ventola al pin 2 dell’Arduino. Infine, collega il filo nero di massa (GND) della ventola al pin GND dell’Arduino. Collega la ventola alla tensione richiesta, nell’esempio sopra 12V.
Specifiche della ventola
Controlla l’etichetta sulla tua ventola per sapere quale tensione è richiesta nel tuo caso. L’immagine sotto mostra l’etichetta di una delle mie ventole, che è da 12V con una corrente di 0,18A = 180mA.

Le tensioni tipiche sono 5V, 6V, 12V e 24V e le correnti saranno intorno a 200 o 300mA per ventole di raffreddamento per computer. Nota che non puoi usare un pin GPIO del tuo Arduino come fonte di alimentazione per una ventola. La ventola assorbe troppa corrente e danneggerà il tuo Arduino! Puoi usare il pin 5V del tuo Arduino Uno se la ventola assorbe meno di 500mA (e funziona a 5-6V).
Circuito su breadboard
Puoi provare questo circuito con una ventola da 12V e una batteria da 9V, se non hai un alimentatore o batteria da 12V. La ventola girerà, solo un po’ più lentamente. L’immagine sotto mostra il cablaggio completo su breadboard. È lo stesso circuito di prima, con l’aggiunta della batteria e montato su breadboard.

Nella prossima sezione scriveremo il codice per misurare la velocità della ventola usando questo circuito.
Codice per leggere il segnale di velocità della ventola
Qui leggeremo il segnale di velocità della ventola per misurare gli RPM (giri al minuto). Questo presuppone che tu abbia una ventola a 3 o 4 fili che fornisce un segnale di uscita tachimetro. Se hai una ventola a 2 fili, non preoccuparti. Puoi creare un segnale tachimetro da solo. Vedi il nostro tutorial Build Arduino Tachometer Using A3144 Hall Effect Sensor .
Come hai visto sopra, il segnale di velocità o tachimetro è un impulso rettangolare. Se contiamo quanti impulsi riceviamo in un minuto, possiamo calcolare quante volte la ventola ruota in un minuto. Questa misura di velocità si chiama RPM (giri al minuto).
Il modo più semplice per contare gli impulsi è cercare un fronte di salita o discesa nel segnale. L’immagine sotto mostra un impulso rettangolare con il fronte di discesa evidenziato.

Contare i fronti di discesa equivale a contare gli impulsi. Il codice seguente fa questo collegando un interrupt al segnale tachimetro che incrementa un contatore ogni volta che viene rilevato un fronte di discesa. Dai un’occhiata veloce al codice e poi ne discutiamo i dettagli.
const int tachoPin = 2;
volatile unsigned long counter = 0;
void countPulses() {
counter ++;
}
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(tachoPin), countPulses, FALLING);
}
void loop() {
delay(1000);
long rpm = counter * 60 / 2;
Serial.print("RPM:");
Serial.println(rpm);
counter = 0;
}
Costanti e variabili
Iniziamo con le costanti e le variabili. Prima definiamo la costante tachoPin che specifica a quale pin è collegato il segnale tacho della ventola. Definiamo anche una variabile counter per tenere traccia del numero di impulsi ricevuti dal segnale tacho. Deve essere di tipo ” volatile “, poiché viene usata all’interno di una interrupt service routine (ISR).
const int tachoPin = 2; volatile unsigned long counter = 0;
Funzione per contare gli impulsi
Nella funzione countPulses() incrementiamo la variabile counter di uno ogni volta che riceviamo un impulso dal segnale tacho. Questa funzione viene chiamata ogni volta che viene rilevato un fronte di discesa sul tachoPin usando la funzione attachInterrupt() .
void countPulses() {
counter ++;
}
Funzione setup
Nella funzione setup() inizializziamo la comunicazione seriale a 9600 baud usando Serial.begin() . Questo ci permette di stampare i valori di RPM sul monitor seriale e sul serial plotter. Colleghiamo anche un interrupt al tachoPin usando attachInterrupt() e specifichiamo che l’interrupt deve attivarsi su un fronte di discesa ( FALLING ). Ogni volta che viene rilevato un fronte di discesa sul tachoPin , viene chiamata la funzione countPulses() . Potresti usare anche il fronte di salita se preferisci.
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(tachoPin), countPulses, FALLING);
}
Funzione loop
Nella funzione loop() aspettiamo prima 1000 ms = 1 secondo usando delay() . Durante questo secondo di attesa, la routine di servizio interrupt countPulses() gira in background, contando i fronti di discesa del segnale tachimetro.
Calcoliamo quindi gli RPM moltiplicando la variabile counter per 60 (per convertire da impulsi al secondo a impulsi al minuto) e dividendo per 2 (poiché ogni rotazione della ventola genera 2 impulsi). Stampiamo il valore calcolato di RPM sul monitor seriale usando Serial.print() e Serial.println() . Infine, azzeriamo la variabile counter per ricominciare a contare gli impulsi per il prossimo intervallo di tempo (1 secondo).
void loop() {
delay(1000);
long rpm = counter * 60 / 2;
Serial.print("RPM:");
Serial.println(rpm);
counter = 0;
}
Nota che alcune ventole riportano solo un impulso per rotazione. In questo caso devi rimuovere la divisione per 2, poiché ogni impulso corrisponde a una rotazione della ventola.
Se le letture di velocità variano molto, puoi aumentare il tempo di attesa. Per esempio, un ritardo di 2 secondi ti darà letture più stabili, ma dovrai cambiare il moltiplicatore da 60 a 30. Analogamente, se vuoi letture più rapide, puoi ridurre il ritardo a 500 ms ma dovrai cambiare il moltiplicatore da 60 a 120.
Esempio di output
Se eseguo questo codice con la mia ventola e uso il dito per rallentare temporaneamente la ventola premendo sull’asse centrale, vedo il seguente output sul Serial Plotter:

Ecco fatto! Ora sai come misurare la velocità di una ventola a 3 o 4 fili usando il segnale tachimetro e un Arduino.
Conclusioni
In questo post abbiamo imparato come leggere i segnali di velocità (tachimetro) delle ventole con Arduino. Abbiamo iniziato comprendendo i diversi tipi di ventole, incluse quelle a 2, 3 e 4 fili.
Abbiamo poi esaminato il segnale di velocità stesso. I segnali di velocità delle ventole sono tipicamente forniti come impulsi rettangolari con frequenza proporzionale alla velocità della ventola, misurata in giri al minuto (RPM).
Successivamente abbiamo visto come collegare il filo del segnale di velocità della ventola all’Arduino. Abbiamo fornito una guida passo passo per effettuare i collegamenti necessari.
Infine, abbiamo trattato il processo di scrittura del codice per leggere il segnale di velocità della ventola. Abbiamo spiegato come usare gli interrupt per catturare gli impulsi dalla ventola e calcolare la velocità in base al numero di impulsi ricevuti in un secondo.
Se hai altre domande o vuoi chiarimenti su uno degli argomenti trattati in questo post, consulta la sezione Domande Frequenti qui sotto.
Domande Frequenti
Ecco alcune domande frequenti sulla lettura dei segnali di velocità delle ventole con Arduino:
D: Da quali tipi di ventole posso leggere il segnale di velocità?
R: Puoi leggere il segnale di velocità da ventole a 3 e 4 fili. Questi sono tipi comuni di ventole usate in vari dispositivi elettronici e sistemi per computer.
D: Come identifico il filo del segnale di velocità su una ventola?
R: Il filo del segnale di velocità è solitamente etichettato come “TACH” o “SIGNAL” sulla ventola. Di solito è giallo, mentre i fili di alimentazione e massa sono rosso e nero. Se è una ventola a 4 fili, di solito c’è un filo blu aggiuntivo per il controllo della velocità.
D: Come posso avvisare se la velocità della ventola è troppo bassa?
Ecco un esempio di codice che accende il LED integrato se la velocità della ventola scende sotto i 500 RPM:
const int tachoPin = 2;
volatile unsigned long counter = 0;
void countPulses() {
counter ++;
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(tachoPin), countPulses, FALLING);
}
void loop() {
delay(1000);
long rpm = counter * 60 / 2;
counter = 0;
int warn = rpm < 500 ? HIGH : LOW;
digitalWrite(LED_BUILTIN, warn);
}
D: Posso collegare più ventole all’Arduino per leggere i loro segnali di velocità?
R: Sì, puoi collegare più ventole all’Arduino usando ingressi digitali separati per il filo del segnale di velocità di ciascuna ventola. Assicurati di adattare il codice per leggere i segnali da più pin.
D: Qual è il livello di tensione del segnale di velocità della ventola?
R: Il livello di tensione del segnale di velocità dipende dalla tensione a cui è collegata la resistenza di pull-up. Per leggere un segnale tachimetro con Arduino, si usa un segnale a 5V. Per altri microprocessori, come l’ESP32, si usa un segnale a 3,2V.
D: Come calcolo la velocità della ventola dal segnale di velocità?
R: La velocità della ventola è solitamente fornita come una serie di impulsi per rotazione (PPR) o giri al minuto (RPM).
D: Posso controllare la velocità della ventola usando Arduino?
R: Leggere il segnale di velocità con Arduino ti permette di monitorare la velocità della ventola, ma non di controllarla direttamente. Se vuoi controllare la velocità, potresti aver bisogno di circuiti aggiuntivi, come un driver per motore o un controller PWM, a seconda del tipo di ventola.
Tuttavia, se controlli la velocità della ventola con un segnale PWM, questo interferirà con la misurazione della velocità. Dovrai mettere in pausa il PWM durante la misurazione o usare una ventola a 4 fili che ha un filo separato per il controllo della velocità.
D: Ci sono precauzioni di sicurezza da considerare quando si lavora con ventole e Arduino?
R: Sì, non alimentare la ventola dai pin GPIO del tuo Arduino! Usa un alimentatore o una batteria separata con tensione e corrente adeguate e assicurati di collegare i fili di massa dell’alimentatore e dell’Arduino. Inoltre, non usare i circuiti presentati sopra con ventole AC che funzionano a 110V o 220V!
Se hai altre domande specifiche, sentiti libero di chiedere nella sezione commenti qui sotto.

