LusoRobótica - Robótica em Português
Robótica => Projectos de robótica => Tópico iniciado por: henriquecm7 em 07 de Junho de 2013, 00:07
-
Olá, desculpe encomodar.
Estou fazendo um robo que deve seguir uma linha preta. Estou usando 2 sensores QTRRC da Pololu, que ficam nas laterais da linha.
Mas estou enfrentando um problema na programação. Eu comecei a programar de bem pouco, sem PID, e sem Position. O código simplesmente são 2 statements.
void loop()
{
setSpeed(50, 50);
qtrrc.read(sensorValues);
if(sensorValues[0] > 220)
setSpeed(70, 30);
if(sensorValues[1] > 220)
setSpeed(30, 70);
Run();
}
O valor normal dos sensores quando estão no branco é 184. Então quando algum deles estiver fora do branco, ele vai curvar pro lado da linha, pra tentar se acertas, pelo menos essa é a ideia inicial. Mas não está dando certo, raramente o robô vira, e quando vira, ele vira uma vez só, não é algo contínuo.
Ajudem ai pessoal, fico agradecido.
-
Talvez algo deste género:
void loop()
{
qtrrc.read(sensorValues);
if(sensorValues[0] > 220) setSpeed(70, 30);
else if(sensorValues[1] > 220) setSpeed(30, 70);
else setSpeed(50, 50);
Run();
}
Os valores "220" estão corretos?
-
Sim, o valor é 220 mesmo.
O problema é que o robô não vira, não sei porque ele continua seguindo em linha reta, ele não fica virando, como deveria.
Não sei se o problema é no motor, estou usando ponte H, com os motores da tamiya.
http://www.pololu.com/catalog/product/114 (http://www.pololu.com/catalog/product/114)
O robô consegue andar com o valor 100.
-
Pedro, para desenvolver ajuda a analisar os valores do sinal para saberes o que se está a passar...
(debug)
Serial.print('Value 0');
Serial.print(sensorValues[0] );
Serial.print('Value 1');
Serial.print(sensorValues[1] );
Podes também colocar um print no corpo das condicionais (if´s) e imprimir para perceber o que está a acontecer...
Bom trabalho
-
Já fiz isso, e mesmo assim não da certo. Acho que o problema está nos motores.
-
Se o bot anda.... os motores funcionam...
Não era previsto dar certo... era previsto veres o valor que o sensor estava a registar...
Experimenta sem os if´s :
setSpeed(70, 30);
roda para um lado e depois experimenta
setSpeed(30, 70);
para ver se roda para o outro.....
O problema deve estar nos valores que estás a ler dos sensores.... devias experimentar com ele ligado USB e fazer debug...
-
Ok, vou fazendo os teste, e já volto com uma resposta.
-
Consegui, seguiu a linha. O problema era a bateria que estava no robo, que impedia uma roda de conseguir girar. Agora é pensar num jeito de carregar a bateria. Obrigado pessoal.