O que vamos aprender?
Aprenderemos a ler as rotações por minuto (RPM) de uma ventoinha (Fan) com 3 fios. Usaremos o Arduino, mas pode ser feito com qualquer MCU.
Leitura de RPM
As ventoinhas com 3 ou 4 fios, tem embutido, um sensor Hall que detecta a variação do campo magnético gerado pela rotação da ventoinha. A maioria das ventoinhas tem dois pólos magnéticos, que quando rotacionado, aciona o Hall e conseguimos efetuar a leitura das rotações.
Como pode ser visto na Figura 1, após uma volta, o Hall ativou a saída duas vezes. Logo, precisamos dividir a contagem das rotações por 2 para se chegar em uma volta completa.
A leitura de RPM pode ser extremamente útil em casos em que é preciso controle da velocidade ou fluxo de vento em um determinado local, ou até mesmo determinar se a ventoinha esta funcionando corretamente, caso não, o sistema irá detectar e ativar um alarme, já que pode gerar super aquecimentos e até pegar fogo em componentes!
Mãos à obra
Componentes necessários
Montando o projeto
Faça as ligações simples e coloque o terceiro fio (normalmente amarelo ou branco) ao pino 2 do Arduino! Lembre-se da tensão e corrente de sua ventoinha, a usada no o tutorial é suficiente para o Arduino suprir, caso a sua seja “mais forte”, será necessário uma fonte externa e divisores de tensão no 3 pino. Ficará parecido com o nosso:
Código do projeto
volatile uint32_t rpm;//Váriavel que armazena as rotações. void setup() { Serial.begin(115200);//Inicia a Serial. attachInterrupt(0, ctt, RISING);//Habilita a interrupção 0 no pino 2. } void loop() { delay(1000);//Aguarda um segundo. Serial.println(rpm * 30);//Mostra o RPM. rpm = 0;//Reseta a váriavel para proxima leitura. //Como estamos lendo a cada UM segundo, usariamos RPM*60 para determinar as rotações por minuto, //porém, como foi dito na explicação, é preciso dividir o valor por 2, por isto 30! } void ctt() { rpm++;//Incrementa a váriavel. }
Colocando para funcionar
De acordo com o datasheet da ventoinha aqui testada, era de se esperar cerca de 13000 RPM (Fig 3). Após analisar com o Arduino, o valor variou entre 12000-15000 RPM (Fig 4), mostrando que esta correto!
Figura 3 – Datasheet
Entendendo a fundo
Software
-Função attachInterrupt()
attachInterrupt(0, ctt, RISING);
É configurado uma rotina de interrupção para a leitura dos pulsos altos gerados pela ventoinha. Foi usado a interrupção 0, que está ligada ao pino 2 do Arduino Uno.
-Mostrando os valores
Serial.println(rpm * 30);
Aqui esta a grande jogada da leitura. É feito a cada 1 segundo, a leitura da variável RPM, que foi modificada pela interrupção da ventoinha. Para converter as rotações por segundo, para rotações por minuto, é necessário multiplicar por 60, já que 1 minuto tem 60 segundos.
Entretanto, no inicio do tutorial, foi mostrado que deve-se dividir por 2 para chegar a uma rotação completa, por isso usamos 30!
-Resetando a variável
rpm = 0;
Após a leitura dos pulsos, é necessário resetar a variável, se não, irá interferir nas contas futuras.
Fechamento
Em vários cenários é necessário conhecer sobre o funcionamento de uma ventoinha, que caso venha a falhar, pode gerar terríveis danos ao sistema. Então, aprender a ler a RPM da ventoinha pode ser uma ótima maneira de descobrir se esta tudo correto. Dúvidas? Sugestões? Críticas? Comente abaixo!
Estudante de Engenharia da Computação pela USC, pretende se aprimorar e fazer a diferença nesta imensa área da tecnologia. Apaixonado por IoT, sistemas embarcados, microcontroladores e integração da computação nos mais diversos fins práticos e didáticos.
6 Comments
Deixe uma pergunta, sugestão ou elogio! Estamos ansiosos para ter ouvir!Cancelar resposta
Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.
caso a ventoinha seja de 12volts como seria a coleta no pino 2? a tensão do pino do meio é em 12v tb?
Muito obrigado, Morais.
Durante o meu mestrado em análise de dados, uso o seu código com poucas modificações e consigo, agora, acompanhar a rotação de um motor veicular com informações muito próximas das verificadas no painel do veículo.
Encontrei vários exemplos na internet para isso mas o seu é simples, direto e atende a exigência de baixo tempo de execução do código por ciclo.
Parabéns pelo trabalho!!!
Jose Morais gostei muito deste codigo que voce fez mas por favor me explique o Comando (ctt) que não consigo descobrir o que ele faz, qual a função dele….. obrigado
Usando apenas a força do vento, o sensor do cooler funciona da mesma maneira? Esses dados são exibidos no software?
Boa noite, José!!
Por que mudando o delay a leitura fica estranha?
Obrigado!
O delay faz parte do calculo matemático, se alterar tanto o calculo quanto o delay, é preciso refazer as contas!