Boa noite,

Montei um circuito que entre diversos itens, utiliza dois sensores ultrassônicos simultaneamente. Tempos atrás, quando escrevi o código, tudo estava funcionando corretamente e as medições de distância estavam corretas.

No entanto, hoje fui montar esse circuito novamente, com o mesmo código, mas um dos sensores está retornando um valor fora do esperado. Ele retorna ou uma distância muito pequena (em torno de 4cm) ou muito grande (em torno de 3300cm), mesmo com objetos na frente dele. Já experimentei trocar os sensores e os cabos, mas o erro persistiu. Ainda acho que seja algo na ligação mesmo, vide que o código sempre funcionou. Gostaria de saber se alguém tem ideia do que possa estar causando esse erro.

Segue abaixo o código usado:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
//DECLARAÇÃO DE VARIÁVEIS
const int LDR=A0;
int ValorLido=0;
int ESCURO=40;
int CLARO=200;
#define trigPin1 6
#define echoPin1 7
#define trigPin2 8
#define echoPin2 9
long duration, distance, Sensor1, Sensor2;
char statusRELE;
void setup()
{
Serial.begin(9600);
pinMode(trigPin1, OUTPUT); // ATIVAÇÃO DOS PINOS TRIGGER COMO SAÍDA, ECHO COMO ENTRADA E RELÉ COMO SAÍDA
pinMode(echoPin1, INPUT);
pinMode(trigPin2,OUTPUT);
pinMode(echoPin2, INPUT);
mySerial.begin(9600);
}

void loop() {
ValorLido=analogRead(LDR); // MEDIÇÃO DO LDR
SonarSensor(trigPin1, echoPin1); // CÁLCULO DA DISTÂNCIA COM BASE NO ENVIO E RECEPÇÃO DE PULSOS ULTRASSÔNICOS
Sensor1=distance;
SonarSensor(trigPin2, echoPin2);
Sensor2=distance;
Serial.println(ValorLido); // IMPRIME VALOR LIDO PELO LDR
if(ValorLido<ESCURO){
if(Sensor1<=200 or Sensor2<=200){
statusRELE='L';
Serial.println("Relé ligado");
}
}
if(ValorLido>CLARO){ // RELÉ DESLIGA SE HOVUVER CLARIDADE ACIMA DA ESTIPULADA
Serial.println("Relé desligado");
statusRELE='D';
}
if(Sensor1>200 and Sensor2>200 and ESCURO<ValorLido<CLARO){ // CASO EM QUE O LDR DETECTE ESCURIDÃO E ACENDA O RELÉ. CASO OS SENSORES NÃO DETECTEM PRESENÇA, RELÉ DESLIGA
statusRELE='D';
Serial.println("Relé desligado");
}
Serial.print("Distância detectada pelo sensor 1 em cm: ");
Serial.println(Sensor1);
Serial.print("Distância detectada pelo sensor 2 em cm: ");
Serial.println(Sensor2);
if(statusRELE=='L'){
mySerial.print(statusRELE);
}
if(statusRELE=='D'){
mySerial.print(statusRELE);
}
delay(500); // DELAY PARA EVITAR INSTABILIDADES DOS SENSORES
}

void SonarSensor(int trigPin, int echoPin) // MÉTODO QUE CÁLCULA DISTÂNCIA DO SENSOR ATÉ O INDIVÍDUO COM BASE NO TEMPO DE ENVIO E RECEPÇÃO DE PULSOS ULTRASSÔNICOS
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
}

Exibições: 177

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço