Neste artigo, vais aprender como controlar um ventilador com um Arduino Uno. Vamos analisar os diferentes tipos de ventiladores e os métodos para os controlar. No final deste post, terás uma compreensão sólida de como controlar um ventilador e estarás equipado com o conhecimento para criar o teu próprio sistema de controlo de ventiladores.
Então, vamos começar!
Peças Necessárias
Abaixo encontras as peças necessárias para este projeto. Presumo que já tenhas um ventilador que queiras controlar, mas também encontrarás links para diferentes tipos de ventiladores na próxima secção.
Vamos usar um MOSFET 2N7000 para alguns dos circuitos deste blog. Forneci um link para um kit com vários transistores e MOSFETs, que é útil ter. Também podes comprar o 2N7000 MOSFET sozinho, mas normalmente vêm em embalagens de 100 unidades, o que provavelmente é mais do que precisas.
Se quiseres controlar ventiladores ou dispositivos que consumam mais de 200mA, MOSFETs pequenos como o 2N7000 não serão suficientes. Vais precisar de MOSFETs de potência MOSFETs, que podem suportar até 100A!

Arduino Uno

Conjunto de Fios Dupont

Breadboard

Cabo USB para Arduino UNO

Kit de Trimmers

Kit de Resistores & LED

Módulo Relé

Kit de Transistores

Sensor de Movimento

Sensor de Temperatura
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
Nesta secção, vamos rapidamente ver os diferentes tipos de ventiladores que normalmente queres controlar com um Arduino.
Ventiladores AC versus DC
Ao controlar um ventilador com Arduino, uma das considerações principais é se o ventilador funciona com corrente alternada (AC) ou corrente contínua (DC). Compreender a diferença entre os dois é crucial para escolher o ventilador adequado e garantir a compatibilidade com o teu setup Arduino.
Ventiladores AC
Ventiladores AC são projetados para funcionar com a alimentação elétrica doméstica padrão de 110V ou 220V, por exemplo. Costumas vê-los como ventiladores de teto ou em aparelhos como ar condicionado. Mas também existem pequenos ventiladores de secretária AC. Ventiladores AC normalmente funcionam a velocidades fixas. Abaixo podes ver uma imagem de um ventilador AC típico:

Note que normalmente não consegues identificar pela aparência se um ventilador é AC ou DC, ou qual a voltagem necessária. Terás de verificar a etiqueta (ver acima) que fornece essa informação.
Para controlar um ventilador AC com Arduino, normalmente usas um Relay ou um Thyristor. Relés ou tiristores atuam como interruptores controláveis que podem lidar com a alta voltagem e corrente de um ventilador AC. Nota, ao lidar com altas voltagens, tem muito cuidado!
Ventiladores DC
Ventiladores DC, ao contrário dos AC, funcionam com corrente contínua. São usados frequentemente em dispositivos eletrónicos como computadores, portáteis e outros pequenos sistemas de arrefecimento. Normalmente funcionam a 6V ou 12V e podem ser facilmente controlados com um Arduino.
Ventiladores DC vêm em diferentes configurações, como variantes de 2, 3 e 4 fios. Vamos analisar estas variantes nas próximas secções.
Ventilador DC de 2 fios
Ventiladores DC de 2 fios são o tipo mais simples. Têm dois fios – um vermelho para a alimentação (VCC) e um preto para o terra (GND). Estes ventiladores funcionam nativamente a uma velocidade fixa, mas a velocidade pode ser alterada via Modulação por Largura de Pulso (PWM). Vou mostrar vários exemplos de como isso é feito. Abaixo está uma imagem de um ventilador DC típico de 12V. Note os dois fios para alimentação e terra.

Ventilador DC de 3 fios
Ventiladores DC de 3 fios têm os habituais dois fios 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 no teu projeto Arduino.

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

Ventilador DC de 4 fios
Um ventilador DC de 4 fios é outro tipo de ventilador tipicamente usado como ventilador de arrefecimento em computadores. É uma extensão do ventilador de 3 fios e tem um quarto fio para controlar a velocidade do ventilador. Como nos ventiladores de 2 e 3 fios, o fio positivo de alimentação é geralmente vermelho e o fio terra é preto. O fio do tacómetro (tacho) é amarelo. O fio adicional de controlo de velocidade é tipicamente 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. Para mais detalhes, 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 de computador:

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. 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.
Note que tanto o sinal do tacómetro como o fio de controlo de velocidade usam pulsos como sinais. Mas o sinal do tacómetro é uma saída, enquanto o controlo de velocidade é uma entrada. Além disso, a velocidade é controlada via Modulação por Largura de Pulso com ciclo de trabalho variável, enquanto o sinal do tacómetro tem um ciclo de trabalho constante de 50%, mas a frequência varia em relação à velocidade.
Nas secções seguintes vamos ver vários métodos para controlar um ventilador.
Exemplo 1: Ligar Ventilador com Relé
Começamos com a forma mais simples possível de controlar um ventilador. Ligamos um dos módulos de relé comuns a um Arduino e usamos para ligar ou desligar um ventilador.
Note que normalmente não podes ligar um ventilador diretamente a um dos pinos de saída do Arduino. A corrente de saída nos pinos GPIO do Arduino é limitada a 20mA (40mA a curto prazo). À exceção de ventiladores muito pequenos, quase todos consomem mais energia do que isso e também requerem tensões mais altas do que os 5V que os pinos GPIO fornecem.
Ligação na Breadboard
Ligar um ventilador via relé a um Arduino é muito simples. Vê o diagrama de ligação abaixo.

Ligação do Relé ao Arduino
Primeiro liga o GND do Arduino ao pino marcado (-) ou GND do relé (fio azul). Depois liga a saída 5V do Arduino ao pino de alimentação positivo (+) do relé (fio vermelho). Em seguida, liga o fio de sinal (amarelo) do pino 3 ao pino marcado (S) no módulo relé. Este fio controla o relé, que por sua vez liga ou desliga o ventilador.
Ligação da Fonte de Alimentação
Depois ligamos o ventilador à fonte de alimentação. Vais precisar de uma fonte ou bateria que corresponda aos requisitos de energia do ventilador. Por exemplo, se tens um ventilador de 12V, 180mA, precisas de uma fonte ou bateria de 12V que possa fornecer pelo menos 180mA. Em resumo, a voltagem da bateria não deve ser superior à do ventilador, mas a corrente da bateria deve ser maior.
No exemplo acima, estou a usar uma bateria de 9V com 1000mAh para alimentar um ventilador de 12V, 180mA. Isto funciona e é aceitável para testes, mas o ventilador não vai rodar à velocidade máxima. Para uma aplicação real, usaria uma bateria ou fonte de 12V.
Ligação do Ventilador
Ligar o ventilador é fácil. Ligamos o fio azul/preto do ventilador ao polo negativo (-) da bateria. O fio vermelho vai para os terminais do interruptor do relé. Um será marcado GND (terra), outro NO (normalmente aberto), e outro NC (normalmente fechado). Normalmente Aberto significa que o interruptor está aberto e o ventilador não funciona até o relé ser ativado. Liga os fios vermelhos da bateria e do ventilador ao GND e NO. A ordem não importa.
Note, no entanto, que muitos ventiladores (especificamente ventiladores de arrefecimento de computadores) usam motores brushless e têm eletrónica interna que requer polaridade correta. Enquanto podes inverter a direção de um motor DC simples trocando o positivo pelo negativo, isso geralmente não funciona com motores brushless. Eles só funcionam numa direção com a polaridade correta. As vantagens dos motores brushless são que são silenciosos, podem funcionar por longos períodos e não precisam de um snubber diode.
Podes usar o circuito acima também para ligar ventiladores AC, mas tem cuidado! Usa definitivamente um módulo relé em vez de um relé simples, pois os módulos relé normalmente têm optoacopladores para fornecer isolamento elétrico.
Código para controlar Ventilador com Relé
Ligar ou desligar o ventilador usando um Arduino é agora muito simples. Podes ver o código abaixo, que liga e desliga o ventilador periodicamente a cada 5 segundos.
// Control a relay to switch on/off a fan
const int relayPin = 3;
void setup() {
pinMode(relayPin, OUTPUT);
}
void loop() {
digitalWrite(relayPin, HIGH);
delay(5000);
digitalWrite(relayPin, LOW);
delay(5000);
}
Vamos analisar o código e entender como funciona.
Constantes e Variáveis
Começamos por definir a constante relayPin que especifica o pino ao qual o relé está ligado. Neste caso, está ligado ao pino 3.
const int relayPin = 2;
Função Setup
Na função setup(), definimos o modo do pino relayPin para OUTPUT. Isto é necessário porque vamos escrever neste pino para controlar o relé.
void setup() {
pinMode(relayPin, OUTPUT);
}
Função Loop
A função loop() é onde reside a lógica principal do nosso código. Nesta função, primeiro definimos o pino relayPin para HIGH usando a função digitalWrite(). Isto liga o relé e liga o ventilador. Depois esperamos 5000 milissegundos (5 segundos) usando a função delay().
void loop() {
digitalWrite(relayPin, HIGH);
delay(5000);
Após o atraso, definimos o pino relayPin para LOW usando a função digitalWrite(). Isto desliga o relé e o ventilador. Voltamos a esperar 5000 milissegundos (5 segundos) usando a função delay().
digitalWrite(relayPin, LOW); delay(5000);
Este processo de ligar e desligar o ventilador repete-se indefinidamente num ciclo, criando um ciclo contínuo de 5 segundos ligado e 5 segundos desligado.
Com o código e circuito acima podes ligar ou desligar um ventilador por durações definidas. Poderias agora usar o relógio interno do Arduino para ligar o ventilador a uma hora específica e deixá-lo funcionar por um período fixo, por exemplo.
Na próxima secção, vou mostrar como usar um módulo PIR para ligar um ventilador quando for detetado movimento.
Exemplo 2: Ligar Ventilador com Detector de Movimento
Em muitos casos, queres que o ventilador funcione apenas quando for detetado movimento. Por exemplo, a imagem abaixo mostra um ventilador ativado por movimento que construí para remover fumos de soldadura. Podes ver o sensor de movimento (Sensor PIR) na base do ventilador.

Circuito para Ventilador Ativado por Movimento
O circuito seguinte mostra como podes construir algo semelhante. Usa um Sensor Infravermelho Passivo (PIR) para detetar movimento que ativa um relé, que por sua vez liga o ventilador.

O circuito é essencialmente idêntico ao circuito do ventilador controlado por relé que vimos antes. Só precisamos de adicionar o sensor de movimento. Primeiro liga a bateria, relé, ventilador e Arduino da mesma forma. Depois liga o positivo e negativo do sensor PIR às linhas de alimentação positiva e negativa da breadboard (fios azul e vermelho). Finalmente, liga a saída de sinal do sensor PIR ao pino 2 do Arduino (fio verde).
Código para Ventilador Ativado por Movimento
Abaixo encontras o código para o ventilador ativado por movimento. Ele lê o sensor de movimento a cada 100ms e, se for detetado movimento, liga o ventilador por 10 segundos. Dá uma vista rápida e depois discutimos os detalhes.
// Switch on fan for 10 seconds via relay
// if PIR sensor detects motion
const int motionPin = 3;
const int relayPin = 2;
void setup() {
pinMode(motionPin, INPUT);
pinMode(relayPin, OUTPUT);
}
void loop() {
int motionState = digitalRead(motionPin);
if (motionState == HIGH) {
digitalWrite(relayPin, HIGH);
delay(10000); // 10 seconds
digitalWrite(relayPin, LOW);
}
delay(100);
}
Constantes e Variáveis
Começamos por definir as constantes motionPin e relayPin que especificam os pinos aos quais o sensor PIR e o relé estão ligados, respetivamente.
const int motionPin = 3; const int relayPin = 2;
Função Setup
Na função setup(), definimos o modo do pino motionPin para INPUT e do pino relayPin para OUTPUT, pois estamos a ler do sensor PIR e a escrever para o relé.
void setup() {
pinMode(motionPin, INPUT);
pinMode(relayPin, OUTPUT);
}
Função Loop
Na função loop(), primeiro lemos o estado do sensor PIR usando digitalRead(motionPin) e guardamos na variável motionState.
void loop() {
int motionState = digitalRead(motionPin);
Se o motionState for HIGH, indicando que foi detetado movimento, ligamos o ventilador definindo o pino relayPin para HIGH usando digitalWrite(relayPin, HIGH). Depois esperamos 10 segundos usando delay(10000) para manter o ventilador ligado. Após isso, desligamos o ventilador definindo o pino relayPin para LOW usando digitalWrite(relayPin, LOW).
if (motionState == HIGH) {
digitalWrite(relayPin, HIGH);
delay(10000); // 10 seconds
digitalWrite(relayPin, LOW);
}
Finalmente, adicionamos um pequeno atraso de 100ms usando delay(100) para evitar ler o sensor PIR com muita frequência e permitir que o Arduino execute outras tarefas.
delay(100);
E é isso. Agora tens um ventilador ativado por movimento!
Exemplo 3: Controlar Velocidade do Ventilador com PWM
Nos exemplos anteriores, ligámos ou desligámos um ventilador. Mas e se quisermos controlar a velocidade do ventilador? Neste exemplo vamos aprender como fazer isso.
Normalmente usamos Modulação por Largura de Pulso (PWM) para controlar a potência entregue a um dispositivo. PWM é uma técnica onde o valor médio de um sinal é ajustado variando o ciclo de trabalho de uma onda quadrada. Ao mudar o ciclo de trabalho, podemos controlar a velocidade do ventilador. Vê o nosso tutorial sobre How use Arduino to control an LED with a Potentiometer para mais detalhes sobre PWM.
No entanto, não podes ligar diretamente um ventilador ao Arduino e controlá-lo assim, pois um ventilador consome muita energia. Nos exemplos anteriores usamos um relé para contornar este problema. Mas relés são lentos para PWM e não aguentariam muito tempo devido ao stress mecânico que um sinal PWM causaria.
MOSFET
Vamos então usar um MOSFET. Um MOSFET, ou Transístor de Efeito de Campo Metal-Óxido-Semicondutor, é um tipo de transistor amplamente usado em circuitos eletrónicos. É um dispositivo de três terminais (Drain, Gate, Source) que pode amplificar e comutar sinais eletrónicos. O MOSFET opera controlando o fluxo de corrente entre os terminais Source e Drain usando um campo elétrico gerado por uma tensão aplicada ao terminal Gate. É conhecido pela sua alta velocidade de comutação, baixo consumo de energia e capacidade de lidar com altas correntes e tensões.
Neste exemplo, vou usar um MOSFET 2N7000. Vê o símbolo do circuito e o pinout do 2N7000 abaixo.

Para mais detalhes, vê a folha de dados do 2N7000:
O 2N7000 pode comutar até 60V e 200mA continuamente. Isso é suficiente para o meu pequeno ventilador. Normalmente podes descobrir os requisitos de voltagem e corrente olhando para a etiqueta. A imagem abaixo mostra a etiqueta do meu ventilador que funciona a 12V e consome 0,18A = 180mA. O MOSFET 2N7000 é portanto adequado para controlar o meu ventilador.

Se tiveres um ventilador maior que consome mais corrente, vais precisar de um MOSFET maior. Existem muitos tipos diferentes e alguns podem comutar 100A ou mais! Basta procurar um com uma classificação de tensão (V DSS ) e corrente (I D ) acima do que o teu ventilador precisa. O Kit de Transistores proposto nas peças necessárias tem uma boa seleção.
Como regra geral, escolhe um com cerca de 2x a capacidade para estar seguro e evitar a necessidade de refrigeração. Para ventiladores pequenos, como o que estou a usar aqui, não precisas de tanta margem de segurança.
Circuito para Controlar Velocidade do Ventilador
Nesta secção mostro e explico o circuito necessário para controlar um ventilador com um MOSFET. É muito simples. Vê:

Ligamos uma das saídas PWM do Arduino, aqui o GPIO 3, ao pino Gate (G) do MOSFET 2N7000. O resistor de 100Ω (R2) é apenas um resistor limitador de corrente por razões de segurança. Podes omitir este resistor. O segundo resistor (R1) de 100KΩ é um resistor de pull-down que garante que o MOSFET desliga quando o gate não está ligado.
O ventilador está ligado a +12V e ao Drain (D) do MOSFET, enquanto o Source (S) está ligado ao terra (GND). Se o Gate do MOSFET receber um impulso PWM, ele abre e a corrente pode fluir do Drain para o Source, permitindo que o ventilador receba energia. Lembra-te que ventiladores brushless têm polaridade. Se o ventilador não rodar, verifica a polaridade correta e também a orientação correta do MOSFET.
Se usares um motor DC padrão ou um ventilador não brushless, deves adicionar um Flyback Diode em paralelo ao motor para suprimir os picos de tensão que uma carga indutiva como um motor ou solenóide causa. Abaixo uma imagem do circuito com um Diodo Flyback adicional:

Código para Controlar Velocidade do Ventilador
Aqui está o exemplo de código para controlar o ventilador. Ele desliga o ventilador por 3 segundos, depois deixa-o rodar por 3 segundos a velocidade média, e depois por mais 3 segundos a velocidade máxima.
// Code to control Fan speed via PWM
int fanPin = 3;
void setup() {
pinMode(fanPin, OUTPUT);
}
void loop() {
// Fan off
analogWrite(fanPin, 0);
delay(3000);
// Medium speed
analogWrite(fanPin, 150);
delay(3000);
// Max speed
analogWrite(fanPin, 255);
delay(3000);
}
Vamos analisar o código e entender como funciona.
Constantes e Variáveis
Neste código, temos uma única variável chamada fanPin. Esta variável é usada para armazenar o número do pino ao qual o ventilador está ligado. Neste caso, o ventilador está ligado ao pino 3. Nota que deves usar um pino PWM! Os pinos PWM no Arduino Uno são identificados com o sinal “~”, como ~3, ~5, ~6, ~9, ~10 e ~11.
int fanPin = 3;
Função Setup
Na função setup(), definimos o modo do pino fanPin para OUTPUT. Isto é necessário porque vamos escrever neste pino para controlar a velocidade do ventilador.
void setup() {
pinMode(fanPin, OUTPUT);
}
Função Loop
Na função loop(), controlamos a velocidade do ventilador usando PWM. Temos três níveis de velocidade diferentes: desligado, médio e máximo.
Primeiro, desligamos o ventilador definindo o valor PWM para 0 usando analogWrite(fanPin, 0). Depois esperamos 3 segundos usando delay(3000).
// Fan off analogWrite(fanPin, 0); delay(3000);
De seguida, definimos a velocidade do ventilador para um nível médio definindo o valor PWM para 150 usando analogWrite(fanPin, 150). Novamente, esperamos 3 segundos.
// Medium speed analogWrite(fanPin, 150); delay(3000);
Finalmente, definimos a velocidade do ventilador para o nível máximo definindo o valor PWM para 255 usando analogWrite(fanPin, 255). Esperamos mais 3 segundos antes de repetir o ciclo.
// Max speed analogWrite(fanPin, 255); delay(3000);
Este ciclo continuará indefinidamente, alternando entre as diferentes velocidades do ventilador.
Com este código e circuito, podes controlar a velocidade de praticamente qualquer ventilador. Funciona para ventiladores brushless e com escovas, de 2 e 3 fios. Se tiveres um ventilador de 4 fios, que já tem um circuito interno de controlo de velocidade, não precisas do circuito MOSFET mostrado acima, mas podes fornecer o sinal PWM diretamente.
Exemplo 3: Ventilador Controlado por Temperatura
Um caso de uso muito comum é regular a velocidade do ventilador com base na temperatura ambiente. Vou mostrar como isso é feito neste exemplo.
Primeiro, vamos precisar de um sensor para medir a temperatura. Existem muitos tipos diferentes de sensores de temperatura e não importa muito qual. Aqui vou usar o sensor de temperatura e humidade DHT11. Podes encontrá-los como módulos ou apenas o sensor simples. Ambos funcionam da mesma forma.


Se precisares de mais detalhes sobre o DHT11 e o seu “primo” DHT22, vê o nosso tutorial: DHT11/DHT22 Sensor with Arduino Tutorial. Em vez do DHT11, também podes usar o TMP36, o LM35 ou o DS18B20. Estes são outros sensores de temperatura adequados, mas terás de ajustar um pouco o circuito e o código se os usares.
Circuito para Ventilador Controlado por Temperatura
O circuito para controlar a velocidade do ventilador com um DHT11 está mostrado abaixo. Podes trocar o DHT11 por um DHT21 ou DHT22 sem ter de mudar o circuito.

Como podes ver, estamos a usar o mesmo circuito baseado em MOSFET para controlar o ventilador via PWM no pino 3 do Arduino. Apenas adicionamos o DHT11 e ligamos o seu pino IO ao pino 2 do Arduino. Para alimentação, liga o pino VCC a 5V e o pino GND ao terra. A imagem seguinte mostra o pinout do DHT11.

Note que o pino 3 não é usado. Por isso os módulos DHT têm apenas três pinos, enquanto o sensor tem 4 pinos.
Abaixo uma imagem do circuito completo usando um pequeno ventilador, uma bateria de 9V e uma breadboard.

Código para Ventilador Controlado por Temperatura
O código seguinte mostra como usar PWM (Modulação por Largura de Pulso) e as leituras de temperatura do sensor DHT11 para ajustar a velocidade do ventilador.
// Control fan speed using PWM based
// on temperature reading from DHT11 sensor
#include "Adafruit_Sensor.h"
#include "DHT.h"
const int tempPin = 2;
const int fanPin = 3;
// Sensor types: DHT11, DHT22, DHT21
DHT dht = DHT(tempPin, DHT11);
void setup() {
dht.begin();
pinMode(fanPin , OUTPUT);
}
void loop() {
float temp = dht.readTemperature(); // Celsius
if (isnan(temp)) return;
int fanSpeed = map(temp, 20, 40, 0, 255);
fanSpeed = constrain(fanSpeed, 0, 255);
analogWrite(fanPin, fanSpeed);
delay(5000);
}
Vamos analisar o código e entender como funciona.
Bibliotecas
O DHT11 usa um protocolo de comunicação relativamente complexo (ver Datasheet). Podes implementá-lo tu mesmo, mas é mais fácil usar uma biblioteca. Existem várias bibliotecas Arduino para o sensor DHT11. Aqui usamos uma da Adafruit.
#include "Adafruit_Sensor.h" #include "DHT.h"
Terás de instalar a biblioteca base “Adafruit_Sensor.h” e a biblioteca “DHT.h” deles. Vê o nosso tutorial: DHT11/DHT22 Sensor with Arduino Tutorial, se precisares de mais detalhes.
Constantes e Variáveis
Começamos por definir duas constantes: tempPin e fanPin. tempPin representa o número do pino ao qual o sensor DHT11 está ligado, e fanPin representa o número do pino ao qual o ventilador está ligado.
const int tempPin = 2; const int fanPin = 3;
De seguida, criamos uma instância da biblioteca DHT e inicializamos com tempPin e o tipo de sensor, que neste caso é DHT11. Se quiseres usar um DHT21 ou DHT22 em vez do DHT11, basta mudar o nome da constante.
// Sensor types: DHT11, DHT22, DHT21 DHT dht = DHT(tempPin, DHT11);
Função Setup
Na função setup(), inicializamos o sensor DHT usando a função dht.begin(). Também definimos o pino fanPin como saída usando a função pinMode().
void setup() {
dht.begin();
pinMode(fanPin , OUTPUT);
}
Função Loop
Na função loop(), primeiro lemos a temperatura em Celsius do sensor DHT usando a função dht.readTemperature(). Se quiseres usar Fahrenheit em vez de Celsius, basta chamar dht.readTemperature(true).
Se o sensor não conseguir ler a temperatura, retorna Not-a-Number (NaN). Neste caso, saímos da função usando a instrução return.
Caso contrário, mapeamos o valor da temperatura do intervalo de 20 a 40 graus Celsius para um intervalo de 0 a 255. Isto será usado para controlar a velocidade do ventilador. Isso significa que a 20 graus Celsius a velocidade do ventilador é 0, mas acima de 20 graus o ventilador começa a rodar muito lentamente até atingir a velocidade máxima (255) a 40 graus Celsius.
Para muitas aplicações, podes querer alterar este comportamento e começar o ventilador com uma velocidade média quando um determinado limiar de temperatura for atingido, pois velocidades muito baixas do ventilador têm quase nenhum efeito de arrefecimento e o ventilador pode nem sequer começar a rodar para valores PWM pequenos.
float temp = dht.readTemperature(); if (isnan(temp)) return; int fanSpeed = map(temp, 20, 40, 0, 255);
Note que a função map() na verdade não garante que o fanSpeed estará no intervalo permitido [0..255]. Por exemplo, para temperaturas abaixo de 20 graus Celsius, pode retornar valores negativos!
Não queremos isso e por isso usamos a função constrain() para restringir o valor da velocidade do ventilador ao intervalo de 0 a 255.
fanSpeed = constrain(fanSpeed, 0, 255);
Finalmente, usamos a função analogWrite() para definir a velocidade do ventilador fornecendo o fanPin e o valor da velocidade. Como mencionado antes, para valores PWM pequenos (fanSpeed < 10) o ventilador pode nem sequer começar a rodar. Experimenta com o teu ventilador e encontra um valor mínimo que sirva para a tua aplicação. Talvez queiras começar o ventilador com velocidade 100 quando a temperatura ultrapassar os 20 graus Celsius.
analogWrite(fanPin, fanSpeed);
Finalmente, adicionamos um atraso de 5 segundos usando a função delay() antes do ciclo repetir. Assim, basicamente amostramos a temperatura ambiente a cada 5 segundos e ajustamos a velocidade do ventilador em conformidade.
delay(5000);
E aí tens um ventilador controlado por temperatura!
Conclusões
Neste post do blog, aprendemos como controlar um ventilador usando Arduino. Começámos por discutir as peças necessárias para este projeto, incluindo uma placa Arduino, um ventilador e vários componentes eletrónicos como relés, MOSFETs e sensores de temperatura.
Depois explorámos os diferentes tipos de ventiladores disponíveis no mercado, como ventiladores AC e DC. Discutimos as vantagens e desvantagens de cada tipo e como podem ser usados em diferentes cenários.
Seguidamente, aprofundámos os detalhes do controlo de ventiladores DC, particularmente as configurações de 2, 3 e 4 fios. Explicámos como cada fio é usado para diferentes propósitos, como alimentação, terra, sinal de tacómetro e controlo PWM.
Para fornecer exemplos práticos, mostramos vários métodos de controlar ventiladores usando Arduino. Demonstrámos como ligar um ventilador AC ou DC usando um relé.
Além disso, explorámos técnicas mais avançadas como controlar a velocidade do ventilador usando PWM com um MOSFET. Explicámos como a modulação por largura de pulso pode ser usada para variar a velocidade do ventilador, permitindo um controlo preciso baseado nas necessidades de arrefecimento desejadas.
Por fim, apresentámos um exemplo de controlo da velocidade do ventilador baseado na temperatura ambiente usando um MOSFET. Esta aplicação pode ser útil em ambientes onde a regulação da temperatura é crucial, como em caixas eletrónicas ou salas de servidores.
Esperamos que este post do blog te tenha fornecido insights valiosos e inspiração para os teus projetos de controlo de ventiladores. Sente-te à vontade para experimentar e explorar mais possibilidades com Arduino e ventiladores!
Perguntas Frequentes
Aqui estão algumas perguntas frequentes sobre controlar um ventilador usando Arduino:
P: Qual é a diferença entre ventiladores AC e DC?
R: A principal diferença entre ventiladores AC e DC é o tipo de energia que requerem. Ventiladores AC são projetados para funcionar com a corrente da rede elétrica, que é corrente alternada. Ventiladores DC, por outro lado, são projetados para funcionar com uma fonte de corrente contínua, como uma bateria ou fonte de alimentação.
P: Como posso ligar um ventilador usando um relé?
R: Para ligar um ventilador usando um relé, precisas de conectar o módulo relé ao Arduino. O Arduino pode então controlar o relé, que por sua vez liga ou desliga o ventilador. Terás de ligar o pino de entrada do relé a um dos pinos digitais do Arduino, e os pinos de saída do relé à fonte de alimentação do ventilador.
P: Como posso controlar a velocidade de um ventilador usando Arduino?
R: Para controlar a velocidade de um ventilador usando Arduino, podes usar um módulo MOSFET. Ligando o módulo MOSFET ao Arduino, podes variar a tensão fornecida ao ventilador, controlando assim a sua velocidade. Isto pode ser feito usando sinais de modulação por largura de pulso (PWM) gerados pelo Arduino.
P: Posso ler o sinal de velocidade de um ventilador usando Arduino?
R: Sim, podes ler o sinal de velocidade de um ventilador usando Arduino. Alguns ventiladores têm uma saída de tacómetro que fornece um sinal de pulso proporcional à velocidade do ventilador. Ligando este sinal a um dos pinos digitais do Arduino, podes medir a velocidade do ventilador. Se o ventilador não tiver fio de velocidade, podes construir o teu próprio monitor de velocidade. Vê o nosso tutorial Build Arduino Tachometer Using A3144 Hall Effect Sensor.
P: Posso controlar a velocidade do ventilador com base na temperatura ambiente?
R: Sim, podes controlar a velocidade do ventilador com base na temperatura ambiente usando Arduino. Ligando um sensor de temperatura ao Arduino, podes medir a temperatura ambiente e ajustar a velocidade do ventilador em conformidade.
P: Posso controlar a velocidade do ventilador com base na luz ambiente?
R: Sim, podes controlar a velocidade do ventilador com base na luz ambiente. Ligando um sensor de luz num arranjo divisor de tensão ao Arduino, podes medir a luz ambiente e ajustar a velocidade do ventilador em conformidade. Abaixo está o circuito básico para medir a luz.

Para mais detalhes, vê o nosso tutorial How to detect light using an Arduino.
P: Posso usar um sensor de temperatura DS18B20 em vez do DHT11?
Sim, podes, mas terás de mudar o código. Aqui está um exemplo curto de como ler dados de temperatura do DS18B20:
// https://github.com/matmunk/DS18B20
#include "DS18B20.h"
const int tempPin = 2;
DS18B20 ds(tempPin);
void setup() {
Serial.begin(9600);
}
void loop() {
while (ds.selectNext()) {
float temp = ds.getTempC();
...
delay(1000);
}
}
P: Posso controlar a direção de um ventilador usando Arduino?
Depende. Ventiladores brushless e ventiladores AC normalmente giram apenas numa direção. Mudar a polaridade para alterar a direção não funciona com estes ventiladores. Por outro lado, se o ventilador usar um motor DC simples com escovas, podes controlar a direção. Para isso, precisarias de uma ponte H ou uma placa de controlador de motor.
P: Posso controlar vários ventiladores usando Arduino?
Sim, podes controlar vários ventiladores usando Arduino utilizando componentes eletrónicos apropriados como relés ou MOSFETs. Cada ventilador precisaria do seu próprio circuito de controlo, mas todos podem ser controlados por uma única placa Arduino.
Estas são apenas algumas das perguntas frequentes sobre controlar um ventilador usando Arduino. Se tiveres mais perguntas, sente-te à vontade para perguntar na secção de comentários abaixo.


