collapse

* Posts Recentes

Limitador de corrente simples por vasco
[07 de Dezembro de 2019, 17:07]


Baterias Lipo Potentes por jm_araujo
[07 de Dezembro de 2019, 16:03]


Empresas que bobinem alto-falastes ou motores? por fergas
[06 de Dezembro de 2019, 20:12]


Eixo "SEXTAVADO" por senso
[06 de Dezembro de 2019, 17:17]


Fake's, ICs e transistores por vasco
[03 de Dezembro de 2019, 18:19]


Vídeo: Ferramenta (e 'cartão' preso em pen 3G) por SerraCabo
[02 de Dezembro de 2019, 00:06]


Medidor de indutâncias por SerraCabo
[30 de Novembro de 2019, 23:08]


teste - fotos - funcionou mas agora não consigo apagar o post. por SerraCabo
[30 de Novembro de 2019, 22:42]


Circuito de proteção para ferro de soldar. por vasco
[26 de Novembro de 2019, 10:59]


Esquema electrico de uma tv-box android? por Hugu
[21 de Novembro de 2019, 21:54]

Autor Tópico: Robot de Busca e Salvamento![CONLUIDO]  (Lida 47958 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.619
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #30 em: 10 de Março de 2010, 20:43 »
Continuas a chamar a função qtrrc_read sem lhe passar os parametros que defines na criação da função, onde estás a passar o *vsensores que é um ponteiro e o readMode?
Começa por dar outro nome á tua função, tipo ler porque como a libraria tem funções que começam com o nome qtrrc o compilador pode-se estar a trocar todo.

PololuQTRSensorsRC qtrrc((unsigned char[]) {2, 3, 4, 5, 6,7,8,9}, 8);

esta linha tem de estar dentro do setup, estás a criar um array de chars sem lhe dar nome e de resto não sei se estás a chamar bem a função.
outro erro é que não deves estar a criar esse bem esse método da polulu, mas nisso não tenho a certeza porque nunca trabalhei com essa libraria
Avr fanboy

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #31 em: 10 de Março de 2010, 20:54 »

http://www.pololu.com/docs/0J19/3

vê no exemplo desse código que a pololu disponibiliza, o "# PololuQTRSensorsRC qtr((char[]) {14, 15, 16}, 3);  " não está dentro do Setup(){, a declaração dos pinos é feita fora deste...

quanto à libraria ter determinadas funções e o compilador baralhá-las :-\ acho que isso não deve acontecer, pois para alguma coisa é necessário instalar a libraria que estou a usar..

quanto ao eu não dever estar a usar correctamente a libraria, acho que é isso que está acontecer, para não obter os valores desejados, dai pedir ajuda..

http://www.pololu.com/docs/0J18/14  (funções fornecidas pela libraria)


cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Robot de Busca e Salvamento!
« Responder #32 em: 10 de Março de 2010, 21:00 »
Estás a complicar aquilo que é fácil... Não te metas no cálculo do erro da linha, quando esta informação já está disponível pela biblioteca... Não faz sentido.

Citar
#include <PololuQTRSensors.h>
PololuQTRSensorsRC qtr((char[]) {14, 15, 16}, 3);

void setup(){
  Serial.begin(9600);
  for (int i = 0; i < 250; i++){
    qtr.calibrate();
    delay(20);
  }
}

void loop()
{
  unsigned int sensors[3];
  int position = qtr.readLine(sensors);
  int error = position - 1000;
  Serial.println (error);
  delay(500);
}


Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #33 em: 10 de Março de 2010, 21:20 »
eu ja vi isso muitas vezes,
uma coisa que ainda não consegui perceber é pq eles dizem que error = -1000 ( no exemplo que eles dão apenas utilizam 3 sensores, pelo que percebi deverão estar tds em cima da linha) caso um sensor deixe de ver a linha o error é -1000 ou 1000, segundo o que percebi, só que isso é com 3 sensores, eu quero usar 8, e o error vai ter de variar de 0 a -1000 e de 0 a 1000, dai a minha confusão.

Para já estou a tentar lêr o valor dos sensores e nem isso estou a conseguir fazer :-\

Ps: eu fiz uma programação anterior que tinha o erro da linha calculado automaticamente, foi o que eu percebi aque aquilo fazia, a programação foi postada ontem e está um bocado mais atrás deste tópico.
cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Robot de Busca e Salvamento!
« Responder #34 em: 10 de Março de 2010, 21:38 »
eu ja vi isso muitas vezes,
uma coisa que ainda não consegui perceber é pq eles dizem que error = -1000 ( no exemplo que eles dão apenas utilizam 3 sensores, pelo que percebi deverão estar tds em cima da linha) caso um sensor deixe de ver a linha o error é -1000 ou 1000, segundo o que percebi, só que isso é com 3 sensores, eu quero usar 8, e o error vai ter de variar de 0 a -1000 e de 0 a 1000, dai a minha confusão.

Para já estou a tentar lêr o valor dos sensores e nem isso estou a conseguir fazer :-\

Ps: eu fiz uma programação anterior que tinha o erro da linha calculado automaticamente, foi o que eu percebi aque aquilo fazia, a programação foi postada ontem e está um bocado mais atrás deste tópico.

Eu não pus o código só para tu olhares para ele. Experimenta lá isso...
Para isso é que serve a biblioteca. É que qualquer que seja o nº de sensores, o erro vai sempre estar entre -1000 e 1000. É só uma questão de ajustares os valores.

Se queres MESMO MUITO ter os valores dos sensores, 1 a 1, tens acesso a isso no array sensors[] do código que te passei.

Sensor 1 -> sensors[0]
Sensor 2 -> sensors[1]
.
.
.


E por aí fora...

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #35 em: 29 de Março de 2010, 19:34 »
Boas..

já consegui lêr o valor dos sensores, usando o seguinte código :

Código: [Seleccione]
#include <PololuQTRSensors.h>

    PololuQTRSensorsRC qtr((unsigned char[]) {9,8,7,6,5,4,3,2}, 8);

    void setup()
    {
Serial.begin(9600);
    }

    void loop()
    {
unsigned int readings[8];
qtr.read(readings);
Serial.print ("sensor1  ");
Serial.println(readings[0]);
delay(1000);
Serial.print ("sensor2  ");
Serial.println(readings[1]);
delay(1000);
Serial.print ("sensor3  ");
Serial.println(readings[2]);
delay(1000);
Serial.print ("sensor4  ");
Serial.println(readings[3]);
delay(1000);
Serial.print ("sensor5  ");
Serial.println(readings[4]);
delay(1000);
Serial.print ("sensor6  ");
Serial.println(readings[5]);
delay(1000);
Serial.print ("sensor7  ");
Serial.println(readings[6]);
delay(1000);
Serial.print ("sensor8  ");
Serial.println(readings[7]);
delay(1000);
    }

o valor varia de 0 a 4000.

...

fiz o seguinte código para calcular a velocidade dos motores (consoante o erro)..

Código: [Seleccione]
#include <PololuQTRSensors.h>

PololuQTRSensorsRC qtr((unsigned char[]) {9,8,7,6,5,4,3,2}, 8);
int motor_right = 10;
int motor_left = 11;

//variaveis auxiliares.

int ltarguetval = 0;// valor a desejar no motor left.
int rtarguetval = 0;// valor a desejar no motor right.
int lnowval = 0;    // valor actual no motor left.
int rnowval = 0;    // valor actual no motor right.

void setup(){
  Serial.begin(9600);

  pinMode (motor_right, OUTPUT);
  pinMode (motor_left, OUTPUT);

  int i;
  for (i = 0; i < 250; i++)
  {
    qtr.calibrate();
    delay(20);
  }
}


void loop(){
  unsigned int sensors [8];
  int position = qtr.readLine(sensors);
  int error = position -3500;
  int lastError = 0;
  int maxspeed = 150;
  double KP = 0.1;
  int KD = 5;
  int motorspeed = KP * error + KD * (error - lastError);
  lastError = error;

  Serial.println (position);
  delay(500);
 
  if(sensors[0] > 750 && sensors[1] > 750 && sensors[2] > 750 && sensors[3] > 750 && sensors[4] > 750 && sensors[5] > 750 && sensors[6] > 750 && sensors[7] > 750)
  {
    return;
  }
 
  if(error >-500 && error < 500){
   rtarguetval = (int)maxspeed;
   ltarguetval = (int) maxspeed;
   error = lastError;
 }
 else if (error > 500 ){
    rtarguetval = (int)motorspeed;
    ltarguetval = maxspeed;
    error = lastError;
  }
  else if ( error < -500){
    ltarguetval = (int)motorspeed;
    rtarguetval = maxspeed;
    error = lastError;
  }
  if(rtarguetval > rnowval){
    rnowval +=1;
  }else if (rtarguetval < rnowval){
    rnowval -=1;
  }
  if (ltarguetval > lnowval){
    lnowval +=1;
  }else if(ltarguetval < lnowval){
    lnowval -=1;
  }
}

e segundo este exemplo:  http://www.pololu.com/docs/0J19/3

penso que deveria funcionar...
eu deveria lêr de "position" algo do tipo: -3500,-2500,-1500,-500,500,1500,2500,3500 " consoante o sensor que está sobre o preto...
mas o que leio é simplesmente o valor de 0, 1000...7000 consoante o sensor, tendo em conta o exemplo de código fornecido pela Pololu acho que não epseraria esses valores...

acontece me outra coisa, muito muito estranha... eu posso ter o Serial monitor aberto e a estarem me gerados numeros de 0 a 7000, mas se o fechar e voltar abrir já são gerados numeros diferentes, ou só zeros, ou outros numeros quaisquer que nem sei de onde vêem...

alguem me consegue ajudar?
cumprimentos,
Fred

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.619
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #36 em: 29 de Março de 2010, 20:39 »
Penso que isso é meio problema do serial monitor, porque isso acontece em quase todos os programas, deve perder a sincronização com o arduino se o fechares e voltares a abrir.
Avr fanboy

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #37 em: 29 de Março de 2010, 20:51 »
mas é muito estrnaho isso, pq tenho de abrir uma data de vezes para voltar a dar os valores "correctos" (correctos para mim, pq são os que desejo) e assim nunca sei se estou a fazer bem ou mal..

e quanto aquele problema, de os valores gerados serem 0, 1000, ... 7000 em vez de -3500...3500, sabes o pq disso?
segundo a documentação da pololu penso que deveria fazer isso, mas talvez eu esteja a fazer alguma coisa mal..
cumprimentos,
Fred

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.619
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #38 em: 29 de Março de 2010, 23:01 »
Já viste se tens tudo bem ligado?
Já andas a martelar nessa dos valores errados a não sei quanto tempo...
Avr fanboy

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #39 em: 29 de Março de 2010, 23:18 »
sim esta tudo bem ligado...
eu consigo ler os valores de sensor a sensor..por isso esta bem ligado...
pois isto esta complicado,..
eu tambem estive sem tempo , e so agora voltei a pegar nisto, mas se pelo menos ate ao fim da semana não conseguir resolver os problemas que tenho com estes sensores irei ter de optar por fazer o seguidor de linhas com outros sensores (uns "normais"), mas para já vou continuar a tentar..

deixei uma igm no forum da pololu com o meu codigo e problema..
vou esperar pela resposta deles..
cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Robot de Busca e Salvamento!
« Responder #40 em: 29 de Março de 2010, 23:27 »
Isso tem uma função calibrate(), se não me engano. Experimenta a usá-la...

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #41 em: 29 de Março de 2010, 23:32 »
eu estou a usa-la aqui:

Código: [Seleccione]
int i;
  for (i = 0; i < 250; i++)
  {
    qtr.calibrate();
    delay(20);
  }
}

 eu acho que o codigo anterior que fiz devia funcionar.. pois o error deveria variar de -3500 a 3500, sempre de 1000 em 1000... como mostrei atras..
é estranho, mas a função readline tambem nao funciona em condições, as vezes dá outras não...não consigo perceber..
« Última modificação: 29 de Março de 2010, 23:46 por fred gomes »
cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Robot de Busca e Salvamento!
« Responder #42 em: 29 de Março de 2010, 23:52 »
Usa-la dentro do setup(), que corre no arranque.
Experimenta, depois de voltares a abrir a janela do Serial, carregar no "reset".

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.619
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #43 em: 30 de Março de 2010, 00:28 »
Se os consegues ler, olha usa-os como se fossem sensores normais e mete a biblioteca da polulu no lixo lol
Avr fanboy

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Robot de Busca e Salvamento!
« Responder #44 em: 30 de Março de 2010, 00:53 »
LOL, o rapaz tem insistido em fazer as coisas à mão, eu é que lhe disse para usar a bilbioteca da Pololu... Não digas já isso... :p