segunda-feira, 20 de junho de 2011

Projeto: Manipulando um motor DC no arduino.

Sabem aqueles motores de carrinho a pilha? Pois então, estes são os motores DC direct current ou corrente contínua em português. Basicamente é um motor que gira em apenas um sentido. Contudo, se a polaridade nos terminais é invertida a rotação ocorre no sentido oposto.
O que vamos mostrar neste projeto é uma forma de usar o arduino para controlar o sentido de rotação do motor. A idéia é construir um circuito que permita inverter o sentido da corrente, como na figura abaixo. Este circuito é conhecido como Ponte-H (H-Bridge) devido a configuração das chaves.
Veja que na figura acima o sentido da corrente é determinado através de chaves que abrem ou fecham o circuito. Para fazer esse chaveamento iremos utilizar quatro transistores do tipo NPN (BC547). Esse transistor funciona mais ou menos como um interruptor. Ele é composto de 3 pinos (1-Emissor, 2-Base e 3-Coletor) como mostrado na figura ao lado. A "grosso modo" a conexão entre os terminais 1 e 3 é feita se e somente se for aplicada uma tensão no terminal 2.
Para montar uma ponte-H com este transistor são necessários:
  • 4x transistores NPN BC547 (pode-se utilizar outro transistor NPN);
  • 2x resistores de 10kOhms;
  • 2x LEDs;
  • Motor DC;
  • Fios.
O diagrama abaixo mostra como deve ser montado o circuito na protoboard. Repare que os dois LEDs estão ligados com polaridade invertidas, eles funcionam como indicadores do sentido de rotação do motor e podem ser retirados do projeto.
Não fiz a conexão no arduino para poupar espaço. Essa montagem permite que as portas PWMs sejam utilizadas para controlar a velocidade do motor. O código que faz o motor rotacionar nos dois sentidos está descrito abaixo.




int D0=10; //Porta que comando o sentido horario
int D1=6; //Porta que comanda o sentido anti-horario

void setup(){
pinMode(D0,OUTPUT);
pinMode(D1,OUTPUT);
}
void loop(){
//Gira no sentido horario
digitalWrite(D0,HIGH);
delay(2000);
// Para de Girar
digitalWrite(D0,LOW);
delay(2000);
//Gira no sentido anti-horario
digitalWrite(D1,HIGH);
delay(2000);
// Para de Girar
digitalWrite(D1,LOW);
delay(2000);
}

Futuramente iremos falar sobre o L293D, um circuito integrado que tem a mesma função da ponte-H e permite controlar mais de um motor.


18 comentários:

  1. Nesse circuito, eu posso usar o motor de ate quantos volts? Tenho um projeto em mente e estou vendo que motores vou usar, estou pensando usar motores em torno de 6-12v

    Se eu usar esses motores vai funcionar com esse circuito?

    Grato

    ResponderExcluir
  2. Eduardo, o que manda aí é a tensão máxima do transistor. No caso do bc547 que foi utilizado, a tensão máxima é 30V. Portanto, o circuito serve para motores de até 30V. Eu fiz uma versão mais simplificada dessa ponte, talvez você ache mais fácil de montar: http://icexduino.blogspot.com/2011/06/tutorial-entendendos-os-transistores.html

    ResponderExcluir
  3. Não existe o risco de danificar o Arduíno devido a ausência de um diodo ai?

    ResponderExcluir
    Respostas
    1. Os Leds sao os diodos que controlam o fluxo da corrente Anonimo :)


      Tenho uma pergunta, não vai fritar o arduino , o certo não seria usar uma fonte externa tipo uma pilha???

      Excluir
    2. Se você usar motores acima de 12V, a conexão, que no diagrama representa o +5V, deve ser feita diretamente na fonte de tensão. Além disso, o terra (GND) do arduino deve ser conectado ao terra (-) da fonte. Assim não tem perigo de torrar nada.

      Excluir
  4. Fiz Aqui! Muito lindo isso cara! Emocionante! Será um modulo para um projeto onde em uma maquete da casa terei um portão de garagem o qual atraves de comando enviado por GET via um Table (aplicação android) fará os comandosde abrir e fechar o portão. Muito obrigado por me ensinar a montar uma ponte H. Abração!!!!

    ResponderExcluir
  5. precisaria de um tip 122 para amplificar a corrente para o arduino aguentar rodar o motor dc ou nao ?

    ResponderExcluir
  6. Boa noite,poderia me explicar como fazer uma ponte H com 2 transistores tip31c. Conforme projeto do link http://rgeorgel.com.br/site/carro-motor-dc/

    ResponderExcluir
  7. Ola , Boa noite , !
    Fiz esta ponte "h" para mudar a rotação do motor, e estou querendo adicionar um receptor Ir (infra vermelho) para receber comandos de um controle qualquer, para que acione o motor . No caso eu tenho os codigos binarios do controle que irei usar. Queria uma ajuda sua eduardo , para adicionar estes comandos no codigo que voce postou acima, .. SE voce puder me ajudar, envia para mim o codigo ja adicionado os comando do conrole e tals , no meu e - mail ramon.era@hotmail.com
    abraços

    ResponderExcluir
  8. Muito obrigado me ajudou muito
    mas eu usei o
    BC 337
    resistor de 220 ohm
    Valeu até mais, parabéns pelo seu trabalho

    ResponderExcluir
  9. ta mas é ai não funciona!!!! me ajuda !!!!

    ResponderExcluir
  10. fiz um porém a tenção de saída é 4,5 v sem carga quando coloco o motor não aciona pode me ajudar ?

    ResponderExcluir
  11. olá gostaria muito de saber se da pra substituir esses transistores com o tip 122 q tenho.

    ResponderExcluir
  12. gostaria muito de saber se posso substituir os transistores pelo tip 122 npn

    ResponderExcluir
  13. BOA NOITE NÃO ENTENDO SUA PONTE H PENSO QUE NÃO SÃO 4 TRANSISTORES NPN PORQUE LIGA A BASE DOS TRANSISTORES DE BAIXO AO MOTOR. ACHO QUE OS DOIS DE BAIXO SÃO PNP?

    ResponderExcluir
  14. https://2.bp.blogspot.com/-1BKyO9MfGys/TgH-gd-txiI/AAAAAAAAArg/Bn3PahWAMWg/s1600/ponteH_teste_schem.jpg

    ResponderExcluir