segunda-feira, 27 de junho de 2011

Motores DC

     Primeiramente, para ligar um motor DC no arduino, precisamos montar um pequeno circuito. Porque o arduino não tem corrente suficiente para ligar um motor, a corrente que o arduino tem é de 40mA e dependendo do motor, precisa de mais que isso, uns 50mA em diante.
     Existem n maneiras para montar um circuito para pode ligar o motor, vou mostrar só uma delas como mostra a imagem a seguir:
     O resistor que usei é de 1kohm, diodo 1N4007, transistor TIP120 e a bateria é que serve para ligar o motor. Lembrando também que existe varias maneiras para ligar um motor, a programação praticamente é igual a do Blink também pode ser feita pelo for mas precisa usar uma porta pwm, só que em vez do LED vai ligar um motor DC.

Programação:
int motor= 9;  //Variável 9 que declarei como motor
void setup()
{
  pinMode(motor, OUTPUT);  //Porta Digital do arduino, pino 9 (pwm)
}
void loop()
{
  digitalWrite(motor, HIGH); //Motor Liga por
  delay(1000);                   // 1segundo = 1000 milissegundos
  digitalWrite(motor, LOW); //Motor Desliga por
  delay(1000);                  //1segundo = 1000 milissegundos
}
     Como vocês viram, mudou quase nada da programação Blink, mas como a porta 9, é uma porta pwm, logo vocês podem mudar a corrente, em vez de HIGH pode-se colocar 255 (corrente máxima ou outro valor para andar) e em vez de LOW pode colocar como 0 (corrente nula ou um valor muito baixo para ele andar bem de vagar), mas lembrando de que precisa mudar de digitalWrite para analogWrite. Fazendo isso, podemos controlar a velocidade dos motores, leds, qualquer componente.

Vídeo:

Até mais...

12 comentários:

Leonardo disse...

Fala eduardo blz?!

se ao inves de de High e/ou Low , poderia ultilizar "random",tipo assim.

analogWrite(motor,random(255));
delay(1000);

o motivo disso é q preciso de motores girando de forma aleatória.

Eduardo Almeida disse...

Mas esse random(), dentro dele foi declarado que a variável máximo a ser declarado é de 255. Caso você use mesmo o motor, seria bom usar um valor minimo que consiga acionar o motor e o valor máximo 255.

Na teoria essa programação funcioná sim mas prefiro verificar antes a programação pare ver se funciona 100% mas como estou um pouco atarefado, logo responderei com a programação.

Mas olhando assim, creio que não há porque de não funcionar.

Unknown disse...

Ola Eduardo,

Estou começando no mundo arduino, e tenho muitas duvidas como controlar motor nele, estou querendo controlar 2 motores nos 2 sentidos (frete, tras) você tem alguma dica.

Obrigado

Eduardo Almeida disse...

Olá... Você pode usar a ponte H usando transistores ou CI
Explicação: http://arduino-projetos.blogspot.com.br/2011/07/ponte-h.html
Com Transistor: http://arduino-projetos.blogspot.com.br/2011/09/ponte-h.html
Com CI: http://arduino-projetos.blogspot.com.br/2011/06/motorshield.html

Existe outras maneiras e outros CIs para poder fazer o controle dos motores em ambos os sentidos, da até para fazer com relé mas acho desnecessário.

Espero que tenha ajudado... até mais

Kinucris disse...

Poderia ser mais especifico quanto a montagem?

A programação parece ser super simples e super igual o blink, mas não entendi muito bem o desenho, o esquemático rs

Comprei um Arduino a pouco tempo, tenho vários motores desses e meu kit veio com muitos acessórios, ainda não pude ver o tutorial que veio junto com meu Kit, mas estou fuçando sempre no Google e muitas vezes encontro desenhos esquemáticos como o seu onde é até fácil compreensão, mas gostaria de entender oq ue está acontecendo rs

O que é "Porta pwm" por que deve se ligar na porta 9 e não na 13 (Que foi onde eu liguei meu LED rs)

Essas explicações "básicas" mas que vão fazer toda a diferença pra mim que não tenho muito conhecimento sobre os componentes em geral :/

Unknown disse...

Elvis... primeiramente no arduino nem todos os pinos tem a porta PWM eu escolhi uma porta aleatória PWM que no meu caso foi a 9 mas poderia ser qualquer outra porta PWM, a 13 seria uma porta digital comum.
PWM é uma sigla ingles que traduzida significa Modulação Largura de Pulso,você controla a largura do pulso nume determinada frequência em que o arduino funciona e vai fazendo o controle da intensidade da luz ou da velocidade do motor. Pino digital funciona como nivel alto e nível baixo, 5v e 0v respectivamente no Arduíno você fazendo o controle por PWM você vai controlar a largura em que o pulso vai ficar em nível alto e baixo, isso tudo numa velocidade muito grande por causa da frequência, do clock do Arduíno trabalha. Com essa quantidade de largura em que vai pro nível alto e baixo que faz o controle da intensidade da carga (se irá acender um LED fraco ou forte ou controlar a velocidade do motor)

A programação é que nem o Blink realmente, mas usando essa programação coloquei como nível alto, rodar com a velocidade máxima e nível baixo que seria desligado. Caso fosse usar realmente a porta PWM a programação iria mudar um pouco em vez de digitalWrite(pin, HIGH ou LOW), serial analogWhite(pin, 0-255 onde faz o controle da carga).

O circuito é bem simples realmente, o transistor é usado como chave, o Arduino irá dar um sinal para a base do transistor permitindo a passagem da corrente. Em grosso modo para facilitar a explicação seria assim: a corrente sai do polo positivo da bateria passa pelo motor e fica retido no coletor do transistor, com o sinal que você der na base do componente a corrente vai passar do coletor para o emissor e voltar para o polo negativo da bateria.

Tentei explicar o máximo que pude, qualquer coisa manda outro comentário ou um e-mail também pesquise muito no pai Google que tem muita coisa interessando com o Arduino

Unknown disse...

boa noite...

to começando agora com arduino e estou com problemas para fazer um pequena programação.. se vcs podem me ajudar é o seguinte...

tenho um motor dc... e quero controlar esse motor com 3 botões
EXEMPLO:

BOTÃO A= ele gira para frente
BOTÃO B= gira para trais
BOTÃO C= controla a velocidade de rotação

então na pratica seria assim...

quando eu aperta o botão A (e continuando apertado)ele não iria partir sem que eu apertasse o botão C ( só da um toque no botão)
ai a cada toque no botão C ele tivesse uma rotação diferente... como se fosse a macha de um carro...

quando eu soltasse o botão A ele pare de girar... mas quando eu apertar novamente ele continue a mesma "macha" que estava antes.
pretendo colocar 3 velocidades diferentes... quando chegasse na 3 e eu aperta o botão de novo ele volta pro 1...

bom, se alguém tiver o código pronto eu agradeço...
mas se alguém me dar dicas de como programar, também será bem vindo...

meu e-mail deividcosta_@hotmail.com

muito obrigado

Unknown disse...

olá, queria saber como posso ligar o motor por 1s, e depois desliga lo completamente.

João Peterson Scheffer disse...

não entendi o uso do diodo pode me explicar?

Unknown disse...

Olá Eduardo. Teria algum problema se eu usar um mosfet nesse caso e quais os diodos alternativos eu poderia usar ao invés do 1N4007?

Unknown disse...

Olá Eduardo, amigo eu procuro um projeto para controlar um motor de vidro elétrico de carro subir e descer, porém existem algumas considerações, eu vou usar 2 chaves fim de curso, segundo eu pretendo usar uma chave on/off para fazer a respectiva função de subir e descer, você poderia me ajudar :)

Unknown disse...

Olá Eduardo, amigo eu procuro um projeto para controlar um motor de vidro elétrico de carro subir e descer, porém existem algumas considerações, eu vou usar 2 chaves fim de curso, segundo eu pretendo usar uma chave on/off para fazer a respectiva função de subir e descer, você poderia me ajudar :)

Postar um comentário

 
Blogger Templates