Pages: 1 [2]   Go Down
Author Topic: QTR-8RC reflectance sensor  (Read 2539 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

esqueçe o meu psit anterior,
eu ja percebi essa minha duvida, eu a definir "position -3500) estou a dizer que o se tiver o ultimo sensor da esquerda tapado tenho -3500, e de seguida esse valor vai variar de 1000 em 1000, consecutivamente, e a partir desse valor defino o "meu estado dos sensores" para que o robot ande à maxima velocidade...

mas fiz este codigo...

Code:
#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 = 130;
  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;
  }
}
 




parece me estar correcto (vê e comenta sff), mas não funciona...

eu ao fazer o print de position, os valores que eu vou obter, nao vao ser de -3500 a 3500, mas sim de 0 a 7000 ( os tais valores que cada sensor gera se estiver tapado, pq faz isso??

como altero o código para que o qtr.readline varie de -3500 a 3500?

e ainda há outra coisa estranhissima que me acontece :-X nunca me aconteceu isto antes... eu tenho o serial monitor aberto e esta me a gerar uns valores (correctos, de 0 a 7000) se fechar e abrir o monitor de novo, já pode não me ser gerado esses valores, ou gera so zeros, ou outros valores, mas diferentes... sabes algum motivo que possa estar a provocar isso?...
« Last Edit: March 29, 2010, 01:07:41 pm by Fred_Gomes » Logged

Sao Paulo - Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 268
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá Fred,
Você não declara esses valores de erros, a partir do valor da position você faz um reajusta
error = position - 3500, supondo que seu position funcione corretamente, 0, 1000, 2000, .... 7000, o error vai reajustar isso para uma valor entre -3500 e 3500, pois quando position = 0 , error = 0 - 3500  =0 ou quando position = 7000 entao error = 7000 - 3500 = 3500, certo?

até
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sim isso eu entendi..
mas esses valores não estão reajustando..
eu só obtenho valores de 0 a 7000 consoante o sensor que estiver tapado.. e não valores de -3500 a 3500, o que estou fazendo de errado no codigo ?
Logged

Sao Paulo - Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 268
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

vc precisa imprimir o error e não o position
Code:
Serial.println (error);

Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se eu fizer isso o unico valor que me gera é -3500 :-/
Logged

Sao Paulo - Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 268
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

vc já me adicionou no gtalk? radamajna at gmai dot com
me passa seu contato
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sim add..
fred_pgomes@hotmail.com
Logged

Pages: 1 [2]   Go Up
Jump to: