Neste tutorial “Controlando Motor DC com Transistor Mosfet e Arduino” iremos aprender a como fazer o acionamento de um Motor DC comum através de um Transistor MOSFET. Como gatilho desse processo, iremos utilizar um botão convencional e, para dar um aspecto visual ao nosso projeto, utilizaremos um LED verde.
Uma das primeiras coisas, a saber, é que o Transistor que iremos utilizar nesse tipo de projeto irá atuar como um interruptor que liga e desliga o motor através de um sinal digital vindo do Arduino.
Ele é necessário nesse tipo de circuito, pois o Arduino não consegue controlar o motor diretamente, já que o sinal possui baixa potência e, além disso, podemos colocá-lo em risco de queima uma vez que, há picos excessivos de corrente do motor.
Componentes utilizados para Controlar Motor DC com Transistor
Os componentes que você vai precisar ter tem mãos são:
- 1 x Botão;
- 1 x Transistor MOSFET;
- 1 x LED verde (pode ser de qualquer cor);
- 1 x Resistor de 220Ω para o LED;
- 1 x Resistor de 10kΩ para o botão;
- 1 x Motor DC;
- 1 x Arduino UNO;
- 15 x Fios/Jumpers;
- 1 x Protoboard;
- 1 x Bateria 9V ou 1x Fonte de 9V.
Ressaltando que, você precisará de uma fonte de alimentação externa sem ser a do Arduino. Sendo assim, eu recomendo uma bateria ou fonte de 9V. Para este experimento utilizei uma fonte convencional com saída equivalente a uma bateria e corrente de 1A.
Montagem do projeto Controlando Motor DC com Transistor Mosfet e Arduino
Antes de colocar a mão na massa e montar os componentes é preciso conhecer melhor sobre eles e a atuação, principalmente do MOSFET, no controle do motor DC.
Sendo assim, como foi dito no começo do artigo, o MOSFET é um transistor de efeito de campo que, dependendo do tamanho e design, pode comutar algumas centenas de miliamperes para dezenas de amperes e tensões de um dígito para milhares de volts.
Aqui, utilizamos o modelo de transistor IRF740 e sua pinagem está representada abaixo:
Para acessar o datasheet do componente basta clicar aqui. Observe ainda que existem apenas três conexões: source (fonte), drain (dreno) e gate; o gate controla o fluxo atual da fonte ao dreno.
MOSFETs menores podem ser fabricados diretamente em um chip MOS IC padrão e, portanto, podem ser parte de uma solução integrada de chip único (mas apenas em níveis de energia razoavelmente baixos, devido ao tamanho do chip e problemas de dissipação).
Basicamente, o MOSFET pode ser conectado a um pino digital do Arduino sem quaisquer componentes adicionais. Como visto acima, o pino de source está ligado diretamente ao gate.
O aterramento da fonte de alimentação e do Arduino é conectado ao pino de origem do transistor.
Já para o motor, é preciso conectar um dos seus terminais ao dreno juntamente com um diodo para impedir que a indução não desejada do motor, produza uma corrente contrária à do circuito e assim, queime algum componente.
No entanto, se a carga for controlada com o polo positivo em vez do GND, um MOSFET de canal P deve ser usado. Além disso, um pré-circuito de um transistor NPN na porta é necessário porque o Arduino comuta apenas uma tensão positiva no pino de source.
Esquemático Projeto Controlando Motor DC com Transistor Mosfet e Arduino
Montagem dos componentes do projeto ficará assim:
Montagem Elétrica do Circuito
Código Utilizado
Veja o código completo utilizado neste tutorial:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
// Declare as variáveis de leitura dos componentes const int botao = 12; const int motor = 8; const int led = 4; // Crie uma variável para armazenar o estado do switch int estadobotao = 0; void setup() { // Aqui, declare os componentes como entrada/saída pinMode(botao, INPUT_PULLUP); pinMode(motor, OUTPUT); pinMode(led, OUTPUT); //Inicialize a comunicação com o monitor serial Serial.begin(9600); } void loop() { // Faz a leitura do estado do botão e armazena na respectiva variável estadobotao = digitalRead(botao); // Se o botão estiver pressionado if(estadobotao == HIGH){ digitalWrite(motor, HIGH); // Aciona o motor digitalWrite(led, HIGH); // E aciona o LED Serial.println("Estado atual: motor ligado!"); } // Caso isso não aconteça else{ digitalWrite(motor, LOW); // Motor fica desligado digitalWrite(led, LOW); // E o LED também Serial.println("Estado atual: motor desligado!"); } } |
Depois de escrever o código você pode dar upload dele para sua placa Arduino.
Explicação do Código de Programação
Para que você entenda a lógica de programação usada, iremos abordar o código passo a passo:
1 2 3 4 |
const int botao = 12; const int motor = 8; const int led = 4; int estadobotao = 0; |
Primeiro de tudo, configure algumas constantes para o interruptor e pinos do motor e uma variável chamada estadobotao para manter o valor do botão.
1 2 3 4 5 |
void setup() { pinMode(botao, INPUT_PULLUP); pinMode(motor, OUTPUT); pinMode(led, OUTPUT); } |
Em seu setup (), declare o pinMode () do motor (OUTPUT) e pinos do interruptor (INPUT).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void loop() { estadobotao = digitalRead(botao); if(estadobotao == HIGH){ digitalWrite(motor, HIGH); digitalWrite(led, HIGH); Serial.print("Estado atual: motor ligado!"); } else{ digitalWrite(motor, LOW); digitalWrite(led, LOW); Serial.print("Estado atual: motor desligado!"); } } |
Dentro do loop () que você irá escrever, a lógica será bem direta. Você irá precisar verificar o estado do botão com digitalRead () e inserindo como argumento o pino em que o componente está (botao = 12).
A partir daí, se o interruptor for pressionado, coloque o pino do motor = 8 no HIGH e o LED = 4 também em HIGH.
Agora, caso o botão não estiver pressionado, ambos componentes, motor e LED, ficarão em estado de LOW.
Portanto, quando HIGH, o transistor será ativado, completando o circuito do motor e quando LOW, o motor não irá girar.
Assim, usaremos o sinal de baixa potência que o Arduino gera apenas para ligar e desligar o Transistor MOSFET.
Além disso, você poderá acompanhar no seu monitor serial o estado atual do motor da seguinte forma, veja só:
Não se esqueça de colocar a velocidade de 9600 de transferência por segundo de bits.
Finalização
Existem muitas aplicações de motores DC controlados. Esses motores são usados onde a velocidade ajustável e o torque de baixa velocidade são necessários, como transportadores e plataformas giratórias.
Um motor DC é usado em muitas máquinas industriais para frenagem dinâmica e reversão. Sua curva de torque linear, parada rápida, ré e aceleração os tornam uma escolha muito boa ao projetar algo inovador.
Assim, se você desejar fazer o controle de velocidade do seu motor, recomendados acessar esse artigo sobre o driver Ponte-H.
Além disso, os transistores são dispositivos de estado sólido, eles não possuem partes móveis. Consequentemente, você pode ligá-los e desligá-los muito rapidamente.
Uma dica é, tente conectar um potenciômetro a uma entrada analógica e insira o transistor em uma entrada digital PWM. Isso é útil para variar a rotação do Motor DC. Para isso indicamos o artigo de como utilizar o PWM Arduino para aprender o que é essa técnica e utiliza-la com a função analogwrite nos Arduinos UNO, Nano e Mega e, assim, variar a rotação de motores DC através do sinal PWM. O que você acha que acontecerá com a velocidade do motor se você variar a tensão que está recebendo?
Por fim, não esqueça que os motores requerem consideração especial ao serem controlados por um microcontrolador.
Normalmente, o microcontrolador não pode fornecer corrente e / ou tensão suficiente para alimentar um motor. Por causa disso, você usa transistores para fazer a interface entre os dois.
Os motores têm uma tensão operacional ideal. Eles trabalharão em apenas 50% da tensão nominal e até 50% acima desse número.
Se você variar a voltagem, você pode alterar a velocidade de rotação do motor. Porém, não varie muito a tensão ou você queimará seu motor.
Gostou desse tutorial? Então nos deixe a sua opinião nos comentários abaixo e também as suas dúvidas.
E, não se esqueça de nos seguir no Instagram!
Olá. Fiz tudo conforme, mas deu erro nos códigos de acionamento.
Olá Elton! Verifiquei o código e a princípio não possui nenhum erro, consegue me dizer o erro que aconteceu aí?
Cheguei aqui para entender mais sobre mosfet, pois em vez de motor quero uma chave eletrônica para mudar o estado de uns LEDS de spiners aqueles que ao apertar o botão muda de frequência, mas usando o Arduino que será controlado remotamente por um rádio turnigi. Espero que eu dê conta vou usar seu exemplo para incrementar luzinha de navegação em meu aero obrigado pela ajuda seu artigo vai me ajudar.