[Ajuda] Programação de servo com joystick.

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.

Seu problema parece bem simples amigo, provavelmente na programação está explicito que o servo deve acompanhar o valor lido do joystick. Bastaria mudar para algo como “(if > centro) vá para direita, (if <centro) vá para esquerda”. Fica difícil explicar mais detalhado sem o software, mas a lógica é esta

Sem querer pedir muito. mas poderia dar uma analisada nesse codigo? peguei ele pronto na net e estou tentando entender a logica de programação a partir dele. eu poderia modifica-lo para essa função?

//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);
}

briciobs:

[quote author=Osias Neto link=topic=243297.msg1749316#msg1749316 date=1401728179]
Seu problema parece bem simples amigo, provavelmente na programação está explicito que o servo deve acompanhar o valor lido do joystick. Bastaria mudar para algo como “(if > centro) vá para direita, (if <centro) vá para esquerda”. Fica difícil explicar mais detalhado sem o software, mas a lógica é esta

Sem querer pedir muito. mas poderia dar uma analisada nesse codigo? peguei ele pronto na net e estou tentando entender a logica de programação a partir dele. eu poderia modifica-lo para essa função?

//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);
}

[/quote]

  val_x = analogRead(pino_x);

  val_x = map(val_x, 0, 1023, 1, 180);

  if(val_x  >  100)
  {
    servo_base.write(val_x);
  }
  
  else if (val_x < 80)
  {
    servo_base.write(val_x);
  }
  // faz o mesmo para val_y
}

Este é só um esboço amigo, mas o caminho é este, o resto é matemática. Pode ajustar os valores do if, pode adicionar delay, pode ser que precise criar uma outra variavel que se soma ou subtrai ao valor do servo…

Só uma dica, se esforce um pouco mais para entender como funciona do que fazer funcionar em si, vai valer a pena futuramente :wink:

Obrigado! vou tentar aqui.

Mas realmente quero aprender, o problema é que ainda não vi nada de programação na faculdade. E ainda to tentando aprender os comandos disponiveis, como: If, Write e tudo mais. mas obrigado pelo ajuda. :)