23 de novembro de 2024

Sensor para Garagem - Ultrassônico HC-SR04

Sensor para colocar na parede da garagem para auxiliar o estacionamento de ré.

Nos carros mais antigos, não possuindo sensor e câmera de ré, deixar essas luzes na parede da garagem, que seja possível observá-las pelo espelho retrovisor, é um auxílio muito bom para estacionar.

Quando o sensor detectar o carro entrando na garagem, a luz verde será acionada.
Com o carro se aproximando do sensor, a luz amarela começará a piscar, cada vez mais rápido conforme se aproxima.
A luz vermelha será acionada quando o carro estiver na distância correta, indicando a posição final e, segundos depois, se apaga.

Segue o esquema de ligação e o código fonte com comentários para entendimento.

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*---------------------------------------------------------
  Programa : SENSOR PARA GARAGEM - ULTRASSÔNICO HC-SR04
  Autor    : Fellipe Couto [ http://www.efeitonerd.com.br ]
  Data     : 22/11/2024
  ---------------------------------------------------------*/
#include <Ultrasonic.h>  //Biblioteca do sensor HC-SR04 [ https://github.com/ErickSimoes/Ultrasonic/ ]

#define GREEN 2   //Led verde
#define YELLOW 3  //Led amarelo
#define RED 4     //Led vermelho
#define TRIG 5    //Trigger do sensor
#define ECHO 6    //Echo do sensor

#define DIST_MIN 30  //Distância mínima em centímetros

Ultrasonic sensor(TRIG, ECHO);  //Variável do sensor HC-SR04
int timeRed = 0;                //Contador de tempo com carro estacionado na posição mínima

void setup() {
  pinMode(TRIG, OUTPUT);  //Configura o pino trig como saída (envia pulso)
  pinMode(ECHO, INPUT);   //Configura o pino echo como entrada (recebe pulso)
  pinMode(GREEN, OUTPUT);
  pinMode(YELLOW, OUTPUT);
  pinMode(RED, OUTPUT);
}

void loop() {
  int distance = sensor.read();  //Leitura do sensor

  int distYellowMax = DIST_MIN * 3;      //Distância máxima do led amarelo
  int distGreenMax = distYellowMax * 2;  //Distância máxima do led verde
  int valueYellowBlink = map(distance, DIST_MIN, distYellowMax, 40, 400);  //Valor do delay para piscar o led amarelo

  ledsOff();

  //Condicionais para acionamento do led correto
  if (distance <= DIST_MIN && timeRed <= 100) {
    timeRed++;
    digitalWrite(RED, HIGH);
  } else if (distance > DIST_MIN && distance <= distYellowMax) {
    delay(valueYellowBlink);
    digitalWrite(YELLOW, HIGH);
  } else if (distance > distYellowMax && distance <= distGreenMax) {
    digitalWrite(GREEN, HIGH);
  }

  if (distance > DIST_MIN) timeRed = 0;  // Reseta o contador quando o carro sai da posição mínima
  delay(100);
}

void ledsOff() {
  digitalWrite(GREEN, LOW);
  digitalWrite(YELLOW, LOW);
  digitalWrite(RED, LOW);
}

Nenhum comentário:

Postar um comentário