collapse

* Posts Recentes

Que métodos utilizam para limpar as vossas placas após soldadura? por KammutierSpule
[21 de Agosto de 2019, 22:42]


Contas para saber a duração das baterias. por vasco
[21 de Agosto de 2019, 11:10]


Fabricantes de PCB e Assemblage (produção em massa) por Kristey
[21 de Agosto de 2019, 08:51]


Livros opensource de electrónica, transístores e OpAmps. por Kristey
[21 de Agosto de 2019, 08:37]


Máquina de soldar a fio sem gás LIDL por Hugu
[16 de Agosto de 2019, 18:28]


Hugu por jm_araujo
[14 de Agosto de 2019, 00:50]


Microfone Canon por almamater
[10 de Agosto de 2019, 07:56]


Chave de Impacto Manual por jm_araujo
[08 de Agosto de 2019, 23:45]


Compra Colectiva Mouser N3-2018 (limite ~28 Julho 2019) [update] por Hugu
[08 de Agosto de 2019, 15:32]


Ajuda num componente certo por dennis_boy
[02 de Agosto de 2019, 21:46]

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

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

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.612
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #15 em: 07 de Março de 2010, 22:12 »
Se alimentas-te o circuito com 5v depois de teres o 3.3v bypass soldado podes muito bem ter queimado os led's todos...
O loop de 250 vezes serve para calibrar o circuito 250 vezes, ou melhor chama a função calibrate 250 vezes, deve ser para que fique mesmo bem feito
Avr fanboy

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #16 em: 07 de Março de 2010, 22:18 »
mas mesmo assim não percebo..
pq o 250 vai ser multiplicado por 20?

assim de momento ainda tenho mais uma questão,   o compilador não me aceita a biblioteca  " #include <PololuQTRSensors.h>  "  , alguém sabe porquê?
cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Robot de Busca e Salvamento!
« Responder #17 em: 07 de Março de 2010, 22:24 »
mas mesmo assim não percebo..
pq o 250 vai ser multiplicado por 20?
A multiplicação foi apenas para perceberes o porquê de demorar 5 segundos (está no comentário da linha do for() ).
Um ciclo for, é uma repetição. Nesse caso, 250 repetições. Se cada uma demorar 20 ms, perfaz os 5 segundos.

assim de momento ainda tenho mais uma questão,   o compilador não me aceita a biblioteca  " #include <PololuQTRSensors.h>  "  , alguém sabe porquê?
Instalaste a biblioteca bem? Na pasta certa?
http://www.pololu.com/docs/0J19/2

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.612
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #18 em: 07 de Março de 2010, 22:25 »
porque aquilo é um loop, ou seja um ciclo, logo tudo o que está dentro dele vai ser executado as vezes que o loop for feito, logo se dentro do loop tem um delay de 20ms, e como vai ser feito 250 vezes é só multiplicar.
Avr fanboy

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #19 em: 07 de Março de 2010, 23:15 »
sim já percebi,
isso da biblioteca :-\ nem me lembrei, e como nunca tinha necessitado..
mas já a instalei..
amanha vou tentar começar a fazer um código utilizando a biblioteca da pololu.
dúvidas que vá tendo (que certamente as terei) colocarei aqui para que me possam ajudar :)
Obrigado pela vossa ajuda ;)
cumprimentos,
Fred

Offline VascoP

  • Mini Robot
  • *
  • Mensagens: 66
Re: Robot de Busca e Salvamento!
« Responder #20 em: 08 de Março de 2010, 09:25 »
Onde está declarado o bot_before?

Código: [Seleccione]

  Serial.println (bot_before); // print na consola
  delay(200); // delay
 

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #21 em: 08 de Março de 2010, 18:27 »
tinha um erro no código por distracção, no entanto já o corrigi ;)
obrigado por avisares..
cumprimentos,
Fred

Offline VascoP

  • Mini Robot
  • *
  • Mensagens: 66
Re: Robot de Busca e Salvamento!
« Responder #22 em: 08 de Março de 2010, 20:34 »
Sempre ás ordens, notei que não tinhas declarado então resolvi ajudar! Boas programações!

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #23 em: 09 de Março de 2010, 19:34 »
Bem, tenho aqui um código, ainda está inacabado (falta-lhe alguns promenores), mas dêm -me a vossa opinião sobre o controle PID (mais propiamente, é o que tenho menos certezas se esta bem), não calculei o erro manualmente, porque segundo o que li acho que este erro é  calculado automaticamente (penso que pela função "calibrate"), o código está bastante comentado..têm alguns erros acusados pelo comilador , mas a ideia pretendida acho que está bem explicita..

dêm opiniões sobre funções que acham que eu deveria usar e não usei, e outras que possam estar mal usadas ..

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

deixo aqui os links em que me centrei para a concretização deste código..

Citar

#include <PololuQTRSensors.h>

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

void setup(){
  
  int i;
  for i = 0; i < 250; i++) // faz calibração durante 5s.
  {
    qtr.calibrate();
    delay(20);
  }
}

void loop(){
  unsigned int sensors [8];
  int posicao = qtr.readLine(sensors);// a  variará de 0 a 2000,
  if (sensors [6] > 750 && sensors [5] > 750){// aqui escolhi o sensor 5 e 6 para fazer
                                              // a calibração, pois apenas quando estes
                                              // estiverem sobre a linha preta, o erro será 0.
                                              
    return;
  }
  Serial.println (sensors [9,8,7,6,5,4,3,2]);
  delay(500);
  
  //Para calcular o erro da "posição da linha" eu irei fazer com que o erro seja 0
  // quando os sensores 6 e 5 estiverem na linha preta simultâneamente, caso contrário
  // irá existir uma margem de erro.
  //Esse erro irá variar de -1000 a 1000.
  
  int error = posiçao -1000;
  int motorspeed = KP * error + KD * (error-lastError);
  unsigned int sensor_valores[8];//variável onde será guardado os valores dos sensores.
  int vel_max = 130;
  int rmotorspeed = 0; //variavel onde é guardada a velocidade do motor R
  int lmotorspeed = 0;
  
  if (error <= -1000){
    rmotorspeed = (int)motorspeed;
    lmotorspeed = (int)vel_max;
    lastError = error;
  }
  else if{ (error >= 1000){
    rmotorspeed = (int)motorspeed;
    lmotorspeed = (int) vel_max;
    lastError = erro;
  }
  }
}


desde já agradeço a vossa ajuda, e peço desculpa por qualquer "besteira" que possa estar a cometer no código..

 ;)

« Última modificação: 09 de Março de 2010, 21:15 por fred gomes »
cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #24 em: 10 de Março de 2010, 18:19 »
Olá mais uma vez..
após não ter obtido qualquer resposta sobre o meu post anterior tentei proceder à leitura dos sensores, e caso continue sem ter certezas de que a biblioteca da Pololu cálcula o erro automáticamente ( e como o faz) irei fazê-lo manualmente, com os valores obtidos..

tentei fazer a leitura dos sensores, utilizei o seguinte código:

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

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


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

void loop()
{
unsigned int vsensores[8];
qtrrc.read(vsensores);
delay(50);

for (int i=0; i<8; i++){
Serial.println(vsensores[i]);
delay(500);

}
}

e os valores que obtenho são +/- assim: 2 2 2 2 2 4000 4000 2 2 2 2 ....
é muito estranho isto..

de seguida tentei lêr os valores utilizando o seguinte código:

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

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


void setup()
{
Serial.begin(9600);
int i;
for (i = 0; i < 250; i++)
{
qtrrc.calibrate();
delay(20);
}
}
void loop(){
  int vsensores = 0;
  Serial.println(vsensores);
  delay(500);
}
void qtrrc_read(unsigned int *vsensores, unsigned char readMode){
 
 

 
  qtrrc.read(vsensores);
  delay(50);
  for (int i=0; i<8; i++){ 
  }
}


e nêm valores obtenho, neste último código procurei utilizar uma função fornecida pela biblioteca da pololu, podem vê-la no link em baixo..

http://www.pololu.com/docs/0J18/14

alguém me consegue ajudar??


cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Robot de Busca e Salvamento!
« Responder #25 em: 10 de Março de 2010, 18:54 »
Então fred?

Vê o teu loop():
Código: [Seleccione]
void loop(){
  int vsensores = 0;
  Serial.println(vsensores);
  delay(500);
}

basicamente é repetir o seguinte: Meter a variável vsensores a 0, imprimir a variável vsensores e esperar 500 ms
É natural k só te apareçam zeros...

A função que lê o valor dos sensores não a utilizas, mas tens de utilizar...

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #26 em: 10 de Março de 2010, 19:57 »
Código: [Seleccione]
#include <PololuQTRSensors.h>

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


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

void loop(){
}
void qtrrc_read(unsigned int *vsensores, unsigned char readMode){
 
  int val = 0;
  for (int i=0; i<8; i++){
    qtrrc.read(vsensores);
  }
  val = qtrrc.read(vsensores);
  Serial.println (val);
  delay(500);
}

pois, mas eu perciso duma variavel para guardar o valor lido e imprimi-lo,
alterei o código para isto, supostamente deveria dar, mas acusa me erro ao compilar não sei pq :-\
consegues ajudar -me ?
« Última modificação: 10 de Março de 2010, 20:14 por fred gomes »
cumprimentos,
Fred

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.612
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #27 em: 10 de Março de 2010, 20:15 »
Código: [Seleccione]
#include <PololuQTRSensors.h>

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


void setup()
{
Serial.begin(9600);
int i;
for (i = 0; i < 250; i++)
{
qtrrc.calibrate();
delay(20);
}
}
void loop(){
}
void qtrrc_read(unsigned int *vsensores, unsigned char readMode){ //aqui estas a criar uma função que requer 2 parametros para ser chamada mas nunca a chamas no loop, logo isso é um erro
 
  int val_sensores = 0;
  for (int i=0; i<8; i++){
    qtrrc.read(vsensores); //aqui lês os sensores mas não armezenas os valores
  }
  val_sensores = qtrrc.read (vsensores); //aqui só les um sensor e passas isso para o pc via serial
  Serial.println (val_sensores);
  delay(500);
 
}

pois, mas eu perciso duma variavel para guardar o valor lido e imprimi-lo,
alterei o código para isto, supostamente deveria dar, mas acusa me erro ao compilar não sei pq :-\
consegues ajudar -me ?
lê os comentarios
Avr fanboy

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.612
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #28 em: 10 de Março de 2010, 20:24 »
Código: [Seleccione]
#include <PololuQTRSensors.h>

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


void setup() {

int i=0;
int valores[8]={0,0,0,0,0,0,0,0};

Serial.begin(9600);

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

void loop(){
 
  for (int i=0; i<8; i++) {
    valores[i]=qtrrc.read(i);
  }

  for(int i=0; i<8; i++) {
  Serial.println (valores[i]);
  delay(500);
  }
}
Penso que assim deverá funcionar bem, experimenta
Avr fanboy

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #29 em: 10 de Março de 2010, 20:32 »
acusa alguns erros estou a tentar corrigi-los,
no entanto penso que terei de definir obrigatoriamente a função que tenho nos meus códigos anteriores (para lêr o valor dos sensores),..

dá uma vista de olhos neste código:

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

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


void setup()
{
Serial.begin(9600);
int i;
for (i = 0; i < 250; i++){
  qtrrc.calibrate();
  delay(20);
}
void loop(){
  qtrrc_read();
}
void qtrrc_read(unsigned int *vsensores, unsigned char readMode){
 
  int val = 0;
  for (int i=0; i<8; i++){
    qtrrc.read(vsensores);
  }
  val = qtrrc.read(vsensores);
  Serial.println (val);
  delay(500);
}

está parecido com o teu, mas estou a fazer tudo nessa função, e declarei essa função no void loop(){ , no entanto nao fiz nada com ela pq não necessito, e mesmo assim acusa me um erro :-\ diz que void loop{ é incompativel com void setup(){ (algo assim), sabes pq?

Ps: não consigo utilizar o código que me deixaste sem a função propia para lêr o valor dos sensores, a "expressão" "    qtrrc.read;" apenas por ser usada nessa função, pelo que percebi, e pelo erro que me acusa o compilador..
« Última modificação: 10 de Março de 2010, 20:43 por fred gomes »
cumprimentos,
Fred