Neste tutorial, vais aprender como ler o sinal de velocidade ou tacómetro de um ventilador de 3 ou 4 fios usando um Arduino.
Os ventiladores são um componente essencial em muitos dispositivos eletrónicos, fornecendo arrefecimento e ventilação para evitar sobreaquecimento. Monitorizar a velocidade de um ventilador pode ser crucial para manter um desempenho ótimo e prevenir falhas potenciais.
Peças Necessárias
Abaixo está a lista de peças necessárias. Adicionei os LEDs caso queiras piscar um LED de aviso se a velocidade do ventilador cair abaixo de um certo limite.

Arduino Uno

Conjunto de fios Dupont

Breadboard

Cabo USB para Arduino UNO

Kit de resistores & 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.
Tipos de Ventiladores
Existem muitos tipos diferentes de ventiladores. A seguir, vamos focar-nos nos ventiladores usados habitualmente para arrefecimento em computadores, impressoras 3D, pequenos evaporadores e similares. A maioria destes ventiladores são brushless DC ventiladores com 2, 3 ou 4 fios que funcionam a 12V.
Ventilador DC de 2 Fios
Os ventiladores DC de 2 fios são o tipo mais simples de ventiladores DC. Têm dois fios: um fio vermelho para alimentação (VCC) e um fio preto para terra (GND). Abaixo está uma imagem de um ventilador típico de 2 fios.

Estes ventiladores funcionam a uma velocidade fixa, mas a velocidade pode ser alterada via Pulse Width Modulation (PWM). Vê o nosso tutorial sobre How To Control Fan using Arduino . Ventiladores de 2 fios não fornecem um sinal de velocidade que possas ler diretamente. No entanto, podes usar um íman e um sensor Hall para criar o teu próprio: Build Arduino Tachometer Using A3144 Hall Effect Sensor
Ventilador DC de 3 Fios
Os ventiladores DC de 3 fios têm os dois fios habituais para alimentação e terra (vermelho e preto) e um fio adicional (tipicamente amarelo) chamado fio do tacómetro (TACH). Este fio fornece um sinal de pulso que indica a velocidade de rotação do ventilador. Ao ler este sinal, podes monitorizar a velocidade do ventilador ou RPM (Rotações Por Minuto).

O sinal do tacómetro é gerado por um sensor de efeito Hall ou um sensor ótico que deteta a passagem de marcas específicas ou ímanes no rotor ou motor do ventilador. A saída é um pulso, e a frequência dos pulsos (e o comprimento do pulso) corresponde à velocidade do ventilador.
A maioria dos ventiladores de arrefecimento para computadores são de 3 fios, mas também são usados em muitos outros dispositivos. Abaixo uma imagem de um pequeno ventilador DC de 3 fios, 12V, para uma impressora 3D:

Ventilador DC de 4 Fios
Os ventiladores de 4 fios são o tipo mais avançado e oferecem funcionalidades adicionais. Têm quatro fios: um para alimentação (normalmente vermelho), um para terra (normalmente preto), um para o sinal de velocidade do ventilador (normalmente amarelo) e um para controlo de velocidade (normalmente azul).
A velocidade do ventilador é regulada enviando um sinal PWM ( Pulse Width Modulation ) no fio de controlo de velocidade, que está ligado a um MOSFET que controla o motor. Vê o diagrama do circuito a seguir.

Abaixo uma imagem de um ventilador DC típico de 12V e 4 fios usado como ventilador de arrefecimento para computador:

Podes controlar a velocidade de um ventilador de 2 ou 3 fios da mesma forma construindo o circuito de controlo por ti próprio. Dá uma vista de olhos no nosso tutorial sobre How To Control Fan using Arduino para mais detalhes.
Em resumo, ventiladores de 2 e 3 fios normalmente funcionam a velocidade constante. Ventiladores de 3 fios fornecem um sinal de tacómetro para monitorizar a velocidade do ventilador. E ventiladores de 4 fios normalmente funcionam a velocidade variável, controlada via sinal PWM no quarto fio, mas também permitem monitorizar a velocidade via o terceiro fio.
Compreender o Sinal de Velocidade do Ventilador
Como mencionado acima, dentro de um ventilador de 3 ou 4 fios está tipicamente um Hall Effect Sensor que deteta a passagem de dois ímanes fixados na parte rotativa do ventilador para medir a velocidade. Dois ímanes são normalmente usados para evitar uma distribuição de massa desigual nas partes rotativas, o que causaria vibrações. Vê a imagem abaixo.

O sinal de velocidade pode ser medido usando um resistor pull-up e ligando um osciloscópio como mostrado no circuito acima. Aqui uma foto do meu osciloscópio a mostrar o sinal do tacómetro de um pequeno ventilador.

Como podes ver, o sinal do tacómetro ou velocidade é um pulso retangular com ciclo de trabalho de 50% e uma frequência que corresponde à velocidade de rotação do ventilador. Quanto mais rápido o ventilador gira, mais curto será o comprimento do pulso e vice-versa.
Se olhares com atenção, verás que a tensão de pico do pulso é cerca de 5V, enquanto o ventilador é de 12V. Isto porque estou a usar um circuito ligeiramente diferente, que vamos discutir em detalhe na próxima secção.
Ligação do Sinal de Velocidade ao Arduino
Nesta secção, mostro-te como ligar o sinal de velocidade (sinal do tacómetro) de um ventilador de 3 ou 4 fios a um Arduino para medir a velocidade do ventilador.
Não podes simplesmente ligar o fio amarelo de um ventilador de 3 ou 4 fios a uma entrada digital do Arduino para ler a velocidade do ventilador. Não vai funcionar! Precisas de um pull-up resistor . O diagrama de ligação abaixo mostra como isso é feito.

Liga um resistor de 1KΩ ou 10KΩ ao pino +5V e ao pino 2 do teu Arduino. No exemplo acima, estou a usar um resistor de 1KΩ, mas qualquer resistor entre 1KΩ e 10KΩ é adequado e comummente usado como resistor pull-up. Depois liga o fio amarelo do tacómetro do ventilador também ao pino 2 do Arduino. E também precisas de ligar o fio preto de terra (GND) do ventilador ao pino GND do Arduino. Finalmente, liga o ventilador à sua tensão requerida. No exemplo acima, são 12V.
Classificação do Ventilador
Mas verifica a etiqueta no teu ventilador para saber qual a tensão necessária no teu caso. A imagem abaixo mostra a etiqueta de um dos meus ventiladores, que é classificado para 12V com uma corrente de 0,18A = 180mA.

Tensões típicas são 5V, 6V, 12V e 24V e as correntes rondam os 200 ou 300mA para ventiladores de arrefecimento de computadores. Nota que não podes usar um pino GPIO do teu Arduino como fonte de alimentação para um ventilador. O ventilador puxa muita corrente e vai danificar o teu Arduino! Podes usar o pino 5V do teu Arduino Uno se o ventilador puxar menos de 500mA (e for um ventilador de 5-6V).
Circuito na breadboard
Podes experimentar este circuito com um ventilador de 12V e uma bateria de 9V, se não tiveres uma fonte de alimentação ou bateria de 12V. O ventilador vai girar, só que um pouco mais devagar. A imagem abaixo mostra a ligação completa numa breadboard. É o mesmo circuito de antes, só que com a adição da bateria e numa breadboard.

Na próxima secção, vamos escrever o código para medir a velocidade do ventilador usando este circuito.
Código para Ler o Sinal de Velocidade do Ventilador
Aqui vamos ler o sinal de velocidade do ventilador para medir o RPM (Rotações Por Minuto) do ventilador. Isto assume que tens um ventilador de 3 ou 4 fios que fornece um sinal de saída do tacómetro. Se tens um ventilador de 2 fios, não te preocupes. Podes criar um sinal de tacómetro por ti próprio. Vê o nosso tutorial Build Arduino Tachometer Using A3144 Hall Effect Sensor .
Como viste acima, o sinal de velocidade ou tacómetro é um pulso retangular. Se contarmos quantos pulsos recebemos num minuto, podemos calcular o número de vezes que o ventilador roda num minuto. Esta medição de velocidade chama-se RPM (Rotações Por Minuto).
A forma mais fácil de contar pulsos é procurar uma borda ascendente ou descendente no sinal. A imagem abaixo mostra um pulso retangular com uma borda descendente marcada.

Contar bordas descendentes é o mesmo que contar pulsos. O código seguinte faz isso ao ligar uma interrupção ao sinal do tacómetro que incrementa um contador sempre que uma borda descendente é detetada. Dá uma vista rápida ao código primeiro e depois discutimos os detalhes.
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;
}
Constantes e Variáveis
Começamos com as constantes e variáveis. Primeiro, definimos a constante tachoPin que especifica a que pino está ligado o sinal do tacómetro do ventilador. Também definimos uma variável counter para acompanhar o número de pulsos recebidos do sinal do tacómetro. Esta variável precisa de ser do tipo ” volatile “, pois é usada dentro de uma interrupt service routine (ISR).
const int tachoPin = 2; volatile unsigned long counter = 0;
Função de Contar Pulsos
Na função countPulses() , incrementamos a variável counter em um cada vez que um pulso é recebido do sinal do tacómetro. Esta função é chamada sempre que uma borda descendente é detetada no tachoPin usando a função attachInterrupt() .
void countPulses() {
counter ++;
}
Função Setup
Na função setup() , inicializamos a comunicação serial a uma taxa de 9600 baud usando Serial.begin() . Isto permite imprimir os valores de RPM no monitor serial e no plotter serial. Também ligamos uma interrupção ao tachoPin usando attachInterrupt() e especificamos que a interrupção deve ser acionada numa borda FALLING . Sempre que uma borda descendente é detetada no tachoPin , a função countPulses() será chamada. Podes usar a borda ASCENDENTE em vez disso, se quiseres.
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(tachoPin), countPulses, FALLING);
}
Função Loop
Na função loop() , esperamos primeiro 1000ms = 1 segundo usando delay() . Durante esse segundo de atraso, a rotina de serviço de interrupção countPulses() está a correr em segundo plano, a contar as bordas descendentes do sinal do tacómetro.
Depois calculamos o RPM multiplicando a variável counter por 60 (para converter de pulsos por segundo para pulsos por minuto) e dividindo por 2 (pois cada rotação do ventilador gera 2 pulsos). Imprimimos o valor calculado de RPM no monitor serial usando Serial.print() e Serial.println() . Finalmente, reiniciamos a variável counter para 0 para começar a contar os pulsos para o próximo período de tempo (1 segundo).
void loop() {
delay(1000);
long rpm = counter * 60 / 2;
Serial.print("RPM:");
Serial.println(rpm);
counter = 0;
}
Nota que alguns ventiladores reportam apenas um pulso por rotação. Neste caso, precisas de remover a divisão por 2, pois cada pulso significa uma rotação do ventilador.
Se as leituras de velocidade variarem muito, podes aumentar o tempo de atraso. Por exemplo, um atraso de 2 segundos dará leituras mais estáveis, mas precisas mudar o multiplicador de 60 para 30. De forma semelhante, se quiseres leituras de velocidade mais rápidas, podes reduzir o atraso para 500ms, mas tens de mudar o multiplicador de 60 para 120.
Exemplo de saída
Se executar este código com o meu ventilador e usar o dedo para abrandar temporariamente o ventilador pressionando o eixo central, vejo a seguinte saída no Serial Plotter:

E está feito! Agora sabes como medir a velocidade de um ventilador de 3 ou 4 fios usando o seu sinal de tacómetro e um Arduino.
Conclusões
Neste artigo, aprendemos como ler sinais de velocidade (tacómetro) de ventiladores com Arduino. Começámos por entender os diferentes tipos de ventiladores, incluindo os de 2, 3 e 4 fios.
Depois analisámos o próprio sinal de velocidade do ventilador. Os sinais de velocidade são tipicamente fornecidos como pulsos retangulares com uma frequência proporcional à velocidade do ventilador, medida em Rotações Por Minuto (RPM).
De seguida, discutimos como ligar o fio do sinal de velocidade do ventilador ao Arduino. Fornecemos um guia passo a passo para fazer as ligações necessárias.
Finalmente, abordámos o processo de escrever o código para ler o sinal de velocidade do ventilador. Explicámos como usar interrupções para capturar os pulsos do ventilador e calcular a velocidade com base no número de pulsos recebidos num segundo.
Se tiveres mais perguntas ou precisares de esclarecimentos sobre algum dos tópicos abordados neste artigo, consulta a secção de Perguntas Frequentes abaixo.
Perguntas Frequentes
Aqui estão algumas perguntas frequentes sobre a leitura de sinais de velocidade de ventiladores com Arduino:
P: De que tipos de ventiladores posso ler o sinal de velocidade?
R: Podes ler o sinal de velocidade de ventiladores de 3 e 4 fios. Estes são tipos comuns usados em vários dispositivos eletrónicos e sistemas de computador.
P: Como identifico o fio do sinal de velocidade num ventilador?
R: O fio do sinal de velocidade é geralmente rotulado como “TACH” ou “SIGNAL” no ventilador. Normalmente é amarelo, enquanto os fios de alimentação e terra são vermelho e preto. Se for um ventilador de 4 fios, normalmente há um fio azul adicional para controlo de velocidade.
P: Como aviso se a velocidade do ventilador estiver muito baixa?
Aqui está um exemplo de código que liga o LED incorporado se a velocidade do ventilador cair abaixo de 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);
}
P: Posso ligar vários ventiladores ao Arduino para ler os seus sinais de velocidade?
R: Sim, podes ligar vários ventiladores ao Arduino usando pinos de entrada digital separados para o fio do sinal de velocidade de cada ventilador. Certifica-te de ajustar o teu código para ler os sinais de velocidade de vários pinos.
P: Qual é o nível de tensão do sinal de velocidade do ventilador?
R: O nível de tensão do sinal de velocidade do ventilador é determinado pela tensão à qual o resistor pull-up está ligado. Para ler um sinal de tacómetro com um Arduino, queres usar um sinal de 5V. Para outros microprocessadores, como o ESP32, usarás um sinal de 3,2V.
P: Como calculo a velocidade do ventilador a partir do sinal de velocidade?
R: A velocidade do ventilador é geralmente fornecida como uma série de pulsos por rotação (PPR) ou rotações por minuto (RPM).
P: Posso controlar a velocidade do ventilador usando Arduino?
R: Ler o sinal de velocidade do ventilador com Arduino permite monitorizar a velocidade, mas não a controla diretamente. Se quiseres controlar a velocidade do ventilador, podes precisar de circuitos adicionais, como um driver de motor ou controlador PWM, dependendo do tipo de ventilador.
No entanto, se controlares a velocidade do ventilador com um sinal PWM, isso vai interferir com a medição da velocidade. Vais precisar de pausar o PWM durante a medição da velocidade ou usar um ventilador de 4 fios que tenha um fio separado para controlo de velocidade.
P: Existem precauções de segurança que devo considerar ao trabalhar com ventiladores e Arduino?
R: Sim, não alimentes o ventilador a partir dos pinos GPIO do teu Arduino! Usa uma fonte de alimentação ou bateria separada com tensão e corrente adequadas e certifica-te de ligar os fios de terra da fonte de alimentação e do Arduino. Também não uses os circuitos apresentados acima com um ventilador AC que funcione a 110V ou 220V!
Se tiveres dúvidas mais específicas, não hesites em perguntar na secção de comentários abaixo.

