Arduino Abstandsmesser/Crashalert

Author: Florian Richter, bearbeitet von Wilfried Klaas

Board: Arduino Uno

Funktionsweise: Der Arduino misst über den Ultraschallsensor den Abstand zum vor ihm liegenden Objekt und rechnet es intern in Zentimeter um. Dies wird dann auf der LCD-Anzeige dargestellt. Ab einer Entfernung von 30 cm ertönt ein Warnton der immer nerviger wird, je näher das Objekt kommt. Bei einer geringeren Entfernung als 4 cm ist der Warnton dann fast durchgehend. Bei 12 cm Entfernung und geringer wird der Abstand auch graphisch in der untersten Zeile dargestellt.

Einsatzgebiet: hinten an ein Auto angebracht als Einparkhilfe, Roboter, oder allem, wo ein geringer Abstand gefährlich werden könnte.

Material:
1 Arduino Uno
1 4-Zeiliges LCD-Display (z. B. ein YM2004A)
1 Ultraschallmodul (HC-SR04)
2 22 Ohm Wiederstände
1 Lautsprecher
Jeh nach Vorliebe
Viele Steckdrähte und ein Breadboard oder eine ausreichend große Platine und Überbrückungsdraht

Aufbau:
Arduino —> LCD-Display
GND → 1
5V → 2 & 15
GND → [22Ohm] → 3
GND → [22Ohm] → 16
12 → 4
11 → 5
10 → 6
7 → 11
6 → 12
5 → 13
4 → 14

Lautsprecher —> Arduino
+ → 8
- → GND

Ultraschallsensor —> Arduino
GND → GND
Echo → 2
Trig → 3
VCC → 5V

Code:

distance.ino
//--------------------------------------------------
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 7, 6, 5, 4);
#define trigPin 3
#define echoPin 2
 
void setup()
{
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  lcd.begin(20, 4);
  lcd.print("Entfernung zum");
  lcd.setCursor(0, 1);
  lcd.print("Hindernis:");
}
 
void loop()
{
  int zwischensumme, entfernt, tonTon, warn;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(1000);
  digitalWrite(trigPin, LOW);
  zwischensumme = pulseIn(echoPin, HIGH);
  entfernt = (zwischensumme / 2) / 29.1;
  tonTon = (zwischensumme) / 29.1;
  warn = (entfernt * 10);
  int thisPitch = map(entfernt, 0, 200, 2093, 22);
  if (entfernt < 30) // Ab hier wird der Warnton ausgegeben
  {
    tone(8, thisPitch);
    delay(warn);
    noTone(8);
  }
  if (entfernt < 4) //Ab hier wird der Warnton penetrant
  {
    tone(8, thisPitch);
    delay(1000);
    noTone(8);
  }
  // zum richtigen Darstellen der Zentimeterzahl
  lcd.setCursor(0, 2);
  lcd.print("00 Zentimeter");
  if (entfernt >= 100)
  {
    lcd.setCursor(0, 2);
    lcd.print(entfernt);
  }
  else if (entfernt >= 10)
  {
    lcd.setCursor(1, 2);
    lcd.print(entfernt);
  }
  else
  {
    lcd.setCursor(2, 2);
    lcd.print(entfernt);
  }
  // Ab hier wird in der unteren Zeile
  // eine graphische Darstellung angezeigt.
  if (entfernt > 12)
  {
    lcd.setCursor(0, 3);
    lcd.print(" ");
  }
  else if (entfernt == 12)
  {
    lcd.setCursor(0, 3);
    lcd.print("-|________________|-");
  }
  else if (entfernt == 11)
  {
    lcd.setCursor(0, 3);
    lcd.print("--|______________|--");
  }
  else if (entfernt == 10)
  {
    lcd.setCursor(0, 3);
    lcd.print("---|____________|---");
  }
  else if (entfernt == 9)
  {
    lcd.setCursor(0, 3);
    lcd.print("----|__________|----");
  }
  else if (entfernt == 8)
  {
    lcd.setCursor(0, 3);
    lcd.print("-----|________|-----");
  }
  else if (entfernt == 7)
  {
    lcd.setCursor(0, 3);
    lcd.print("------|______|------");
  }
  else if (entfernt == 6)
  {
    lcd.setCursor(0, 3);
    lcd.print("-------|____|-------");
  }
  else if (entfernt == 5)
  {
    lcd.setCursor(0, 3);
    lcd.print("--------|__|--------");
  }
  else if (entfernt == 4)
  {
    lcd.setCursor(0, 3);
    lcd.print("---------||---------");
  }
  else if (entfernt <= 3)
  {
    lcd.setCursor(0, 3);
    lcd.print(" W A R N U N G ");
  }
  delay(100);
}
//--------------------------------------------------

Kritik, Verbesserungen und Anreize immer erwünscht ;)