collapse

* Links de Robótica

* Posts Recentes

Autor Tópico: [Ponte H]  (Lida 5857 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline nunosilvarocha

  • Mini Robot
  • *
  • Mensagens: 280
[Ponte H]
« em: 17 de Outubro de 2009, 00:01 »
Dando continuação a minha descoberta do arduino decidi montar uma ponte H para poder controlar a velocidade e a direcção de dois motores dc.
O IC que tinha disponivel comigo era o L293E, e tive que procurar o datasheet do mesmo.
Podem visualiza-lo no link abaixo:
 http://www.st.com/stonline/books/pdf/docs/1328.pdf

Depois de analisado o resultado ate agora é este:

L293E na breadboard


Ligação dos pinos 15 e 16 ao GND


Ligação dos pinos 14 e 17 ao GND (no datasheet diz para usar resistência mas não usei)


Diodos para protecção do motor
Ligados dos pinos 13 e 18 ao GND



Diodos para protecção do motor
Ligados dos pinos 13 e 18 ao pino 20


Como para já não vou regular a velocidade do motor ligamos o pino 11 aos +5V



Os pinos 12 e 19 dão-nos o sinal da direcção do motor, esta informação provem do arduino


É nos pinos 13 e 18 que ligamos ao nosso motor


Ligamos o pino 20 ao +5V, (esta pode ser ligada a uma fonte externa se necessário)



O L293E pode controlar 2 motores, para tal basta repetir a montagem no lado contrario.
Já testei e o motor rodou nos dois sentidos.
De momento é o que tenho feito.
Já tenho mais algumas coisas em mente para continuar isto, agora o que e preciso e tempo.
Os entendidos que falem sobre a minha experiência!

Actualização 18/10/2009

Bem hoje decidi juntar ao circuito que tinha montado na breadboard o arduino e um motor dc. E com algum codigo a mistura o resultado foi este:




O código que utilizei é um código simples, pois apenas faz o motor rodar para um lado e depois para o outro, como era apenas para testar se estava tudo bem acho que é o suficiente
Código: [Seleccione]
int motorL = 12;
int motorR = 11;

void setup()
{
  pinMode(motorL, OUTPUT);
  pinMode(motorR, OUTPUT);
}

void loop()
{
  digitalWrite(motorR,LOW);
  digitalWrite(motorL,HIGH);
  delay(5000);
  digitalWrite(motorL,LOW);
  digitalWrite(motorR,HIGH);
  delay(5000);
}

Acho que ainda vou ter muito a batalhar para melhorar isto, pois tenho algumas ideias para os próximos passos neste projecto agora o que é preciso e tempo para desenvolve-las.
Queria pedir ajuda aos mais entendidos da electronica, pois gostava de saber o que devia melhorar na circuito da breadboard para este funcionar melhor!

Actualização 20/10/2009

Hoje tive mais um tempinho para brincar com o arduino.
Na actualização anterior era o programa que sequencialmente fazia o motor rodar para um lado e depois para outro.
Hoje decidi implementar dois botões na breadboard, um liga e desliga o motor, o outro faz o motor mudar o sentido de rotação.
A montagem é bastante simples, o programa é que foi um pouco mais complicado apenas porque tive que procurar uma maneira de retirar o ruido do botão, pois quando clicava no botão o programa rodava mais rápido do que o meu click e assumia como tivesse dado vários clikes, o que com a criação deste filtro isso deixa de acontecer.
Se alguém tiver ideia de um filtro mais simples estou aqui para ouvir sugestões.
Agora vamos é a resultados concretos:

Montagem:
O arduino liga a ponte H pelos pinos 11 e 12.
Os botões enviam sinal para o arduino pelos pinos 6 e 7


E agora o material em acção:
ponte H Small | Large


O código que utilizei foi:
Código: [Seleccione]
int motorL = 12;
int motorR = 11;
int botaoD = 7;
int botaoS = 6;
int valD = 0;
int valS = 0;
int d = 0;
int e = 0;
long time = 0;         
long debounce = 200;
int pvd = HIGH;
int pvs = HIGH;

void setup()
{
  pinMode(motorL, OUTPUT);
  pinMode(motorR, OUTPUT);
  pinMode(botaoD, INPUT);
  pinMode(botaoS, INPUT);
  Serial.begin(9600);

}

//-------- funcao principa --------
void loop()
{
  valD=digitalRead(botaoD);
  valS=digitalRead(botaoS);
  if ((valD==LOW && pvd==HIGH && millis() - time > debounce) ||(valS==LOW && pvs==HIGH && millis() - time > debounce))
  {
    if ((valD==LOW)&&(e==1))
    {
      direcao();
    }
    if (valS==LOW)
    {
      liga();   
    }
    time = millis();
  }
  pvd = valD;
  pvs= valS; 
 
}
//----------------

//-------- muda de diração --------
void direcao()
{
  if (d==0)
  {
    digitalWrite(motorR,LOW);
    digitalWrite(motorL,HIGH);
    d=1;
  }
  else
  {
    digitalWrite(motorL,LOW);
    digitalWrite(motorR,HIGH);
    d=0;
  }
}
//--------------------

//-------- liga ou desliga motor --------
void liga()
{
  if (e==0)
  {
    digitalWrite(motorR,LOW);
    digitalWrite(motorL,HIGH);
    e=1;
    d=1;
  }
  else
  { 
    digitalWrite(motorL,LOW);
    digitalWrite(motorR,LOW);
    e=0;
  }
}
//----------------

Para já e o que tenho desenvolvido. Mas ainda tenho mais uma ideia para desenvolver um pouco mais isto. Agora o que preciso é de um pouco de tempo e logo novas noticias aqui chegaram.


Actualização 21/10/2009
Bem, hoje conclui a minha ponte H, pelo menos as ideias que tinha para aprender com ela já estão usadas.
Montei uma ponte com o IC L293E, controlei o motor desligando e ligando o mesmo por um switch, fiz o motor mudar o sentido de rotação por um switch.
Tudo isto ligado ao arduino.
A minha ultima ideia era controlar a velocidade de rotação do motor com um potenciómetro, e o resultado foi este:

O potenciómetro liga ao pino '0' analógico do arduino.
A saida PWM 5 liga ao pino 20 da ponte (srve para controlar a velocidade de rotação)
O resto das ligações mantém-se igual ao da actualização anterior.


A montagem em acção:
Controlo de velocidade Small | Large


A programação usada é esta:
Código: [Seleccione]
int motorL = 12;
int motorR = 11;
int botaoD = 7;
int botaoS = 6;
int valD = 0;
int valS = 0;
int d = 0;
int e = 0;
long time = 0;         
long debounce = 200;
int pvd = HIGH;
int pvs = HIGH;
int pot = 0;
int potv = 0;
int reg = 5;

void setup()
{
  pinMode(motorL, OUTPUT);
  pinMode(motorR, OUTPUT);
  pinMode(botaoD, INPUT);
  pinMode(botaoS, INPUT);
  analogWrite(reg,255);

}

//-------- funcao principa --------
void loop()
{
  valD=digitalRead(botaoD);
  valS=digitalRead(botaoS);
  potv=analogRead(pot);
  potv = map(potv, 0, 1023, 0, 179);
  analogWrite(reg,potv);
  if ((valD==LOW && pvd==HIGH && millis() - time > debounce) ||(valS==LOW && pvs==HIGH && millis() - time > debounce))
  {
    if ((valD==LOW)&&(e==1))
    {
      direcao();
    }
    if (valS==LOW)
    {
      liga();   
    }
    time = millis();
  }
  pvd = valD;
  pvs= valS; 
 
}
//----------------

//-------- muda de diração --------
void direcao()
{
  if (d==0)
  {
    digitalWrite(motorR,LOW);
    digitalWrite(motorL,HIGH);
    d=1;
  }
  else
  {
    digitalWrite(motorL,LOW);
    digitalWrite(motorR,HIGH);
    d=0;
  }
}
//--------------------

//-------- liga ou desliga motor --------
void liga()
{
  if (e==0)
  {
    digitalWrite(motorR,LOW);
    digitalWrite(motorL,HIGH);
    e=1;
    d=1;
  }
  else
  { 
    digitalWrite(motorL,LOW);
    digitalWrite(motorR,LOW);
    e=0;
  }
}
//----------------


Para já as minhas aventuras com a ponte H estão terminadas.
« Última modificação: 21 de Outubro de 2009, 23:17 por nunosilvarocha »

jspgresende

  • Visitante
Re: [Ponte H]
« Responder #1 em: 17 de Outubro de 2009, 16:15 »
Pessoalmente não sou adepto de organizar a montagem do circuito ao ponto de colocar os condutores com a perfeição que fizeste, afinal de contas é uma placa de testes, e PLACA DE TESTES indica logo que é algo apenas temporário... e faço ideia do tempo que perdeste a deixar a placa com bom aspecto... Mas dou-te deste já os parabéns pelo esforço e pelo "ar" organizado que lhe deste...

Para dares uma boa justificação a esse esforço, penso que seria uma boa ideia fazeres um tutorial, visto que tens o circuito muito bem organizado e fácil de compreender... como me alonguei demasiado no comentário não vi o PDF nem nada em concreto...

Continua com o bom trabalho...

Offline Tayeb

  • Mini Robot
  • *
  • Mensagens: 489
Re: [Ponte H]
« Responder #2 em: 17 de Outubro de 2009, 17:35 »
Pessoalmente não sou adepto de organizar a montagem do circuito ao ponto de colocar os condutores com a perfeição que fizeste, afinal de contas é uma placa de testes, e PLACA DE TESTES indica logo que é algo apenas temporário... e faço ideia do tempo que perdeste a deixar a placa com bom aspecto... Mas dou-te deste já os parabéns pelo esforço e pelo "ar" organizado que lhe deste...

Para dares uma boa justificação a esse esforço, penso que seria uma boa ideia fazeres um tutorial, visto que tens o circuito muito bem organizado e fácil de compreender... como me alonguei demasiado no comentário não vi o PDF nem nada em concreto...

Continua com o bom trabalho...


Fios bem organizados significa poupança de tempo na depuração e verficação do cicuito se algo não funciona.

Pessoalmente prefiro L293D, porque é melhor do que L293E ou L293B e encorajo o uso dele a quem faz desenvolvimentos com motores. Contém díodos na saída que oferecem maior protecção ao integrado. Para mais informação vêr o folheto técnico da SGS em:

http://www.datasheetcatalog.net/pt/datasheets_pdf/L/2/9/3/L293D.shtml

Tayeb

« Última modificação: 17 de Outubro de 2009, 17:42 por Tayeb »

jspgresende

  • Visitante
Re: [Ponte H]
« Responder #3 em: 17 de Outubro de 2009, 17:49 »
Sim, é claro. Fios organizados é um requisito básico. Fios milimétricamente organizados é exagero ou então é para alguma apresentação importante.


Offline Tayeb

  • Mini Robot
  • *
  • Mensagens: 489
Re: [Ponte H]
« Responder #4 em: 17 de Outubro de 2009, 18:00 »
Sim, é claro. Fios organizados é um requisito básico. Fios milimétricamente organizados é exagero ou então é para alguma apresentação importante.

Notei com interesse que o site arduinopt.com mostra lá um circuito com L293D.

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 4.939
    • Tiago Rodrigues
Re: [Ponte H]
« Responder #5 em: 17 de Outubro de 2009, 19:10 »
Parabéns nunosilvarocha,

Não ligues para criticas não construtivas, acho que devemos dar sempre o nosso melhor.

O teu post vai ser muito útil a muita gente. Podes acrescentar informação sobre como ligaste ao arduino e o código que utilizaste?

Mais uma vez, parabéns pelo excelente post!

Offline nunosilvarocha

  • Mini Robot
  • *
  • Mensagens: 280
Re: [Ponte H]
« Responder #6 em: 17 de Outubro de 2009, 19:52 »
SamPereira os pontas de cabo estão assim organizada porque tenho uma caixa com alguns fios nesse formato, foi só pegar e coloca-los na breadboard. Por vezes facilita-nos entender o que estamos a fazer, mas eu também uso aquelas pontas grandes todas dobradas e um pouco desorganizadas do ponto de vista estético.

Tayeb não usei o L293D porque o que tinha aqui em casa era o L293E, e por isso decidi utilizar este, e para ja parece que funciona.

TigPT sim, vou acrescentar as ligações ao arduino e o código, mas ando com pouco tempo para me dedicar ao arduino. quando tiver novidades vou postando

Offline Tayeb

  • Mini Robot
  • *
  • Mensagens: 489
Re: [Ponte H]
« Responder #7 em: 17 de Outubro de 2009, 20:50 »
SamPereira os pontas de cabo estão assim organizada porque tenho uma caixa com alguns fios nesse formato, foi só pegar e coloca-los na breadboard. Por vezes facilita-nos entender o que estamos a fazer, mas eu também uso aquelas pontas grandes todas dobradas e um pouco desorganizadas do ponto de vista estético.

Tayeb não usei o L293D porque o que tinha aqui em casa era o L293E, e por isso decidi utilizar este, e para ja parece que funciona.

TigPT sim, vou acrescentar as ligações ao arduino e o código, mas ando com pouco tempo para me dedicar ao arduino. quando tiver novidades vou postando


Sim L239E funciona, e é mais fácil de adquirir, e fornece feedback de corrente que pode ser útil para controlo. A vantagem no L293D é os díodos de saída para os menos incautos. A minha empresa Aliatron mantém sempre em stock o L293D, porque vai no DEAR Robot, o robô de preferência das Escolas nos concursos Robótica e Robotop.
« Última modificação: 18 de Outubro de 2009, 17:29 por Tayeb »

Offline nunosilvarocha

  • Mini Robot
  • *
  • Mensagens: 280
Re: [Ponte H]
« Responder #8 em: 18 de Outubro de 2009, 15:56 »
Adicionei novidades no primeiro post!

Offline nunosilvarocha

  • Mini Robot
  • *
  • Mensagens: 280
Re: [Ponte H]
« Responder #9 em: 21 de Outubro de 2009, 01:43 »
mais actualizações ao primeiro post!

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 2.114
    • Tróniquices
Re: [Ponte H]
« Responder #10 em: 21 de Outubro de 2009, 21:39 »
Normalmente não precisamos de ter a loop() a correr a toda a velocidade. Podes colocar um delay de por exemplo 50ms mesmo no final da função, e assim já sabes que ela corre mais ou menos 1 vez a cada 50ms. Isto permite-te fazer várias coisas com uma cadência temporal bem conhecida, como por exemplo piscar um LED de segundo a segundo ou tocar uma música. Basta um contador que conte "em ciclo", voltando ao a zero quando atinge determinado valor.

Por exemplo, para piscar o LED de segundo a segundo (0.5s aceso, 0.5s apagado) arranja-se um contador que conte até 1s / 0.05s = 20; quando ele for 10 já passou 0.5 desde que começou a contar, e então ligas o LED, e quando chegar a 20 já passou outro 0.2s e então desligas o LED e voltas a pôr o contador a 0.

Para fazer debouncing dos botões (aquilo a que chamaste "filtrar") basta que o estado do botão não mude durante 50ms a 200ms.

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 4.939
    • Tiago Rodrigues
Re: [Ponte H]
« Responder #11 em: 21 de Outubro de 2009, 22:31 »
Muitos parabéns Nuno, gostei bastante, principalmente e consegues dar uma excelente apresentação ao teu trabalho. Continua a melhorar que dá gosto. Aproveita as dicas k o Njay te deu. ;)

Offline nunosilvarocha

  • Mini Robot
  • *
  • Mensagens: 280
Re: [Ponte H]
« Responder #12 em: 21 de Outubro de 2009, 23:25 »
obrigado pela tua resposta Njay acho que o debouncing (estamos sempre a aprender) para já serve, acho que para o problema que tive foi uma boa resolução, não querendo deixar de parte a tua!

TigPT tento fazer uma boa apresentação para ser perceptível a todos. Para já a as minhas experiências com a ponte H ficam por aqui. O próximo passo vai ser dar um uso mais serio, montar a ponte com dois motores dc e apoiar tudo num chassi e por isto a mexer no chão.
Ja tenho 4 motores dc, agora tenho de arranjar umas rodas, o que me esta a parecer uma tarefe um pouco complicada.
Mas novas noticias vão aparecendo com o tempo.


Offline Raul

  • Mini Robot
  • *
  • Mensagens: 185
Re: [Ponte H]
« Responder #13 em: 24 de Outubro de 2009, 13:22 »
Boas.
Que tipo de Interruptor Pulsador Mini usaste no teu projecto e que eles não fazem o tradicional "click" XD?

Cumprimentos

Offline nunosilvarocha

  • Mini Robot
  • *
  • Mensagens: 280
Re: [Ponte H]
« Responder #14 em: 24 de Outubro de 2009, 19:45 »
Boas.
Que tipo de Interruptor Pulsador Mini usaste no teu projecto e que eles não fazem o tradicional "click" XD?

Cumprimentos

deves ter o teu sistema de som avariado... eu ouço perfeitamente o click do botão...
o botão e um simples PCB Pushbutton, 12*12mm