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: 1404

Responder esta

Respostas a este tópico

Caro amigo José Gustavo  voce falou aqui e no meu pedido de ajuda com os motores sobre segurança.

entao vou dizer algo.

1-todas cadeira de marca freedom produzida aqui no brasil, e verificada pelo imetro nao tem botao de segurança nem segurança nenhuma.

2-se a cadeira pifar numa descida o cadeirante ta perdido

3-se a cadeira arrebentar ou soltar umas das correias o cadeirante ta perdido

falo poe usar uma cadeira dessa.  produto de pessima qualidade e preço alto quase 10 mil.

quanta ao amigo que vai fazer a cadeira acho que ele deve fazer sim.

Legal Moises, pelo seus comentários sobre segurança. 

Aqui no Brasil ninguém pensa em segurança. 

Talvez por ter trabalhado na IBM, sempre pensei e penso sobre segurança. 

Também recomendo fortemente que o colega que esta montando essa cadeira instale dispositivos de segurança. 

Abraços. 

Gustavo 

Algumas cadeiras que eu vi, os freios acionam quando a energia é cortada.

depende do modelo 

se for FREEDOM nao.

tenho uma e conheco todas da freedom.

a freedom tem uma alavanca que pode ser acionado por uma pessoa ,ou um cadeirante que tenha os braços perfeito. e mesmo assim se a cadeira arrebentar a correia o cadeirante ta lascado

Manterei informado.
Parte de segurança.
Não pensei ainda como vou fazer o sistema de segurança, mas assim que bolar também os informo.

Qual motores esta usando.

eu tenho 2 motores sobrando.posso te vender no jeito

eu projetei minha cadeira e ficou funcional

vou melhorar ela em breve

Qual a redução?
Vi uns desses no mercado livre.

veja ficha toda na segunda foto

esse motores foi feito para cadeira de rodas e carros eletricos

tem um rapaz que tem no  mercado livre.

eu comprei dele.

tenho 2 e vendo mais barato para te ajudar.

os dele e 460 cada. total 920 real

os meus 2 te faço 600 o par total dos 2 motores 600 real.

eu uso 2 em uma cadeira que projetei.

qualquer coisa to aqui

abçs

Bem interessante Moises , mas preciso terminar o programa antes de dar esse passo.

Pessoal a soma dos pwmX + pwmY , para as  curvas , n estão dando certo , pois ainda não está fazendo a curva corretamente.

Será que uma inclusão da biblioteca do ps2 adiantaria ou existe algum artificio que posso aplicar nesta programação?

// Arduino pin numbers

const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output
 
void setup() {
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  Serial.begin(115200);
}
 
void loop() {
  Serial.print("Switch:  ");
  Serial.print(digitalRead(SW_pin));
  Serial.print("\n");
  Serial.print("X-axis: ");
  Serial.print(analogRead(X_pin));
  Serial.print("\n");
  Serial.print("Y-axis: ");
  Serial.println(analogRead(Y_pin));
  Serial.print("\n\n");
  delay(500);
}

Usar a biblioteca pode tornar mais fácil e seguro o seu sketch e você teria acesso até ao modo vibração do joystick. No entanto, teria que alterar toda a parte de controle do motor.
Outra forma seria modificar os seus IFs para melhorar as curvas. Como funciona o controle. quais são as coordenadas x e y que devem ser testadas?

Existe um shield para ps2 também. Veja abaixo os links::

Biblioteca:
http://www.billporter.info/2010/06/05/playstation-2-controller-ardu...
http://www.instructables.com/id/Control-anything-with-ps2-controlle...

Shield:
http://www.robotshop.com/en/ps2-shield-arduino.html

José Boa tarde!
A parte das curvas funcionam da seguinte forma- a medida que vou perdendo o cartesiano do y eu vou ganhando X e virce versa por isso a soma pwmx+ pwmy Y.
Um ex seria esse

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

Mas qd vou fazer uma curva ele n funciona bem.
Como eu poderia modificar esses IFS? Pois n achei nenhum jeito de fazer isso.

Johnny, para fazer a movimentação, você está usando 2 motores, correto?
Então a lógica que você está usando deve ser esta:
Virar para a esquerda --> Desliga motor esquerdo e liga motor direito
Virar para a direita  --> Desliga motor direito e liga motor esquerdo

Em outros projetos que trabalhei com joystick, para fazer isso, nós testávamos os movimentos (x e Y) separadamente.
Para os movimentos laterais (esquerda e direita) no seu caso deve ser o eixo Y que vai de 0 a 1023, correto?

if (ValorPotY >= 0 && ValorPotY <=250)  
 {  
 Virar para a esquerda --> Desliga motor esquerdo e liga motor direito
 }  
if (ValorPotY >= 750 && ValorPotY <= 1023)  
 {  
 Virar para a direita  --> Desliga motor direito e liga motor esquerdo
 }  
 
 A aceleração é através do botão ou do movimento do joystick (para cima e para baixo)?
 Nesse caso, vai depender do controlador do motor (a ponte H).
 Teste separadamente também.
 
 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço