Boa noite estou fazendo um robô quadruped controlado por um arduino uno, e estou com um problema estranho, quando mando uma posição para os servos eles começão a tremer loucamente e as vezes parando na posição correta sem tremer mais nada ou so ficam tremendo, estou usando mini servo de 9g e sei que eles tremem quando recebem carga foi assim em vários projetos passados, mas este não é a tremida normal deles, estou alimentado os servos por uma fonte de 5v e de 1A e constatei que quando eles começão a tremer a tensão cai para 2 a 3v e quando eles param de tremer ela volta a 5v. Usei uma fonte com tensão maior e nã mudou nada.

Alguem saberia o que pode ser? amanha vou tentar gravar um video com ele tremendo para explicar melhor. 

Não gostaria de pedir mas alguem teria um código simples de movimento para quadruped, so andar para frente mesmo (os que achei não são simples)? vou fazer o meu próprio código mas gostaria de apresentar o projeto em uma exposição de Arduino que vai haver em minha cidade daqui a duas semanas e tambem estou fazendo um robô sumo e um para labirinto 2D e esta apertado fazer tudo.

Segue algumas fotos do meu quadruped para verem a mecânica, é simples ja que é meu primeiro projeto nesse gênero.

Todas as peças foram feitas em acrílico de 3mm e cortadas a mão. 


Esta estrutura com suporte duplo nas pernas conseguiu distribuir bem o peso ele se matem em pé com os servos desligados


Fiz uma shild para controlar os servos, a alimentação é esterna tendo so os GND em comum com o Arduino, vou fazer uma placa controladora no final para substituir o Arduino e a shild deixando uma coisa só  

Exibições: 2137

Responder esta

Respostas a este tópico

Ola amigo!

Realmente muito legal esse projeto seu, parabéns, quanto a queda de tensão, isso pode ser proveniente de sobrecarga na fonte, tipo um curto-circuito ou corrente elevada para essa fonte e essa queda de tensão pode ta causando essa vibração em todos os servos, outra coisa que faz os servos vibrarem é sinal um pouco fora da faixa se trabalho do servo e isso tbm causa elevação de corrente.

Quanto ao código para sua aplicação fica meio complicado, pois para esse tipo de aplicação cada caso e um caso diferente e pra fazermos temos que ter todo o projeto de ligação, tipo esquemático do seu shild e localização dos servos.

Desculpe perguntar, mas fiquei curioso... Esses quadrupedes consegue se equilibrar em 3 pernas? 

Espero ter ajudado de alguma forma!!!

Abraços!!!

Obrigado vou procurar outra fonte para ver se muda alguma coisa, os quadrupedes conseguem se equilibrar nas três patas sim, mas dependendo do projetos ele tem que se inclinar em direção das três patas que estão no solo para mudar o centro de gravidade, ao contrario dos hexapod que tem um apoio melhor

Você esta sobrecarregando a fonte. Use uma fonte com maior capacidade de corrente. 

Quantos servos esta usando, quantos são usados ao mesmo tempo?

Cada pata tem 3 servos, sendo assim 12 ao todo, em media para os movimentos são usados 3 a 6 servos ao mesmo tempo, sem os restantes na posição anterior.

Testei com uma fonte de 5V e 2A, melhorou um pouco, agora estou usando uma fonte atx de computador e esta bem melhor, mas o problema ainda persiste.

Filmei esta demostração hj a tarde primeira vez alimentado pela fonte atx, a tremida dos servos é esta do segundo movimento, esta menor mas ainda não consegui resolver. https://www.youtube.com/watch?v=q1xxG6MHeP4&feature=youtu.be&am...

 Oi Lucas,

 Olhei o vídeo agora e realmente a parte que chama atenção ao problema é quando ocorre o acionamento dos demais servos para o segundo movimento.

 Sempre quando me deparo com algo estranho, procuro partir dos princípios básicos,  e me ocorreu o seguinte:

1) Seria interessante fazer um simples programa para testar o acionamento dos servos de forma sequencial. Tipo, primeiro mover cada servo individualmente, depois mover dois servos ao mesmo tempo, tanto da mesma "perna" quanto um servo de uma perna e outro de outra, e assim por diante até você verificar que acionando x servos ao mesmo tempo, acontece o problema, etc...

2) Não conseguindo deduzir nada no primeiro teste, tente simular e verificar o tempo de acionamento dos servos. Pode ser que determinada rotina esteja demorando para enviar o pulso novamente para o servo, e este tende à retornar à posição inicial, ou entende que deve ir para outro ângulo por exemplo.

    Caso queira, posso desenvolver a simulação no Proteus, desde que utilize microcontroladores que existem na biblioteca dele.

 Apenas estou olhando para o outro lado para tentar isolar o problema, se é fonte mesmo ou não. As vezes no primeiro teste você descobre que realmente a fonte não aguenta uma certa quantidade de servos, ou se está envolvido com o tempo de acionamento dos servos. ^^

 Espero ter ajudado.

 T++.

Seu robô esta com mal de parkinson ! he he 

Esta parecendo que esta configurando um angulo de acesso para os servos que não é permitido.

Por exemplo - em um determinado movimento, o angulo maximo de movimentação é 165 graus.

E você esta mandando ele movimentar 180 graus.

Experimente ajustar esses angulos de movimentação através da largura do pulso PWM.

http://forum.arduino.cc/index.php/topic,14146.0.html

Creio que o problema de acionar os servos por pulso pwm direto seria a quantidade de portas, a placa de controle final vai ser feita em tordo do Atmega328 e ele so tem 6 portas pwm, e o robô usa 12 servos

Este código que esta rodando no vídeo aciona um servo por vez, pensei que o problema fosse a corrente puxada quando muitos são acionados ao mesmo tempo mas parece que não ja que o problema continua.
Fiz a calibração dele por código, ajustando para que o central correspondesse ao 90º do servo e maximo e minimo a 180º e 0º, mas testei com ângulos menores como 150 e 30 mas continua o problema.
este código do vídeo é este bem simples com setamento de angulo direta

#include

Servo FLC;
Servo FLF;
Servo FLT;

Servo BLC;
Servo BLF;
Servo BLT;

Servo FRC;
Servo FRF;
Servo FRT;

Servo BRC;
Servo BRF;
Servo BRT;

void setup(){

FLC.attach(4);
FLF.attach(3);
FLT.attach(2);

BLC.attach(10);
BLF.attach(9);
BLT.attach(8);

FRC.attach(7);
FRF.attach(6);
FRT.attach(5);

BRC.attach(11);
BRF.attach(12);
BRT.attach(13);
}

void loop(){

//centro
FLC.write(90);
delay(10);
FLF.write(90);
delay(10);
FLT.write(90);
delay(10);
BLC.write(90);
delay(10);
BLF.write(90);
delay(10);
BLT.write(90);
delay(10);
FRC.write(90);
delay(10);
FRF.write(90);
delay(10);
FRT.write(90);
delay(10);
BRC.write(90);
delay(10);
BRF.write(90);
delay(10);
BRT.write(90);
delay(3000);

//baixo
FLC.write(90);
delay(10);
FLF.write(0);
delay(10);
FLT.write(0);
delay(10);
BLC.write(90);
delay(10);
BLF.write(0);
delay(10);
BLT.write(0);
delay(10);
FRC.write(90);
delay(10);
FRF.write(180);
delay(10);
FRT.write(0);
delay(10);
BRC.write(90);
delay(10);
BRF.write(180);
delay(10);
BRT.write(180);
delay(3000);

//deita
FLC.write(90);
delay(10);
FLF.write(90);
delay(10);
FLT.write(180);
delay(10);
BLC.write(90);
delay(10);
BLF.write(90);
delay(10);
BLT.write(180);
delay(10);
FRC.write(90);
delay(10);
FRF.write(90);
delay(10);
FRT.write(180);
delay(10);
BRC.write(90);
delay(10);
BRF.write(90);
delay(10);
BRT.write(0);
delay(3000);

}

Anexos

Os delays era para verificar se o problema esta em acionar muitos servos de uma so vez, assim testei acionando um por fez, e testei acionando todos, mesmo codigo mas sem os delays(10), com os delays melhorou um pouco mas o codigo esta bem temperamental tem vez que faz os movimentos corretos e é so reiniciar o arduino que o problema aparece e tem vez que ele esta indo corretamente e depois de algumas repetições apresenta o problema

 Oi Lucas,

 Fiz a simulação, e aparentemente está tudo ok com os tempos de acionamento dos servos. Os pulsos estão com o intervalo de 20ms, que está dentro dos 15~25ms.

 Mas... notei que em alguns ângulos o próprio simulador possui pequenas variações. Apenas para tirar a dúvida:

1) No primeiro movimento, todos os servos trepidam?

2) No segundo movimento, apenas as "coxas" trepidam?

3) No terceiro movimento, apenas as "coxas" e os "fêmurs" trepidam?

Da forma como coloquei foram onde encontrei as variações. Se não correspondem, então temos que ver outra coisa.

Fico no aguardo. T+.

Da forma que eu estava fazendo no vídeo cada movimento so move um servo de cada perna, e constatei que se um dos 12 servos não atingi o angulo setado todos os 12 tremem

Opa , então tem fundamento a minha hipótese:

Esta parecendo que esta configurando um angulo de acesso para os servos que não é permitido.

Por exemplo - em um determinado movimento, o angulo maximo de movimentação é 165 graus.

E você esta mandando ele movimentar 180 graus.

Faça os ajustes para cada um dos 12 servos separadamente.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço