collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[Ontem às 15:31]


Arame de Estendal por almamater
[18 de Abril de 2024, 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

Autor Tópico: Smalluino Advanced  (Lida 36315 vezes)

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

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re: Smalluino Advanced
« Responder #90 em: 12 de Junho de 2010, 13:24 »
Os reguladores de tensão 7805 só aguentam 1.5 amp, os motores devem puxar mais ou menos isso cada um.

Pode é ter power supply separado, pilha de 9v para o arduino, e pilhas AA para os motores, separado do arduino.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Smalluino Advanced
« Responder #91 em: 12 de Junho de 2010, 13:26 »
Poix, na fotografia nao da para ver bem mas se virem bem a legenda aquilo é um pack de 6 pilhas.
Com 6 devia dar não devia ????

O problema é que estás alimentar os motores através do Arduino, e aqueles 5V onde estão ligados os motores são os mesmo 5V que alimentam o Atmega, no arranque os motores têm um pico de corrente e como o regulador não deve conseguir fornecer vai ter uma queda de tensão e isso faz com que o micro-controlador reinicie. Tenta colocar uns condensadores electrolíticos na breadboard onde estão os 5V e o GND. Ou então alimenta os motores directamente do pack! Não dos 7,2V mas tiras de lá do meio um fio com cerca de 5V.

Offline FET_Destroyer

  • Mini Robot
  • *
  • Mensagens: 213
    • Fet Destroyer
Re: Smalluino Advanced
« Responder #92 em: 12 de Junho de 2010, 13:59 »
Os reguladores de tensão 7805 só aguentam 1.5 amp, os motores devem puxar mais ou menos isso cada um.

Pode é ter power supply separado, pilha de 9v para o arduino, e pilhas AA para os motores, separado do arduino.

Os LM7805 só aguentam no máximo 1A contínuos e já convém ter um dissipador
Para 1.5A contínuos tem o LM317.

Cumps

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Smalluino Advanced
« Responder #93 em: 12 de Junho de 2010, 14:16 »
Podes alimentar esses motores pequenos a partir de 7.2V (os motores devem ser de 3V), mas tens que usar PWM e manter o ciclo activo baixo (analogWrite(X) com X < 100).

Quanto aos RESET, se continuares a alimentar os motores pelos 5V do Arduino, podes nunca conseguir vir a resolver definitivamente esse problema. O teste "mais duro" é prenderes o veio dos motores (não os deixar rodar) e ligá-los e desligá-los repetidamente (uma só vez pode ser suficiente).
Mesmo que consigas resolver esse problema metendo um montão de condensadores, ele vai voltar a aparecer quando as pilhas começarem a ficar um bocadinho mais fracas. Resumindo, alimentar esses motores dos 5V do Arduino é pedir problemas e instabilidade.

Já agora, para passar 1A continuo, um 7805 tem que ter um dissipador de calor enorme.

Offline preytender

  • Mini Robot
  • *
  • Mensagens: 148
Re: Smalluino Advanced
« Responder #94 em: 12 de Junho de 2010, 14:28 »
Agradeco desde ja os conselhos de todos, já deve ter dado para perceber que é a primeira vez que faço isto e os meus conhecimentos de electronica são muito limitados.

Não sei se viram mas acho que ja consegui dar um pequeno passo em frente segui as indicações do microbyte (ver página anterior). Agora tudo funciona bem ligado por USB mas estou com medo de testar com as pilhas porque acho que o vin do arduino vai ficar com 7,2v e os motores so deviam levar com 3 a 6v.  Tenho aqui dois 7805 se colocasse um entre o vin e o CI acho que iria baixar tudo para 5v e ficava tudo bem. Disse alguma coisa estupida ?? Os ultimos comentarios dão a entender que não é boa ideia porque vai aquecer muito por isso acho que estou meio perdido.....  :-\

« Última modificação: 12 de Junho de 2010, 14:30 por preytender »

Offline FET_Destroyer

  • Mini Robot
  • *
  • Mensagens: 213
    • Fet Destroyer
Re: Smalluino Advanced
« Responder #95 em: 12 de Junho de 2010, 14:47 »
Já agora, para passar 1A continuo, um 7805 tem que ter um dissipador de calor enorme.

Isso é muito relativo.
Depende da tensão que lhe poes na entrada.
Tu sabes que P = U * I, imagina que o I=1A e que tens uma tensao de entrada de 7V logo U = (7-5)=2V
Logo P = 2 * 1 = 2W

Com o encapsulamento T0-220 e recorrento ao datashet no gráfico da potencia máxima ve-se que o integrado aguenta a 25ºC de temp ambiente 2,5W sem dissipador.



Regra regal eu se usa-se a consumir 1A punha um dissipador, mas pelos vistos não é necessário.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Smalluino Advanced
« Responder #96 em: 12 de Junho de 2010, 16:02 »
FET, estás a ler mal o gráfico. Repara que os 2.5W ficam acima da linha.

De qualquer forma, se puseres um 7805 a dissipar 0.25W continuamente, ele aquece ao ponto de nem lhe conseguires pôr os dedos em cima. Agora imagina com 2.5W.

Na verdade este integrado não se queima com temperatura, porque ele chega a um ponto que desliga sozinho até arrefecer o suficiente.. Só que isto acontece muito depressa (pode ligar e desligar muitas vezes por segundo), e isso causa ainda mais "instabilidade" num circuito que o utilizador não entende de onde vem. Por isso let's keep it simple...

Offline FET_Destroyer

  • Mini Robot
  • *
  • Mensagens: 213
    • Fet Destroyer
Re: Smalluino Advanced
« Responder #97 em: 12 de Junho de 2010, 18:18 »
FET, estás a ler mal o gráfico. Repara que os 2.5W ficam acima da linha.

De qualquer forma, se puseres um 7805 a dissipar 0.25W continuamente, ele aquece ao ponto de nem lhe conseguires pôr os dedos em cima. Agora imagina com 2.5W.

Na verdade este integrado não se queima com temperatura, porque ele chega a um ponto que desliga sozinho até arrefecer o suficiente.. Só que isto acontece muito depressa (pode ligar e desligar muitas vezes por segundo), e isso causa ainda mais "instabilidade" num circuito que o utilizador não entende de onde vem. Por isso let's keep it simple...

Tal como eu disse pelo datasheet um heatsink não é necessário pois digamos que no gráfico estão 2W, segundo o datasheet isso é o maximo que ele aguenta sem dissipador e acredito que no datasheet já tenha alguma margem, agora é claro que ele deve aquecer mas não ao ponto de ficar a ferver que não lhe possas tocar, mas eu para essa corrente nunca o usaria sem um heatsink, em relação ao que disses-te de poder desligar e ligar mtas vezes por segundo penso que isso não será assim como pensas.
Não tenho a certeza mas penso que a protecção disse seja com histerese, algo do genero, quando ele chega aos 170ºC desliga-se e só volta a funcionar aos 120ºC, logo isso do ligar e desligar mtas vezes por segundo penso que nunca aconteceria. Não tenho a certeza se é isto que acontece mas é o que tem mais logica.
Cumps
« Última modificação: 12 de Junho de 2010, 18:21 por FET_Destroyer »

Offline preytender

  • Mini Robot
  • *
  • Mensagens: 148
Re: Smalluino Advanced
« Responder #98 em: 13 de Junho de 2010, 00:12 »

Ola, o problema de reiniciar o arduino está resolvido  ;D o motivo pelo qual isso acontecia esta muito bem explicado na resposta do metRo_ em cima. A solução passou por ligar o fio rosa (ver foto) no pino 9v(vin) do arduino em vez de o colocar nos 5v da breadboard.



A ligação em cima funciona perfeitamente quando ligado por USB, o arduino não faz reset e tal como sugerido pelo Njay fiz alguns teste "duros" tipo frente,tras,direita,esquerda,frente,para tudo muito  rápido.

Precisava agora de um conselho sobre qual a decisão mais correcta para a alimentação externa:

Opção 1: Ligar as baterias de 7,2v no jack do arduino e manter tudo como esta, nesse caso o vin vai passar a ter 7,2 o que não sei se pode danificar os motores.

Opção 2: Colocar aquele regulador que anda perdido na foto entre o vin e o pino do IC

Opção 3: Dedicar-me a pesca.  ;D


Obrigado, abraço.



Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Smalluino Advanced
« Responder #99 em: 13 de Junho de 2010, 00:33 »
A datasheet só diz que o LM78xx desliga aos 150ºC, mais nada. Eu sei, por relatos de outros, que ele faz esse desligar/ligar muito rápido. Mas mesmo que o fizesse com um periodo de segundos, tás a ver a "cara" de espanto do pessoal sem perceber o que se passa...

Eu no teu lugar deixava tudo como está e usava PWM nos motores com ciclo activo abaixo de 100, preytender. Qualquer das outras soluções (incluindo a da pesca :)), é um desperdício de energia, ou seja as pilhas duram menos e tens componentes a aquecerem mais.

Offline preytender

  • Mini Robot
  • *
  • Mensagens: 148
Re: Smalluino Advanced
« Responder #100 em: 13 de Junho de 2010, 00:38 »
Obrigado pela rápida resposta... por acaso no meu codigo ja estou a utilizar PWM, em vez de utilizar digitalwrite(HIGH) faço analogwrite(70) para nao forçar muito os motores.

Tudo a funcionar e não cheira a queimado  ;D ;D  notei uma coisa engracada fazer analogwrite(70) quando ligado pelas baterias parece que anda mais rápido do que ligado por USB.

Muito obrigado a todos pela ajuda e para os principiantes como eu podem usar o esquema em cima que vai funcionar.
Peço desculpa ao AcidDagger por ter monopolizado o topico dele, fico a aguardar para ver essa v.2 esta com bom aspecto.

Abraço.  ;D ;D ;D ;D
   
« Última modificação: 13 de Junho de 2010, 00:56 por preytender »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Smalluino Advanced
« Responder #101 em: 13 de Junho de 2010, 01:01 »
Dizes que o analogwrite(70) funciona diferente com a USB e com as baterias o que é bom porque quer dizer que está tudo a funcionar correctamente :)

Com a USB tens 5V, o analogwrite varia entre 0 e 255, logo 5V*(70/255)=1,37V.
Com a bateria tens 7,2V, logo 7,2V*(70/255)=1,97V.

Para alem de que a USB só consegue fornecer 500mA!

Offline AcidDagger

  • Mini Robot
  • *
  • Mensagens: 364
  • Make Bits, Making robotics in Portugal
    • Make Bits
Re: Smalluino Advanced
« Responder #102 em: 13 de Junho de 2010, 23:20 »
Amanha ja tenho uma versão do codigo para mostrar :P

Offline AcidDagger

  • Mini Robot
  • *
  • Mensagens: 364
  • Make Bits, Making robotics in Portugal
    • Make Bits
Re: Smalluino Advanced
« Responder #103 em: 14 de Junho de 2010, 19:37 »
Ora bem, aqui fica o codigo base para quem se quiser lançar na construção de um robot é bastante simples (:

Código: [Seleccione]

void parar() { // para os motores
  digitalWrite(motor_esquerdo[0], LOW);
  digitalWrite(motor_esquerdo[1], LOW);
 
  digitalWrite(motor_direito[0], LOW);
  digitalWrite(motor_direito[1], LOW);
  delay(50);
}

void frente() { // anda em frente
  analogWrite(motor_esquerdo[0], velocidade_max);
  digitalWrite(motor_esquerdo[1], LOW);
 
  analogWrite(motor_direito[0], velocidade_max);
  digitalWrite(motor_direito[1], LOW);
  delay(50);
}

void tras() { // anda para tras
  digitalWrite(motor_esquerdo[0], LOW);
  analogWrite(motor_esquerdo[1], velocidade_max);
 
  digitalWrite(motor_direito[0], LOW);
  analogWrite(motor_direito[1], velocidade_max);
  delay(50);
}

void direita() { // vira para a direita
  analogWrite(motor_esquerdo[0], velocidade_max);
  digitalWrite(motor_esquerdo[1], LOW);
 
  digitalWrite(motor_direito[0], LOW);
  analogWrite(motor_direito[1], velocidade_max);
  delay(50);
}

void esquerda() { // vira para a esquerda
  digitalWrite(motor_esquerdo[0], LOW);
  analogWrite(motor_esquerdo[1], velocidade_max);
 
  analogWrite(motor_direito[0], velocidade_max);
  digitalWrite(motor_direito[1], LOW);
  delay(50);
}

void acelerar_frente() { // acelera os motores do 0 à velocidade máxima
  for(int valor_acelerar = 0 ; valor_acelerar <= velocidade_max; valor_acelerar +=10) {
      analogWrite(motor_esquerdo[0], valor_acelerar);
      digitalWrite(motor_esquerdo[1], LOW);
 
      analogWrite(motor_direito[0], valor_acelerar);
      digitalWrite(motor_direito[1], LOW);
      delay(30);
  }
}

void desacelerar_frente() { // desacelera os motores da velocidade máxima a 0.
  for(int valor_desacelerar = velocidade_max ; valor_desacelerar >=0; valor_desacelerar -=10) {
    analogWrite(motor_esquerdo[0], valor_desacelerar);
      digitalWrite(motor_esquerdo[1], LOW);
 
      analogWrite(motor_direito[0], valor_desacelerar);
      digitalWrite(motor_direito[1], LOW);
      delay(30);
  }
}