David Da cruz silva
Published

Parking sensor

The project consists of a driver assistance system that uses sound waves to measure the distance between the vehicle and an obstacle.

BeginnerFull instructions provided211
Parking sensor

Things used in this project

Hardware components

Buzzer, Piezo
Buzzer, Piezo
×1
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×1
Jumper wires (generic)
Jumper wires (generic)
×11
Arduino UNO
Arduino UNO
×1
Resistor 221 ohm
Resistor 221 ohm
×1
Solderless Breadboard Full Size
Solderless Breadboard Full Size
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Custom parts and enclosures

sensor_de_estacionamento_BwIchBvDrU.png

Schematics

sensor_de_estacionamento_xnwlGdzfB7.pdf

Code

Code

C/C++
const int PINO_TRIGGER = 9;
const int PINO_ECHO    = 10;
const int LED_VERDE    = 2;
const int LED_AMARELO  = 3;
const int LED_VERMELHO = 4;
const int PINO_BUZZER  = 5;

const int DIST_MAX     = 150; 
const int DIST_CRITICA = 40;  

void setup() {
  // REQUISITO: Inicia a comunicação com o computador
  Serial.begin(9600); 
  
  pinMode(PINO_TRIGGER, OUTPUT);
  pinMode(PINO_ECHO, INPUT);
  pinMode(LED_VERDE, OUTPUT);
  pinMode(LED_AMARELO, OUTPUT);
  pinMode(LED_VERMELHO, OUTPUT);
  pinMode(PINO_BUZZER, OUTPUT);
}

void loop() {
  int distancia = lerDistanciaMedia(); // chama a função da media e guarda em distancia

  // REQUISITO: Envia a distância para o monitor serial
  Serial.print("Distancia: ");
  Serial.print(distancia);
  Serial.println(" cm");

  controlarSinalizacao(distancia); // Define qual luz acende
  gerarBipeProgressivo(distancia); // Comando o som a depender da distancia
}

int lerDistanciaMedia() {
  long somaDistancias = 0;
  for(int i = 0; i < 5; i++) { // Faz o sensor ler 5 vezes pro valor não ficar pulando
    digitalWrite(PINO_TRIGGER, LOW);
    delayMicroseconds(2);
    digitalWrite(PINO_TRIGGER, HIGH);
    delayMicroseconds(10);
    digitalWrite(PINO_TRIGGER, LOW);

    long duracao = pulseIn(PINO_ECHO, HIGH);
    // Calcula a distância: tempo vezes velocidade, dividido por 2(ida e volta)
    somaDistancias += (duracao * 0.0343) / 2; 
    delay(10); 
  }
  return somaDistancias / 5; // Pega as 5 leituras e dividi por 5 pra dar uma media 
}

void controlarSinalizacao(int d) {
  digitalWrite(LED_VERDE, (d > DIST_MAX)); // Acente se estiver longe
  digitalWrite(LED_AMARELO, (d <= DIST_MAX && d > DIST_CRITICA)); // Acende se estiver no meio
  digitalWrite(LED_VERMELHO, (d <= DIST_CRITICA)); // Acende se estiver perto
}

void gerarBipeProgressivo(int d) {
  if (d <= DIST_MAX) {
    // Regra de três e transforma a distancia em tempo
    int tempoEspera = map(d, DIST_CRITICA, DIST_MAX, 50, 400); 
    // Garante o tempo do bipe não ser menor que 50ms e nem maior que 400ms
    tempoEspera = constrain(tempoEspera, 50, 400); 

    tone(PINO_BUZZER, 1000); 
    delay(60);               
    noTone(PINO_BUZZER);
    delay(tempoEspera); // Espera para o proximo apito dependendo da distancia
  } else {
    noTone(PINO_BUZZER);
    delay(100); 
  }
}

Credits

David Da cruz silva
1 project • 0 followers

Comments