Controlando motor DC com Ponte H (L293D) com arduino via porta serial

Preparei esse post para documentar um teste que eu fiz com CI L293D (Ponte H) para controlar um motor DC com arduino, mandando comandos pela porta serial do computador.

O L293D é uma ponte H dupla, isto é, controla até dois motores e faz com que estes rodem nas duas direções. Mas para esse teste eu usei apenas um motor. 😉

Os motores DC são motores de corrente contínua utilizados em brinquedos e pequenos dispositivos, e funcionam a pilha ou baterias. O bom desse tipo de motores é que são muito baratos. Mais em conta que servo-motores, e são facilmente encontrados em brinquedos. Então qualquer brinquedinho velho que tenha motor e funcione a pilha (ou bateria) tem um motor DC dentro. Basta abrir e retirar. 😀 Claro, claro. Espere o brinquedinho do seu filho quebrar, né. Ou ele perder o interesse e não se lembrar mais daquele carrinho 😉

Mas se seu filho não larga do carrinho ou sua filha não desgruda da boneca, não se incomode. Qualquer boa loja de 1,99 tem vários brinquedinhos legais bem baratinhos prontos para desmontar.

Aí você pode me perguntar. — Porque não comprar logo motores DC em uma loja de eletrônica? É uma ótima opção se você sabe o quer fazer, esse não é o meu caso.

Eu estou fazendo várias experiências e não sei bem o que vou precisar. Sendo assim um brinquedo desses me facilita muito a vida. Os motores DC tem um giro muito alto, e os carrinhos têm sempre caixas de redução com engrenagens para fazer com que os motores entreguem mais força e menos velocidade. Outra coisa boa são as rodas.

Por exemplo: Com R$ 25,00 eu comprei dois carrinhos no supermercado Extra. Com esse valor consegui quatro motores DC, duas caixas de redução para os motores, dois compartimentos para três pilhas, dois eixos para fazer curvas (não sei o nome disso :/ ), oito rodas de borracha de bom tamanho, e mais um monte de componentes eletrônicos que posso reaproveitar. Foi ou não, um bom negócio?

O maior problema de um motor DC é fazê-lo girar para os dois lados. Para isso se usam pontes H. Nos carrinhos elas vem todas soldadas junto com gambiarras chinesas. Não dá para usar. Então temos basicamente duas opções: Construir uma ponte H na unha com transistores e diodos de protecção, e fazer várias ligações, bla bla bla o que é bem complicado. Ou usar um CI que já é uma ponte H completinha, pronta pra uso. Como eu sou um grande preguiçoso escolhi usar o CI L293D que é bem barato (no eBay é ainda mais barato). O L293D dispensa o uso de diodos para tensão reversa dos motores. Basta ligar aos motores. Show!

Eu segui esse tutorial do site Makebits. Tinha pensado em fazer um parecido nesse post, mas o deles está realmente bem explicado. Nada a melhorar.

Vale ressaltar que o circuito só funciona bem com o arduino ligado a uma fonte externa de alimentação. Se estiver ligado somente pela alimentação via USB o motor não gira bem, ou o programa não funciona corretamente. Eu usei uma bateria de 9v.

Para testar o circuito eu fiz um programa para fazer o motor girar para a esquerda e para direita quando eu digitasse no teclado “d” e “e”, respectivamente. Qualquer outra letra faz o motor para de girar.

Eu gravei o motor em ação com a colaboração da minha filhota Gabriela. Ela explica tudo direitinho. Tá! Eu sou babão mesmo, eu sei :p

Segue o programa:

int motorPin1 = 5;
int motorPin2 = 6;
int entrada = 0;

void setup() {
 Serial.begin(9600);
 pinMode(motorPin1, OUTPUT);
 pinMode(motorPin2, OUTPUT);
}

void loop() {

 // testa se a porta serial está disponível
 if (Serial.available() > 0) {
 // le os dados da porta serial armazena na variavel 'entrada'
 entrada = Serial.read();
 if (entrada == 'e'){
 esquerda();

 } else if (entrada == 'd'){
 direita();

 } else {
 parar();

 }
 }
}

void esquerda(){
 digitalWrite(motorPin1, 1);   // Motor para a esquerda
 digitalWrite(motorPin2, 0);   //
}

void direita(){
 digitalWrite(motorPin1, 0);   // Motor para a esquerda
 digitalWrite(motorPin2, 1);   //
}

void parar(){
 digitalWrite(motorPin1, 0);   // para o motor
 digitalWrite(motorPin2, 0);   //
} 

Bom é isso. Quando fizer o teste com dois motores eu faço outro post.

Espero que esse post tenha sido útil.

Abs.

Tags: , , , , , , , ,

56 comments

  1. EU MONTEI UM ROBO ESTEIRA COM ARDUINO +BLUETOOTH+PONTE H MAIS NAOSEI CORRETAMENTE FAZER O CODIGO PRO ARDUINO E NEM SEI O MELHOR APP PARA CONTROLAR O ROBO VCS PODEM ME DAR UMA DICA OU ATE O GODIGO PRONTO POR FAVOR EU UTILIZEI O( ARDUINO UNO) (Arduino Motor Shield L293d Driver Ponte H )

  2. como vc fez para reduzir a velocidade do motor
    ??

  3. OLá Boa noite Marco! Sou iniciante na área, poderia me dar alguns conceitos de como faço para montar um carrinho controlado por bluetooth com servo motor e motor CC.? Desde já agradeço.

  4. Carlos.
    O melhor no seu caso é começar com Arduino mesmo e comprar um módulo bluetooth já pronto para plugar no Arduino. Vc encontra fácil no DX.com 😉
    Pra conectar com o módulo bluetooth eu recomendo usar um smartphone Android (todos tem BT hoje em dia rsrs) e usar o Amarino pra facilitar.
    Outra dica que te dou é comprar um carrinho de controle remoto baratinho e desmontar. Pra começar é ideal, pois ele já deve vir com motores DC e as engrenagens para fazer as rodas girarem.
    Espero ter ajudado.
    Abs.

  5. Gostaria de convida-los a conhecer nosso novo site. http://www.lojaelitenet.com.br . Domingo é o dia ideal para efetuar sua compra. Aproveite essa para nos conhecer e efetuar sua compra de componentes eletronicos, circuitos PWM , motores e muito mais.

  6. Boa tarde! Estou tentando fazer uma programação com os seguintes: Programação de esteira para arduino
    Led1, led2, sensor infravermelho, celula de carga
    Esteira para quando sensor detectar objeto
    Celula pesa o produto
    Si peso = 50kg led1 acende
    si peso menor ou maior que 50kg led2 acende
    Gostaria de saber si estou no caminho certo e si alguem tem uma dica para terminar essa programação, não tenho muito conhecimento.
    int led1 = 8; //Declaração de variável. Indica que o led1 está conectado no pino digital 13 do Arduino
    int led2 = 9; //Declaração de variável. Indica que o led1 está conectado no pino digital 13 do Arduino
    int infra = 0; //Declaração de variável. Indica que o infravermelho está conectado no pino digital 13 do Arduino
    int celula = 1; //Declaração de variável. Indica que o celula de carga está conectado no pino digital 13 do Arduino
    long detectionSpanInitial = 0;
    long detectionSpan = 0;
    boolean lightState = false;

    void setup() { //Declaração da função setup().Esta função é chamada apenas uma vez, quando o Arduino é ligado ou reiniciado.
    pinMode(celula, INPUT); //entrada de dados
    pinMode(infra, INPUT); //entrada de dados
    pinMode(led1, OUTPUT); //saida de dados
    pinMode(led2, OUTPUT); //saida de dados
    }

    void loop() { //Declaração da função loop().Após a função setup() ser chamada, a função loop() é chamada repetidamente até o Arduino ser desligado.
    // Todas as linhas a seguir são chamadas de função com passagem de parâmetros.
    // As funções são executadas em sequência para fazer o LED acender e apagar.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *