Problemas com motores n20 e Sensores de 3 canais

Estou projetando um seguidor de linha com base nesse codigo:
//Motores – Saídas digitais

int motorA_PWM = 10; //Controle de velocidade do motor A (Esquerdo)

int motorB_PWM = 11; //Controle de velocidade do motor B (Direito)

int motorA_EN = 12; //Controle de direção do motor A (Esquerdo)

int motorB_EN = 13; //Controle de direção do motor B (Direito)

//Sensor TCRT5000 – Entradas digitais

int sensorDireito = 7; //Pino do sensor TCRT direito

int sensorCentro = 6; //Pino do sensor TCRT central

int sensorEsquerdo = 5; //Pino do sensor TCRT esquerdo

//Variáveis para armazenar a leitura dos sensores TCRT5000

int leituraDireito; //Pino do sensor TCRT direito

int leituraCentro; //Pino do sensor TCRT central

int leituraEsquerdo; //Pino do sensor TCRT esquerdo

//Velocidade PWM

int veloc0 = 0; //Velocidade para parar os motores

int veloc1 = 190; //Velocidade motor A

int veloc2 = 190; //Velocidade motor B

int veloc3 = 170; //Velocidade motor A

int veloc4 = 170; //Velocidade motor B

void setup() {

//Configura os motores como saída

pinMode (motorA_PWM, OUTPUT);

pinMode (motorA_EN, OUTPUT);

pinMode (motorB_PWM, OUTPUT);

pinMode (motorB_EN, OUTPUT);

//Configura os sensores como entrada

pinMode (sensorDireito, INPUT);

pinMode (sensorCentro, INPUT);

pinMode (sensorEsquerdo, INPUT);

}

void loop() {

leitura(); //Chama a função de leitura dos sensores

seguidor(); //Chama a função seguidor de linha

}

void leitura() {

leituraDireito = digitalRead (sensorDireito); //Leitura do sensor

leituraCentro = digitalRead (sensorCentro); //Leitura do sensor central

leituraEsquerdo = digitalRead (sensorEsquerdo); //Leitura do sensor

}

void seguidor() {

if ((leituraDireito == 0) && (leituraCentro == 1) && (leituraEsquerdo

== 0)) { //Sensor central detectou a linha

frente(); //CDR CAR move para frente

}

if ((leituraDireito == 1) && (leituraCentro == 0) && (leituraEsquerdo

== 0)) { //Sensor direito detectou a linha

direita(); //CDR CAR move para a direita

}

if ((leituraDireito == 0) && (leituraCentro == 0) && (leituraEsquerdo

== 1)) { //Sensor esquerdo detectou a linha

esquerda(); //CDR CAR move para a esquerda

}

}

void frente() {

digitalWrite(motorA_EN, HIGH); //Motor A. HIGH = Frente

digitalWrite(motorB_EN, HIGH); //Motor B. HIGH = Frente

analogWrite(motorA_PWM, veloc1); //Motor A com pwm = veloc1

analogWrite(motorB_PWM, veloc2); //Motor B com pwm = veloc2

}

void direita() {

digitalWrite(motorA_EN, HIGH); //Motor A. HIGH = Frente

digitalWrite(motorB_EN, LOW); //Motor B. HIGH = Frente

analogWrite(motorA_PWM, veloc3); //Motor A com pwm = veloc3

analogWrite(motorB_PWM, veloc0); //Motor B com pwm = veloc0

}

void esquerda() {

digitalWrite(motorA_EN, LOW); //Motor A. HIGH = Frente

digitalWrite(motorB_EN, HIGH); //Motor B. HIGH = Frente

analogWrite(motorA_PWM, veloc0); //Motor A com pwm = veloc0

analogWrite(motorB_PWM, veloc4); //Motor B com pwm = veloc4

}

estou utilizando uma shield l298P e um arduino uno ,primeiro os sensores estão mostrando algo estranho,ao encostar minha mão o sensor detecta e logo os motores sao ativados,apos eu tira a mão os motores n20 continuam rodando e nao param,o objetivo e para o sensor seguir um circuito de fita preta mas ele nao detecta e logo os motores ficam se mexendo lentamente ate mesmo não se mexem,ja mexi e pesquisei o que seria o problema os motores estao ok,o sensor de 3 canais que estou utilizando foi trocado por um novo,então mexi nos codigos mas nada adiantou aqui foi minha ultima opção para essa solução.

Olá! Bem vindo ao Forum.

Quando for possível, dê uma lida em Como obter o melhor desse Forum. Ali tem dicas úteis de como colocar suas questões de uma forma que seja mais fácil para as outras pessoas te ajudarem (inclusive como colocar seu código usando "code tags").

Os sensores TCRT que você está usando são módulos, certo? Eles precisam ser regulados para "enxergar" a linha na altura correta do seu carrinho. Para ajustar a sensibilidade, é preciso girar esse trimpot aqui:

image

O ajuste é fino, então você pode fazer com cada sensor ligado, até achar o ponto correto.

Eu não achei problemas de lógica no seu código. Apenas não era necessário criar variáveis diferentes para valores de velocidade que são iguais. Ou seja, você só precisava de veloc0 = 0, veloc1 = 190 e veloc2 = 170.

Olá!,então,na verdade não ele e um sensor com já 3 sensores embutidos como esse:

E questão de código já me deu um grande alívio saber que sua lógica está boa,eu fiz uns teste por umas horas e percebi que o sensor esta seguindo apenas linha branca e não preta ele para como eu tinha "falado",e sobre a altura ele está um pouco alto posso confessar mas mesmo encostando sobre a linha preta seu led não acende e já branco acende,mesmo com a lógica do código dizendo que o 1 = preto e 0 = branco

O piso da minha casa é escuro. Então quando eu fiz um seguidor de linha, eu usava a fita branca. Para você usar a fita preta, precisa ter certeza de que o piso onde a fita está é claro; regular novamente a sensibilidade dos sensores e daí inverter a lógica dos zeros e uns do seu programa.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.