LusoRobótica - Robótica em Português
Robótica => Iniciantes => Tópico iniciado por: NelsonPRSousa em 11 de Fevereiro de 2011, 22:38
-
Olá pessoal,
Estou com vários problemas para montar o meu robot. - O objectivo seria apenas meter o robot a seguir uma linha preta, utilizando o sensor QTR-8RC (http://www.pololu.com/catalog/product/961).
Actualmente, tenho o sensor montado na breadboard e ligado ao Arduino.
Pergunta 1: Onde devo ligar o LedOn? E a resistência que trouxe?
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fwww.pololu.com%2Fpicture%2F0J623.600.jpg%3F1276058165&hash=8f8c21f2e2b0693ed2c899e6ae92f71596c24312)
Pergunta 2: Depois de ter o VCC ligado ao VIN e o GND(sensor) ligado ao GND(arduino), e cada sensor ligado a uma saída digital do Arduino, o que fazer?
Estive a ler e tal, e vi que era preciso "calibrar" os sensores. Mas o que e isto? E como se faz?
Obrigado a todos pela ajuda!
-
Na página da pololu tens tudo o que precisas...
http://www.pololu.com/catalog/product/961/resources (http://www.pololu.com/catalog/product/961/resources)
Assim como uma pequena pesquisa mostra montes de tópicos sobre esse sensor, mas vai a esse link e começa a ler e saca a lib para arduino.
-
Não consegui descobrir onde devo ligar o LedOn nem onde colocar a resistência. :S
-
Está explicito em vários sitios...
Uma pesquisa aqui no forum tambem te dá muitos resultados, vais á pagina inicial do forum e pesquisas.
-
Talvez te possa ajudar :D
Para o teu sensor, só precisas de ligar as entradas VIN, GND e as numeradas, consoante o número de sensores que estejas a usar. Nós por exemplo, usámos apenas 6 sensores e então partimos o módulo de 2 sensores e no que sobrou, ligámos os fios da seguinte forma:
VIN do Sensor ----> Power rail posiiva da breadboard
GND do Sensor ----> Power rail negativa da breadboard
Entradas 1-6 do sensor -----> Analogicos do Arduino (A0- A5, mas a funcionarem como digitais 14-19 por serem 6 juntinhos)
O LED ON não tem nada ligado, é facultativo como indica aqui (http://www.pololu.com/docs/pdf/0J12/QTR-8x.pdf) na pág. 6).
Para fazer as ligações, usámos um daqueles cabos flat (http://www.kaisergood.com/stuff/en/flat_cable_assy_e14-l.jpg) que se encontram dentro dos PCs velhos e ligámos usámos headers macho que encaixavam nos terminais pretos daqueles cabos, fazendo a ligação.
Na foto, vê-se um bocado mal mas está lá o cabo flat e nota-se umas bolhas brilhantes no sensor que são os sitios onde soldámos os headers macho:
(https://lh5.googleusercontent.com/_aLF5GGE4AgQ/TYevsaFMGyI/AAAAAAAAAdc/askIjGAaliw/s640/sensor_nosso1.jpg)
-
kual a direrença d ligar no vin ou no 5v?
-
e tem diferença s forem sensores separados?
-
Alimentar no VIN ou no 5V isso não tem a ver com o sensor. Tem a ver com o Arduino. Alimentas o Arduino da seguinte forma:
- Se a fonte de alimentação for de cerca de 5V (quer por ser a tensão fornecida pelas pilhas ou por teres um regulador de tensão externo), ligas à entrada 5V;
- Se a fonte de alimentação for superior a 7 e até 12 V, ligas à entrada VIN que passa por um regulador interno do Arduino que assegura que chegam 5V aos seus componentes.
e tem diferença s forem sensores separados?
Não percebi o que querias dizer com isto. Cada array tem 8 sensores. Podes não usá-los todos, visto que até dá para partir a barra e ficar com uma de 6 sensores e outra de 2 sensores, mas nesse caso é como se tivesses duas barras diferentes que não se usam no mesmo projecto.
-
porque o meu sensor n tem luz e alguns sensores n têm voltagem?
tenho tudo bem ligado
-.-
-
n me podes deixar a tua programaçao ja agora para ver s a k eu tenho funciona..?
-
porque o meu sensor n tem luz e alguns sensores n têm voltagem?
tenho tudo bem ligado
Não sei se é o caso e se tu já sabes isto, mas as luzes não se vêem a olho nu porque são infra vermelhos. Eu no início pensava que eram LEDs normais e também não via nada. Para as veres, tens de usar a câmara de um telemóvel. Se mesmo assim não se virem as luzes, então é porque há um mau contacto nos fios da alimentação. A câmara é excelente para confirmar quando há ou deixa de haver contacto.n me podes deixar a tua programaçao ja agora para ver s a k eu tenho funciona..?
A programação que eu usei aqui foi só para testar o sensor ligado ao PC e ao Arduino (a mostrar no PC valores lidos pelo sensor). Se esse teste funcionar, então depois é que se passa para o robot propriamente dito com motores e base própria. A programação desse pequeno teste está aqui (http://lusorobotica.com/index.php?topic=2969.msg34471#msg34471)
-
ah ok ja vi k as "luzes" funcionam com o telemovel
-
os fios do sensor liga s ao pinos analogicos ou digitais do arduino?
-
Digitais. Se bem que todos os pinos do Arduino podem servir como digitais. Aqueles pinos A0, A1, A2, A3, A4 e A5 são os pinos digitais 14, 15, 16, 17, 18 e 19 se assim os chamares no código. Tens de fazer a ligação entre as entradas numeradas de 1 a 8 no sensor e 8 pinos do arduino. Depois no código que fizeres tens de indicar que estão nesses pinos.
-
ok..e que isto n me ta a dar muito bem como eu quero.
eu simolesmente queria k quando detecta s a linha ele desse uma volta sem passar a linha.
em vex de a seguir quero k kuando a encontre s vire pa outro lado
-
mostra aqui o código que tu tens. e já agora, confirma se os fios estão ligados na ordem certa e que os pinos também estão declarados na ordem certa.
-
aqui tens....
#include <PololuQTRSensors.h>
int motor1Pin1 = 5; // Ponte H
int motor1Pin2 = 6; // Ponte H
int motor2Pin1 = 10; // Ponte H
int motor2Pin2 = 11; // Ponte H
PololuQTRSensorsRC qtr((unsigned char[]) {9,8,7,6,5,4,3,2}, 8);
void setup()
{
Serial.begin(9600);
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
int i;
for (i = 0; i < 250; i++)
{
qtr.calibrate();
delay(20);
}
Serial.println("Calibrado");
}
void loop()
{
unsigned int sensors[8];
int position = qtr.readLine(sensors);
if (sensors[0] > 750 && sensors[1] > 750 && sensors[2] > 750 && sensors[3] > 750 && sensors[4] > 750 &&
sensors[5] > 750 && sensors[6] > 750 && sensors[7] > 750)
{
Serial.println("Tudo escuro");
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
delay (1800);
}
else
{
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
delay (3500);
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
delay (3000);
return;
}
int error = position - 3500;
Serial.println(position);
delay(1000);
}
-
Deixa-me ver se percebi bem :)
Esse código faz com que o robot ande para a frente de se vir tudo escuro e que rode 3,5 segundos para a esquerda e depois 3,5 segundos para a direita, em todas as outras situações? Isso não faz sentido nenhum porque ele vai andar para a frente se os 8 sensores tiverem sobre a linha preta ou então quando levantas o robot do chão (também lê tudo escuro, nesta situação). E vai rodar para os lados em todas as situações restantes, quer esteja a ver a linha em qualquer dos sensores e quer não esteja a ver a linha (tudo branco). É esse o significado do "else": todas as outras situações...
Talvez querias corrigir isso. Se já definiste a "position", usa isso através de um "if". Se position > 4000, virar para um lado, se position < 3000 virar para o outro lado e se 3000 < position < 4000, seguir em frente, aí sim.