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?
Tags:
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
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
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
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
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por