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

Achei outro topico de quadruped aqui no LdG e nele tinha um código, 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 

cara eu consegui desenvolver um prototipo identico ao seu, agora estou desenvolvendo o software caso queira podemos trocar ideias e aprimorar nosso projeto segue anexo meu software ainda em teste mas podemos melhora-lo, conforme pode ver temos varias variaveis que facilita a programacao e a integracao com mais dispositivos, caso queira mande um email para paulocezar832@hotmail.com assim podemos trocar ideias

#include <Servo.h>               
Servo servo[12];                    //Cria um vetor do tipo servo para os 12 servos

int posicao,x,t,p,a,l,m0,m3,m6,m9;

void setup() {
  servo[0].attach(2); //servo 0 corresponde ao primeiro servo ligado na porta 3, assim por diante...
  servo[1].attach(3);
  servo[2].attach(4);
  servo[3].attach(5);
  servo[4].attach(6);
  servo[5].attach(7);
  servo[6].attach(8);
  servo[7].attach(9);
  servo[8].attach(10);
  servo[9].attach(11);
  servo[10].attach(12);
  servo[11].attach(13);
  delay(1000);
  for(posicao = 0; posicao < 11; posicao++){   // coloca todos os servos em posicao 90º para configuracao
  servo[posicao].write(90);}
  delay(2000);  
  a = 140; t = 2; p=10; m0 = 90; m3 = 90; m6 = 90; m9 = 90;l=100;  // define a, altura, t velocidade, p passo, mx posicao inicial dos servos, l posicao dos pes
  servo[1].write(a);servo[4].write(a);servo[7].write(a);servo[10].write(a);  //posiciona os servos na altura
  servo[2].write(l);servo[5].write(l);servo[8].write(l);servo[11].write(l);  //posiciona os pes
}

void loop() {
  passo1();passo2();   // chava rotinas andar
  passo1();passo2();
  passo1();passo2();
  passo1();passo2();
  passo1();passo2();
  passo1();passo2();
  passo1();passo2();
  direita();  // rotina virar a direita
 }   
 void passo1(){
     for(x = 0; x < 50; x++){servo[4].write(a+x);delay(t);}  // levante a perna
     for(x = m3; x>70; x--){servo[3].write(x);delay(t);};m3=70; // move os servo pra frente
     for(x = 0; x < 50; x++){servo[4].write(a+30-x);delay(t);} // baixa a perna
     frente();  // movimenta o robo pra frente
     for(x = 0; x <  50; x++){servo[10].write(a+x);delay(t);}
     for(x = m9; x<110; x++){servo[9].write(x);delay(t);};m9=110;
     for(x = 0; x <  50; x++){servo[10].write(a+30-x);delay(t);}
     frente();}    
 
  void passo2(){
     for(x = 0; x < 50; x++){servo[1].write(a+x);delay(t);}
     for(x = m0; x > 70; x--){servo[0].write(x);delay(t);};m0=70;
     for(x = 0; x < 50; x++){servo[1].write(a+30-x);delay(t);}
     frente();
     for(x = 0; x < 50; x++){servo[7].write(a+x);delay(t);}
     for(x = m6; x< 110; x++){servo[6].write(x);delay(t);};m6=110;
     for(x = 0; x < 50; x++){servo[7].write(a+30-x);delay(t);}
     frente();}
 
  void frente(){    // movimenta pra frente
  for(x = 0; x < 10 ; x++){
     servo[0].write (m0+x);
     servo[3].write (m3+x);
     servo[6].write (m6-x);
     servo[9].write (m9-x);
     delay(t*15);
   }
     m0=m0+10; m3=m3+10;m6=m6-10;m9=m9-10;}  // define posicao atual dos servos
     
    void direita(){                 // movimenta os servos do ombro a 90º
  for(x = 0; x < 45 ; x++){
     servo[0].write (90+x);
     servo[3].write (90+x);
     servo[6].write (90+x);
     servo[9].write (90+x);
     delay(t*15);
     }
     for(x = 0; x < 50; x++){servo[4].write(a+x);delay(t);}  // coloca as pernas na posicao correta para continuar a andar
     servo[3].write(90);
     for(x = 0; x < 50; x++){servo[4].write(a+30-x);delay(t);}
    
     for(x = 0; x <  50; x++){servo[10].write(a+x);delay(t);}
     servo[9].write(90);
     for(x = 0; x <  50; x++){servo[10].write(a+30-x);delay(t);}
   
     for(x = 0; x < 50; x++){servo[1].write(a+x);delay(t);}
     servo[0].write(90);
     for(x = 0; x < 50; x++){servo[1].write(a+30-x);delay(t);}
   
     for(x = 0; x < 50; x++){servo[7].write(a+x);delay(t);}
     servo[6].write(90);
     for(x = 0; x < 50; x++){servo[7].write(a+30-x);delay(t);}
    }

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço