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:
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:
Visão do circuito
A figura a seguir ilustra a conexão entre os componentes em uma matriz de contatos (breadboard):
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
Ola, amigo. Preciso de um código que funcione cim uma ponte-h, um arduino nano, um modulo-hc08 e im iPhone iOS 9.
Olá. Sou totalmente leigo em eletrônica e estou precisando de ajuda para um projeto em que preciso inverter automaticamente a polaridade de uma corrente de uma fonte retificadora que varia de 5 a 12v., controlado por um potenciômetro e um timer que liga/desliga 4 X por dia.
Aguardo sua informação.
Obrigado