Como controlar motor dc com ESP8266 NodeMCU

Como controlar motor dc com ESP8266 NodeMCU

O NodeMCU, amplamente falado no mundo maker, é uma das mais completas e interessantes placas / plataformas para desenvolvimento voltado a IoT. Entre suas grandes vantagens, está poder ser programado e usado como um Arduino convencional, conforme mostrado no post Como Programar o NodeMCU com IDE Arduino e no post NodeMCU com MQTT. Sendo assim, neste post iremos abordar como ler Inputs e como escrever em Outputs, e você verá como controlar motor DC com ESP8266 NodeMCU.

Controle de motor DC com ESP8266 NodeMCU

Inputs e Outputs no ESP8266 NodeMCU

Antes de começar a explicação propriamente dita, considerar neste artigo o seguinte termo:

  • GPIO (General Purpose Input / Output): Entrada / sáida de propósito geral. Nos microcontroladores, na grande maioria das vezes, um mesmo pino pode ser configurado tanto como input quanto output (não simultaneamente, claro). Por isso, é mais adequado usar esta notação.

No NodeMCU, os GPIO’s são programados exatamente da mesma forma que é feito no Arduino convencional. Ou seja, para o desenvolvedor, no aspecto de GPIO’s, não há diferença alguma entre qualquer Arduino do mercado e o NodeMCU!

Porém, no NodeMCU a (pouca) documentação existente não é tão clara quanto à numeração dos GPIO’s. Após algumas pesquisas em fóruns de ESP8266 e alguns testes, chegou-se ao seguinte pin mapping:

#define D0    16
#define D1    5
#define D2    4
#define D3    0
#define D4    2
#define D5    14
#define D6    12
#define D7    13
#define D8    15

Sendo D0..D8 os GPIO do NodeMCU, conforme pode ser observado na figura abaixo:

ESP8266 NodeMCU

IMPORTANTE: Há cuidados especiais quando se trata de GPIO’s no NodeMCU. Se estes cuidados não forem obedecidos, o NodeMCU pode ser danificado por completo. Observe:

  • O NodeMCU, quanto ao GPIO, trabalha-se com tensão de 3,3V somente. Portanto, os GPIO’s não são tolerantes a 5V!!
    Desta forma, nunca pode haver mais que 3,3V em um GPIO configurado como Input, assim como um Output irá ter tensão de 3,3V quando em nível alto.
  • Um GPIO do NodeMCU quando 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.

Obedecendo a estes cuidados, pode-se controlar I/O’s como em um Arduino. Desse modo, o céu é o limite!

Projeto exemplo motor DC com ESP8266

Para demonstrar o uso de GPIOs no NodeMCU, será feito um projeto-exemplo, usando a seguinte lista de material:

Tal projeto consiste em acionar dois motores DC (acionamento on/off, controlados pelos GPIOs D0 e D1) mediante leitura de dois GPIOs (D2 e D3). Se D2 estiver em nível baixo (0V), o motor 1 (controlado pelo GPIO D0) é ligado. Da mesma forma, se D3 estiver em nível baixo, o motor 2 (controlado pelo GPIO D1) é ligado.

Circuito esquemático motor DC com ESP8266

Agora começaremos a falar do projeto deste tópico, o qual objetiva mostrar na prática o controle de I/O’s no NodeMCU. Para este projeto, considerar o seguinte circuito esquemático:

Circuito Motores DC com ESP8266 NodeMCU

Observações:
1) Note que foram usados transistores para acionar o Shield de Relés. O motivo é que a tensão de acionamento e corrente de acionamento de cada relé do shield são superiores ao que o NodeMCU oferece (o shield precisa de 5V e corrente de 45mA). Por isso, foi implementado este circuito com transistores para interfacear o acionamento. O transistor é o BC548 (transistor NPN de uso geral, de baixíssimo custo).

2) O regulador de tensão utilizado é o 7805.
Portanto, se for utilizar este circuito como base para outro projeto, lembre-se: a máxima corrente que o 7805 pode disponibilizar na sua saída regulada (5V) é 1A (inclusive, para isso, usando dissipador).

Vamos ao código!

Agora é chegada a vez do código do projeto-exemplo. Observe-o abaixo:

// Programa: Controle de motor DC com ESP8266 NodeMCU
// Autor: Pedro Bertoleti

// Importa a Biblioteca ESP8266WiFi
#include <ESP8266WiFi.h> 

//defines - mapeamento de pinos do NodeMCU
#define D0    16
#define D1    5
#define D2    4
#define D3    0
#define D4    2
#define D5    14
#define D6    12
#define D7    13
#define D8    15
#define D9    3
#define D10   1

//defines - pinos aos quais estão ligados os drivers dos motores
#define MOTOR1_PINO    D0
#define MOTOR2_PINO    D1

//defines - pinos que conterão os botões para 
//controlar o acionamento dos motores
#define BOTAO_ACIONA_MOTOR1   D2
#define BOTAO_ACIONA_MOTOR2   D3

/*
 * Implementação das funções
 */
void setup() 
{
  //direção dos pinos
  pinMode(MOTOR1_PINO,OUTPUT);
  pinMode(MOTOR2_PINO,OUTPUT);
  pinMode(BOTAO_ACIONA_MOTOR1,INPUT);
  pinMode(BOTAO_ACIONA_MOTOR2,INPUT);
  
  //inicializações dos motores
  digitalWrite(MOTOR1_PINO,LOW);
  digitalWrite(MOTOR2_PINO,LOW);
}

void loop() 
{
    //verifica se deve ligar ou desligar motor 1
    if (digitalRead(BOTAO_ACIONA_MOTOR1) == LOW)
        digitalWrite(MOTOR1_PINO,HIGH);
    else
        digitalWrite(MOTOR1_PINO,LOW);

    //verifica se deve ligar ou desligar motor 2
    if (digitalRead(BOTAO_ACIONA_MOTOR2) == LOW)
        digitalWrite(MOTOR2_PINO,HIGH);
    else
        digitalWrite(MOTOR2_PINO,LOW);            
}

Agora basta montar o experimento e se divertir!

Gostou ? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo), comente e visite nossa loja FILIPEFLOP!

2
Como controlar motor dc com ESP8266 NodeMCU
14 votos, 5.00 classificação média (100% pontuação)

Engenheiro eletricista formado pela Faculdade de Engenharia de Guaratinguetá (FEG - UNESP), trabalha com desenvolvimento de firmware. Colaborador do site FILIPEFLOP.

Compartilhe este Post

16 Comentários

  1. Planta IoT com ESP8266 NodeMCU – Parte 4 | Blog FILIPEFLOP - 6 de junho de 2017

    […] Para a planta IoT se auto regar, iremos utilizar um hardware adicional ao projeto: a Válvula de Vazão Solenóide Água 12VDC. Esta válvula permite, através de um sinal de controle de 12V, liberar ou restringir o fluxo de água por ela. Em outras palavras, é como uma “torneira acionada eletricamente”. Portanto, em termos de hardware, iremos precisar utilizar tal válvula e um circuito para permitir o acionamento da mesma sem danificar o NodeMCU (para mais informações sobre os limites elétricos do NodeMCU, lesta este nosso post). […]

  2. Skywalker - 21 de fevereiro de 2017

    poderia explicar o funcionamento dos resistores e transistores ?

      • Skywalker - 21 de fevereiro de 2017

        esses resistores e transistores estão mandando um sinal para o rele e tbm estao ligados a esp8266 a funcionalidade deles seria so para mandar um sinal para o rele ?

        • Pedro Bertoleti - 21 de fevereiro de 2017

          O conjunto de resistores e transistores têm duas finalidades:

          1) Como os relés são acionados em 5V e o ESP8266 trabalha somente com 3,3V sem seus GPIOs, a compatibilização de tensões é feita por este conjunto.
          2) Os GPIOs (configurados como saída) do ESP8266 podem fornecer uma baixa corrente elétrica (no caso, muito inferior ao necessário para acionar os relés). Portanto, o conjunto de resistores e transistores também disponibiliza a corrente necessária para o correto acionamento dos relés

          • Skywalker - 22 de fevereiro de 2017

            e eu tenho mais perguntas desculpa por tantas perguntas pois estou conhecendo ainda e tenho muitas duvidas, e pq vc utilzou o rele para acionar os motores nao poderia ligar os motores direto a esp ?

    • Pedro Bertoleti - 22 de fevereiro de 2017

      Sem problemas quanto às perguntas. Estamos aqui pra isso.

      Não é possível ligar o motor direto ao ESP pois este não tem nem tensão nem fornece corrente elétrica suficientes para acionar o motor. Portanto, o relé serve como acionamento do motor.

  3. Rodrigo - 6 de fevereiro de 2017

    Pedro, parabéns pelo artigo! Você poderia disponibilizar o arquivo do Fritzing? Um abraço!

  4. Juarez - 6 de outubro de 2016

    Parabéns Pedro. Excelente post. Estou começando agora com o NodeMCU. Gostaria de dicas para usar um NodeMCU como ap (mestre) e outro(escravo) conectado na rede do mestre. Desde já agradeço, um abraço.

    • juan manoel - 22 de outubro de 2016

      Cara tente usar o protocolo mqtt usando um broker(server) e um client que ai se consegue rodar, em um nodemcu se configura pra client e outra pra broker, aqui em casa tenho um raspberry pra broker e 4 nodemcus pra client em topologia de estrela

  5. Augusto - 1 de julho de 2016

    Realizarei um estudo deste artigo.

    Pedro, muito bom os artigos de vcs, me ajudam muito. Parabéns.

  6. Augusto - 30 de junho de 2016

    Poderiam fazer um tutorial para controle dos motores através de uma página web? Utilizando o módulo ESP8266? Seria ótimo. abraços

Deixe uma resposta