Controlando direção de rotação de um motor DC com Arduino e Ponte H

Como controlar a direção de rotação de um motor DC com Arduino e Ponte H

Em nosso projeto anterior com Arduino, mostramos como é possível controlar a velocidade de um motor DC usando a técnica de PWM (Pulse Width Modulation). Agora, vamos mostrar como controlar a direção de rotação do motor, função extremamente importante, por exemplo, para controlar a direção de movimentação de um robô ou veículo qualquer.

Para tal, utilizaremos um circuito especializado chamado de "Ponte H". A figura a seguir mostra a operação básica de uma ponte H:

Funcionamento de uma ponte H

Operação básica de uma ponte H Imagem: Wikimedia Commons

Uma ponte H possui quatro modos de operação:

  • Aberto: O motor não gira (motor desligado)
  • Freio: Motor não gira (parado)
  • Para frente: Motor gira em uma direção
  • Para trás: Motor gira na direção oposta.

Neste projeto usaremos o chip L293D, que consiste em duas pontes H full (quatro half bridges).

Lista de materiais

  • 1 Arduino (Uno, Mega, etc)
  • 1 Motor DC
  • 1 chip L293D (ponte H)
  • 1 Fonte de alimentação entre 4,5 e 36V para o motor
  • Matriz de contatos
  • Fios diversos

Diagrama esquemático do circuito

A seguir temos o diagrama esquemático do circuito a ser montado:

Controle de direção de rotação de motor DC com arduino e ponte H

Visão do circuito

A figura a seguir ilustra a conexão entre os componentes em uma matriz de contatos (breadboard):

Direção de giro do motor DC com Arduino e L293D

Código-fonte do sketch

A seguir temos o código-fonte utilizado no projeto para que o motor gire para um lado e depois para outro:

const int HABILITA = 11;
int Pino1A = 8;
int Pino2A = 7;
void setup() {
  pinMode(HABILITA, OUTPUT);
  pinMode(Pino1A, OUTPUT);
  pinMode(Pino2A, OUTPUT);
  digitalWrite(HABILITA, LOW);
}
void loop() {
  digitalWrite(Pino1A, HIGH);
  digitalWrite(Pino2A, LOW);
  digitalWrite(HABILITA, HIGH);
  delay(3000);
  digitalWrite(HABILITA, LOW);
  delay(2000);
  digitalWrite(Pino1A, LOW);
  digitalWrite(Pino2A, HIGH);
  digitalWrite(HABILITA, HIGH);
  delay(3000);
  digitalWrite(HABILITA, LOW);
  delay(2000);
}

Começamos criando uma constante de nome HABILITA e atribuindo-lhe o valor 11, correspondente ao pino do Arduino conectado ao pino 1 do L293D (habilita os canais 1 e 2 do controlador H).

Na sequência, criamos duas variáveis, Pino1A e Pino2A, que corresponderão aos pinos 8 e 7, onde o motor será conectado.

Na função de setup() configuramos os três pinos para saída (OUTPUT).

Na função principal de loop() fazemos uso da função digitalWrite() para ativar ou desativar o sinal nos pinos de controle do motor.

Quando o Pino1A está em nível alto e o Pino2A em nível baixo, o motor irá girar em uma direção; invertendo os níveis lógicos, o motor gira na direção oposta.

O pino HABILITA recebe nível lógico alto ou baixo quando queremos ativar ou desativar o circuito, respectivamente. Esse pino deve ser colocado em nível HIGH apenas após termos configurado o nível lógico nos pinos do motor.

Também usamos a função delay() para ajustar o tempo em que o motor fica girando em cada direção, ou parado.

É isso aí! Em nosso próximo projeto vamos utilizar um shield de motor para controlar a direção e velocidade de rotação de motores DC.

Até!

Anterior: Controlando a velocidade de rotação de um motor DC com Arduino

 

Sobre Fábio dos Reis (1182 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Astronomia, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*