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 ;)
Diskussion
Sorry.