ESP8266 - Motor DC
Este tutorial mostra como usar o ESP8266 para controlar um Motor DC. Em detalhes, vamos aprender:
- Como o motor DC funciona
- Como usar o ESP8266 e o driver L298N para controlar um motor DC
- Como programar o ESP8266 para controlar a velocidade e a direção de um motor DC
- Como programar o ESP8266 para controlar dois motores DC simultaneamente
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Motor DC
Pinagem do Motor DC
Um Motor DC tem dois fios, sendo o positivo geralmente vermelho e o negativo preto.

Como Funciona
Ao comprar um motor DC, é essencial identificar a tensão em que ele opera. Por exemplo, vamos considerar um motor DC de 12V.
Quando você alimenta o motor DC de 12V com uma fonte de 12V:
- Conecte 12V e GND ao fio positivo e ao fio negativo, respectivamente: o motor DC gira na velocidade máxima no sentido horário
- Conecte 12V e GND ao fio negativo e ao fio positivo, respectivamente: o motor DC gira na velocidade máxima no sentido anti-horário
Como mencionado anteriormente, ao trocar o polo da alimentação entre os dois fios do motor DC, o sentido de rotação é invertido. Este é um método usado para controlar o sentido do motor DC, não manualmente, mas por meio de programação.
Se a alimentação fornecida aos motores DC for menor que 12V, o motor ainda vai girar, mas não na sua velocidade máxima. Isso significa que, ajustando a tensão da fonte de alimentação, podemos alterar a velocidade do motor DC. No entanto, essa abordagem não é muito usada devido à complexidade de controlar a tensão da fonte de alimentação. Por isso, a tensão da fonte de alimentação é mantida constante e a velocidade do motor DC é regulada por meio de um sinal PWM. Quanto maior o duty cycle do PWM, mais rápido o motor DC gira.

Como controlar um motor DC usando o ESP8266
Controlar um motor DC envolve dois componentes: velocidade e direção. O ESP8266 pode gerar um sinal PWM, mas ele tem baixa tensão e baixa corrente, então não pode ser usado para controlar o motor DC diretamente. Para fazer a ponte entre o ESP8266 e o motor DC, é necessário um driver de hardware. Esse driver realiza duas tarefas:
- Amplificar o sinal PWM do ESP8266 em termos de corrente e tensão para o controle de velocidade
- Receber o sinal de controle do ESP8266 para inverter a polaridade da alimentação para o controle de direção.

※ Nota:
- Este tutorial pode ser usado para qualquer motor DC. O motor DC de 12V é apenas um exemplo.
- Quando você estiver controlando um motor DC de 5V, mesmo que o pino do ESP8266 emita 5V (que é a mesma tensão do motor DC), você ainda precisa ter um driver entre o ESP8266 e o motor DC, porque o pino do ESP8266 não fornece corrente suficiente para o motor DC.
Existem vários tipos de chips e módulos, como o L293D e o L298N, que podem ser usados como drivers de motor DC. Neste tutorial, vamos utilizar o driver L298N.
Sobre o Driver L298N
O Driver L298N pode ser usado para controlar motores DC e motores de passo. Este tutorial mostra como usá-lo para controlar um motor DC.
Pinagem do Driver L298N

O Driver L298N é capaz de controlar dois motores DC de forma independente e simultânea, chamados de motor A e motor B. Esse Driver tem 13 pinos no total.
Os pinos comuns aos dois motores:
- Pino VCC: Este pino fornece energia para o motor, com uma faixa de tensão de 5 a 35V.
- Pino GND: Este é um pino de terra comum, que precisa ser conectado a 0V (GND).
- Pino 5V: Este pino fornece energia para o módulo L298N e pode ser alimentado com 5V de um ESP8266.
Pinos do Motor A (Canal A):
- Pinos ENA: Este pino pode ser usado para controlar a velocidade do Motor A. Removendo o jumper e conectando-o a uma entrada PWM, podemos ajustar a velocidade do Motor A.
- Pinos IN1 e IN2: Estes pinos são usados para controlar o sentido de rotação do Motor A. Quando um desses pinos está em HIGH e o outro em LOW, o Motor A vai girar. Se os dois pinos estiverem em HIGH ou os dois em LOW, o Motor A não vai se mover.
- Pinos OUT1 e OUT2: Estes pinos são conectados ao Motor A.
Pinos do Motor B (Canal B):
- Estes pinos são usados para fornecer energia ao Motor B.
- Pinos ENB: Este pino pode ser conectado a uma entrada PWM para controlar a velocidade do Motor B. Remover o jumper habilita isso.
- Pinos IN3 e IN4: Estes pinos são usados para determinar o sentido de giro do Motor B. Quando um deles está em HIGH e o outro em LOW, o Motor B vai girar. Se as duas entradas estiverem em HIGH ou as duas em LOW, o Motor B vai parar.
- Pinos OUT3 e OUT4: Estes pinos são conectados ao Motor B e fornecem energia a ele.
O driver L298N tem duas alimentações de entrada:
- Uma para o motor DC, com faixa de tensão de 5 a 35V, conectada aos pinos VCC e GND.
- Uma para a operação interna do módulo L298N, com faixa de tensão de 5 a 7V, conectada aos pinos 5V e GND.
Remova todos os jumpers do driver L298N para simplificar. Isso é necessário porque os jumpers são usados para usos avançados ou outras finalidades.
Podemos controlar dois motores DC de forma independente e simultânea usando um ESP8266 e um Driver L298N. Para regular cada motor, precisamos de apenas três pinos do ESP8266.
※ Nota:
O restante deste tutorial vai focar no controle de um motor DC usando o canal A. Passos semelhantes podem ser seguidos para controlar o outro motor DC.
Como Controlar a Velocidade do Motor DC pelo Driver L298N
É fácil regular a velocidade de um motor DC produzindo um sinal PWM no pino ENA do L298N. Isso pode ser feito:
- Conectando um pino do ESP8266 ao ENA do L298N
- Gerando um sinal PWM no pino ENA usando a função analogWrite(). O Driver L298N vai amplificar o sinal PWM para o motor DC.
A velocidade pode variar de 0 a 255. Quando a velocidade é 0, o motor para de se mover. Na velocidade 255, o motor gira na sua velocidade máxima.
Como Controlar a Direção do Motor DC pelo Driver L298N
A rotação de um motor pode ser ajustada fornecendo um nível lógico HIGH/LOW aos pinos IN1 e IN2. A tabela abaixo mostra como controlar a direção nos dois canais.
| Pino IN1 | Pino IN2 | Direção |
|---|---|---|
| LOW | LOW | O Motor A para |
| HIGH | HIGH | O Motor A para |
| HIGH | LOW | O Motor A gira no sentido horário |
| LOW | HIGH | O Motor A gira no sentido anti-horário |
Portanto:
- Código ESP8266 para girar no sentido horário.
- Código ESP8266 para girar no sentido anti-horário.
※ Nota:
A rotação do motor DC pode ser invertida conectando os pinos OUT1 e OUT2 de maneira oposta.
Como Parar o Giro do Motor DC
Existem dois métodos para parar um motor DC:
- Reduzir a velocidade para 0
- Definir os pinos IN1 e IN2 com o mesmo valor, seja LOW ou HIGH.
- Ou
Como controlar um motor DC usando o driver L298N.
Diagrama de Ligação
É essencial retirar os três jumpers do módulo L298N antes de conectar os fios.

This image is created using Fritzing. Click to enlarge image
Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.
Código ESP8266
O código a seguir faz:
- Aumenta a velocidade de um motor DC
- Altera a direção
- Diminui a velocidade de um motor DC
- Para o motor
Passos Rápidos
Para começar com o ESP8266 no Arduino IDE, siga estes passos:
- Veja o tutorial como configurar o ambiente para o ESP8266 no Arduino IDE se esta for a sua primeira vez usando o ESP8266.
- Ligue os componentes como mostrado no diagrama.
- Conecte a placa ESP8266 ao seu computador usando um cabo USB.
- Abra o Arduino IDE no seu computador.
- Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a porta COM correspondente.
- Retire os três jumpers do módulo L298N.
- Copie o código e abra-o no Arduino IDE.
- Clique no botão Upload no Arduino IDE para compilar e enviar o código ao ESP8266.
- Você deve observar:
- O motor DC vai acelerar e depois girar na sua velocidade máxima por 1 segundo.
- A direção do motor DC será alterada.
- O motor DC vai girar na sua velocidade máxima no sentido oposto por 1 segundo.
- O motor DC vai desacelerar.
- O motor DC vai parar por 1 segundo.
- Esse processo vai se repetir.
※ Nota:
Este tutorial mostra como controlar a velocidade de um motor DC em relação à sua velocidade máxima. Para controlar a velocidade absoluta (em rotações por segundo), precisaremos usar um controlador PID e um encoder. O controle da velocidade absoluta do motor DC será abordado em um tutorial separado.
Como Controlar dois Motores DC usando o Driver L298N
Em breve!