Tutorial: utilizando Arduino e transistor para controlar motor DC

Adquira estes componentes na Loja do Lab de Garagem

Neste tutorial vamos mostrar como controlar um motor DC com Arduino e um transistor utilizando a saída PWM (Pulse Width Modulation). Para saber mais sobre PWM, clique aqui.

Com dois botões, vamos controlar o motor DC conectado ao transistor e por fim o Arduino.

A ligação feitas está demonstrada abaixo:

A bateria de 9V é apenas para indicar a tensão de alimentação. Verifique a tensão necessária do seu motor DC para não queimá-lo. O transistor utilizado neste tutorial é o BD139, mas pode utilizar outro contanto que o transistor seja NPN. Para ver o datasheet, clique aqui.

A programação para controlar o motor DC está mostrada abaixo:


int motorPin = 3;
int incPin = 4;
int decPin = 5;
int val=0;
int incButton = LOW;
int decButton = LOW;

void setup()
{
pinMode(incPin, INPUT);
pinMode(decPin, INPUT);
pinMode(motorPin, OUTPUT);
analogWrite(motorPin, 0);
Serial.begin(9600);
}

void loop()
{
incButton = digitalRead(incPin);
decButton = digitalRead(decPin);
if (incButton == HIGH)
{
val++;
}
if(decButton == HIGH)
{
val=val-1;
}
Serial.println(val);
delay(100);
analogWrite(motorPin, val);
}

Ao apertar o botão da porta digital 4, o motor irá girar mais rápido. E ao apertar o botão da porta digital 5, o motor irá girar mais devagar.

E é isso! Esperamos que tenha gostado! Se tiver dúvidas sobre o tutorial, poste aqui enste blog! Para sugestões de tutoriais, clique aqui! Para ver outros tutoriais e projetos desenvolvidos pela equipe LdG e por outros garagistas, clique aqui e aqui, respectivamente! Até a próxima!

Referências:

http://www.datasheetcatalog.net/pt/datasheets_pdf/B/D/1/3/BD139.shtml

http://labdegaragem.com/profiles/blogs/tutorial-o-que-e-como-utiliz...

http://arduino.cc/en/

Exibições: 59853

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Samuel Kirst em 12 maio 2014 às 16:28

Olá,

muito bom seu trabalho, se eu precisar inverter a rotação do motor na programação, como faço? Algo como 5 segundos num sentido e 5 no inverso.
O Arduino mini tem portas suficientes para tudo isso?

Comentário de Danilo Marques Teixeira Silva em 23 novembro 2013 às 18:05

Boa noite a todos os garagistas. Gostaria de saber se posso substituir o motor por um Cooler de 12V. Todo este esquema seria o mesmo? Aguardo a resposta de vocês.

Comentário de Leandro Marcos Fagundes Diniz em 29 setembro 2013 às 5:31

Qual transistor vc utilizou??

Comentário de Carlos MIranda em 5 julho 2013 às 13:43

Bom dia a todos .

Estou tentando criar um pequeno robo onde  e necessario que o acionamento do motor de passo seja atraves de um botão , o codigo que estou usando esta abaixo, gostaria de saber se algem pode me ajudar ensinando como adicionar um botão para acionar o codigo abaixo . 

 

#include <Stepper.h>
const int stepsPerRevolution = 64;  
Stepper myStepper(stepsPerRevolution, 8,9,10,11);            

void setup() {
  myStepper.setSpeed(200);
}

void loop() {
  // velocidade por setSpeed()
  for (int i = 0; i < 32; i++)
  {
    myStepper.step(64);
  }
  delay(1000);
  // velocidade por delay
  /*for (int i = 0; i < 32; i++)
  {
    for (int j = 0; j < 64; j++)
    {
      myStepper.step(1);
      delay(2);
    }
  }*/
  for (int i = 0; i < 32; i++)
  {
    myStepper.step(-64);
  }
  delay(1000);
}

Comentário de Leonardo Natividade Gazio em 30 junho 2013 às 4:39

Perdoem a ignorância pessoal. Ali no código eu vejo que é feita escrita na porta serial, mas na imagem do protótipo não vejo onde ela é usada. Mais uma vez peço desculpas pela falta de conhecimento, ainda não trabalhei com Arduino. Abc.

Comentário de Marcelo Nogy de Oliveira em 30 janeiro 2013 às 11:01

Pessoal, eu preciso controlar um motor DC de 24v 5A porém necessito que a velocidade seja controlada através de um potenciômetro, pois preciso de diversas faixas de velocidade nesse motor.

Minha dúvida é se posso usar este circuito no motor de 24v 5A DC (claro que alimentando o motor com 24v) e quais seriam as alterações necessárias no cirucito e no código para que e possa variar a velocidade com um potenciômetro ( de 0 a 100% da velocidade do motor).

Comentário de Thiagoor em 26 janeiro 2013 às 11:28

Descobri meu erro, eu estava ligando da fonte de 12V para o transistor até a ventoinha, e eu deveria ligar os 12V direto na ventoinha para depois ligar no transistor.

Valeu!

Comentário de Thiagoor em 25 janeiro 2013 às 15:55
Putz, vc falou um pouco grego comigo, pois sou iniciante. Hehe
Quis fazer um projetinho de controle de ventoinha para aprender a mexer com transistores, e por conta disso encontrei um tutorial que o cara recomendava esse transistor por agüentar até 30V. E como não deu certo pensei que eu poderia estar fazendo alguma coisa errada ou o transistor poderia não ser o indicado.
Vc poderia me indicar um transistor para minha situação?
Meu cooler requer 12V e 110mA, e possuo duas fontes, uma de 250mA e outra de 1000mA, ambas de 12V.
Foi me indicado também um TIP122, será que esse daria certo?
Obrigado pela ajuda!
Abraço.
Comentário de Edson E.S. (softelli) em 25 janeiro 2013 às 0:49

Tente fazer uma curva de subida no PWM, durante a partida, isto é, no microcontrolador, faça uma rampa para retardar a partida em 10 segundos.

Depois dá uma pesquisada em outro transistor de uso geral

http://www.datasheetcatalog.net/pt/datasheets_pdf/2/N/3/9/2N3904.shtml

Comentário de Edson E.S. (softelli) em 25 janeiro 2013 às 0:43

Thiagoor,

A fonte pode ter muitos amperes a mais do que o dispositivo nela utilizado (assim como uma caixa d`água tem mais do que uma torneira).

Eu disse abaixo que o BC548 suportava 200mA, mas é de pico (na partida, talvez...) não é de corrente constante. Ele suporta 100mA de corrente constante. http://www.datasheetcatalog.org/datasheets/150/128424_DS.pdf

Além disso, há uma diferença de potencial (ddp) no transistor bipolar quando saturado (ele não funciona exatamente como uma chave, pois não fornece toda a tensão da fonte para a carga).

Parece-me que o seu BC548 está trabalhando no limite (P=U*I), se o consumo da ventoinha é o mesmo e a tensão é baixada durante a saturação do transistor, então a corrente tende a subir além do limite do transistor.

Há divergências quanto ä corrente constante suportado no coletor desse transistor:

http://www.b-kainka.de/Daten/Transistor/BC548.pdf

http://www.fairchildsemi.com/ds/BC/BC547.pdf

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço