collapse

* Posts Recentes

Arame de Estendal por almamater
[Hoje às 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

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

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

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #210 em: 10 de Julho de 2010, 12:20 »
Boas...
Voltei a deparar-me com os problemas :-\

eu tenho a pista montada numa sala, faço as experiências com os LDR´s para detectar uma cor, apago a luz (para ver se a luminosidade natural afecta os valores dos mesmos, e os valores so variam uma ou duas unidades ( escala de 0 a 1023 é optimo, erro quase nulo),
tenho o problema resolvido, aparentemente...

se passado um tempo voltar a fazer essas mediçoes os valores variaram todos (digo isso de ontem à noite para hoje por exemplo), variam umas 100 unidades, e já tenho de alterar a programação, alguém sabe pq isso acontece? é que se continuar assim eu antes de apresentar o projecto ao júri vou ter de andar la com o arduino a alterar os valores dos LDR´s, pois não posso confiar... se alguem me souber dar uma sugestão para corrigir este problema agradeçia...

outro problema...

se colocar o codigo para seguir apenas a linha, ele segue na perfeição...
mas se colocar o codigo para detectar as cores (ainda so detecta a cor vermelha), ele para os 10 segundos e arranca ao detectar a cor vermelha, mas o codigo de seguir a linha nao é respeitado (ou seja, irá perder-se),

o código é o seguinte:

Código: [Seleccione]
/* variaveis de utilizadas*/

const int nsensores = 5;
const int sensor[] = {2,3,4,5,6};
const int motor_right = 10;
const int motor_left = 9;
int led_pin = 11;


/* variaveis auxiliares*/

int senval[] = {0,0,0,0,0};
int vel_right = 0;
int vel_left = 0;
int maxvel = 150;
double errorval = 0.0;
double lasterror = 0.0;
boolean SCstop = false;
boolean SCstart = true;

void setup(){
  Serial.begin(9600);
  pinMode (motor_right, OUTPUT);
  pinMode (motor_left, OUTPUT);
  pinMode (2, INPUT);
  pinMode (3, INPUT);
  pinMode (4, INPUT);
  pinMode (5, INPUT);
  pinMode (6, INPUT);
  digitalWrite (2, HIGH);
  digitalWrite (3, HIGH);
  digitalWrite (4, HIGH);
  digitalWrite (5, HIGH);
  digitalWrite (6, HIGH);
}
void loop(){
 errorval = LineError();
 sensor_de_cores();
 SCstart  ? Serial.println("0") : Serial.println("1");
 delay(500);
 if(SCstart){
   if(errorval < 0.0){
    vel_left = (int)(maxvel*(1-fabs(errorval)));
    vel_right = (int)(maxvel);
  }
  else if(errorval > 0.0){
    vel_left = (int)(maxvel);
    vel_right = (int)(maxvel*(1-errorval));
  }
  else{
    vel_left = (int)(maxvel);
    vel_right = (int)(maxvel);
    Serial.println("Avancar");
  }
  //Fazer actuar os motores:
  analogWrite(motor_right,vel_right);
  analogWrite(motor_left, vel_left);
 
  if (errorval == 0){
    SCstop = false;
  }
  else{
    SCstop = true;
  }
  if (SCstop){
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);
  }
 }
 

 if (SCstart == false){
    delay(5000); 
 }

}


// escolher o sensor que esta sobre a linha

double LineError()
{
  double error = 1.0;
  int valorsensor = 0;
 
  for (int i=0; i < nsensores; i++){

    senval[i] = digitalRead (sensor[i]);
  }

  valorsensor = (senval[0]) | (senval[1]<<1) | (senval[2]<<2) | (senval[3]<<3) | (senval[4]<<4);
 
  switch (valorsensor){
    case 0b10000:
    error = -1.0; break;
    case 0b11000:
    error = -0.75; break;
    case 0b01000:
    error = -0.5; break;
    case 0b01100:
    error = -0.25; break;
    case 0b00100:
    case 0b01110:
    error = 0.0; break;
    case 0b00110:
    error = 0.25; break;
    case 0b00010:
    error = 0.5; break;
    case 0b00011:
    error = 0.75; break;
    case 0b00001:
    error = 1.0; break;
    case 0b00000:
    if(error == 1.0)
    error = lasterror;
    break;
    }
    lasterror = error;
    return error;


void sensor_de_cores(){
 
  int ldr_green = 0;
  int ldr_red = 1;
  int valor_green = 0;
  int valor_red = 0;
 
  valor_green = analogRead(ldr_green);
  valor_red = analogRead(ldr_red);
 
  // Detectar a cor verde;
 
  if (valor_green >=500 && valor_green <=650
  && valor_red >=550 && valor_red <=650){
    SCstart = false;
    analogWrite(motor_right,0);
    analogWrite(motor_left,0);
  }
 
  // Detectar a cor vermelha;
 
  else if (valor_red >=780 && valor_red <= 835
  && valor_green >730 && valor_green <= 805){
    SCstart = false;
    analogWrite(motor_right,0);
    analogWrite(motor_left,0);
    delay(10000);
  }
  else{
    SCstart = true;
  }
}
   
se me conseguirem ajudar agradeçia.

« Última modificação: 10 de Julho de 2010, 22:04 por fred gomes »
cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #211 em: 10 de Julho de 2010, 15:05 »
oh...
acho que já sei onde está o erro..
eu no inicio do loop esqueçi-me de colocar "if(SCstart){" , é normal que as velocidades dos motores nao estejam a variar conforme a posiçao da linha, quase de certeza que é esse o erro..

eu agora nao estou em casa, mas mais logo experimento e posto aqui novidades, espero que assim funcione :D
cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #212 em: 10 de Julho de 2010, 22:06 »
afinal o erro não está aí..
agora os motores nem se mexem, estou com algum erro na programação mas nao consigo percer o quê..

já alterei a programação (última exposta por mim),
ao fazer o print de CSstart verifico que está tudo correcto.. mas o programa não me corre a parte de codigo para seguir a linha não sei pq.. :-X

alguém me consegue ajudar?
o problema é mesmo de programação..
cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #213 em: 10 de Julho de 2010, 23:01 »
experimentei este código:

Código: [Seleccione]
int ldr_green = 0;
int ldr_red = 1;
boolean SCstart = true;
int valor_green = 0;
int valor_red = 0;

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

void loop(){
  valor_green = analogRead(ldr_green);
  valor_red = analogRead (ldr_red);
 
  // Detectar a cor verde;
 
  if (valor_green >=500 && valor_green <=650
  && valor_red >=550 && valor_red <=650){
    SCstart = false;
  }
 
  // Detectar a cor vermelha;
 
  else if (valor_red >=780 && valor_red <= 835
  && valor_green >730 && valor_green <= 805){
    SCstart = false;
    delay(10000);
    SCstart = true;
    delay(500);
  }
  else{
    SCstart = true;
  }
  SCstart ? Serial.println("0"): Serial.println("1");
  delay(200);
}

ao colocar e o agv sobre o vermelho é-me impresso um 0(false) de 10 em 10 segundos ,
ao colocar sobre o verde é-me impresso sempre um 1 (true) , e sobre branco sempre 0(false)..

o problema nao me parece ser do sensor de cores..
acho que é mesmo da programação..e estou farto de tentar descobrir de onde vêm o problema e não consigo descobrir..
preciso mesmo de ajuda....
cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Robot de Busca e Salvamento!
« Responder #214 em: 11 de Julho de 2010, 01:25 »
É bom testar as coisas em separado... E se dizes que está tudo bem com a detecção da cor, vamos partir do pressuposto que realmente está tudo bem...

A questão é que tu tens um delay muito grande na função do sensor de cores...

delay(10000);

10 segundos? Para quê? É mesmo necessário?

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #215 em: 11 de Julho de 2010, 04:04 »
sim, pq eu quero que ao agv ao detectar a cor vermelha para 10 segundos , e so depois prossiga..
segundo os print´s que fiz acho que o SCstart está a variar-me bem consoante a cor sobre a qual se encntra o agv (os resultados dos prints e programação estão mensionados em cima)..

não consigo perceber de onde vêm o problema :-\

mesmo que o sensor de cores estivesse a funcionar mal, SCstart = true, logo ele devia seguir a linha, e apenas não parava ao passar sobre a cor.., mas o que está acontecer é que ele não arranca :S
« Última modificação: 11 de Julho de 2010, 04:26 por fred gomes »
cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Robot de Busca e Salvamento!
« Responder #216 em: 11 de Julho de 2010, 12:19 »
A depuração de erros faz-se com Serial.print()'s.

Mete prints por aí fora, liga o Serial monitor e vê por onde é que o código passa e onde é que não está a passar...
Não te podemos ajudar grande coisa a olhar só para o código, pois ele já está algo complexo... E sensor de cores, nunca trabalhei com nenhum.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #217 em: 11 de Julho de 2010, 23:01 »
Com prints a mais rebenta com a ram e ai é que fica mesmo perdido.
Avr fanboy

Offline RicardoSantos

  • Mini Robot
  • *
  • Mensagens: 65
Re: Robot de Busca e Salvamento!
« Responder #218 em: 12 de Julho de 2010, 05:43 »
O grande problema dele é não poder usar o monitor Serie do programa arduino, porque ele para testar o Robô usa um breaduino... ( Se não estou em erro )

Mas já está praticamente tudo resolvido... amanhã o Fred já deve ter noticias =)

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Robot de Busca e Salvamento!
« Responder #219 em: 12 de Julho de 2010, 09:19 »
Mas tu com um breaduino podes usar tambem o "monitor serie"!

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #220 em: 12 de Julho de 2010, 10:08 »
sim, mas eu nao consigo usar o motor serie pq preciso de ter o fio do TX ligado e alimentação apenas o + chega), e não dá geito pq com os motores andarem o fio do TX sai logo  ( pois eu so o coloco atraves em contacto com o atmega atravez de uma header fêmea) e não atraves de um borne (que consigo aparfusar e prender mesmo o fio), daí nao conseguir fazer os prints mesmo com ele ligado ( a seguir a linha), tenho de fazer com os motores desligados..

tambem tinha outro problema.. no sensor de cores tinha os 2 ldr´s muito perto um do outro, e com a linha preta(da pista) à mistura, aquilo dava me valores de uma ponta á outra ( a a 1023 a quase), ou seja, estava sempre a detetar cores durante o percurso..
 
Foto do sensor de cores:

http://img20.imageshack.us/i/dsc00448jc.jpg/

E como podem ver ele não está bem feito, por exemplo, se estiver a ver o vermelho, so o LDR red devia "apanhar luz", pois é essa a função do filtro (o que vêem em volta dos LDR´s é papel de cor transparente, tipo o dos rebuçados), mas isso nao acontece, ambos os LDR´s me dão valores muito proximos um do outro, o mesmo acontece na cor vermelha...(com o agv sobre o verde por exemplo, um LDr dáva me 610 e outro 620) por exemplo.

Isso acontece pq eles estão muito proximos um do outro, e a luz reflectida apenas para um acaba por embater nos dois (nao me dão valores mesmo iguais so por causa do filtro, que tambem impede alguma  passagem de luz para os LDRs, e como são de cores diferentes, essa quantidade de luz varia, mas muito pouco)..

Eu agora vou fazer um sensor de cores novo, com os ldr´s mais afastados um do outro, para que a linha preta nao interferia na leitura dos dois em simultâneo, e assim consiga obter valores fiáveis quando ele se encontra sobre uma cor..

O Ricardo Santos teve -me ontem ajudar (hoje de madrugada :P ) , tinha tambem alguns problemas de programação, mas acho que esse patamar já está resolvido (obrigado pela ajuda e paciência Ricardo), falta mesmo corrigir o sensor de cores..

Depois deixo aqui novidades :) ,muito obrigado a todos os que me têm ajudado..
« Última modificação: 12 de Julho de 2010, 10:13 por fred gomes »
cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #221 em: 12 de Julho de 2010, 21:39 »
já está a funcionar...
vou começar a colocar o display e outra placa com buzzer e uns leds, e depois tiro fotos e faço video..
vou tentar fazer isso ainda hoje de madruagada e ver se o acabo, estou com o prazo muito apertado..

muito obrigado a todos os que me têm ajudado, brevemente postarei fotos.. :)
« Última modificação: 12 de Julho de 2010, 21:43 por fred gomes »
cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Robot de Busca e Salvamento!
« Responder #222 em: 13 de Julho de 2010, 00:00 »
Já agora esse robot é para competir ou é apenas por diversão?

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #223 em: 13 de Julho de 2010, 10:35 »
pra já é a minha PAP(projeto de aptidão profissional), quinta ou sxta feira tenho de o apresentar ao júri (ainda não sei ao certo o dia).
« Última modificação: 13 de Julho de 2010, 11:00 por fred gomes »
cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #224 em: 15 de Julho de 2010, 13:50 »
já apresentei o projecto , tive 18 :)

depois posto fotos, no entanto não o consegui meter como queria.. o sensor de cores não detecta de forma eficaz uma cor em movimento (os valores dos ldr´s variam muito), a cor vermelha reflectia bastante (parecia branco) e substitui pela cor preta ,o display também nao programei como queria por falta de tempo, e pronto...não ficou como queria mas tive boa nota e aprendi bastante com a elaboração deste projecto..

muito obrigado a todos os que me ajudaram , aprendi bastante com  elaboração deste projecto (muito obrigado a todos os que me ensinaram coisas novas, principalmente a nivel de programação), foi esse o meu grande objectivo..

brevemente postarei fotos e um video..
cumprimentos,
Fred