Estou fazendo um seguidor de linha com um arduino uno, o robô em sim ja esta quase pronto, mas estou com problema na hora de executar o codigo.
As ligações estão corretas e os sensores estão enviando os dados normalmente mas o arduino não esta enviando o sinal de nivel alto para ligar os motores, testei conectando um cabo direto de onde devia vir os sinais do arduino no polo possitivo e ele funciona, YouTube
o codigo para controlar o robô é este:
const int PinoSensor = 0;
const int PinoSensor2 = 1;
const int motorpin1 = 3;
const int motor2pin1 = 5;
int ValorSensor = 0;
int ValorSensor2 = 1;
void setup(){
Serial.begin(9600);
pinMode(motorpin1,OUTPUT);
pinMode(PinoSensor1,INPUT);
pinMode(motor2pin1,OUTPUT);
pinMode(PinoSensor2,INPUT);
}
void loop(){
int sensorValue = analogRead(PinoSensor);
Serial.println(sensorValue);
if (ValorSensor >=100){
digitalWrite(motorpin2,HIGH);
}
else { digitalWrite(motorpin1,LOW);
}
sensorValue = analogRead(PinoSensor2);
if (ValorSensor2 >= 350){
digitalWrite(motor2pin1,HIGH);
}
else { digitalWrite(motor2pin1,LOW);
}
}
e para obter os valores dos sensores é este o codigo que estou usando:
void setup()
{ Serial.begin(9600); //Necessary to set up Serial port
}
void loop()
{ Serial.print(analogRead(0));
Serial.print(' ');
delay(1000); //Set the number to change frequency of readings.
}
Não estou conseguindo entender qual é o erro, se alguem poder me ajudar agradeço
Porque não testas o hardware primeiro actuando os motores com delays primeiro para teres a certeza que os motores estão a funcionar?
Por último, como ligaste os motores ao Arduino? Lembra-te que o Arduino não consegue actuar um motor e se o tentares, certamente que vais queimar o pino do chip... Mostra como ligaste isso com um esquema.
Complementado a dúvida dos colegas com as minhas dúvidas, quais e quantos sensores você esta usando?
Eu fiz um seguidor usando três sensores um central para a linha preta, e dois laterais para a superfície branca, esses laterais servem de referência sobre para qual lado o seguidor irá se o sensor central estiver fora do valor de referência.
O esquema, fotos, componentes que você esta usando podem nos ajudar a entender o que estás a fazer.
Obrigado pela atenção de todos, com a ajuda do haistems_por, conseguir fazer o robô funcionar direito XD XD mas caso possa ajudar alguem vou colocar mais dados do meu robo e de como fiz.
lucaslimaduarte:
Obrigado pela atenção de todos, com a ajuda do haistems_por, conseguir fazer o robô funcionar direito XD XD mas caso possa ajudar alguem vou colocar mais dados do meu robo e de como fiz.
Fala ai Lucas!
Teu código ajudará outras pessoas, estou certo disso ^^
Eu uso três sensores no meu following, um para a faixa preta (referência central) eu para a área branca (referências laterais).
Obrigado Mortis :D, fiz com dois sensores pq nunca tinha feito um seguidor de linha e queria fazer o mais basico possivel para começar a entender o funcionamente, por isso do codigo tão simples sem nem usar todas as portas do sn754410
Quero mesmo é fazer um com cinco sensores que possa fazer curva de 90º ---, mas não faço a menor ideia de como o codigo funciona =( agora vou pesquisar mais e tentar fazer o de cinco sensores
Para não estar a abrir um novo tópico e visto o meu caso ser também referente a um veiculo que segue uma linha, coloco aqui a questão para o meu caso.
Para reutilizar um pequeno veiculo que tinha feito há algum tempo, resolvi colocar no mesmo 2 LDR de forma a poder fazer com que o mesmo se move-se seguindo uma linha preta. Fica a imagem com o veiculo e o conceito que tenho para os 2 LDR.
Mas não consigo que o mesmo ande como pretendia. Não sei estarei a utilizar erradamente os 2LDR para o que pretendo ou se será no próprio código que deixo abaixo.
#include <Servo.h>
#define LEFTSERVOPIN 11
#define RIGHTSERVOPIN 13
Servo leftServo;
Servo rightServo;
int speed = 15; //velocidade de ambos os servos: percentagem entre 0 e 100
int pinLDRDir = 0; // pino analógico A0 direita
float LDRDir = 0; // receberá o valor do LDR da direita
int pinLDREsq = 2; // pino analógico A2 esquerda
float LDREsq = 0; // receberá o valor do LDR da esquerdaDR
void setup()
{
setSpeed(speed);
pinMode(LEFTSERVOPIN, OUTPUT);
pinMode(RIGHTSERVOPIN, OUTPUT);
leftServo.attach(LEFTSERVOPIN); //'attaches' esquerdo servo
rightServo.attach(RIGHTSERVOPIN); //'attaches' direito servo
vaiParado();
Serial.begin(9600);
}
void loop()
{
LDRDir = analogRead(pinLDRDir);
LDREsq = analogRead(pinLDREsq);
//Se 75% de LDREsq >= LDRDir - Vira a
if( LDREsq*0.75 >= LDRDir)
vaiEsquerda();
//Senão se 75% de LDRDir >= LDREsq - Vira a
else if( LDRDir*0.75 >= LDREsq)
vaiDireita();
else
vaiFrente();
}
//------------------------------------------------------------------------------------------------------------
//INICIALIZAÇÃO DOS SERVOS PELO ARDUINO - ROTINAS
/*
* define a velocidade do veiculo entre 0-(parado) e 100-(velocidade máxima)
*/
void setSpeed(int newSpeed){
if(newSpeed >= 100) {
newSpeed = 100;}
if(newSpeed <= 0) {
newSpeed = 0;}
speed = newSpeed * 0.9;
}
/* veiculo em frente */
void vaiFrente(){
leftServo.write(90 + speed);
rightServo.write(90 - speed);
}
/* veiculo para trás */
void vaiTras(){
leftServo.write(90 - speed);
rightServo.write(90 + speed);
}
/* veiculo para a direita */
void vaiDireita(){
leftServo.write(90 + speed);
rightServo.write(90 + speed);
}
/* veiculo para a esquerda */
void vaiEsquerda(){
leftServo.write(90 - speed);
rightServo.write(90 - speed);
}
/* veiculo parado */
void vaiParado(){
//leftServo.write(90);
//rightServo.write(90);
leftServo.write(0);
rightServo.write(0);
}
Agradeço todo e qualquer contributo que possam dar.
Primeira diferença é que usamos sensores IR, mas o funcionamento não é muito diferente.
A primeira coisa:
Quais valores os LDRs retornam quando estão sobre o branco e o preto?
normalmente eu comparo o resultado da leitura do analogRead() com um valor, por exemplo:
if( LDREsq >= 100) //Supondo que seja 100 o valor sobre a linha
vaiEsquerda();
else if( LDRDir >= 100) //Supondo que seja 100 o valor sobre a linha
vaiDireita();
else
vaiFrente();
}
Você compara os dois lados, mas não tem um valor de referência