Go Down

Topic: Ajudem-nos por favor!!! (Read 1 time) previous topic - next topic

Furkas

Eu e o meu grupo de área de projecto construimos um robot de busca e salvamento com dois servos e um sensor de pista ligados a um arduino. o objectivo é que siga a linha preta numa superficie branca. superficie que tem um corte na linha (que consideramos como sendo uma vitima) sendo que quando deixa de detectar a linha pára. No fundo queremos que o robot siga a linha. O nosso maior problema é a programação do robot, já tentamos inumeros programas para programar o nosso arduino (axe 121 arduino). Sera que alguem que perceba de programação nos podia enviar um programa? temos que ter o programa até terça-feira. Por favor, ajudem-nos :'(

Radames

qual o sensor esta utilizando para detectar a linha preta?
já produziu algum código para isso? post aqui para nós todos podermos te ajudar,
os sensores que estão captando a linha esta funcionando?


até

amando96

Pois, estar a fazer o vosso trabalho todo é um bocado... coiso

Mas ajudar a melhorar o código que já têm, é outra coisa.

Furkas

temos um axe121 (este aqui: http://aliatron.com/loja/catalog/product_info.php?cPath=30_152&products_id=312&osCsid=gtb3)

So nos falta mesmo o programa. Temos que ter para a apresentação de quarta.
O sensor está a funcionar perfeitamente, tal como todas as outras componetes. so estamos com dificuldade a programa-lo. tentamos por um programa mas nao funciona.
Era optimo se nos podessem ajudar.

Obrigado pela ajuda

Furkas

temos este código mas nao fuinciona muito bem. o robot nao se guia pela linha e andas às voltas.

//InICIO


// Sweep
// by BARRAGAN <http://barraganstudio.com>


#include <Servo.h>


Servo DIR;
Servo ESQ;  // create servo object to control a servo
               // a maximum of eight servo objects can be created

int pos = 0;    // variable to store the servo position

void setup()
{
 DIR.attach(10);  // attaches the servo on pin 9 to the servo object
 ESQ.attach(11);  // attaches the servo on pin 9 to the servo object
}

void frente(int t)
{
   DIR.write(10);              // DIR FRENTE
   ESQ.write(170);              // tell servo to go to position in variable 'pos'
   delay(t);                       // waits 15ms for the servo to reach the position
}


void rodaAH(int t)
{
   DIR.write(10);              // DIR FRENTE
   ESQ.write(10);              // tell servo to go to position in variable 'pos'
   delay(t);                       // waits 15ms for the servo to reach the position
}
void rodaH(int t)
{
   DIR.write(170);              // DIR FRENTE
   ESQ.write(170);              // tell servo to go to position in variable 'pos'
   delay(t);                       // waits 15ms for the servo to reach the position
}


void atras(int t)
{
   DIR.write(170);              // DIR FRENTE
   ESQ.write(10);              // tell servo to go to position in variable 'pos'
   delay(t);                       // waits 15ms for the servo to reach the position
}


void parar(int t)
{
 DIR.write(65);
 ESQ.write(63);
 delay(t);
}


void loop()
{

rodaH(1000);
parar(1000);
atras(1000);
parar(1000);


}


//FIM

Obrigado pela vossa ajuda

Radames

certo,
quais são os pinos onde vcs conectaram o axe121?
Não vi nenhuma definição de pinMode( , INPUT) para os sinais do módulo axe121,

pelo código teste do pdf do seu módulo
http://www.rev-ed.co.uk/docs/axe121.pdf
existem três saidas do módulo axe121, se a saida input1 for HIGH então o robo deve ir para frente se a saida input2 for HIGH entao virar para esquerda, se a saida input6 for HIGH entao virar para direita.

Vocês precisam verificar isso, quais os pinos do arduino vcs conectaram o axe 121?

já olharam o pdf dele?


Furkas

ligamos os tres pinos no analogico do nosso arduino. nas entradas 2,3,4


amando96

Então basta lerem cada sensor, e fazerem uma acção dependednte dos valores lidos.

Furkas

pois. Mas como percebemos muito pouco de programação, não sabemos faze-lo.
Esse é o nosso grande problema:S

Radames

certo , mas pelo que vi pelo datasheet a leitura desse bits é digital, mas de qualquer maneira esta ok..
No setup acrescente
Code: [Select]


pinMode(16,INPUT); //utilizar  a porta analogica 2 como input digital
pinMode(17,INPUT); //utilizar  a porta analogica 3 como input digital
pinMode(18,INPUT); //utilizar  a porta analogica 4 como input digital




dentro do loop verificar os bits



Code: [Select]


if( digitalRead(16) ){

 frente();

}else if (digitalRead(17)){

 esquerda();

}else if( digitalRead(18)){

 direita();

}else{

 parar()

}



você precisa verificar, quais são os input1, input2 e input 6, mas é só olhar o datasheet.....

boa sorte

amando96

#10
May 23, 2010, 11:13 pm Last Edit: May 23, 2010, 11:13 pm by amando96 Reason: 1
O IDE tem um exemplo de código que faz isso para Uma só entrada adc(aliás, tem exemplos dos básicos todos), muito facilmente adaptam para 3.

é igual a este:
Code: [Select]
/*
 Analog input, serial output

Reads an analog input pin, prints the results to the serial monitor.

The circuit:

* potentiometer connected to analog pin 0.
Center pin of the potentiometer goes to the analog pin.
  side pins of the potentiometer go to +5V and ground

created over and over again
by Tom Igoe and everyone who's ever used Arduino

*/

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

void loop() {
 // read the analog input into a variable:
  int analogValue = analogRead(0);
  // print the result:
  Serial.println(analogValue);
  // wait 10 milliseconds for the analog-to-digital converter
  // to settle after the last reading:
  delay(10);
}


Furkas

Muito Obrigado pela ajuda.
Vou exprimentar a fazer isso amanha com o meu grupo

Obrigado ;)


Radames

outra pergunta,
vc esta utilizando servos para movimentação frotal?
existe um motor com tração para movimentação frente trás?

Furkas

Nos pusemos uns servos com rotação frontal e contínua. Para facilitar depois a programação.
Mas nao ajudou muito xD

Go Up