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: Navegação Robo com IR  (Lida 3463 vezes)

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

Offline wear

  • Mini Robot
  • *
  • Mensagens: 84
Navegação Robo com IR
« em: 31 de Julho de 2009, 17:11 »
Boas pessoal venho novamente pedir a vossa ajuda eu basei-me no código do guibot, mas o meu robo não navega em condições ou seja o servo que sustenta o Sensor IR logo no início vira para a direita e não sai mais dessa posição mesmo que apareça objectos na frente.....

que estarei eu a fazer mal no código.....já agora alguém me pode explicar a biblioteca Metro, pois eu no código estou a usar porque antes também não estava a funcionar e então pensei que fosse disso e meti mas não funciona na mesma e não sei para que serve se quer, então pedia a vossa ajuda para me explicarem pois eu gosto de saber o que uso e como funciona...

aqui fica o código

Citar

#include <Metro.h>

int servoFrente=9; // Servo suporta o sensor distância ligado no pino 9
int servoDireita=10; // Servo rotação lado direito ligado no pino 10
int servoEsquerda=11; // Servo rotação lado esquerdo ligado no pin 11
int sensorDistancia=0; //Sensor de distância ligado no pino Analógico 0
int distancia=0; // Valor que vai conter a leitura do sensor
int esquerda, direita, frente; // Variáveis que vão guardar os valores de leitura do Sensor
int distanciaMinima=600; // Distância Mínima de segurança
int calculaDistancia=0; //Guarda o valor lido pelo sensor
int tempo = 300; // tempo do temporizador em millisegundos
int i;
Metro mede_distancia = Metro(tempo);

void setup(){

  Serial.begin(9600);
  pinMode(servoFrente, OUTPUT);
  pinMode(servoDireita, OUTPUT);
  pinMode(servoEsquerda, OUTPUT);
  pinMode(sensorDistancia, INPUT);

}

void loop(){

  if (mede_distancia.check() == 1) {
    olharFrente();
  }
  if (frente < distanciaMinima)
  andarFrente();
  else
  decidirCaminho();
 

}

int lerSensor(){
  return calculaDistancia = analogRead(0);
}

void olharFrente() {
  analogWrite(servoFrente, 90);
  delay(500);     
  lerSensor();
  frente = calculaDistancia;
}

void olharDireita(){
  analogWrite(servoFrente, 160);
  delay(500);
  lerSensor();
  direita= calculaDistancia;
}

void olharEsquerda(){
  analogWrite(servoFrente, 20);
  delay(500);
  lerSensor();
  esquerda=calculaDistancia;
}

void pararMotores(){
  analogWrite(servoDireita, 127);
  analogWrite(servoEsquerda, -127);
  delay(20);
}

void andarFrente(){
  analogWrite(servoDireita, 152);
  analogWrite(servoEsquerda, -152);
}

void andarTras(){
  analogWrite(servoDireita, -152);
  analogWrite(servoEsquerda, 152);
}

void andarDireita(){
  analogWrite(servoDireita, 152);
  analogWrite(servoEsquerda, 152);
}

void andarEsquerda(){
  analogWrite(servoDireita, 140);
  analogWrite(servoEsquerda, 140);
}

void decidirCaminho(){

  pararMotores();
  olharEsquerda();
  delay(250);
  pararMotores();
  olharDireita();
  delay(250);

  if (esquerda < direita)
    andarEsquerda();
  else
    andarDireita();

}



Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:Navegação Robo com IR
« Responder #1 em: 31 de Julho de 2009, 18:25 »

Offline wear

  • Mini Robot
  • *
  • Mensagens: 84
Re:Navegação Robo com IR
« Responder #2 em: 31 de Julho de 2009, 19:08 »
já tinha andado nesse tópico, por acaso e lembrei me que podia ser interferência e é capaz de fazer sentido pois quando só o servo da frente com o sensor é executado ele roda quando trabalham os outros servos fica "colado" à direita e não mexe mais  >:(


Offline R.S.

  • Mini Robot
  • *
  • Mensagens: 108
Re: Navegação Robo com IR
« Responder #3 em: 20 de Fevereiro de 2010, 00:17 »
acho que este não é o tópico mais indicado mas acho que é escusado abrir outro.  nes te condigo(
Código: [Seleccione]
// ---------------------------------------------------------------------------- Servo
#include <Servo.h>

Servo servo;
int servoPin = 9;



// ---------------------------------------------------------------------------- Metro
// importar a livraria Metro, esta livraria permite criar temporizadores
// http://www.arduino.cc/playground/Code/Metro
#include <Metro.h>
int duration = 300;   // dura?‹o do temporizador em milisegundos
Metro mede_distancia = Metro(duration);    // declarar inst‰ncia



// ---------------------------------------------------------------------------- SENSOR SHARP
int sensorPin = 2;     // pin onde o sensor SHARP est‡ ligado
int sensorValue = 0;   // vari‡vel que vai conter o valor de leitura do sensor
int esquerda, direita, frente; // vari‡veis que v‹o conter os valores de leitura do sensor



// defini?‹o de uma dist‰ncia segura, valores abaixo significa que est‡ perto de um obst‡culo
// varia consoante o sensor
int distanciaSegura = 150;



// ---------------------------------------------------------------------------- Bump switchs
int PIN_BUMP_ESQ = 2;  // pin do bump esquerdo
int PIN_BUMP_DIR = 4;  // pin do bump direito

// Variaveis Bump Switchs
int BUMP_ESQ_VAR, BUMP_DIR_VAR;




// ---------------------------------------------------------------------------  Motores
int motor_left[] = {5, 6};
int motor_right[] = {7, 8};




// ---------------------------------------------------------------------------- Setup
// fun?‹o chamada quando o Arduino Ž inicializado
void setup() {
 
  Serial.begin(9600);
 
  // declarar em que pin est‡ o servo
  servo.attach(servoPin);
 
  // Setup motores
  int i;
  for(i = 0; i < 2; i++){
    pinMode(motor_left[i], OUTPUT);
    pinMode(motor_right[i], OUTPUT);
  }
 
}



// ---------------------------------------------------------------------------- Loop
// fun?‹o chamada infinitamente ap—s o setup()
void loop() {
 
  // mede distancia de X em X tempo
  if (mede_distancia.check() == 1) {
    olhaFrente();
  }
 
  // se a dist‰ncia em frente for menor do que a dist‰ncia segura previeamente definida
  // decidi para onde ir
  if (frente < distanciaSegura) drive_forward();
  else decidirDireccao();
 
}




// ---------------------------------------------------------------------------- Decide direc?‹o
void decidirDireccao() {

  motor_stop();
  olhaEsquerda();
  delay(250);
  motor_stop();
  olhaDireita();
  delay(250);
 
  if (esquerda < direita) turn_left();
  else turn_right();

}





// ---------------------------------------------------------------------------- Olhar em redor

void olhaEsquerda() {
   // olha para a esquerda e mede dist‰ncia
   servo.write(20);
   delay(500);
   readIR();
   esquerda = sensorValue;
}

void olhaDireita() {
   // olha para a direita e mede dist‰ncia
   servo.write(160);
   delay(500);     
   readIR();
   direita = sensorValue;
}

void olhaFrente() {
   // olha para a direita e mede dist‰ncia
   servo.write(90);
   delay(500);     
   readIR();
   frente = sensorValue;
}





// ---------------------------------------------------------------------------- Leitura do sensor SHARP
int readIR() {
  return sensorValue = analogRead(4);
  //Serial.println(sensorValue);
}
) esta-me a adar o seguinte erro:

" error: 'drive_forward' was not declared in this scope"

o que tenho de alterar?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Navegação Robo com IR
« Responder #4 em: 20 de Fevereiro de 2010, 00:22 »
Estas a chamar a função drive_forward, mas ela não existe, pelo menos nesse pedaço de código, provavelmente é isso que o compilador te quer dizer, que ela não existe apesar de a chamares
Avr fanboy

Offline R.S.

  • Mini Robot
  • *
  • Mensagens: 108
Re: Navegação Robo com IR
« Responder #5 em: 20 de Fevereiro de 2010, 00:24 »
ok obrigado

Offline vicardosof

  • Mini Robot
  • *
  • Mensagens: 223
Re: Navegação Robo com IR
« Responder #6 em: 05 de Março de 2010, 15:28 »
Um pequeno problema no código:
A distância de segurança será para evitar colisões, certo?
Não entendi a parte que está frente < distanciaMinima
Não seria ao contrário?