collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


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


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


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]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

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

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

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Robot de Busca e Salvamento![CONLUIDO]
« em: 31 de Janeiro de 2010, 13:42 »
Boas.
Estou a construir um robot de busca e salvamento para apresentar no final deste ano lectivo como pap (projecto de aptidão profissional), o robot consiste em  seguir uma linha preta, detectar cores de alumínio, verdes, e vermelhas(já explico o porquê das cores vermelhas), este quando detecta a cor de alumínio deve parar durante um determinado tempo e voltar a prosseguir o seu percurso (a cor de alumínio poderá representar uma ferramenta perdida, o robot apenas irá parar, avisar que ali têm uma ferramenta e prosseguir com o seu percurso), e ao detectar a cor verde este deverá parar até ser retirada a cor verde do seu caminho( a cor verde pretende representar um operário que poderá estar ferido na pista, então o robot deverá parar e apenas prosseguir quando este for socorrido). E por fim, a cor vermelha, é uma funcionalidade "extra" que quero acrescentar, caso seja um operário deseje que o robot funcione como distribuidor de material em vez de salvador de vidas, deverá colocar vários pontos de cor vemelha ao longo da pista (irei colocar pedaços de papel vermelho), e este ao detectar um ponto de cor vermelha deverá parar algum tempo e prosseguir (o tempo que para é para a retiração de o material que este possa conter ...),este também contém um regulador de velocidade (utilizando um potenciometro), ..

Poderei colocar outras funcionalidades (como o robot se ir desviando de obstáculos, ligação a um display que indica os seus passos, etc)...tudo dependerá do tempo que ainda tenha depois de concluida a parte descrita em cima..

O desenvolvimento do projecto será descrito ao longo deste tópico, onde postarei também dúvidas que poderei vir a têr, e, claro, conto com a vossa ajuda :)

Para já tenho um problema, que não sei ao que se deve, .. eu já construir a parte de "seguidor de linhas" e regulação de velocidade dos motores DC que estou a utilizar, pretendo alimentar o arduino, regular a velocidade, e só depois, clico num push button onde dou ordem para o robot andar...ele já segue a linha, e estava a funcionar na perfeição, até que passado um "tempão" de ter o arduino alimentado este deixa de responder à programação (reparei que a luz verde da alimentação do arduino anfraqueçeu), no entanto se deixar de mexer no arduino (desligando-lhe a alimentação) e passados 5 minutos voltar a tentar, ele já funciona, mas deixa logo de responder... alguma vez vos aconteceu isso? alguém sabe a causa disto acontecer? e o que posso fazer para corrigir?.. não consigo entender pq tive o arduino muito tempo ligado sem qualquer problema, e só agora começou a fazer isso, sem qualquer alteração nas suas ligações (reparei também que não existe qualquer tipo de sobreaquecimento neste)...

a programação que estou a utilizar é a seguinte:

Citar
// projecto de seguidor de linhas.

// declaração das variaveis:
int switch1 = 8;
int motor_right = 3;
int motor_left = 6;
int sensor_right = 5;
int sensor_left = 0;
int pin_pot = 1;

//variaveis auxiliares.

int valor = 0;      // variável para guardar o valor do sensor_right!
int valor1 = 0;     // "                      "valor do sensor_left!
int val_pot = 0;    // variável para guardar o valor do pot.
boolean walk = false; //

void setup(){
  Serial.begin(9600);
 
  pinMode (motor_right, OUTPUT);
  pinMode (motor_left, OUTPUT);
  pinMode (switch1, INPUT);
}


void loop(){
  // Leitura dos valores
  valor = analogRead (sensor_right);
  valor1 = analogRead (sensor_left);
  val_pot = analogRead (pin_pot);
  val_pot = map(val_pot,0,1023,50,255);
 
  Serial.println (val_pot); // print na consola
  delay(200); // delay
 
 
  if (digitalRead(switch1) == LOW) {
    if(walk == true) walk = false; // se estava false, passa a true
    else walk = true; // se estava true, passa a false
  }
 
  if (walk == true)
  {
    if(valor > 350 && valor1 < 350){
      analogWrite (motor_right,0 );
      analogWrite (motor_left, val_pot);
    }
    else{
      if (valor <350 && valor1 > 350){
        analogWrite (motor_right, val_pot);
        analogWrite (motor_left, 0);
      }
      else{
        if (valor >350 && valor1 >350){
          analogWrite (motor_right, val_pot);
          analogWrite (motor_left, val_pot);
        }
        else{
          if (valor <350 && valor1 < 350){
            analogWrite (motor_right, 0);
            analogWrite (motor_left, 0);
          }
        }
      }
    }
  }
  else{
      digitalWrite (motor_right, 0);
      digitalWrite (motor_left, 0);
  }
}

« Última modificação: 16 de Julho de 2010, 00:45 por fred gomes »
cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #1 em: 31 de Janeiro de 2010, 15:20 »
oh.. acho que já sei qual é o problema ;D , fui buscar o cabo USB e reparei que com o arduino alimentado pelo pc isto já funciona como deve ser, deve ser a tensao da bateria que chega ao arduino não ser suficiente para este actuar (falta de bateria), vou colocála a carregar.. fiquei feliz por saber que o arduino está óptimo de saúde :) , nunca me passou pela cabeça que o problema podesse ser esse... :P
irei postando novas novidades ;)
cumprimentos,
Fred

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re: Robot de Busca e Salvamento!
« Responder #2 em: 31 de Janeiro de 2010, 15:31 »
Bem, estou a ver que já sabes de onde possa vir o problema.

Depois testa com as baterias carregadas e diz-nos se o problema era mesmo dai.

Boa sorte com o projecto.

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #3 em: 31 de Janeiro de 2010, 15:40 »
sim é daí, caso nao fosse o arduino também não funcionava com a fonte do pc ( e faz sentido, que mais atras disse que tive o arduino um "tempão"ligado xD, ou seja, a gastar bateria)..ainda tenho um problema, o robot não consegue seguir a linha por completo pq acho que as rodas nao aderem muito bem ao papel, e deves em quando a roda "fica a andar mas parada no mesmo sítio" ,tenho de ver se arranjo alguma coisa de borracha ou assim para "puxar" melhor o papel e aumentar a aderência das rodas..e assim revolver este problema.
Irei postando novidades acerca do projecto, e também dúvidas que possam surgir :)
Obrigado..
« Última modificação: 31 de Janeiro de 2010, 15:42 por fred gomes »
cumprimentos,
Fred

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Robot de Busca e Salvamento!
« Responder #4 em: 31 de Janeiro de 2010, 15:56 »
Olha um pormenor que reparei no teu código:
Código: [Seleccione]
  if (digitalRead(switch1) == LOW) {
    if(walk == true) walk = false; // se estava false, passa a true
    else walk = true; // se estava true, passa a false
  }

isto é igual a isto:
Código: [Seleccione]
  if (digitalRead(switch1) == LOW) {
   walk=!walk;
  }

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #5 em: 31 de Janeiro de 2010, 16:14 »
Obrigado metRo_ , vou corrigir isso, ambas as formas estão correctas, mas da forma que disseste fica mais simplificado ;)
cumprimentos,
Fred

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Robot de Busca e Salvamento!
« Responder #6 em: 31 de Janeiro de 2010, 17:14 »
Obrigado metRo_ , vou corrigir isso, ambas as formas estão correctas, mas da forma que disseste fica mais simplificado ;)

Exacto e eu referi que eram iguais é só para simplificar ;)

Offline davidjesus

  • Mini Robot
  • *
  • Mensagens: 2
Re: Robot de Busca e Salvamento!
« Responder #7 em: 10 de Fevereiro de 2010, 11:41 »
Boas estou a fazer um robot de busca e salvamento e precisava do circuito, é possível arranjar a do seu robot para ver mais o menos ?

comprimentos.

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #8 em: 07 de Março de 2010, 11:35 »
Boas.
Estou a tentar aplicar no seguidor de linhas um "QTR 8RC reflectance array" da Pololu.
http://www.pololu.com/docs/pdf/0J12/QTR-8x.pdf

o circuito está a ser alimentado com 3.3 volts e tenho os pinos ligados como mostra a figura no pdf deixado em cima, ground´s ao - , VCC e LEDON ao +.
Os led´s acendem, no entanto estou a tentar fazer a leitura  de apenas um LED utilizando o código:

Citar
int sensor = 3;
int val = 0;

void setup(){
  Serial.begin(9600);
  digitalWrite (sensor, 0);
  pinMode ( sensor, INPUT);
}
void loop(){
  val = digitalRead (sensor);
  Serial.print (val);
  delay(500);
  delay(25);
}


e obtenho sempre o mesmo valor (1), ve vez em quando dá 0 se eu tocar no sensor duma certa forma, mas nem percebi nem porquê , nem quando isso acontece..

alguem me consegue ajudar?
cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #9 em: 07 de Março de 2010, 13:51 »
outra questão, se eu alterar no código a leitura do valor digital para o analógico, ele deveria me dar valores precisos (o ou 1023), mas não, está-me sempre a dar valores que rondam o 400. Alguém me sabe dizer uma causa possivel que me leva a não obter os valores desejados?,

Obrigado.
cumprimentos,
Fred

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #10 em: 07 de Março de 2010, 14:10 »
Ligas-te o 3.3v bypass?
Avr fanboy

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #11 em: 07 de Março de 2010, 17:37 »
liguei, mas não sei se está bem ligado.. pelo que percebi através da documentação da pololu esses terminais devem ser chantados (caso alimente o circuito com 3.3volts) afim de aumentar o brilho dos leds, e foi isso que eu fiz..
« Última modificação: 07 de Março de 2010, 18:30 por fred gomes »
cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Robot de Busca e Salvamento!
« Responder #12 em: 07 de Março de 2010, 20:44 »
outra questão, se eu alterar no código a leitura do valor digital para o analógico, ele deveria me dar valores precisos (o ou 1023), mas não, está-me sempre a dar valores que rondam o 400. Alguém me sabe dizer uma causa possivel que me leva a não obter os valores desejados?,

Obrigado.

Talvez seja por causa das referências de tensão.
Alimentas os sensores a 3.3v, mas a voltagem de referência para o conversor ADC é 5v, talvez esse seja o valor 1 para os 3.3v

Isto digo eu assim por alto. Não tenho a certeza se isto é verdade, alguém me corrija se assim não for.

Volto a dizer-te. Em vez de andares a ler os sensores 1 a 1, usa a biblioteca que eles disponibilizam.

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #13 em: 07 de Março de 2010, 21:22 »
 Eu percebi o que quiseste dizer mas o problema não é daí, pois ja experimentei alimentar o circuito com ambas as tensoes (3.3v e 5v),
 
acho que já obtive uma resposta ao porquê se não conseguir lêr valores digitais..

"# You can request calibrated sensor values using the readCalibrated() method, which also takes an optional argument that lets you perform the read with the IR emitters turned off. Calibrated sensor values will always range from 0 to 1000, with 0 being as or more reflective (i.e. whiter) than the most reflective surface encountered during calibration, and 1000 being as or less reflective (i.e. blacker) than the least reflective surface encountered during calibration",

agora percebi que vou ter mesmo de utilizar a biblioteca da Pololu e utilizar os metodos de leitura que eles disponibilizam, pois a leitura destes sensores funciona de uma forma diferente "dos normais"!

agora mesmo assim tenho dúvidas,

http://www.pololu.com/docs/0J19/3  eles aqui disponibilizam as funções necessárias para o array de sensores com leitura analógica e digital.. se calhar a minha dúvida provém por causa disso, pq eles neste exemplo misturam os exemplos para o uso de ambos os array´s

Código: [Seleccione]
# int i; 
#   for (i = 0; i < 250; i++)  // make the calibration take about 5 seconds 
#   { 
#     qtr.calibrate(); 
#     delay(20); 

aqui por exemplo, a que se refere o 250??

Agradeço a ajuda :)

cumprimentos,
Fred

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Robot de Busca e Salvamento!
« Responder #14 em: 07 de Março de 2010, 21:40 »
Código: [Seleccione]
# int i; 
#   for (i = 0; i < 250; i++)  // make the calibration take about 5 seconds 
#   { 
#     qtr.calibrate(); 
#     delay(20); 
aqui por exemplo, a que se refere o 250??
Agradeço a ajuda :)

delay(20) é um atraso de 20ms, 20ms*250=5s.