ESP8266 - Motor DC

Este tutorial mostra como usar o ESP8266 para controlar um Motor DC. Em detalhes, vamos aprender:

Sobre o Motor DC

Pinagem do Motor DC

Um Motor DC tem dois fios, sendo o positivo geralmente vermelho e o negativo preto.

Pinagem do Motor DC

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 o motor DC

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.
ESP8266 NodeMCU controla motor DC

※ 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

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.
analogWrite(ENA_PIN, speed); // speed is a value from 0 to 255

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.
digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW);
  • Código ESP8266 para girar no sentido anti-horário.
digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH);

※ 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
analogWrite(ENA_PIN, 0);
  • Definir os pinos IN1 e IN2 com o mesmo valor, seja LOW ou HIGH.
digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, LOW);
  • Ou
digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, HIGH);

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.

Diagrama de ligação do ESP8266 NodeMCU com Motor DC e Driver L298N

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
/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-dc-motor */ #define PIN_ENA D5 // The ESP8266 pin connected to the EN1 pin L298N #define PIN_IN1 D6 // The ESP8266 pin connected to the IN1 pin L298N #define PIN_IN2 D7 // The ESP8266 pin connected to the IN2 pin L298N // The setup function runs once on reset or power-up void setup() { // initialize digital pins as outputs. pinMode(PIN_IN1, OUTPUT); pinMode(PIN_IN2, OUTPUT); pinMode(PIN_ENA, OUTPUT); } // The loop function repeats indefinitely void loop() { digitalWrite(PIN_IN1, HIGH); // control the motor's direction in clockwise digitalWrite(PIN_IN2, LOW); // control the motor's direction in clockwise for (int speed = 0; speed <= 255; speed++) { analogWrite(PIN_ENA, speed); // speed up delay(10); } delay(2000); // rotate at maximum speed 2 seconds in clockwise direction // change direction digitalWrite(PIN_IN1, LOW); // control the motor's direction in anti-clockwise digitalWrite(PIN_IN2, HIGH); // control the motor's direction in anti-clockwise delay(2000); // rotate at maximum speed for 2 seconds in anti-clockwise direction for (int speed = 255; speed >= 0; speed--) { analogWrite(PIN_ENA, speed); // speed down delay(10); } delay(2000); // stop motor 2 second }

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!

Vídeo

Referências de Funções

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!