|
|
Zeile 53: |
Zeile 53: |
| == Umsetzung (HW/SW) == | | == Umsetzung (HW/SW) == |
|
| |
|
| <code> /************************************************************************************************* | | <code> vv </code> |
| * *
| |
| * Datei : Projekt_Hinderniserkennung_IDE_Sketch.ino *
| |
| * *
| |
| * Datum : 14-11-2020 *
| |
| * *
| |
| * Funktion : Programmcode für das Projekt Hinderniswarnsystem im Studiengang *
| |
| * "Business and Systems Engineering" der Hochschule *
| |
| * Hamm-Lippstadt im Wintersemester 20/21 *
| |
| * *
| |
| * Implementation : Arduino IDE 1.8.13 *
| |
| * *
| |
| * Autoren : Matthias Rassenhövel *
| |
| * Lars Vienenkötter *
| |
| * *
| |
| * Link : https://wiki.hshl.de/wiki/index.php/Hinderniswarnsystem_f%C3%BCr_Fahrzeug *
| |
| * *
| |
| * Letzte Änderung : 04-12-2020 *
| |
| * *
| |
| +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/
| |
| | |
| /*************************************************************************************************
| |
| Einbinden der Bibliotheken
| |
| *************************************************************************************************/
| |
| #include <Wire.h>
| |
| #include <LiquidCrystal_I2C.h>
| |
| #include <Servo.h>
| |
| | |
| /*************************************************************************************************
| |
| Definition der Ein- und Ausgänge
| |
| *************************************************************************************************/
| |
| const int trigPin = 2; //Trigger-Pin des Ultraschallsensors
| |
| const int echoPin = 3 ; //Echo-Pin des Ultraschallsensors
| |
| | |
| const int sdaPin = A4; //SDA-Pin des I2C-LCD
| |
| const int sclPin = A5; //SCL-Pin des I2C-LCD
| |
| | |
| const int buzzPin = 9; //Buzzer-Pin (PWM für verschiedene Frequenzen)
| |
| | |
| const int redPin = 10; //Pin für Rot der RGB-LED (PWM für verschiedene Lichtstärken)
| |
| const int greenPin = 6; //Pin für Grün der RGB-LED (PWM für verschiedene Lichtstärken)
| |
| const int bluePin = 5; //Pin für Blau der RGB-LED (PWM für verschiedene Lichtstärken)
| |
| | |
| const int ldrPin = A1; //Pin für LDR-Sensor
| |
| const int ledPin = 8; //Pin LED-Scheinwerfer für rechts und links
| |
| | |
| //const int servoPin = 11; //Servo-Pin
| |
| | |
| /*************************************************************************************************
| |
| Definition der globalen Variablen
| |
| *************************************************************************************************/
| |
| double Dauer = 0.0;
| |
| double Distanz = 0.0;
| |
| double Servoposition = 0.0;
| |
| double ldrWert = 0.0;
| |
| | |
| /*************************************************************************************************
| |
| Weitere Einstellungen:
| |
| *************************************************************************************************/
| |
| LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4); //Initialisierung LCD-Display
| |
| | |
| //Servo servo; //Initialisierung Servo-Motor
| |
| | |
| /*************************************************************************************************
| |
| SETUP - SETUP - SETUP - SETUP - SETUP - SETUP - SETUP - SETUP - SETUP - SETUP
| |
| *************************************************************************************************/
| |
| void setup() {
| |
| | |
| /*****Definition der Eingänge******/
| |
|
| |
| pinMode(echoPin, INPUT);
| |
| pinMode(ldrPin, INPUT);
| |
|
| |
| /******Definition der Ausgänge******/
| |
|
| |
| pinMode(trigPin, OUTPUT);
| |
| pinMode(buzzPin, OUTPUT);
| |
| pinMode(bluePin, OUTPUT);
| |
| pinMode(greenPin, OUTPUT);
| |
| pinMode(redPin, OUTPUT);
| |
| pinMode(ledPin, OUTPUT);
| |
| | |
| /******LCD via I2C verbinden und initialisieren******/
| |
|
| |
| lcd.init();
| |
| lcd.backlight();
| |
| | |
| /******Setup des Servo-Motors******/
| |
|
| |
| //servo.attach(4);
| |
| }
| |
| | |
| /*************************************************************************************************
| |
| LOOP - LOOP - LOOP - LOOP - LOOP - LOOP - LOOP - LOOP - LOOP - LOOP - LOOP - LOOP
| |
| *************************************************************************************************/
| |
| void loop() {
| |
| | |
| /*****Berechnung der Distanz:*****/
| |
|
| |
| digitalWrite(trigPin, LOW); // Signal am Trigger-Pin auf LOW(0) setzen
| |
| delayMicroseconds(5); // 5 µs warten
| |
| digitalWrite(trigPin, HIGH); // Aktivierung: Signal am Trigger-Pin auf HIGH (1) setzen
| |
| delayMicroseconds(10); // 5 µs warten
| |
| digitalWrite(trigPin, LOW); // Signal am Trigger-Pin auf LOW (0) setzen
| |
| Dauer = pulseIn(echoPin, HIGH); // Einlesen des Signals (Schallimpuls) am Echo-Pin [in s]
| |
|
| |
| Distanz = Dauer * 0.034 / 2; // Berechnung der Distanz [in cm]
| |
| | |
| /*****Anzeige der Distanz auf dem LCD:*****/
| |
|
| |
| lcd.setCursor(0, 0); // Cursor auf Zeile 1, Spalte 1 setzten
| |
| lcd.print("Distanz: "); // Anzeige von "Distanz: " auf LCD
| |
| lcd.setCursor(0, 1); // Cursor auf Zeile 2, Spalte 1 setzten
| |
| lcd.print(Distanz); // Anzeige von berechneter Distanz auf LCD
| |
| lcd.print(" cm "); // Anzeige von " cm" auf LCD
| |
| delay(50); // 10 ms warten
| |
| | |
| /*****Erzeugen der verschiedenen Buzzer-Töne und LED-Farben abhängig von der Distanz:*****/
| |
| | |
| if (Distanz > 20 || Distanz < 0)
| |
| {
| |
| digitalWrite(bluePin, LOW); // Blau 0% an
| |
| digitalWrite(redPin, LOW); // Rot 0% an
| |
| digitalWrite(greenPin, HIGH); // Grün 100% an
| |
| noTone(buzzPin); // kein Ton
| |
| delay(500);
| |
| }
| |
| if (Distanz > 10 && Distanz <= 20)
| |
| {
| |
| analogWrite(bluePin, 0); // Blau 0% an
| |
| analogWrite(redPin, 255); // Rot 100% an
| |
| analogWrite(greenPin, 30); // Grün (30/255*100)% an
| |
| tone(buzzPin, 1000, 1000); // Ton an (mit Frequenz: 1000 Hz & Dauer: 1000 ms)
| |
| delay(500);
| |
| }
| |
| if (Distanz > 5 && Distanz <= 10)
| |
| {
| |
| digitalWrite(bluePin, LOW); // Blau 0% an
| |
| digitalWrite(redPin, HIGH); // Rot 100% an
| |
| digitalWrite(greenPin, LOW); // Grün 0% an
| |
| tone(buzzPin, 1500, 500); // Ton an (mit Frequenz: 1500 Hz & Dauer: 500 ms)
| |
| delay(500);
| |
| }
| |
| if (Distanz <= 5 && Distanz >= 0)
| |
| {
| |
| digitalWrite(bluePin, LOW); // Blau 0% an
| |
| digitalWrite(redPin, HIGH); // Rot 100% an
| |
| digitalWrite(greenPin, LOW); // Grün 0% an
| |
| delay(500); // 500 ms warten
| |
| digitalWrite(bluePin, LOW); // Blau 0% an
| |
| digitalWrite(redPin, LOW); // Rot 0% an
| |
| digitalWrite(greenPin, LOW); // Grün 0% an
| |
| tone(buzzPin, 2000); // durchgängiger Ton an (mit Frequenz: 2000 Hz)
| |
| delay(500);
| |
| }
| |
| | |
| /*****Anschalten der Scheinwerfer-LEDs bei Dunkelheit:*****/
| |
| | |
| ldrWert = analogRead(ldrPin); // Einlesen des aktuellen Wert des LDR-Sensors
| |
| | |
| if (ldrWert > 900) // Ein-/Ausschalten der LEDs
| |
| {
| |
| digitalWrite(ledPin, HIGH);
| |
| }
| |
| else
| |
| {
| |
| digitalWrite(ledPin, LOW);
| |
| }
| |
| | |
| /*****Drehen der Warnleuchte:*****/
| |
|
| |
| //for(Servoposition = 0; Servoposition < 180; Servoposition++) // von 0° bis 180° drehen
| |
| // {
| |
| // servo.write(Servoposition);
| |
| // delay(15);
| |
| // }
| |
| //
| |
| //for(Servoposition = 180; Servoposition > 0; Servoposition--) // von 180° bis 0° drehen
| |
| // {
| |
| // servo.write(Servoposition);
| |
| // delay(15);
| |
| // }
| |
| }</code>
| |
|
| |
|
| == Komponententest == | | == Komponententest == |