Galera bom dia!

Eu me chamo Johnny e estou com um projeto de uma cadeira de rodas.

Minha intenção é ajudar o filho de um amigo que tem paralisia infantil , mas manuseia uma cadeira muito bem!

 A cadeira trabalha com os seguintes componentes:

1 Joystick (PS2) , 1 Arduino uno , 2 Ponte H e 2 motores DC.

O projeto já está quase pronto ( inclusive já testei ) ,  mas noto um grande ruido nos motores quando cambo para os lados e ela não responte muito bem.

Estou usando essa programação:


const int PinoPotenciometroX = 0;
const int PinoPotenciometroY = 1;
const int motorDV = 5;
const int motorDR = 6;
const int motorEV = 10;
const int motorER = 11;
int ValorPotX = 0;
int pwmX = 0;
int ValorPotY = 0;
int pwmY = 0;

void setup() {
pinMode(motorDV, OUTPUT);
pinMode(motorDR, OUTPUT);
pinMode(motorEV, OUTPUT);
pinMode(motorER, OUTPUT);
}
void loop() {
ValorPotX = analogRead(PinoPotenciometroX);
pwmX = map(ValorPotX, 0, 1023, -255, 255);

ValorPotY = analogRead(PinoPotenciometroY);
pwmY = map(ValorPotY, 0, 1023, -255, 255);

if (490<ValorPotY<534 && 490<ValorPotX<534 ){
analogWrite(motorEV, LOW);
analogWrite(motorDV, LOW);
analogWrite(motorER, LOW);
analogWrite(motorDR, LOW);
}
if (ValorPotY>=534 && 490<ValorPotX<534 ){
analogWrite(motorEV, pwmY);
analogWrite(motorDV, pwmY);
analogWrite(motorER, LOW);
analogWrite(motorDR, LOW);
}
if (ValorPotY<=490 && 490<ValorPotX<534 ){
analogWrite(motorEV, LOW);
analogWrite(motorDV, LOW);
analogWrite(motorER, -pwmY);
analogWrite(motorDR, -pwmY);
}
if (490<ValorPotY<534 && ValorPotX>=524 ){
analogWrite(motorEV, pwmX);
analogWrite(motorDV, LOW);
analogWrite(motorER, LOW);
analogWrite(motorDR, pwmX);
}
if (490<ValorPotY<534 && ValorPotX<=490 ){
analogWrite(motorEV, LOW);
analogWrite(motorDV, -pwmX);
analogWrite(motorER, -pwmX);
analogWrite(motorDR, LOW);
}
if (ValorPotY>=534 && ValorPotX>=524 ){
analogWrite(motorEV, pwmY+pwmX);
analogWrite(motorDV, pwmY);
analogWrite(motorER, LOW);
analogWrite(motorDR, LOW);
}
if (ValorPotY<=490 && ValorPotX>=534 ){
analogWrite(motorEV, LOW);
analogWrite(motorDV, LOW);
analogWrite(motorER, -pwmY+pwmX);
analogWrite(motorDR, -pwmY);
}
if (ValorPotY<=490 && ValorPotX<=490 ){
analogWrite(motorEV, LOW);

Vcs podem me ajudar?

Exibições: 1399

Responder esta

Respostas a este tópico

Na verdade José o que tentei fazer foi o seguinte:
Vou virar para direita
Motor D= pwmY ( pois a medida que fosse colocar para o lado ele não perderia velocidade instantaneamente, pois poderia gerar movimento muito brusco)
Mortor E = pwmX+pwmY ( pois esse motor teria que ter mais velocidade que o direito, então no início da curva eu teria pwmY e nada de X que estaria na zona morta e a medida que fosse acentuando a curva iria perdendo y e ganhando X.
O ideal seria que quando você estiver andando para a frente e precisar virar para a direita, é você diminuir a velocidade do motor direito e não aumentar a do motor esquerdo, pois, se você estiver na velocidade máxima, não terá como aumentar.
Olá Johnny, você deve ter em mente que em uma cadeira de rodas, existem muito mais funções do que somente andar e virar.
Ela deve ter um controle de velocidade (potenciômetro por exemplo) independente do joystick para controlar a velocidade máxima que a cadeira pode atingir. Isto é extremamente útil em ambientes como uma residência em que os espaços são apertados.
Deve-se pensar também em uma aceleração suave.
O que acontece se o cadeirante inclinar bruscamente o joystick para frente ou para trás?
O joystick do ps2 é muito pequeno e difícil de controlar uma cadeira principalmente pelo seu pequeno curso.
Luiz Boa noite!
NaO vejo problema em criar funções para suavidade de um movimento , porém estou com uma dificuldade imensa de fazer somas de pwm para as curvas , mas como curioso em arduino ,não sei se isso é possível .

Ola Johnny estou desenvolvendo um projeto semelhante ao seu, mas estou com muita dificuldade na parte de programação do joystick e da ponte H bts7960, você conseguiu desenvolver a programação?? e controlar a velocidade dos motores?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço