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.
Tags:
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);
}
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?
Posta todo o código aqui para eu dar uma olhada.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por