LusoRobótica - Robótica em Português

Robótica => Tutoriais => Tópico iniciado por: guibot em 06 de Outubro de 2008, 01:55

Título: [Arduino]Tutorial - L293D com Arduino
Enviado por: guibot em 06 de Outubro de 2008, 01:55
Este tutorial consiste em usar um chip L293D com Arduino.
O L293D é uma ponte H dupla, isto é, permite ligar 2 motores, e fazer com que estes rodem em ambas as direcções.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Ffarm4.static.flickr.com%2F3529%2F3262168342_501ba25dec.jpg%3Fv%3D0&hash=f29761a187f8551d2084f66ffec64775fd379c62)

Para fazer um motor rodar em ambas as direcções tem que se usar transistores e diodos de protecção, e fazer várias ligações o que nem sempre é facil.. e se forem preguiçosos como eu, isto torna-se uma grande seca.

Com o L293D temos tudo já feito, é só fazer as ligações e o nosso robot está pronto a andareeeeeeee...  :D

O tutorial está em inglês, quando tiver tempo (coisa rara hoje em dia) traduzo-o, se alguém com disponibilidade o quizer traduzir esteja à vontade, toda a comunidade agradece e os devidos créditos serão atribuidos.

http://lab.guilhermemartins.net/?p=66 (http://lab.guilhermemartins.net/?p=66)
Título: Re: Tutorial - L293D com Arduino
Enviado por: TigPT em 06 de Outubro de 2008, 10:31
Sim senhor, muito útil... Eu quando receber o meu stepper motor também faço um tutorial de como o controlar com o Arduino. ;)
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 17:30
diz-me uma coisa, gui, tu nesse link tens um monte de condensadores no circuito. eles são necessários? pra k? (eu sou um nabo a electro)
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 17:59
peço uma ajuda urgente:

no centro d'electrónica cá de coimbra só há o L293  B, C e E. algum deles serve pa fazer este esquema que o gui aqui tem montado ou são completamente diferentes?
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: Fifas em 03 de Fevereiro de 2009, 18:07
dão para fazer mas teras de acrescentar diodos de proteçao nos motores....a L293D ja tem esses diodos o que torna o processo muito mais simples ;)
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 18:10
vcs ajudam-me nisso? eu n faço ideia do k é necessário fazer pa ficar com a ponte operacional.. :S
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: Fifas em 03 de Fevereiro de 2009, 18:11
é para isso que ca estamos :D
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 18:12
então qual delas compro? e já agora, quais os componentes que são precisos pa fazer isso que tavas a dizer, k eu de electro só percebo o básico.. :(
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 18:38
já n é pra hj..  :'(
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: Fifas em 03 de Fevereiro de 2009, 20:01
depende....(ainda é pra hoje! ;D)

em que motores vais usar?
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 20:11
o 'hoje' era até às 18:55, pra ainda dar pa ir comprar o material..  :-[

eu agora n tou em casa, mas vou daqui a pouco e já tiro uma foto do motor pa veres. é daqueles carros telecomandados de 8 pilhas AAA.
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: Fifas em 03 de Fevereiro de 2009, 20:21
:P nao tava ca :P sorry :P

sendo um motor desses, penso que com uma l293d consegues meter o gajo a andar.....mas nao tenho a certeza :)
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 20:28
peço uma ajuda urgente:

no centro d'electrónica cá de coimbra só há o L293  B, C e E. algum deles serve pa fazer este esquema que o gui aqui tem montado ou são completamente diferentes?


então qual delas compro? e já agora, quais os componentes que são precisos pa fazer isso que tavas a dizer, k eu de electro só percebo o básico.. :(

dão para fazer mas teras de acrescentar diodos de proteçao nos motores....a L293D ja tem esses diodos o que torna o processo muito mais simples ;)
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: Fifas em 03 de Fevereiro de 2009, 20:29
bah :P tenho de dormir ;D

com a l293 consegues....precisas é dos diodos e nao sei quais sao assim de cabeça :P mas se pedires na loja eles devem saber ;D
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 20:55
o gajo n me pareceu tar disposto a ajudar.. disse-me os que tinha, e disse-me pa ir procurar as datasheets pa ver se algum dava pró k kria..

mas quilo pra mim são datashits, k n percebo nd delas.. :S
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: metRo_ em 03 de Fevereiro de 2009, 21:10
Tens ai os modelos que ele tinha lá?

Ve este tópico que postei alguns... É importante que sejam diodos "rápidos"...
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 21:19
n percebi.. tás a falar pra quem e a perguntar por quê?
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: metRo_ em 03 de Fevereiro de 2009, 22:19
o gajo n me pareceu tar disposto a ajudar.. disse-me os que tinha, e disse-me pa ir procurar as datasheets pa ver se algum dava pró k kria..

mas quilo pra mim são datashits, k n percebo nd delas.. :S

Estava a dizer para colocares aqui os nomes dos diodos aqui ainda estavas a falar dos L293?
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 22:22
sim, neste tópico só se tá a falar desse.. mas eu n faço ideia quais são os diodos necessários.. eu só disse que no centro de electrónica cá de coimbra só têm o L293B, o L293C e o L239E, e pedi para vocês (que sabem disto) me dizerem qual é que eu comprava e o que precisava mais de comprar pa pôr o raio do motor com controlo bi-direccional.. mas acho k vos vou poupar a explicações e a mim de trabalhos e vou mandar vir isso do porto ou assim..
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: TigPT em 03 de Fevereiro de 2009, 22:52
Eu realmente não te consigo ajudar, pois nunca utilizei nenhuma das variantes... deixo para alguém mais entendido.
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 23:02
deixa lá, já pus um contacto do porto a mexer, amanhã sou capaz de ter um L293D a caminho de coimbra.. :)
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: guibot em 03 de Fevereiro de 2009, 23:22
Citar
diz-me uma coisa, gui, tu nesse link tens um monte de condensadores no circuito. eles são necessários? pra k? (eu sou um nabo a electro)

Ricardo, como podes ver este circuito tem uma versão com e sem condensadores.

A versão sem os condensadores funciona bem, e é muito simples de implementar.

A versão com os condensadores é digamos, a aplicação correta, os condensadores servem para estabilizar a corrente e filtrar ruidos, e é como está na datasheet, e se o fabricante diz que se devem usar condensadores convém usa-los  :)

Eu não pesco nada de datasheets, segui-me pelo circuito da ladyada que podes ver aqui    :p
http://www.ladyada.net/images/mshield/mshieldv1-schem.png (http://www.ladyada.net/images/mshield/mshieldv1-schem.png)

em relação às variantes do L293 lamento mas não te sei aconselhar  :S

boa sorte
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 03 de Fevereiro de 2009, 23:41
hmm.. obrigado.. fica um pouco mais fácil assim.. :) ( eu vou esperar mesmo pelo L293D )
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: TigPT em 03 de Fevereiro de 2009, 23:57
http://www.solarbotics.com/products/k_smd/ (http://www.solarbotics.com/products/k_smd/)

Bastate útil para quem não gosta de electrónica ;)

este para o 298
http://www.solarbotics.com/products/k_cmd/ (http://www.solarbotics.com/products/k_cmd/)
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: ricardo-reis em 04 de Fevereiro de 2009, 00:02
já tinha visto.. :)
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: Pinguin_007 em 26 de Agosto de 2009, 21:02
Boas,

Eu tenho uma dúvida, seria possível utilizar esta H-bridge (http://loja.lusorobotica.com/componentes/15-h-bridge-motor-driver-1a.html (http://loja.lusorobotica.com/componentes/15-h-bridge-motor-driver-1a.html)) em vez do L293D?

Obrigado desde já
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: TigPT em 26 de Agosto de 2009, 21:10
Sim, o SN754410 é pino a pino compatível com a L293D, pode utiliza-lo em vez da L293D.

Cumprimentos,
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: Njay em 27 de Agosto de 2009, 00:15
Aparentemente os SN não têm diodos de protecção suficiente, e é a razão pela qual o motor shield da ladyada tem os L293D e não os SN.

Vejam esta discussão:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1200888334/34#34 (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1200888334/34#34)

Se alguém tiver um SNxxxx que queira arriscar sacrificar para colocar esta teoria à prova, podemos fazer passar uns 100 a 300mA através de um desses diodos internos durante uns minutos e ver se o chip aguenta.
Título: Re:[Arduino]Tutorial - L293D com Arduino
Enviado por: TigPT em 27 de Agosto de 2009, 00:20
Assim que tenha mais em stock e algum tempinho para montar o estaminé, faço o teste ;)
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: R.S. em 19 de Fevereiro de 2010, 22:57
boa noite,
estou a seguir este esquema(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Ffarm4.static.flickr.com%2F3507%2F3235657956_3307e726bc_o.jpg&hash=f19bb1ae3bc46e96c09b05b551d68265c466ba92) do guibot e o codigo é o seguinte:

Código: [Seleccione]
// Use this code to test your motor with the Arduino board:

// if you need PWM, just use the PWM outputs on the Arduino
// and instead of digitalWrite, you should use the analogWrite command

// —————————————————————————  Motors
int motor_left[] = {2, 3};
int motor_right[] = {7, 8};

// ————————————————————————— Setup
void setup() {
Serial.begin(9600);

// Setup motors
int i;
for(i = 0; i < 2; i++){
pinMode(motor_left[i], OUTPUT);
pinMode(motor_right[i], OUTPUT);
}

}

// ————————————————————————— Loop
void loop() {

drive_forward();
delay(1000);
motor_stop();
Serial.println(”1");

drive_backward();
delay(1000);
motor_stop();
Serial.println(”2");

turn_left();
delay(1000);
motor_stop();
Serial.println(”3");

turn_right();
delay(1000);
motor_stop();
Serial.println(”4");

motor_stop();
delay(1000);
motor_stop();
Serial.println(”5?);
}

// ————————————————————————— Drive

void motor_stop(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], LOW);

digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], LOW);
delay(25);
}

void drive_forward(){
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);

digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}

void drive_backward(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);

digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}

void turn_left(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);

digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}

void turn_right(){
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);

digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}

o código é o mesmo que é apresentado no site: http://lab.guilhermemartins.net/?s=l293D (http://lab.guilhermemartins.net/?s=l293D)

estou a utilizar o SN754410

estou a ter um problema, com os dois motores dc ligados á ponte só um deles é que funciona, ja troquei os motores.
alguém me consegue ajudar a resolver este problema?

abraços R.S.

Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: guibot em 19 de Fevereiro de 2010, 23:02
como estás a alimentar o teu circuito?
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: R.S. em 19 de Fevereiro de 2010, 23:04
só com o cabo usb ligado ao pc
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: guibot em 19 de Fevereiro de 2010, 23:12
os 5V do usb podem não ser suficientes para os teus motores

tirando isto, já deste uma revisão geral a todas as ligações?
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: R.S. em 19 de Fevereiro de 2010, 23:31
hahaaa :D funciona, obrigado:D
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: guibot em 19 de Fevereiro de 2010, 23:39
afinal o que era? o usb? ou as ligações?  :)
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: R.S. em 20 de Fevereiro de 2010, 00:06
era da porta usb do pc, ja com a minha pen estava me a dar uns problemas estava sempre a ligar e desligar a pen. Mudei de porta e ja deu:D
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: guibot em 20 de Fevereiro de 2010, 08:43
boa :)
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: SilentWarrior em 31 de Março de 2010, 16:42
Boas, consegui ligar um motor DC usando esse tutorial e esse h-bridge. (mesmo codigo e esquema que o R.S.)

Mas agora estou a tentar usar PWM para controlar a velocidade do motor, mas nao consigo obter velocidades diferentes, apenas a mesma velocidade.

E tambem nao consigo inverter a direcção (que esperava) usando uma troca de HIGH-LOW para LOW-HIGH, basicamente uma troca de polaridades (fisicamente). Outro problema que tenho é que para "desligar" o motor tenho de meter ambos os pinos em HIGH-HIGH e nao LOW-LOW.

Que e que raio se passa aqui? O que é que poderá ser? Assim que notei que algo estava errado desliguei tudo, e manti desligado não va estar para ai a fazer algum grande estrago.

Quero usar isto para controlar a velocidade de 2 motores DC, para usar depois com o processing + um comando da XBOX. Se quizerem o codigo para ler o controlador XBOX tal como como modificar o controlador tambem arranjo. :)
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: SilentWarrior em 31 de Março de 2010, 18:13
Boas de novo.

Consegui controlar finalmente o motor usando PWM.

O metodo que usei foi ligar no pin1 do L293D uma porta extra do arduino e dar-lhe por ai um PWM. Esta porta era anteriormente ligada em serie com os 5v do resto do circuito como mostra no esquema do tutorial, mas desta forma consegue-se controlar o input para todo o driver (acho eu que e todo e nao so o lado esquerdo). Neste caso limita a utilidade dos motores ja que apenas podemos controlar a velocidade de todo o driver e nao apenas cada 1 dos motores, mas ja é um inicio.
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: TigPT em 31 de Março de 2010, 18:19
Txii o que para aqui vai :P

Vamos esquecer que o L293D controla 2 motores e concentramos-nos em 1 e apenas 1 dos gates.

As entradas lógicas são InA1 e InA2 para entradas do gateA e o motor liga a OutA1 e OutA2

As entradas In1A e InA2 controlam o motor ligado ao gateA.

Assim, ambas as entradas a LOW o motor fica parado e ambas as entradas a HIGH o motor fica parado (por protecção interna do IC, não se deve fazer).

Para andar para 1 dos sentidos coloca-se HIGH num dos pins e LOW no outro, para inverter visse-versa.

Para controlar velocidade, os pins InA1 e InA2 estão ligados os dois a saidas de microcontrolador que suportem PWM para que quando se quer 50% da velocidade se coloque por exemplo InA1 a 50% PWM e InA2 a LOW (o pin HIGH é que fica com o PWM em vez de HIGH para controlar a velocidade).

Confirma que tens como acima indicado e certamente que tudo irá funcionar correctamente. Caso contrário faz-nos o esquema que tens montado e mostra o código para te podermos ajudar ;)
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: SilentWarrior em 31 de Março de 2010, 21:04
Txii o que para aqui vai :P

Vamos esquecer que o L293D controla 2 motores e concentramos-nos em 1 e apenas 1 dos gates.

As entradas lógicas são InA1 e InA2 para entradas do gateA e o motor liga a OutA1 e OutA2

As entradas In1A e InA2 controlam o motor ligado ao gateA.

Assim, ambas as entradas a LOW o motor fica parado e ambas as entradas a HIGH o motor fica parado (por protecção interna do IC, não se deve fazer).

Para andar para 1 dos sentidos coloca-se HIGH num dos pins e LOW no outro, para inverter visse-versa.

Para controlar velocidade, os pins InA1 e InA2 estão ligados os dois a saidas de microcontrolador que suportem PWM para que quando se quer 50% da velocidade se coloque por exemplo InA1 a 50% PWM e InA2 a LOW (o pin HIGH é que fica com o PWM em vez de HIGH para controlar a velocidade).

Confirma que tens como acima indicado e certamente que tudo irá funcionar correctamente. Caso contrário faz-nos o esquema que tens montado e mostra o código para te podermos ajudar ;)

Boas, voltei a ligar tudo como tinha para testar e funcionou... provavelmente foi qualquer coisinha que estava a fazer mal e que me baralhou os resultados.

O codigo que estou a usar é:
Código: [Seleccione]
int data = 1000;
int motor_left[] = {10, 11};

void setup() {
  Serial.begin(9600);
 
  // Setup motors
  int i;
  for(i = 0; i < 2; i++){
    pinMode(motor_left[i], OUTPUT);
  }
 
  digitalWrite(motor_left[0], LOW);
  digitalWrite(motor_left[1], LOW);
}

int sp = 0;
int order = 0;

int lf = 10; // line feed
int cr = 13; // carriage return
char buf[] = {1,2,3}; // quick buffer
int bi; //buffer index
void loop () {
  if (Serial.available() > 0) {
   
                int v = 0;
// read the incoming byte:
char c = Serial.read();
                if(c != (char)lf){
                  buf[bi++] = c;
                }
                if(c == (char)lf){
                  bi=0;
                  for(int i=0;i<3;i++)
                    v += (int) buf[i];
                  Serial.print("I received: ");
  Serial.println(v);
                }
// say what you got:
//Serial.print("I received: ");
//Serial.println(c);
  }
 
  //sp++;

 
  if(sp>255){
    sp = -225;
  }
   
 
  if(sp<0)
      order=1;
  else
      order=0;
 
  Serial.println(sp);
  //digitalWrite(motor_left[0], HIGH);
 
  int val = (sp<0)? -sp: sp;
  Serial.println(val);
  //analogWrite(9, sp);
 
  if(order==0){
    analogWrite(motor_left[0], val);
    digitalWrite(motor_left[1], LOW);
  }else{
    analogWrite(motor_left[1], val);
    digitalWrite(motor_left[0], LOW);
  }
 
 
 
  delay(200);
}

Podem ignorar a parte para ler o serial pois está incorrecta. Estou a trabalhar nela neste momento. Aceito sugestões para ler um valor inteiro (ou melhor ainda string) para controlar a velocidade do motor (int velocidade = 0-255).


Algo tipo :
(Processing)
Código: [Seleccione]
int lf = 10; // line feed
int cr = 13; // carriage return
String buf = ""; // quick buffer

int pval = 0;
void serialEvent(Serial p){
    int c = myPort.read();
    if(c != lf && c != cr){
      buf += char(c);
    }
    if(c == lf){
      println("Received: "+ buf);
      String[] buf2 = new String[1];
      if(buf.contains(":"))
        buf2 = buf.split(":");
     
      pval = val;
      if(buf2.length>1 && buf2[0].contains("potentiometer"))
        val = (buf2[1].length()>0)? int(buf2[1]) : val;
      if(buf2.length>1 && buf2[0].contains("fotosensor"))
        val = (buf2[1].length()>0)? int(buf2[1]) : val;
      buf = "";
    }
}

Mas ao contrario, lendo no proprio arduino os dados vindos do computador. Quero fazer algo tipo mySerialPort.write("motor1:255") para meter o "motor1" a velocidade (int)225.
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: alcas em 22 de Abril de 2010, 19:04
olá, vc pode encontrar aqui infos com L293D e com SN754410NE em  http://arduino.cc/en/Reference/StepperBipolarCircuit (http://arduino.cc/en/Reference/StepperBipolarCircuit)

uma duvida: algume sabe se eu posso substituir o L293D pelo L293B já que eu não tenho o L293D?
Título: Re: [Arduino]Tutorial - L293D com Arduino
Enviado por: rafhit em 14 de Maio de 2010, 19:32
boas!

tou a usar o l293d com o kit mr.basic e tou a ter o seguinte problema: ao usar o carrito no ar, ele faz tudo o que era suposto fazer.... mas quando o pouso no chão ele so anda para a frente e para atras, não tem força suficiente para fazer as curvas...e o l293d aquece mt!
agora... quando ligo os motores directamente ás pilhas...ele anda mt bem! tanto pa frente como para tras e nas curvas tmb...
pelos vistos o l293d "tira a força" aos motores....ou entao é o arduino!
alguém sabe o que se passa?
obg