Controlando Motores DC com o Arduino
Acessado 70390 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: 20/03/2025.
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:
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:
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(); } |
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”]
Comentários
Leandro
Com esse CI ele diminui a potencia do motor?
Cássio
Muito bom, Rodrigo! Parabéns! Ficou fácil de entender. Obrigado por compartilhar os conhecimentos.
rvertulo
Fico feliz em poder ajudar.
Rodrigo Molgado
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
rvertulo
Por favor, entre em contato pelo email contato@labdeeletronica.com.br para que possamos conversar sobre seu projeto.
Abraços
ozael
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 ?
rvertulo
Por favor, entre em contato pelo email contato@labdeeletronica.com.br
Abraços
Elias
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
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
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
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
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
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
Posso substituir o 293B pelo 293D?
erick
muito legal. amo el3trionica, sou nerd