En este tutorial aprenderás cómo leer la señal de velocidad o tacómetro de un ventilador de 3 o 4 cables usando un Arduino.
Los ventiladores son un componente esencial en muchos dispositivos electrónicos, proporcionando refrigeración y ventilación para evitar el sobrecalentamiento. Monitorizar la velocidad de un ventilador puede ser crucial para mantener un rendimiento óptimo y prevenir posibles fallos.
Partes necesarias
A continuación, la lista de partes necesarias. He añadido los LEDs por si quieres hacer parpadear un LED de advertencia si la velocidad del ventilador cae por debajo de un cierto umbral.

Arduino Uno

Juego de cables Dupont

Protoboard

Cable USB para Arduino UNO

Kit de resistencias y LEDs
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
Existen muchos tipos diferentes de ventiladores. A continuación nos centraremos en los ventiladores comúnmente usados para refrigeración en ordenadores, impresoras 3D, pequeños enfriadores evaporativos y similares. La mayoría de estos ventiladores son brushless DC ventiladores que vienen con 2, 3 o 4 cables y funcionan a 12V.
Ventilador DC de 2 cables
Los ventiladores DC de 2 cables son el tipo más simple de ventiladores DC. Tienen dos cables: uno rojo para la alimentación (VCC) y uno negro para tierra (GND). A continuación, una imagen de un ventilador típico de 2 cables.

Estos ventiladores funcionan a velocidad fija, pero la velocidad puede cambiarse mediante Pulse Width Modulation (PWM). Consulta nuestro tutorial sobre How To Control Fan using Arduino . Los ventiladores de 2 cables no proporcionan una señal de velocidad que puedas leer directamente. Sin embargo, puedes usar un imán y un sensor Hall para crear tu propia señal: Build Arduino Tachometer Using A3144 Hall Effect Sensor
Ventilador DC de 3 cables
Los ventiladores DC de 3 cables tienen los dos cables habituales para alimentación y tierra (rojo y negro) y un cable adicional (normalmente amarillo) llamado cable tacómetro (TACH). Este cable proporciona una señal de pulso que indica la velocidad de rotación del ventilador. Leyendo esta señal, puedes monitorizar la velocidad o RPM (revoluciones por minuto) del ventilador.

La señal del tacómetro es generada por un sensor de efecto Hall o un sensor óptico que detecta el paso de marcas específicas o imanes en el rotor o motor del ventilador. La salida es un pulso, y la frecuencia de los pulsos (y la duración del pulso) corresponde a la velocidad del ventilador.
La mayoría de los ventiladores de refrigeración para ordenadores son de 3 cables, pero también se usan en muchos otros dispositivos. A continuación, una imagen de un pequeño ventilador DC de 3 cables y 12V para una impresora 3D:

Ventilador DC de 4 cables
Los ventiladores de 4 cables son el tipo más avanzado y ofrecen funcionalidades adicionales. Tienen cuatro cables: uno para alimentación (normalmente rojo), uno para tierra (normalmente negro), uno para la señal de velocidad del ventilador (normalmente amarillo) y uno para el control de velocidad (normalmente azul).
La velocidad del ventilador se regula enviando una señal PWM ( Pulse Width Modulation ) por el cable de control de velocidad, que está conectado a un MOSFET que controla el motor. Consulta el siguiente diagrama de circuito.

A continuación, una imagen de un ventilador DC típico de 12V y 4 cables usado como ventilador de refrigeración para ordenador:

Puedes controlar la velocidad de un ventilador de 2 o 3 cables de la misma forma construyendo tú mismo el circuito de control. Consulta nuestro tutorial sobre How To Control Fan using Arduino para más detalles.
En resumen, los ventiladores de 2 y 3 cables suelen funcionar a velocidad constante. Los ventiladores de 3 cables proporcionan una señal de tacómetro para monitorizar la velocidad. Y los ventiladores de 4 cables suelen funcionar a velocidad variable, controlada mediante una señal PWM en el cuarto cable, pero también permiten monitorizar la velocidad a través del tercer cable.
Entendiendo la señal de velocidad del ventilador
Como se mencionó antes, dentro de un ventilador de 3 o 4 cables suele haber un Hall Effect Sensor que detecta el paso de dos imanes fijados a la parte giratoria del ventilador para medir la velocidad. Se usan dos imanes para evitar una distribución de masa desigual en las partes giratorias, lo que causaría vibraciones. Consulta la imagen a continuación.

La señal de velocidad puede medirse usando una resistencia pull-up y conectando un osciloscopio como se muestra en el circuito anterior. Aquí una foto de mi osciloscopio mostrando la señal del tacómetro de un ventilador pequeño.

Como puedes ver, la señal del tacómetro o de velocidad es un pulso rectangular con un ciclo de trabajo del 50% y una frecuencia que corresponde a la velocidad de rotación del ventilador. Cuanto más rápido gira el ventilador, más corta será la duración del pulso y viceversa.
Si observas con atención, verás que el voltaje pico del pulso es alrededor de 5V, mientras que el ventilador es de 12V. Esto se debe a que estoy usando un circuito ligeramente diferente, que discutiremos en detalle en la siguiente sección.
Conectando la señal de velocidad a un Arduino
En esta sección te muestro cómo conectar la señal de velocidad (señal del tacómetro) de un ventilador de 3 o 4 cables a un Arduino para medir la velocidad del ventilador.
No puedes simplemente conectar el cable amarillo de un ventilador de 3 o 4 cables a una entrada digital del Arduino para leer la velocidad. ¡No funcionará! Necesitas un pull-up resistor . El diagrama de conexiones a continuación te muestra cómo hacerlo.

Conecta una resistencia de 1KΩ o 10KΩ al pin +5V y al pin 2 de tu Arduino. En el ejemplo uso una resistencia de 1KΩ, pero cualquier resistencia entre 1KΩ y 10KΩ está bien y es comúnmente usada como resistencia pull-up. Luego conecta el cable amarillo del tacómetro del ventilador también al pin 2 del Arduino. Además, conecta el cable negro de tierra (GND) del ventilador al pin GND del Arduino. Finalmente, conecta el ventilador a su voltaje requerido. En el ejemplo es 12V.
Especificación del ventilador
Pero revisa la etiqueta de tu ventilador para saber qué voltaje requiere en tu caso. La imagen a continuación muestra la etiqueta de uno de mis ventiladores, que está especificado para 12V con una corriente de 0.18A = 180mA.

Los voltajes típicos son 5V, 6V, 12V y 24V, y las corrientes suelen estar alrededor de 200 o 300mA para ventiladores de refrigeración de ordenador. Ten en cuenta que no puedes usar un pin GPIO de tu Arduino como fuente de alimentación para un ventilador. El ventilador consume demasiada corriente y dañará tu Arduino. Puedes usar el pin de 5V de tu Arduino Uno si tu ventilador consume menos de 500mA (y es un ventilador de 5-6V).
Circuito en protoboard
Puedes probar este circuito con un ventilador de 12V y una batería de 9V si no tienes una fuente de alimentación o batería de 12V. El ventilador girará, solo un poco más lento. La imagen a continuación muestra el cableado completo en una protoboard. Es el mismo circuito que antes, solo que con la adición de la batería y en una protoboard.

En la siguiente sección escribiremos el código para medir la velocidad del ventilador usando este circuito.
Código para leer la señal de velocidad del ventilador
Aquí leeremos la señal de velocidad del ventilador para medir las RPM (revoluciones por minuto) del ventilador. Esto asume que tienes un ventilador de 3 o 4 cables que proporciona una señal de salida del tacómetro. Si tienes un ventilador de 2 cables, no te preocupes. Puedes crear una señal de tacómetro tú mismo. Consulta nuestro tutorial Build Arduino Tachometer Using A3144 Hall Effect Sensor .
Como has visto arriba, la señal de velocidad o tacómetro es un pulso rectangular. Si contamos cuántos pulsos recibimos en un minuto, podemos calcular cuántas veces gira el ventilador en ese minuto. Esta medida de velocidad se llama RPM (revoluciones por minuto).
La forma más sencilla de contar pulsos es buscar un flanco ascendente o descendente en la señal. La imagen a continuación muestra un pulso rectangular con un flanco descendente marcado.

Contar flancos descendentes es lo mismo que contar pulsos. El siguiente código hace eso adjuntando una interrupción a la señal del tacómetro que incrementa un contador cada vez que se detecta un flanco descendente. Echa un vistazo rápido al código primero y luego discutiremos los detalles.
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 y variables
Comenzamos con las constantes y variables. Primero definimos la constante tachoPin que especifica a qué pin está conectado el señal del tacómetro del ventilador. También definimos una variable counter para llevar la cuenta del número de pulsos recibidos de la señal del tacómetro. Debe ser del tipo » volatile «, ya que se usa dentro de una interrupt service routine (ISR).
const int tachoPin = 2; volatile unsigned long counter = 0;
Función para contar pulsos
En la función countPulses() , incrementamos la variable counter en uno cada vez que se recibe un pulso de la señal del tacómetro. Esta función se llama cada vez que se detecta un flanco descendente en el tachoPin usando la función attachInterrupt() .
void countPulses() {
counter ++;
}
Función setup
En la función setup() , inicializamos la comunicación serial a una velocidad de 9600 baudios usando Serial.begin() . Esto nos permite imprimir los valores de RPM en el monitor serial y en el plotter serial. También adjuntamos una interrupción al tachoPin usando attachInterrupt() y especificamos que la interrupción se active en un flanco FALLING . Cada vez que se detecta un flanco descendente en el tachoPin , se llamará a la función countPulses() . Podrías usar el flanco ASCENDENTE en su lugar, si quisieras.
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(tachoPin), countPulses, FALLING);
}
Función loop
En la función loop() , primero esperamos 1000 ms = 1 segundo usando delay() . Durante ese segundo de retardo, la rutina de servicio de interrupción countPulses() está funcionando en segundo plano, contando los flancos descendentes de la señal del tacómetro.
Luego calculamos las RPM multiplicando la variable counter por 60 (para convertir de pulsos por segundo a pulsos por minuto) y dividiendo por 2 (ya que cada rotación del ventilador genera 2 pulsos). Imprimimos el valor calculado de RPM en el monitor serial usando Serial.print() y Serial.println() . Finalmente, reiniciamos la variable counter a 0 para comenzar a contar pulsos para el siguiente período de tiempo (1 segundo).
void loop() {
delay(1000);
long rpm = counter * 60 / 2;
Serial.print("RPM:");
Serial.println(rpm);
counter = 0;
}
Ten en cuenta que algunos ventiladores reportan solo un pulso por rotación. En ese caso, debes eliminar la división por 2, ya que cada pulso entonces significa una rotación del ventilador.
Si tus lecturas de velocidad varían mucho, podrías aumentar el tiempo de retardo. Por ejemplo, un retardo de 2 segundos te dará lecturas más estables, pero entonces debes cambiar el multiplicador de 60 a 30. De manera similar, si quieres lecturas de velocidad más rápidas, podrías reducir el retardo a 500 ms, pero tendrías que cambiar el multiplicador de 60 a 120.
Ejemplo de salida
Si ejecuto este código con mi ventilador y uso mi dedo para ralentizar temporalmente el ventilador presionando el eje central, veo la siguiente salida en el Plotter Serial:

¡Y ahí lo tienes! Ahora sabes cómo medir la velocidad de un ventilador de 3 o 4 cables usando su señal de tacómetro y un Arduino.
Conclusiones
En esta entrada del blog, hemos aprendido cómo leer señales de velocidad (tacómetro) de ventiladores con Arduino. Comenzamos entendiendo los diferentes tipos de ventiladores, incluyendo los de 2, 3 y 4 cables.
Luego analizamos la señal de velocidad del ventilador. Las señales de velocidad suelen ser pulsos rectangulares con una frecuencia proporcional a la velocidad del ventilador, medida en revoluciones por minuto (RPM).
A continuación, discutimos cómo conectar el cable de señal de velocidad del ventilador al Arduino. Proporcionamos una guía paso a paso para hacer las conexiones necesarias.
Finalmente, cubrimos el proceso de escribir el código para leer la señal de velocidad del ventilador. Explicamos cómo usar interrupciones para capturar los pulsos del ventilador y calcular la velocidad basándonos en el número de pulsos recibidos en un segundo.
Si tienes más preguntas o necesitas aclaraciones sobre cualquiera de los temas tratados en esta entrada, por favor consulta la sección de Preguntas Frecuentes a continuación.
Preguntas Frecuentes
Aquí tienes algunas preguntas frecuentes sobre cómo leer señales de velocidad de ventiladores con Arduino:
P: ¿De qué tipos de ventiladores puedo leer la señal de velocidad?
R: Puedes leer la señal de velocidad de ventiladores de 3 y 4 cables. Estos son tipos comunes de ventiladores usados en varios dispositivos electrónicos y sistemas informáticos.
P: ¿Cómo identifico el cable de señal de velocidad en un ventilador?
R: El cable de señal de velocidad suele estar etiquetado como «TACH» o «SIGNAL» en el ventilador. Normalmente es amarillo, mientras que los cables de alimentación y tierra son rojo y negro. Si es un ventilador de 4 cables, normalmente verás un cable azul adicional para el control de velocidad.
P: ¿Cómo puedo avisar si la velocidad del ventilador es demasiado baja?
Aquí tienes un ejemplo de código que enciende el LED incorporado si la velocidad del ventilador cae por debajo 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: ¿Puedo conectar varios ventiladores al Arduino para leer sus señales de velocidad?
R: Sí, puedes conectar varios ventiladores al Arduino usando pines de entrada digital separados para el cable de señal de velocidad de cada ventilador. Asegúrate de ajustar tu código para leer las señales de velocidad de múltiples pines.
P: ¿Cuál es el nivel de voltaje de la señal de velocidad del ventilador?
R: El nivel de voltaje de la señal de velocidad está determinado por el voltaje al que está conectada la resistencia pull-up. Para leer una señal de tacómetro con un Arduino, quieres usar una señal de 5V. Para otros microprocesadores, como el ESP32, usarías una señal de 3.2V.
P: ¿Cómo calculo la velocidad del ventilador a partir de la señal de velocidad?
R: La velocidad del ventilador suele proporcionarse como una serie de pulsos por revolución (PPR) o revoluciones por minuto (RPM).
P: ¿Puedo controlar la velocidad del ventilador usando Arduino?
R: Leer la señal de velocidad del ventilador con Arduino te permite monitorizar la velocidad, pero no controlarla directamente. Si quieres controlar la velocidad, puede que necesites circuitos adicionales, como un controlador de motor o un controlador PWM, dependiendo del tipo de ventilador.
Sin embargo, si controlas la velocidad del ventilador con una señal PWM, esto interferirá con la medición de velocidad. Necesitarás pausar el PWM durante la medición o usar un ventilador de 4 cables que tenga un cable separado para el control de velocidad.
P: ¿Hay precauciones de seguridad que deba considerar al trabajar con ventiladores y Arduino?
R: Sí, ¡no alimentes el ventilador desde los pines GPIO de tu Arduino! Usa una fuente de alimentación o batería separada con el voltaje y corriente adecuados y asegúrate de conectar los cables de tierra de la fuente de alimentación y del Arduino. Además, no uses los circuitos presentados aquí con un ventilador de CA que funcione a 110V o 220V.
Si tienes preguntas más específicas, no dudes en preguntar en la sección de comentarios a continuación.

