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
-
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.
-
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.
-
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?
-
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.
-
obrigado desde ja a todos. o meu sensor e um sharp gpxxxx
-
Olá André, deixo aqui um pequeno código de navegação básica para o teu bot.
Bom trabalho
-
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()':
-
nao te enganas-te no anexo do codigo?
-
talvez apagaste sem querer a biblioteca?
-
eu tenho as bibliotecas...
bjs
-
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...
-
tinhas ali várias chavetas em falta.. experimenta assim
# 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);
}
-
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:
-
bem estou a ver que n tenho hipoteses de colocar o meu robo a funcionar ...
alguem tem ideias de colocar o robo a funcionar ?
-
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?
-
versao e a 15
-
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?
-
ja fiz isso mas nada continua na mesma, ate ja verifiquei as librarias
-
manda o teu codigo sff
-
já agora se escreveres só isto no arduino e carregares no botão play o que acontece?
#include <Servo.h>
void setup() {}
void loop () {}
-
aqui vai o programa
-
#include <Servo.h>
void setup() {}
void loop () {}
compilei e nao deu erro
-
no teu código tens
# include <Servo.h>
e deve ser
#include <Servo.h>
sem o espaço entre o # e include ;)
-
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()
-
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
-
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:
-
estás a chamar a função motor_stop() mas no entanto ela não existe...
-
mesmo declarada vai dando erro.
-
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
-
pois e a partir deste que eu estou a trabalhar.
-
Tu continuas a chamar
motor_stop();
sem a ter declarado em nenhum lugar.
-
mas ja tentei declarar int motor_stop(); e nada continua a dar erro.
-
faz algo de genero:
void motor_stop(){
//Aqui inseres o que quer que a função faça.
};
-
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
-
por alguma razão não tens as funções de controle dos motores no teu código, tenta assim:
// ---------------------------------------------------------------------------- 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);
}