collapse

* Posts Recentes

Fabricação de ferramenta de corte por zordlyon
[Ontem às 00:23]


SCT-013 + i2c eeprom, Gravar e Ler dados. por dennis_boy
[23 de Abril de 2018, 21:43]


Controlar Motor AC por senso
[23 de Abril de 2018, 12:34]


Apresentação do Legendary Urban Hacker por Sarat
[23 de Abril de 2018, 00:24]


Redes LoRa por ralex
[22 de Abril de 2018, 22:53]


Canal de video aulas no youtube! por zkreamer
[22 de Abril de 2018, 21:58]


Nueva en el Foro!!!!!!!! me presento!! por zkreamer
[22 de Abril de 2018, 21:48]


Alguem usa as libs md_max72xx e md_parola ? por vasco
[21 de Abril de 2018, 23:44]


Paineis Fotovoltaicos para Autoconsumo (Kits EDP)? por KammutierSpule
[20 de Abril de 2018, 13:42]


Como repôr posições dos Icones/Pastas no Desktop W8? por senso
[19 de Abril de 2018, 23:55]

Autor Tópico: Controlar Servos  (Lida 1819 vezes)

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

Offline joaocunha99

  • Mini Robot
  • *
  • Mensagens: 15
    • Hands-on Robots
Controlar Servos
« em: 06 de Janeiro de 2011, 13:44 »
Pretendo controlar servo-motores.
Fiz da forma simples mas dá um pouco  de trabalho quando se quer controlar 8 servos.
O que fiz foi para um servo.


Situação 1:

#include <Servo.h> // Biblioteca que permite controlar os Servos
Servo servo1;      // Criação de um objecto que permitira controlar o servo
 
 
int posicao = 0;   // inicialização da variavel posiçao a 0

void setup()
{
  servo1.attach(X);  // Porta onde ira ser ligado o servo
}

void loop()
{
  for(posicao = 0; posicao < 180; posicao +=1)  // Servo gira da posiçao 0 para a posiçao 180 de 1 em 1 grau
  {                             
    servo1.write(posicao);              // "Escreve" no pino X a posiçao para onde o servo se vai deslocar
    delay(3);                       // Espera de 3 milisegundos para que o servo possa chegar á sua posiçao
  }
  for(posicao = 180; posicao>=1; posicao-=1)     // Servo gira da posiçao 180 para a posiçao 0 de 1 em 1 grau
  {                               
    servo1.write(posicao);             // "Escreve" no pino X a posiçao para onde o servo se vai deslocar
    delay(3);


Como estava a ter muito trabalho resolvi fazer de outra forma:

Situação 2:


#include <Servo.h>
Servo servo1;     


int posicaoservo0 = 0;   // inicialização da variavel posiçao.
int posicaoservo45 = 45;
int posicaoservo90 = 90;
int posicaoservo180 = 180;


void setup()
{
  servo1.attach(X);
}


void loop()
{
  servo1.write(posicaoservo0);     
  delay(1000);   
  servo1.write(posicaoservo180);
  delay(3000);
  servo1.write(posicaoservo90);
  delay(1000);
  servo1.write(posicaoservo180);
  delay(1000);
  servo1.write(posicaoservo0);
  delay(1000);

}


- Nesta situação o servo faz a transição entre as posições no tempo que está definido, mas se o tempo que eu definir for muito curto (50) ele não tem tempo de ir à posição definida,

  servo1.write(posicaoservo0);     
  delay(50);   
  servo1.write(posicaoservo180);

ele não faz com a velocidade suficiente para ir dos 0 aos 180 em 50ms.

O que eu pretendia era tentar manter a mesma estrutura da situação 2, mas conseguir controlar os servos de modo a ir da posição 0 a 180 em 50ms.

O comando "wait" poderá resolver.


Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.489
  • Helpdesk do sitio
Re: Controlar Servos
« Responder #1 em: 06 de Janeiro de 2011, 15:56 »
Isso provavelmente depende dos servos, talvez arranjar servos mais rápidos, se bem que o código do Arduino deve ter alguma culpa disso..
E se não me engano esse biblioteca não funciona com 8 servos.
Avr fanboy

Offline GnGz

  • Mini Robot
  • *
  • Mensagens: 665
Re: Controlar Servos
« Responder #2 em: 06 de Janeiro de 2011, 16:02 »
Isso provavelmente depende dos servos, talvez arranjar servos mais rápidos, se bem que o código do Arduino deve ter alguma culpa disso..
E se não me engano esse biblioteca não funciona com 8 servos.

Usar PWM não dá sem ser a library servo? ou será a  mesma coisa?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.489
  • Helpdesk do sitio
Re: Controlar Servos
« Responder #3 em: 06 de Janeiro de 2011, 16:29 »
Os servos usam PPM, que é basicamente pwm a 50Hz e muda-se o duty-cycle, mas só tens 6 canais hardware de pwm, mais que isso faz-se por software gerando uma interrupção com um ciclo de 50Hz,
Avr fanboy

Offline GnGz

  • Mini Robot
  • *
  • Mensagens: 665
Re: Controlar Servos
« Responder #4 em: 06 de Janeiro de 2011, 16:34 »
E adulterar a library?

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.265
    • Tróniquices
Re: Controlar Servos
« Responder #5 em: 06 de Janeiro de 2011, 17:53 »
Não disseste que tipo de servo estás a usar.

Sem carga um servo standard básico roda 60º em cerca de 150ms a 170ms quando alimentado a 6V (a menos tensão, é um pouco mais lento), portanto faz 180º em 450ms a 510ms. Já vi um servo standard que faz 60º em 60ms e custa para cima de $70 directo da China; mas mesmo 60ms não te safas pois os 180º ele faz em 180ms, muito longe dos teus desejados 50ms.

Os servos mini são mais rápidos mas não tenho valores de cor, é uma questão de procurares.

A frequência do PWM influencia na "precisão" com que o servo mantém a posição e não na rapidez.

A biblioteca MegaServo suporta 8 servos (se bem me lembro até mais do que 8).
« Última modificação: 06 de Janeiro de 2011, 17:54 por Njay »

Offline joaocunha99

  • Mini Robot
  • *
  • Mensagens: 15
    • Hands-on Robots
Re: Controlar Servos
« Responder #6 em: 06 de Janeiro de 2011, 20:58 »
Os servos que estou a usar são da hitec, os básicos HS311.

No meu caso o que pretendo é mesmo a posição, a precisão não influencia muito significativamente.

O que Poderei fazer é ir ajustando o tempo até ele completar a posição definida.

Existe algum comando que ao controlar 6 servos, espere que todos atinjam a posição definida e depois de todos estarem nessa posição é que executa o próximo  movimento.


No programa Robobasic, o comando "wait" faz isso, no arduino e em C existe alguma coisa similar.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.489
  • Helpdesk do sitio
Re: Controlar Servos
« Responder #7 em: 06 de Janeiro de 2011, 21:16 »
Tens o delay() do arduino.
Avr fanboy