collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


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


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


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]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Robô Quadruped com Arduino  (Lida 4578 vezes)

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

Offline lucaslimaduarte

  • Mini Robot
  • *
  • Mensagens: 7
Robô Quadruped com Arduino
« em: 21 de Março de 2014, 15:32 »
Pessoal vou colocar aqui o andamento do meu projeto de um quadruped para quem quiser acompanhar o andamento do desenvolvimento.
OBS: a estrutura do tópico esta estranha porque so copiei o que ja havia postado em outro forum, mas daqui em diante vai ficar direito

-----12/03/14-----
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ó.

----18/03/14----
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?.....4&hd=1

-----19/03/14----
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.
Código: [Seleccione]
#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);
}

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

----19/03/14---
Achei outro topico de quadruped e nele tinha um código baseado em sinematica inversa, testei com este código e pudo constatar que o meu problema esta no código em si, não é na corrente da fonte ou montagem mecânica,  e pude constatar tambem que ele começa a tremer daquela forma do video 1 quando algo obstruí o angulo setado, quando seguro uma das pernas impedindo seu movimento todas tremem daquela forma.
Segue um video dele funcionado com o codigo achado https://www.youtube.com/watch?v=EKkKCQ4qvTI&feature=youtu.be
 
este é o código http://engineer-this.com/QuadrupedVer2.txt

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Robô Quadruped com Arduino
« Responder #1 em: 30 de Março de 2014, 16:27 »
O quadrupeded tá com óptimo aspecto, bom trabalho!

Quanto à "trepideira" pode ser uma questão de corrente sim. Em especial o teste em que prendes uma pata e já o sistema todo fica com "xiliques" e o arduino faz reset é sinal de problemas com o fornecimento de corrente.

Quando o servo está em esforço, consome mais corrente. Este consumo pode ser "em picos", e não conseguirás medir esses picos com um multimetro. Estes picos de corrente podem ter 2 ou mais vezes o valor que medes com um multimetro.

Não é apenas a capacidade da fonte de alimentação que "decide" a alimentação dos servos. Partindo do principio que a fonte é capaz de dar toda a corrente que os servos pedirem, quando há picos de corrente esses picos podem fazer baixar a tensão de alimentação (tipicamente é isso que causa os resets dos microcontroladores e comportamentos "estranhos" nos restantes servos e outros dispositivos que estejam ligados à mesma fonte). A tensão pode baixar porque a fonte não consegue reagir suficientemente depressa ao pedido de corrente em pico, e/ou porque os cabos de alimentação são compridos e finos e há queda de tensão por Lei de Ohm, e/ou ainda porque a indutância dos cabos não permite a passagem dos picos à "velocidade necessária".

É dificil fornecer um cálculo exacto para arranjar uma solução pois as variáveis são muitas, por isso posso apenas dar umas dicas:

1) Fios mais grossos desde a fonte até à ficha do servo, e o mais curtos possível.

2) Adicionar alguns condensadores eletroliticos (47uF, 100uF ou mais) do + para o - da alimentação no local do shield onde parte a alimentação para os servos; podes até experimentar 1 condensador por cada servo soldado mesmo em cima da ficha onde liga o servo já que tens muitos servos. O condensador actua como uma "micro bateria"  local que fornece a maior parte do pico de corrente.

3) Evitar actuar todos os servos "exactamente" ao mesmo tempo. Se precisares de mover 3, muda a posição de cada um separados de alguns ms, por exemplo 1 ou 2 ms. Isso ajuda a que os picos de cada servo "não se adicionem" resultando em picos maiores.

4) Para evitar reset do micro há um esquema simples mas muito eficaz, que é meter um diodo em série com a alimentação dele (no +), às vezes seguido de um condensador >=47uF do + para o - . Se usares um diodo schottky (exemplos: 1N5817, SB140A) deves poder metê-lo sem problemas mesmo na alimentação de 5V se é o que estás a usar. Nota importante: A alimentação positiva para os servos tem que ser tirada da linha positiva *antes* do diodo, caso contrário o diodo não tem nenhum efeito (positivo).

5) Se movimentares os servos mais devagar também terás menos problemas. Em vez de mandares 3 servos logo dos 0 para os 90º d euma vez só, vai devagar, fá-los andar de 5º em 5º a cada 10ms por exemplo.

Continuação de bom trabalho :)
« Última modificação: 30 de Março de 2014, 19:00 por Njay »

Offline zordlyon

  • Mini Robot
  • *
  • Mensagens: 1.768
Re: Robô Quadruped com Arduino
« Responder #2 em: 31 de Março de 2014, 14:09 »
Muito Bom parabéns.. ;)
Cumprimentos,
André Carvalho.