Conforme podemos ver no artigo NodeMCU – primeiros passos (MIC160), o NodeMCU é uma placa de desenvolvimento muito interessante, tanto como projetos para a Internet das Coisas ou para projetos “locais” (que não demandem conectividade à Internet). Por este motivo o NodeMCU é muito usado no controle de diversos periféricos, desde simples LEDs até motores DC. E o que veremos neste artigo é justamente isso, como acionar um motor DC utilizando como placa de controle o NodeMCU. Ao compreender o conteúdo deste artigo, você será capaz de fazer projetos ainda mais interessantes e desafiadores.

MIC023S

 

Pedro Bertoleti

 

Material necessário

Para reproduzir o projeto abordado neste artigo (ou seja, verificação do acionamento de um motor DC com o NodeMCU), você precisará de:

  • Uma placa NodeMCU
  • Uma fonte / carregador de celular (conector micro-USB) - tensão de 5V, com pelo menos 1A de corrente de saída
  • Dois motores DC de 3V até 6V de tensão de operação (modelos com caixa de redução acoplada também são permitidos)
  • Um cabo micro-USB (para programação do NodeMCU)
  • Dois transistores BC548 (ou equivalente NPN como o BC337)
  • Dois push-buttons
  • Dois resistores 1K/0,25W
  • Dois resistores 2K2/0,25W
  • Dois resistores 220R/0,25W
  • Módulo relé / Shield relé de 2 canais

 

 

Entradas e saídas do NodeMCU - informações importantes

Conforme vimos no artigo NodeMCU – primeiros passos (MIC160), o NodeMCU possui várias entradas e saídas disponíveis ao desenvolvedor. Porém, é importantíssimo você ter em mente as seguintes informações:

As entradas e saídas (GPIOs configurados como input e/ou output) do NodeMCU trabalham SOMENTE com tensão de 3,3V. Portanto, eles não são tolerantes a 5V. Se isso for desobedecido e/ou desconsiderado, o NodeMCU será danificado permanentemente.

Uma saída do NodeMCU (GPIO configurado como output) pode ter corrente máxima drenada de 12mA. Qualquer necessidade de corrente além desta requer uso de um circuito driver / circuito de acionamento eletrônico (shield). Desconsiderar e/ou desobedecer esta limitação pode levar o NodeMCU a danos permanentes.

 

Projeto / demonstração: acionamento de motor DC

O projeto / demonstração de acionamento de motor DC que faremos aqui permitirá utilizar o NodeMCU para controlar se um motor irá girar ou não.

O controle dos motores (por parte do usuário) é feito via push-buttons. Ou seja, o NodeMCU será responsável por ficar constantemente lendo o estado das entradas em que os push-buttons estão ligados e, ao se apertar um deles, o NodeMCU irá acionar o motor correspondente.

É importante ressaltar que, como o NodeMCU não possui capacidade de corrente para acionar um motor de forma direta, sendo ele restrito ao processamento do projeto e geração de sinais de baixa potência. Portanto, um circuito de driver de motor se faz necessário. Este circuito será o respon?avel pela interface entre motores DC e NodeMCU, e tal técnica é amplamente utilizada na eletrônica e automação.

Utilizando os conceitos deste experimento, você será capaz de controlar diversos motores DC, algo muito útil na robótica.

 

Circuito esquemático

Para fazermos o controle dos motores DC conforme descrito acima, vamos montar o circuito esquemático da figura 1.

 

 

Figura 1 - circuito esquemático do projeto / demonstração deste artigo
Figura 1 - circuito esquemático do projeto / demonstração deste artigo

 

 

Porém, antes de montar, fique atento às observações abaixo:

Ao observar o circuito esquemático, você notará que foram utilizados transistores para acionar o Shield de Relés a partir do NodeMCU. Isso foi necessário, pois o Shield de Relés necessita de uma tensão de acionamento maior que a tensão de saída de um GPIO do NodeMCU (o NodeMCU utiliza 3,3V, enquanto o Shield de Relés necessita de 5V). Como não é uma boa ideia acioná-lo com tensão menor que a especificada, os transistores serão responsáveis por “converter” os níveis de tensão para um nível dentro do especificado.

Conforme se pode observar no circuito esquemático, foi utilizado um regulador de tensão 7805. O motivo de utilizá-lo é sua alta popularidade e fácil disponibilidade no mercado (grande parte dos profissionais e/ou hobistas de eletrônica já utilizou este regulador). Mas lembre-se: o consumo máximo do que o 7805 alimentar é 1A. Se você for aproveitar este circuito para outro projeto, certifique-se de trabalhar dentro deste limite de corrente ou troque o regulador para um compatível com o que seu projeto precisa.

 

Código-fonte

O código-fonte do projeto encontra-se abaixo:

 

// Programa: Controle de motor DC com NodeMCU.
// Descrição: O NodeMCU aciona os motores conforme o usuário apertar os push-buttons ligados às entradas D2 e D3
// Autor: Pedro Bertoleti
//includes
#include
//defines - pinos aos quais estão ligados os drivers dos motores
// (circuitos transistorizados + relé shield)
#define MOTOR1_SAIDA D0
#define MOTOR2_SAIDA D1
//defines - pinos que conterão os botões para controlar o
//acionamento dos motores (controle independente de acionamento)
#define BOTAO_PARA_ACIONAR_MOTOR1 D2
#define BOTAO_PARA_ACIONAR_MOTOR2 D3
//função de setup / inicializações
void setup()
{
//Configura todas as entradas (ligadas aos push-buttons)
//e saídas (ligadas aos drivers dos motores)
pinMode(MOTOR1_SAIDA,OUTPUT);
pinMode(MOTOR2_SAIDA,OUTPUT);
pinMode(BOTAO_PARA_ACIONAR_MOTOR1,INPUT);
pinMode(BOTAO_PARA_ACIONAR_MOTOR2,INPUT);
//inicializações dos motores: é boa prática in inicializar
//os estados das saídas logo quando possível. No caso deste
//projeto, os motores são inicializados desligados.
digitalWrite(MOTOR1_SAIDA,LOW);
digitalWrite(MOTOR2_SAIDA,LOW);
}
//loop principal
void loop()
{
char EstadoMotor1;
char EstadoMotor2;
//o programa simplesmente le de forma constante (via polling) os push-
//buttons e toma a decisão de acionamento ou não conforme resultado
//da leitura efetuada.
//le a entrada ligada ao pushbutton 1 (entrada D2) e verifica se
//deve ligar ou desligar o motor correspondente (controlado pela
//saída D0)
EstadoMotor1 = LOW;
if (digitalRead(BOTAO_PARA_ACIONAR_MOTOR1) == LOW)
EstadoMotor1 = HIGH;
digitalWrite(MOTOR1_SAIDA,EstadoMotor1);
//le a entrada ligada ao pushbutton 2 (entrada D3) e verifica se
//deve ligar ou desligar o motor correspondente (controlado pela
//saída D1)
EstadoMotor2 = LOW;
if (digitalRead(BOTAO_PARA_ACIONAR_MOTOR2) == LOW)
EstadoMotor2 = HIGH;
digitalWrite(MOTOR2_SAIDA,EstadoMotor2);
}

 

 

Próximos passos - desafios

Agora que vimos como acionar um motor DC com o NodeMCU, que tal fazer alguns desafios? Veja alguns abaixo:

 

Utilizando o seguinte artigo aqui do site ( Como utilizar o sensor de temperatura e umidade relativa DHT22 com o NodeMCU (MIC162)  ), acione um motor DC (com uma hélice acoplada ao seu eixo) de modo a controlar a temperatura do ambiente. Por exemplo: se a temperatura subir além de um determinado valor/limite, aciona o ventilador; se ficar abaixo deste valor/limite, desliga o ventilador.

Utilizando um outro artigo também aqui do site ( Monitoramento de Temperatura Ambiente e Umidade Relativa do Ar via Internet ), faça o acionamento dos motores via Internet. Desta forma, de qualquer lugar do mundo que tenha conectividade à Internet você poderá acionar seus motores!

Se você tiver por aí um motor DC mais potente que estes mais comuns de mercado, recalcule / redimensione o driver dos motores à transistor para o NodeMCU poder controlá-los.

 

 

Conclusão

Neste artigo, vimos como controlar motores DC através de um NodeMCU, ampliando ainda mais as possibilidades de projetos a serem feitos com esta placa de desenvolvimento.

Este projeto/demonstração pode ser evoluído para controle de diferentes portes de motores DC, permitindo vislumbrar aplicações cada vez mais reais e dentro do segmento de automação.