#include <stdint.h> // Biblioteca para tipos de dados mais econômicos
// Configuração dos pinos do sensor ultrassônico
const int trigPin = 9; // Pino TRIG do sensor
const int echoPin = 10; // Pino ECHO do sensor
const int distanciaMaximaDesativaRele = 200; // Distância máxima em cm para desativar o relé
// Configuração do pino do relé
const int8_t relePin = 12; // Pino conectado ao relé
// Controle de tempo
unsigned long ultimoTempoAtualizacao = 0;
unsigned long tempoAtual = 0;
unsigned long intervaloAtualizacao = 1000; // Intervalo de 1 segundo
bool estadoRele = LOW;
// Função para medir a distância usando o sensor ultrassônico
unsigned int medirDistancia() {
unsigned long duracaoPulso; // Tempo do pulso do ECHO
unsigned int distanciaCM;
// Enviando pulso TRIG
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lendo o tempo de retorno no ECHO
duracaoPulso = pulseIn(echoPin, HIGH);
// Calculando a distância em cm (velocidade do som 0.034 cm/us, ida e volta)
distanciaCM = duracaoPulso * 0.034 / 2;
return distanciaCM; // Retorna a distância medida
}
// Função para atualizar o estado do relé e LED em intervalos de tempo
void atualizarEstadoRele() {
// Obtendo o tempo atual
tempoAtual = millis();
// Verificando se a distância ultrapassa o limite para desligar o relé
if (medirDistancia() >= distanciaMaximaDesativaRele) {
digitalWrite(relePin, LOW); // Desliga o relé
} else {
// Caso contrário, controla o estado do relé com base no tempo
if (tempoAtual - ultimoTempoAtualizacao >= intervaloAtualizacao) {
ultimoTempoAtualizacao = tempoAtual; // Atualiza o último tempo
// Alterna o estado do relé
estadoRele = !estadoRele;
digitalWrite(relePin, estadoRele);
}
}
}
void setup() {
pinMode(relePin, OUTPUT); // Configura o pino do relé como saída
pinMode(trigPin, OUTPUT); // Configura o pino TRIG como saída
pinMode(echoPin, INPUT); // Configura o pino ECHO como entrada
}
void loop() {
atualizarEstadoRele(); // Chama a função para verificar e atualizar o estado do relé
}