Primeiramente Boa tarde.

Galera, o negocio é o seguinte, estou no primeiro período de engenharia de controle e automação e como projeto de introdução a engenharia estou fazendo o projeto de um braço mecânico utilizando servo motores e Arduíno.
 Ainda não sei muito sobre programação, mas andei pesquisando bastante na net, como faz para controlar o servo motor com joystick, até fiz funcionar, mas não do jeito que eu preciso. Como estou no trampo agora, não tenho como mandar pra vcs a programação que eu estou utilizando. Mas meu problema é: quando eu jogo o joystick pra direita, por exemplo, o servo obedece o comando, mas quando eu volto o joystick para o centro o servo acompanha esse movimento, gostaria de saber como faz para, por exemplo, o servo iniciar na posição central e quando eu jogar o joystick para direita o servo acompanhar, porem quando eu voltar o joystick para o centro ele manter a posição e quando eu jogar o joystick para esquerda o servo ir mudando gradativamente para a esquerda tambem.

Espero que entendam o que eu quis dizer.

Obrigado desde ja.

Exibições: 1926

Responder esta

Respostas a este tópico

Creio que seu algoritmo esteja mais ou menos assim:

Lê o valorJoystick (digamos, entre 0-1023)

[0----------512----------1023]

Mapeia  valorJoystick para 0-180

"imprime" o valor no servo.

[0-----90----180]

Assim, quando o joystick está todo para um lado (limite inferior), o servo está em 0º. Quando para o lado oposto (limite posterior), o servo está em 180º.

E SE... ao invés de trabalhar com valores absolutos, você considerar valorJoystick como um incremento?

Exemplo:

valJoy = map(valorJoystick, 0, 1023, -10, 10); // mapeia o valor lido do joystick entre -10 e 10, sendo 0 o centro

valorServo = valorServo+valJoy; // 0>vajJoy => valorServo tende a 0º; valJoy>0, valorServo tende a 180º

                                              //valJoy=0 o joystick esta no centro, o incremento é 0 e a velocidade do servo é Zero.

Pode usar esse código, que já define os limites para o incremento e só manipular as variáveis "turnRate" de acordo com o principio acima:

http://automacaoerobotica.blogspot.com.br/2012/07/controlando-servo...

Nesse meu antigo blog tem um manipulador que se comporta da maneira que você deseja, mas com a taxa de incremento constante. Com um joystick analógico você pode fazer essa brincadeira com a aceleração.

Boa noite, Fabrício!

Dê uma olhada neste post (http://labdegaragem.com/forum/topics/como-utilizar-um-joystick-com-...) relacionado, onde postei um código que deve funcionar também.

ta complicado, sou muito leigo em programação, estou tentando aprender mas ta complicado.

estou com esse codigo que peguei na net.

//Programa : Controle servo motor com joystick

//Autor : FILIPEFLOP
 
#include <Servo.h>
 
//Cria objeto para controlar o servo base
Servo servo_base;
//Cria objeto para controlar o servo inclinacao
Servo servo_inclinacao;
 
int pino_x = A4; //Pino ligado ao X do joystick
int pino_y = A5; //Pino ligado ao Y do joystick
int val_x;   //Armazena o valor do eixo X
int val_y;   //Armazena o valor do eixo Y
 
void setup()
{
  //Define a porta a ser ligada ao servo base
  servo_base.attach(7);
  //Define a porta a ser ligada ao servo inclinacao
  servo_inclinacao.attach(8);
}
 
void loop()
{
  //Recebe o valor do joystick, eixo X
  val_x = analogRead(pino_x);
  //Converte o valor lido para um valor entre 1 e 180 graus
  val_x = map(val_x, 0, 1023, 1, 180);
  //Move o servo base para a posicao definida pelo joystick
  servo_base.write(val_x);  
  //Recebe o valor do joystick, eixo Y
  val_y = analogRead(pino_y);
  //Converte o valor lido para um valor entre 1 e 180 graus
  val_y = map(val_y, 0, 1023, 1, 180);
  //Move o servo inclinacao para a posicao definida pelo joystick
  servo_inclinacao.write(val_y);
  //Aguarda a movimentacao do servo e reinicia a leitura
  delay(15);
tem como fazer isso que tu falou nele?

O seu código funcionou?

funcionou, mas não do jeito que eu to querendo.

Então tenta com o código que eu indiquei ou com o que o Jonatas indicou. Tenta primeiro com um servo e depois adiciona o outro.

o seu eu testei, mas ele sempre joga o servo todo para um lado só, gostei no seu codigo que o servo vai bem devagar, sem tranco nenhum.

Para um lado só? Ele não volta, por exemplo, para a esquerda depois de ir para a direita?

{       

b-=0.7;       

}               

if (val <= 461)       

{       

b+=0.7;       

}

Nesta parte do código, alterando o valor de "b" altera a "velocidade" que o servo avançará para a direção desejada.

tipo, quando eu ligo o sistema, ele vai direto para um lado só, se eu mover o joystick para um lado ele não faz nada, para o outro ele vai ao outro lado do servo.

Ok. Digamos que o servo inicie em 180º. Colocando o joystick para a esquerda ele vai para 0º. Depois disso, se você coloca o joystick para a direita, o servo não vai para 180º novamente?

Isso. Ele inicia em 180 se puxar o Joy ele vai para 0. Quando eu solto o Joy que ele volta para o centro. Ele volta para 0

Posta todo o código aqui para eu dar uma olhada.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço