LusoRobótica - Robótica em Português

Software => Software e Programação => Tópico iniciado por: andnobre em 08 de Abril de 2009, 15:52

Título: programacao do robo
Enviado por: andnobre em 08 de Abril de 2009, 15:52
Bem o robo em si está quase feito so resta a maldita programação.
O objectivo e simples o robo andar pela casa mas desviando dos obstaculos com infravermelho e quase uma copia do farrusco mas em versao infravermelho. Os servos ja estao alterados p motores dc e tem uma ponte H (l293D).
Ja tenho aqui alguma coisa do codigo se poderem ajudar agradecia.
Título: Re:programacao do robo
Enviado por: R.S. em 08 de Abril de 2009, 20:27
podes sempre pedir ao Guilherme Martins (Guibot) para te enviar o codigo, penso que nao faz diferença o sensor no codigo mas nao sei, eu de programaçao nao sou grande coisa (para já, isto com o tempo ...) e se nao der o pessola do LR ajuda-te no codigo.

Abraços R.S.
Título: Re:programacao do robo
Enviado por: amando96 em 08 de Abril de 2009, 22:17
Bem o robo em si está quase feito so resta a maldita programação.
O objectivo e simples o robo andar pela casa mas desviando dos obstaculos com infravermelho e quase uma copia do farrusco mas em versao infravermelho. Os servos ja estao alterados p motores dc e tem uma ponte H (l293D).
Ja tenho aqui alguma coisa do codigo se poderem ajudar agradecia.


estás a usar o sensor de IV do tutorial do três?
Título: Re:programacao do robo
Enviado por: DanBar em 08 de Abril de 2009, 23:33
Tens aqui o meu. ainda não tem o controle do sensor de luz. Mas já faz o seguinte.

Atenção que está quase a lotar o espaço do ATMega168

O que Faz:

Desvio dos obstáculos pelo sensor IR
Recepção do comando IR (pelo mesmo sensor)
Informação para o LCD Nokia.
Recepção de Rádio Wireless (ainda falta fazer os comandos quando recebe a informação)
e muito mais que podes utilizar á vontade.


Título: Re:programacao do robo
Enviado por: andnobre em 09 de Abril de 2009, 01:15
obrigado desde ja a todos. o meu sensor e um sharp gpxxxx
Título: Re:programacao do robo
Enviado por: guibot em 09 de Abril de 2009, 14:24
Olá André, deixo aqui um pequeno código de navegação básica para o teu bot.
Bom trabalho
Título: Re:programacao do robo
Enviado por: andnobre em 22 de Abril de 2009, 18:44
ola a todos
voltei a estaca zero e voltei a fazer um novo codigo mas agora da um erro.
Sendo ele o seguinte:

20: error: Servo.h: No such file or directory In function 'void setup()':
 In function 'void loop()':
Título: Re:programacao do robo
Enviado por: Fifas em 22 de Abril de 2009, 20:22
nao te enganas-te no anexo do codigo?
Título: Re:programacao do robo
Enviado por: amando96 em 22 de Abril de 2009, 20:22
talvez apagaste sem querer a biblioteca?
Título: Re:programacao do robo
Enviado por: andnobre em 22 de Abril de 2009, 23:46
eu tenho as bibliotecas...
bjs
Título: Re:programacao do robo
Enviado por: andnobre em 24 de Abril de 2009, 14:40
bem tenho aqui umas duvidas para os senhores das programações.
ainda tenho um erro no meu codigo mas antes disso queria saber pk void olharesquerda como exemplo da erro.Pk estes voids dao erro??
sera que tenho de dizer se é um int,float etc???
esta sempre a dizer variavel global...

Título: Re:programacao do robo
Enviado por: guibot em 24 de Abril de 2009, 23:39
tinhas ali várias chavetas em falta.. experimenta assim

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

Servo servo;
int servoPin =9;


int sensorPin =2; // pin onde o sensor Sharp esta ligado
int sensorValue=0; //variavel que vai conter o valor de leitura do sensor
int left,right,front,stop;//variaveis que vou conter os valores de leitura do sensor

// definir a distancia segura, valores abaixo significa que estao perto de um obstaculo
// varia consoante o sensor
int distanciaSegura =150;
int motor_front[]={
  4,6};
int motor_back[]={
  5,7};
int motor_left[]={
  4,7};
int motor_right[]={
  5,6};
int i;




//funcao qd arduino e chamado
void setup(){
  Serial.begin(9600);
  //declarar emque pino esta o servo
  servo.attach(servoPin);
  //setuo dos motores
  for(i=0;i<2;i++){
    pinMode(motor_front[i],OUTPUT);
    pinMode(motor_stop[i],OUTPUT);
    pinMode(motor_left[i],OUTPUT);
    pinMode(motor_right[i],OUTPUT);
  }
}


void loop(){
  //mede distancia de X em X tempo
  if(mede_distancia.check()==1){
    olhaFrente();
  }
  //se a distancia em frente for menos do que a distancia segura previeamente definida
  //decidir para onde ir
  if(frente<front<distaciaSegura){
    drive_forward();
  }
  else{
    decidirDireccao();
  }
}

//
void decidirDireccao(){
  motor_stop();
  olhaEsquerda();
  delay(250);
  motor_stop(),
  olhaDireita();
  delay(250);

  if(left<right){
    turn_left();
else
  turn_right();
}
}

void olhaEsquerda(){
  //olha p a esquerda e mede a distancia
  servo.write(20);
  delay(500);
  readIR();
  left=sensorValue;
}

void olhadireita(){
  //olha p a esquerda e mede a distancia
  servo.write(160);
  delay(500);
  readIR();
  right=sensorValue;
}

void olhaFrente(){
  //olha p a esquerda e mede a distancia
  servo.write(90);
  delay(500);
  readIR();
  front=sensorValue;
}

int readIR(){
  return sensorValue=analogRead(4);
  //Serial.println(sensorValue);


Título: Re:programacao do robo
Enviado por: andnobre em 27 de Abril de 2009, 16:04
ja estou aqui as voltas do programa mas ainda n consigo ver onde estou a errar depois da correcao :

da o seguinte erro:
20: error: Servo.h: No such file or directory In function 'void setup()':
 In function 'void loop()':
 In function 'void decidirDireccao()':
 At global scope:
Título: Re:programacao do robo
Enviado por: andnobre em 04 de Maio de 2009, 10:48
bem estou a ver que n tenho hipoteses de colocar o meu robo a funcionar ...
alguem tem ideias de colocar o robo a funcionar ?
Título: Re:programacao do robo
Enviado por: guibot em 04 de Maio de 2009, 11:49
Temos que ir por partes André.

2º esse erro que te dá é apenas quando chamas a livraria Servo?

3º consegues por um servo a rodar?

4º consegues por os motores a andar em ambos os sentidos?

5º consegues ter leituras do sensor de infravermelhos?

Tenta fazer um código para cada um destes passos...

já agora que versão do software do Arduino estás a usar? 
Título: Re:programacao do robo
Enviado por: andnobre em 04 de Maio de 2009, 12:04
versao e a 15
Título: Re:programacao do robo
Enviado por: Njay em 04 de Maio de 2009, 12:06
da o seguinte erro:
20: error: Servo.h: No such file or directory In function 'void setup()':

Ele não encontra o ficheiro Servo.h. Será que o nome é servo.h com letra minúscula e não com maiúscula?
Título: Re:programacao do robo
Enviado por: andnobre em 04 de Maio de 2009, 13:46
ja fiz isso mas nada continua na mesma, ate ja verifiquei as librarias
Título: Re:programacao do robo
Enviado por: guibot em 04 de Maio de 2009, 18:04
manda o teu codigo sff
Título: Re:programacao do robo
Enviado por: guibot em 04 de Maio de 2009, 18:15
já agora se escreveres só isto no arduino e carregares no botão play o que acontece?

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

void setup() {}

void loop () {}
Título: Re:programacao do robo
Enviado por: andnobre em 04 de Maio de 2009, 19:28
aqui vai o programa
Título: Re:programacao do robo
Enviado por: andnobre em 04 de Maio de 2009, 19:30
#include <Servo.h>
void setup() {}
void loop () {}

compilei e nao deu erro
Título: Re:programacao do robo
Enviado por: guibot em 04 de Maio de 2009, 19:33
no teu código tens

# include <Servo.h>

e deve ser

#include <Servo.h>

sem o espaço entre o # e include  ;)
Título: Re:programacao do robo
Enviado por: andnobre em 07 de Maio de 2009, 14:45
bem esse era um dos erros mas ja tenho andado a tirar uns erros ao programa mas gostava que explicassem uma coisa .
qd ha este erro o q se pode entender?

 In function 'void loop()':
error: 'mede_distancia' was not declared in this scope In function 'void decidirDireccao()':
 At global scope:

esta a dizer que a mede_distancia n esta declarada na funcao void decidirDireccao()
Título: Re:programacao do robo
Enviado por: guibot em 08 de Maio de 2009, 11:17
ele está a dizer que a função 'mede_distancia' não foi declarada.. verifica se ela existe e se estás a chamá-la correctamente
Título: Re:programacao do robo
Enviado por: andnobre em 08 de Maio de 2009, 13:58
bem ela n estava a ser chamada sim mas tenho aqui um erro que eu gostava que desse umas luzes....
o erro e o seguinte:
In function 'void decidirDireccao()':
error: 'motor_stop' cannot be used as a function At global scope:
Título: Re:programacao do robo
Enviado por: guibot em 08 de Maio de 2009, 14:07
estás a chamar a função motor_stop() mas no entanto ela não existe...
Título: Re:programacao do robo
Enviado por: andnobre em 08 de Maio de 2009, 14:15
mesmo declarada vai dando erro.
Título: Re:programacao do robo
Enviado por: guibot em 08 de Maio de 2009, 14:28
não se trata de estar declarado como inteiro ou não..

trata-se que estás a chamar uma função que não existe... usa o 1º código que enviei
Título: Re:programacao do robo
Enviado por: andnobre em 08 de Maio de 2009, 14:34
pois e a partir deste que eu estou a trabalhar.
Título: Re:programacao do robo
Enviado por: metRo_ em 08 de Maio de 2009, 14:59
Tu continuas a chamar
Código: [Seleccione]
motor_stop(); sem a ter declarado em nenhum lugar.
Título: Re:programacao do robo
Enviado por: andnobre em 08 de Maio de 2009, 15:05
mas ja tentei declarar int motor_stop(); e nada continua a dar erro.
Título: Re:programacao do robo
Enviado por: metRo_ em 08 de Maio de 2009, 17:02
faz algo de genero:

void motor_stop(){
//Aqui inseres o que quer que a função faça.
};
Título: Re:programacao do robo
Enviado por: andnobre em 13 de Maio de 2009, 17:11
este é o novo erro.
coloquei a outra variavel a zero para ficar quieto acho que fiz bem.
error: function 'int motor_front()' is initialized like a variable
Título: Re:programacao do robo
Enviado por: guibot em 13 de Maio de 2009, 19:17
por alguma razão não tens as funções de controle dos motores no teu código, tenta assim:

Código: [Seleccione]
// ---------------------------------------------------------------------------- ServoTimer2
// importar a livraria Servo
#include <Servo.h>
Servo servo;    // declarar uma instancia da livraria, neste caso chama-se "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



// ---------------------------------------------------------------------------- VARIÁVEIS DE CONTROLE
// definição de uma distância segura, valores abaixo significa que está perto de um obstáculo
int distanciaSegura = 150;



// ---------------------------------------------------------------------------  Motores
int motor_left[] = {5, 6};
int motor_right[] = {9, 10};



// ---------------------------------------------------------------------------- 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();
 

}

// ---------------------------------------------------------------------------- Radar

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

void olhaDireita() {
   // olha para a direita e mede distância
   servo.write(40);
   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(sensorPin);
  //Serial.println(sensorValue);
}


// --------------------------------------------------------------------------- Navegação

void motor_stop(){
  digitalWrite(motor_left[0], LOW);
  digitalWrite(motor_left[1], LOW);
 
  digitalWrite(motor_right[0], LOW);
  digitalWrite(motor_right[1], LOW);
  delay(25);
}

void drive_forward(){
  digitalWrite(motor_left[0], HIGH);
  digitalWrite(motor_left[1], LOW);
 
  digitalWrite(motor_right[0], HIGH);
  digitalWrite(motor_right[1], LOW);
}

void drive_backward(){
  digitalWrite(motor_left[0], LOW);
  digitalWrite(motor_left[1], HIGH);
 
  digitalWrite(motor_right[0], LOW);
  digitalWrite(motor_right[1], HIGH);
}

void turn_left(){
  digitalWrite(motor_left[0], LOW);
  digitalWrite(motor_left[1], HIGH);
 
  digitalWrite(motor_right[0], HIGH);
  digitalWrite(motor_right[1], LOW);
}

void turn_right(){
  digitalWrite(motor_left[0], HIGH);
  digitalWrite(motor_left[1], LOW);
 
  digitalWrite(motor_right[0], LOW);
  digitalWrite(motor_right[1], HIGH);   
}