Controlando Motores DC com o Arduino

Acessado 68686 vezes.
Como citar esse artigo: VERTULO, Rodrigo Cesar. Controlando Motores DC com o Arduino. Disponível em: <http://labdeeletronica.com.br/motordc-e-arduino/>. Acessado em: 18/04/2024.


A utilização de motores DC como atuadores em projetos mecatrônicos é muito comum. Estes motores podem ter o sentido de rotação controlado de acordo com o sentido da corrente aplicada em seus terminais. Além disso, utilizando modulação por largura de pulso (PWM) é possível controlar a velocidade de rotação do motor sem que se perca o torque do mesmo.

Um circuito muito útil para controlar o sentido da corrente que alimenta um motor DC é o Circuito Ponte H. Não é o objetivo deste artigo explicar o funcionamento deste circuito, de modo que basta saber que o mesmo é composto por transistores e diodos que, pela sua configuração, permite alterar o sentido da corrente aplicado em um motor DC.

O circuito integrado L293B é um CI que possui em seu interior duas Pontes H, sendo o mesmo capaz de trabalhar com correntes de até 1A. Como neste artigo nosso objetivo é apresentar uma forma de se controlar motores DC utilizando o Arduino, o L293B nos atenderá perfeitamente, pois, além de sua simplicidade, ele nos permite fornecer ao motor uma corrente bastante acima daquela suportada pelo Arduino que é por volta de 40mA.

Para iniciar nosso estudo vamos começar analisando o CI L293B. A figura abaixo apresenta a pinagem do mesmo:

L293B

Figura 1 – Pinagem do CI L293B.

Este circuito contém internamente duas Pontes H que podem controlar o sentido de rotação (esquerda, direita) de dois motores DC. Os pinos 2, 3, 7 e 6 são respectivamente os pinos de entrada, saída, entrada e saída da primeira Ponte H. Os pinos 15, 14, 10 e 11 são respectivamente entrada, saída, entrada e saída da segunda Ponte H. Note que cada ponte possui duas entradas e duas saídas. De acordo com a entrada acionada, sua saída correspondente conectada ao motor ficará ativa, determinando o sentido de rotação do motor ligado à mesma.

OS pinos 1 e 9 são utilizados para ativar tanto a primeira quanto a segunda Ponte H. Quando o pino 1 estiver acionado, a primeira ponte ficará operante, por outro lado, se o pino 9 for acionado, a segunda ponte passa a funcionar. Se tanto o pino 1, quanto o 9 estiverem acionados, as duas pontes passam a funcionar ao mesmo tempo.

Os pinos 4, 5, 12 e 13 devem ser conectados ao terra. Os dois primeiros são correspondentes à primeira ponto e os dois últimos à segunda ponte. O pino 16 deve ser utilizado para alimentar o circuito e a tensão aplicada ao mesmo deve estar entre 4,5V e 36V. Além disso, o pino 8 é utilizado para conectar a alimentação dos motores e também dever ter entre 4,5V e 36V.

É importante ressaltar que deve-se evitar acionar ao mesmo tempo as duas entradas da mesma Ponte H, sob risco de danificar o CI. Deste modo, se o pino 1 estiver acionado, é preciso que o 7 esteja desativado. O mesmo ocorre com os pinos 15 e 10.

Um dica interessante é que podemos controlar a velocidade de rotação dos motores alimentando os pinos 1 e 9 com PWM, de modo que variando a largura de pulso aplicado aos pinos varia-se a velocidade de rotação dos motores 1 e 2 respectivamente.

Agora que já conhecemos o CI L293B, vamos iniciar a montagem do nosso projeto com o Arduino.

OBJETIVO: Controlar o sentido de rotação de um motor DC conectado ao Arduino utilizando-se dois botões. O acionamento de cada botão determinará o sentido de rotação do motor. Desse modo, quando o botão 1 for acionado, o motor deverá girar para a esquerda e quando o botão 2 estiver acionado o sentido de rotação invertera. Em nenhum momento deverá ser permitido o acionamento dos dois botões ao mesmo tempo.

MATERIAIS:

  • 1 Arduino Uno
  • 1 CI L293B (no esquema abaixo é utilizado o L293D, cuja pinagem é a mesma do L293B)
  • 2 Botões
  • 1 Motor DC de 9V
  • 1 Protoboard
  • 1 Bateria de 9V
  • Fios diversos
  • 2 Resistores de 10 kOhm

PROCEDIMENTOS: Montar o circuito conforme apresentado abaixo:

 

motorDC_bb

Figura 2 – Montagem do Projeto em Protoboard.

PSEUDO CÓDIGO PARA O ARDUINO:

definir o pino 4 como input1
definir o pino 2 como enable1
definir o pino 5 como input2
definir o pino 6 como button1
definir o pino 7 como button2
 
rotina rotateLeft:
    acionar enable1
    desativar input2
    acionar input1
fim
 
rotina rotateRight:
    acionar enable1
    desativar input1
    acionar input2
fim
 
rotina parar:
    desativar enable1
    desativar input1
    desativar input2
fim
 
enquanto button1 acionado:
    rotateLeft
fim
 
enquanto button2 acionado:
    rotateRight
fim
 
parar

SKETCH PARA ARDUINO:

int input1 = 4;
int enable1 = 2;
int input2 = 5;
int button1 = 6;
int button2 = 7;
 
void setup(){
  pinMode(input1, OUTPUT);
  pinMode(enable1, OUTPUT);
  pinMode(input2, OUTPUT);
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
}
 
void rotateLeft(){
  digitalWrite(enable1, HIGH);
  digitalWrite(input2, LOW);
  digitalWrite(input1, HIGH);
}
 
void rotateRight(){
  digitalWrite(enable1, HIGH);
  digitalWrite(input1, LOW);
  digitalWrite(input2, HIGH);
}
 
void parar(){
  digitalWrite(enable1, LOW);
  digitalWrite(input1, LOW);
  digitalWrite(input2, LOW);
}
 
void loop(){
  while(digitalRead(button1) == HIGH){
    rotateLeft();
  }
 
  while(digitalRead(button2) == HIGH){
    rotateRight();
  }
 
  parar();
}

 

Veja a seguir um vídeo com o projeto implementado.

 

Se você gostou do artigo e deseja estimular a continuação do trabalho do Laboratório de Eletrônica, por favor, clique em “Compartilhar” logo abaixo.


[wpb-social-share text=”Compartilhar”]
 

Eletrônica Simples Para Projetos Complexos
Deixe de ser alguém que fica copiando e colando circuitos da Internet e passe a ser um projetista capaz de criar soluções inovadoras com esse poderoso componente.

Comentários

  • Leandro
    Responder

    Com esse CI ele diminui a potencia do motor?

  • Cássio
    Responder

    Muito bom, Rodrigo! Parabéns! Ficou fácil de entender. Obrigado por compartilhar os conhecimentos.

    • rvertulo

      Fico feliz em poder ajudar.

  • Rodrigo Molgado
    Responder

    Boa noite Rodrigo, amigo eu preciso fazer de um projeto para fazer um motor de vidro elétrico inverter a rotação através de relés, bem parecido com esse teu projeto aí de cima, porém eu preciso também que o projeto considere duas chaves de fim de curso, para que o motor pare

  • ozael
    Responder

    preciso do mesmo eskema do Rodrigo Molgado , porem seria quando dado um toque em um botao X ele rode pra direita ate acionar o final de curso da direita , e quando dado outro toque no botao X ele inverta rodando pra eskerda ate novamente atingir o final de curso da esquerda e assim por diante. quanto q vc me cobra pra fazer isso ?

  • Elias
    Responder

    oi rodrigo , tambem gosto muito de tecnologia , estou querendo criar um computador caseiro para meu robô , que estou desenvolvendo , quero saber se você pode me ajudar ou me informar como criar esse computador para locomoção dele…. fico grato desde já….

  • Edison
    Responder

    Olá amigo, muito legal testei e funcionou, só gostaria de saber se tem como fazer o motor parar mais rápido? pois a desaceleração é muito lenta…

  • silvio_mecatronica@hotmail.com
    Responder

    Rodrigo , fico feliz encontrar pessoas como você, pois eu também amo a tecnologia, sou técnico em mecatrônica , atuo na industria desde 1992, na parte de comandos elétricos,eletrônica, PLC…..hoje gostaria de aprender Arduino e vou lhe adotar como meu professor…queria fazer as praticas lógicas de comandos e lader….com Arduino….como por exemplo uma partida direta….uma saída e dois botoes para acionar e desacionar esta mesma saída…quero apreender a ferramenta para poder andar com minhas proprias pernas…conto com sua ajuda.

  • Enrico
    Responder

    Funcionaria substituir a bateria 9V pela alimentação via usb do computador?

    • rvertulo

      Olá,

      Não é recomendável pelo fato da porta USB não ter sido projetada para suportar o grande consumo de corrente típico de motores elétricos.

  • Gilmar
    Responder

    Boa noite, estou fazendo um projeto do curso e preciso abrir um portao, fiz todo o esquema, porem nao funciona, estou usando um transformador 9v e um motor de 9v dc, coloquei uma ponte retificadora RS 407, mas o motor não lga, fiz um teste fora da placa com o motor uma ligação direta e ele ligou, o que vc acha que pode ser?

    • Anônimo

      oi de novo, consegui, retirei o cabo 5v e gnd que ia do arduino pra protoboard e ele ligou, agora so tenho que diminuir a velocidade, vlw

  • Vinícius
    Responder

    Boa Tarde, amigo tem como fazer exatamente como você fez porém o motor começar o movimento de maneira suave preciso disso para um projeto na faculdade porém não manjo nada de eletrônica.

  • Gabriel Mendonça Costa
    Responder

    Posso substituir o 293B pelo 293D?

  • erick
    Responder

    muito legal. amo el3trionica, sou nerd