Miniaturisierte Verkehrsampeln in einer Kreuzung mit Warnung bei schlechten Durchfahrt: Unterschied zwischen den Versionen
Zeile 175: | Zeile 175: | ||
<div style="width:1100px; height:800px; overflow:scroll; border: hidden"> | <div style="width:1100px; height:800px; overflow:scroll; border: hidden"> | ||
<syntaxhighlight lang="cpp" style="border: none; background-color: #EFF1C1; font-size:larger"> | <syntaxhighlight lang="cpp" style="border: none; background-color: #EFF1C1; font-size:larger"> | ||
int rote_LED1=26; | int rote_LED1=26; | ||
int orange_LED1=24; // Ampel für Verkehr auf Straße 1 | int orange_LED1=24; // Ampel für Verkehr auf Straße 1 | ||
Zeile 238: | Zeile 192: | ||
unsigned long ZeitLang = 1000;// Zeit Ansteurung | unsigned long ZeitLang = 1000;// Zeit Ansteurung | ||
unsigned long ZeitKurz = 500; | unsigned long ZeitKurz = 500; | ||
int fussgruene_LED1=36;// Ampel für Fußgänger auf Straße 1 | int fussgruene_LED1=36;// Ampel für Fußgänger auf Straße 1 | ||
Zeile 289: | Zeile 242: | ||
pinMode (fussgruene_LED1,OUTPUT); | pinMode (fussgruene_LED1,OUTPUT); | ||
pinMode (fussorange_LED1,OUTPUT); | pinMode (fussorange_LED1,OUTPUT); | ||
// Stustände von LEDs Pins | |||
pinMode(Weiss2V, OUTPUT); | pinMode(Weiss2V, OUTPUT); | ||
pinMode(Weiss2R, OUTPUT); | pinMode(Weiss2R, OUTPUT); | ||
Zeile 305: | Zeile 258: | ||
pinMode (ECHO2V,INPUT); | pinMode (ECHO2V,INPUT); | ||
pinMode (TRIG2V,OUTPUT); | pinMode (TRIG2V,OUTPUT); | ||
// Stustände von Ultraschlalle Pins | |||
pinMode (ECHO1R,INPUT); | pinMode (ECHO1R,INPUT); | ||
pinMode (TRIG1R,OUTPUT); | pinMode (TRIG1R,OUTPUT); | ||
Zeile 311: | Zeile 264: | ||
pinMode (ECHO2R,INPUT); | pinMode (ECHO2R,INPUT); | ||
pinMode (TRIG2R,OUTPUT); | pinMode (TRIG2R,OUTPUT); | ||
} | } | ||
void loop() | void loop() | ||
{ | { | ||
Zeit = millis(); | Zeit = millis(); | ||
for ( i= 0 ; i < 30; i++ ) | |||
for ( i= 0 ; i < | |||
{ | { | ||
Serial.print("Ziklus Nr. "); | Serial.print("Ziklus Nr. "); | ||
Zeile 339: | Zeile 277: | ||
{ | { | ||
digitalWrite (rote_LED1,LOW); | digitalWrite (rote_LED1,LOW); | ||
digitalWrite (fussrote_LED1,HIGH); | digitalWrite (fussrote_LED1,HIGH); // Durchführung und Abruf von Supfonktionen | ||
digitalWrite (orange_LED1,LOW); | digitalWrite (orange_LED1,LOW); | ||
Zeile 361: | Zeile 299: | ||
digitalWrite (gruene_LED1,LOW); | digitalWrite (gruene_LED1,LOW); | ||
digitalWrite (fussgruene_LED1,LOW); | digitalWrite (fussgruene_LED1,LOW); | ||
// Durchführung und Abruf von Supfonktionen | |||
digitalWrite (orange_LED2,HIGH); | digitalWrite (orange_LED2,HIGH); | ||
digitalWrite (fussorange_LED2,HIGH); | digitalWrite (fussorange_LED2,HIGH); | ||
Zeile 388: | Zeile 325: | ||
} | } | ||
Schalter1(); | Schalter1(); | ||
Schalter2(); | Schalter2(); // Durchführung und Abruf von Supfonktionen | ||
if( Zeit > 15000) | if( Zeit > 15000) | ||
{ | { | ||
Zeile 402: | Zeile 339: | ||
digitalWrite (gruene_LED1,HIGH); | digitalWrite (gruene_LED1,HIGH); | ||
digitalWrite (fussgruene_LED1,LOW); | digitalWrite (fussgruene_LED1,LOW); | ||
Zweite_Ultraschallt(); | Zweite_Ultraschallt(); | ||
} | } | ||
if( Zeit > 5000 && Zeit < 8000) | if( Zeit > 5000 && Zeit < 8000) | ||
{ | { | ||
Zeile 418: | Zeile 352: | ||
digitalWrite (gruene_LED1,LOW); | digitalWrite (gruene_LED1,LOW); | ||
digitalWrite (fussgruene_LED1,LOW); | digitalWrite (fussgruene_LED1,LOW); | ||
// Durchführung und Abruf von Supfonktionen | |||
digitalWrite (orange_LED2,HIGH); | digitalWrite (orange_LED2,HIGH); | ||
digitalWrite (fussorange_LED2,HIGH); | digitalWrite (fussorange_LED2,HIGH); | ||
Zeile 440: | Zeile 373: | ||
digitalWrite (gruene_LED2,HIGH); | digitalWrite (gruene_LED2,HIGH); | ||
digitalWrite (fussgruene_LED2,LOW); | digitalWrite (fussgruene_LED2,LOW); | ||
Erste_Ultraschallt(); | Erste_Ultraschallt(); | ||
} | } | ||
Zeile 447: | Zeile 379: | ||
} | } | ||
} | } | ||
void Schalter1() | void Schalter1() // Supfonktion für die Taster der erste Strasse | ||
{ | { | ||
Taster1 =digitalRead(Pin_Taster1); | Taster1 =digitalRead(Pin_Taster1); | ||
Zeile 462: | Zeile 393: | ||
digitalWrite (fussgruene_LED1,LOW); | digitalWrite (fussgruene_LED1,LOW); | ||
delay(3000); | delay(3000); | ||
digitalWrite (gruene_LED2,HIGH); | |||
digitalWrite (rote_LED1,HIGH); | |||
digitalWrite (fussrote_LED1,LOW); | |||
digitalWrite (orange_LED1,LOW); | digitalWrite (orange_LED1,LOW); | ||
digitalWrite (fussorange_LED1,LOW); | digitalWrite (fussorange_LED1,LOW); | ||
digitalWrite (fussgruene_LED1,HIGH); | |||
delay(5000); | |||
digitalWrite (gruene_LED2,LOW); | |||
digitalWrite (rote_LED1,LOW); | |||
digitalWrite (fussgruene_LED1,LOW); | |||
digitalWrite (rote_LED1,LOW); | |||
Erste_Ultraschallt(); | Erste_Ultraschallt(); | ||
Zeile 470: | Zeile 409: | ||
} | } | ||
void Schalter2() | void Schalter2() // Supfonktion für die Taster der zweite Strasse | ||
{ | { | ||
Zeile 485: | Zeile 424: | ||
digitalWrite (fussgruene_LED2,LOW); | digitalWrite (fussgruene_LED2,LOW); | ||
delay(3000); | delay(3000); | ||
digitalWrite (rote_LED1,HIGH); | |||
digitalWrite (fussrote_LED2,LOW); | |||
digitalWrite (orange_LED2,LOW); | digitalWrite (orange_LED2,LOW); | ||
digitalWrite (fussorange_LED2,LOW); | digitalWrite (fussorange_LED2,LOW); | ||
digitalWrite (fussgruene_LED2,HIGH); | |||
delay(5000); | |||
digitalWrite (fussgruene_LED2,LOW); | |||
digitalWrite (rote_LED1,LOW); | |||
Zweite_Ultraschallt(); | Zweite_Ultraschallt(); | ||
} | } | ||
} | } | ||
void Erste_Ultraschallt() | void Erste_Ultraschallt() | ||
{ | { | ||
Erste_Ultraschallt1(); | Erste_Ultraschallt1(); | ||
} | } | ||
void Zweite_Ultraschallt() | void Zweite_Ultraschallt() | ||
{ | { | ||
Zeile 508: | Zeile 447: | ||
} | } | ||
void Erste_Ultraschallt1() // Supfonktion für den vorderen und hinteren Ultraschall der erste Strasse | |||
void Erste_Ultraschallt1() | |||
{ | { | ||
digitalWrite (TRIG1V,LOW); | digitalWrite (TRIG1V,LOW); | ||
Zeile 519: | Zeile 456: | ||
float Distance1V = pulseIn(ECHO1V,HIGH); | float Distance1V = pulseIn(ECHO1V,HIGH); | ||
Abstand1V = Distance1V / 58.0; | Abstand1V = Distance1V / 58.0; | ||
digitalWrite (TRIG1R,LOW); | digitalWrite (TRIG1R,LOW); | ||
delayMicroseconds(2); | delayMicroseconds(2); | ||
Zeile 531: | Zeile 463: | ||
float Distance1R = pulseIn(ECHO1R,HIGH); | float Distance1R = pulseIn(ECHO1R,HIGH); | ||
Abstand1R = Distance1R / 58.0; | Abstand1R = Distance1R / 58.0; | ||
a1V = digitalRead (rote_LED1); | a1V = digitalRead (rote_LED1); | ||
digitalWrite (rote_LED1,HIGH); | digitalWrite (rote_LED1,HIGH); | ||
Zeile 548: | Zeile 474: | ||
if(a1V == LOW && Abstand1V <10) | if(a1V == LOW && Abstand1V <10) | ||
{ | { | ||
digitalWrite (rote_LED1,HIGH); | |||
digitalWrite(Weiss1V,HIGH ); | digitalWrite(Weiss1V,HIGH ); | ||
delay(10); | delay(10); | ||
digitalWrite (rote_LED1,HIGH); | |||
digitalWrite(Weiss1V,LOW ); | digitalWrite(Weiss1V,LOW ); | ||
delay(5); | delay(5); | ||
digitalWrite (rote_LED1,HIGH); | |||
digitalWrite(Weiss1V,HIGH ); | digitalWrite(Weiss1V,HIGH ); | ||
delay(10); | delay(10); | ||
digitalWrite (rote_LED1,HIGH); | |||
digitalWrite(Weiss1V,LOW ); | digitalWrite(Weiss1V,LOW ); | ||
delay(5); | delay(5); | ||
Zeile 561: | Zeile 491: | ||
if(a1V == LOW && Abstand1R <10) | if(a1V == LOW && Abstand1R <10) | ||
{ | { | ||
digitalWrite (rote_LED1,HIGH); | |||
digitalWrite(Weiss1R,HIGH ); | digitalWrite(Weiss1R,HIGH ); | ||
delay(10); | delay(10); | ||
digitalWrite (rote_LED1,HIGH); | |||
digitalWrite(Weiss1R,LOW ); | digitalWrite(Weiss1R,LOW ); | ||
delay(5); | delay(5); | ||
digitalWrite (rote_LED1,HIGH); | |||
digitalWrite(Weiss1R,HIGH ); | digitalWrite(Weiss1R,HIGH ); | ||
delay(10); | delay(10); | ||
digitalWrite (rote_LED1,HIGH); | |||
digitalWrite(Weiss1R,LOW ); | digitalWrite(Weiss1R,LOW ); | ||
delay(5); | delay(5); | ||
digitalWrite (rote_LED1,HIGH); | |||
} | } | ||
delay(tW); | delay(tW); | ||
Zeile 576: | Zeile 510: | ||
delay(0 ); | delay(0 ); | ||
} | } | ||
void Zweite_Ultraschallt1() // Supfonktion für den hinteren und vorderen Ultraschall der zweite Strasse | |||
void Zweite_Ultraschallt1() | |||
{ | { | ||
digitalWrite (TRIG2V,LOW); | digitalWrite (TRIG2V,LOW); | ||
Zeile 587: | Zeile 519: | ||
float Distance2V = pulseIn(ECHO2V,HIGH); | float Distance2V = pulseIn(ECHO2V,HIGH); | ||
Abstand2V = Distance2V / 58.0; | Abstand2V = Distance2V / 58.0; | ||
digitalWrite (TRIG2R,LOW); | digitalWrite (TRIG2R,LOW); | ||
delayMicroseconds(2); | delayMicroseconds(2); | ||
Zeile 599: | Zeile 526: | ||
float Distance2R = pulseIn(ECHO2R,HIGH); | float Distance2R = pulseIn(ECHO2R,HIGH); | ||
Abstand2R = Distance2R / 58.0; | Abstand2R = Distance2R / 58.0; | ||
a2V = digitalRead (rote_LED2); | a2V = digitalRead (rote_LED2); | ||
Zeile 616: | Zeile 538: | ||
if(a2V == LOW && Abstand2V <10) | if(a2V == LOW && Abstand2V <10) | ||
{ | { | ||
digitalWrite (rote_LED2,HIGH); | |||
digitalWrite(Weiss2V,HIGH ); | digitalWrite(Weiss2V,HIGH ); | ||
delay(10); | delay(10); | ||
digitalWrite (rote_LED2,HIGH); | |||
digitalWrite(Weiss2V,LOW ); | digitalWrite(Weiss2V,LOW ); | ||
delay(5); | delay(5); | ||
digitalWrite (rote_LED2,HIGH); | |||
digitalWrite(Weiss2V,HIGH ); | digitalWrite(Weiss2V,HIGH ); | ||
delay(10); | delay(10); | ||
digitalWrite (rote_LED2,HIGH); | |||
digitalWrite(Weiss2V,LOW ); | digitalWrite(Weiss2V,LOW ); | ||
delay(5); | delay(5); | ||
digitalWrite (rote_LED2,HIGH); | |||
} | } | ||
delay(tW); | delay(tW); | ||
Zeile 629: | Zeile 556: | ||
if(a2V == LOW && Abstand2R <10) | if(a2V == LOW && Abstand2R <10) | ||
{ | { | ||
digitalWrite (rote_LED2,HIGH); | |||
digitalWrite(Weiss2R,HIGH ); | digitalWrite(Weiss2R,HIGH ); | ||
delay(10); | delay(10); | ||
digitalWrite (rote_LED2,HIGH); | |||
digitalWrite(Weiss2R,LOW ); | digitalWrite(Weiss2R,LOW ); | ||
delay(5); | delay(5); | ||
digitalWrite (rote_LED2,HIGH); | |||
digitalWrite(Weiss2R,HIGH ); | digitalWrite(Weiss2R,HIGH ); | ||
delay(10); | delay(10); | ||
digitalWrite (rote_LED2,HIGH); | |||
digitalWrite(Weiss2R,LOW ); | digitalWrite(Weiss2R,LOW ); | ||
delay(5); | delay(5); | ||
digitalWrite (rote_LED2,HIGH); | |||
} | } | ||
delay(tW); | delay(tW); | ||
Zeile 643: | Zeile 574: | ||
digitalWrite (rote_LED2,LOW); | digitalWrite (rote_LED2,LOW); | ||
delay(0 ); | delay(0 ); | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Version vom 10. Januar 2023, 23:53 Uhr
Autoren: Delmas Ngoumtsa & Christian Teyou
Betreuer: Prof. Göbel & Prof. Schneider
→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)
→ zurück zur Übersicht: WS 21/22: Angewandte Elektrotechnik (BSE)
→ zurück zur Übersicht: WS 22/23: Angewandte Elektrotechnik (BSE)
Einleitung
In laufende des GET-Fachpraktikum an der Hochschule Hamm-Lippstadt im Studiengang Mechatronik soll ein Projekt je Team realisiert werden. Das Ziel des Projekts ist eine“ miniaturisierte Verkehrsampeln in einer Kreuzung mit Warnung bei schlechter Durchfahrt“ zu herstellen. Dies dient zu Vermeidung bzw. Verringern von möglichen Unfälle in einer Verkehrskreuzung, indem es den Straßenverkehr reguliert. Die Regelung wird durch drei unterschiedlichen farbigen LEDs (rote, orange ,grüne ) und ein weiße LED als Blitzer bei Fehler durchgefügt. Die LED werden auf einen Zirkus von 2 Minuten. Diese entspricht dass, die rote LED sollte einen Beleuchtungsdauer von 1 Minuten ,die orange 10 Sekunden und die grüne 50 Sekunden. Dazu kommt auch einen Taster für den vorfahrt von Fußgänger, die nach 30 Sekunden einer Betätigung den Zirkus wieder nach Anfang bringen soll und nur nach 2 Minuten die Möglichkeit den Zirkus wieder abzubrechen .
Anforderungen
ID | Inhalt | Ersteller | Datum | Geprüft von | Datum |
---|---|---|---|---|---|
1 | Die Ampeln bestehen aus drei Lampen mit verschiedenen Farben(R=rote , O=orange und G=grün) . | Delmas Ngoumtsa & Christian Teyou | 04.10.2022 | ||
2 | Jede Lampe muss eine bestimmte Zeit lang zyklisch leuchten. | Delmas Ngoumtsa & Christian Teyou | 04.10.2022 | ||
3 | Ein Berührungssensor muss vor die Lampe eingebaut Werden und nur während der beleuchtenden roten Lampe aktiviert werden. | Delmas Ngoumtsa & Christian Teyou | 04.10.2022 | ||
4 | Eine zusätzliche weiße Lampe in der miete der Straße und in paar Meter höher muss zwei oder drei Mal blinken nach Aktivierung des Sensors | Delmas Ngoumtsa & Christian Teyou | 04.10.2022 |
Funktionaler Systementwurf/Technischer Systementwurf
Komponentenspezifikation
ID | Komponente | Bezeichnung | Bild |
---|---|---|---|
1 | Arduino Microcontroller | 1x ATMEGA 2560 R3 Board CH340 Mega2560 R3 Compatible Atmega2560-16AU | |
2 | Arduino Ultraschall Sensor (Entfernung Sensor) | 4x HC-SR04 | |
3 | Arduino LED Ampel Modul | 16 x LED Ampel Modul Creative DIY Mini-Ampel 3,3-5V 8mm | |
4 | Lumetheus LED Farbe weiß | Lumetheus LED 5mm Farbe weiß 14.000 mcd 4 Stück Leuchtdiode extra hell 3V weiße Diode 2 Pin LEDs | |
5 | Micro Taktilen Druckschalter | 8 Stück Micro Tactile Switch 6 x 6 x 6 mm 2 pins,Mikro Schalter Tactile Drucktaster Für Steckbrett Elektronische Schaltung | |
6 | Draht Klingeldraht Kabel Isolierung | 8 farbige 30AWG Verzinnte Kupfer Solid Kabel | |
7 | Schrumpfschlauch | Schrumpfschlauch mit 12 Verschiedene Größen | |
8 | Jumper Wire Kabel & Breadboard | 1 x 65Stk. Jumper Wire Kabel M2M und 1 x Mini Breadboard 400 Pins kompatibel mit Arduino und Raspberry Pi | |
9 | PVC Rohr Rund starre Kunststoffrohr | 4 Stück PVC Rohr Rund starre Kunststoffrohr 8mm ID 10mm AD 500mm Weiß für Kabelmuffe | |
10 | USB Anschlusskabel | 0,3 m USB Anschlusskabel SW USB Stecker Typ A zu B für Arduino UNO, MEGA, usw... | |
11 | Lötzinn Draht Lötmittel zum Elektrolöten und Heimwerken | Lötzinn (100g per 1mm) | |
12 | Sperrholzplatte | 1x 500g quadratische Sperrholzplatte (500mm x 500mm x 4mm) | |
13 | Bretter-Box mit Schublade | 1x Bretter-Box mit Schublade(50cm x 3,5cm x 20cm) | |
14 | 6 Stück Resistor | Resistor 100 Ohm und 1000 Ohm |
Umsetzung (HW/SW)
Löten und Verkabelung von LED Ampel Modul , LED Farbe weiß, Ultraschall Sensor (Entfernung Sensor) und der Micro Taktilen Druckschalter :
Jeder LED Ampel Modul , LED Farbe weiß, Ultraschall Sensor (Entfernung Sensor) und der Micro Taktilen Druckschalter wird mit einer bestimmte Drahts Kabel Isolierungsfarbe durch weiß Löten verbunden und danach in dem gefertigten runden PVC Rohres Ampelpfosten hin gefügt und geklebt .
Fertigung des runden PVC Rohres in 4 Stück Ampelpfosten:
der PVC Rohr von 500mm wird in 4 Stücke geschnitten und jeder Stück muss auf seine Oberfläche geschnitten werden sodass das LED Ampel Modul , LED Farbe weiß und der Micro Taktilen Druckschalter genau in ihre Plätze passen wie das folgendes Bild es darstellt.
-
Abb.Ampelpfosten
Montage/Assembling:
Der Sperrholzplatte wird in seine Mittelfels quadratisch mit vier Löcher gebohrt . Die 4 Ampelpfosten werden in den 4 Löcher der Sperrholzplatte gefügt und geklebt . Danach kommt das gesamte auf dem Bretter-Box mit Schublade und wird mit Schrauber festgebunden. In der Schublade des Bretter-Box befindet sich der Arduino Microcontroller und einen Breadboard .Alle Verlängerungskabel von LED Ampel Modul , LED Farbe weiß, Ultraschall Sensor (Entfernung Sensor) und der Micro Taktilen Druckschalter werden in Arduino Microcontroller und in Breadboard eingesteckt und das Programm wird durch den USB Anschlusskabel in Arduino Microcontroller hochgeladen. So wie das gesamte durch das folgendes Bild gezeigt.
-
Abb.Gesamtes System
Programmierugsplan:
-
Abb.Programmierugsplan
Code fürs Programm:
Komponententest
Ergebnis
Zusammenfassung
Lessons Learned
Während der Durchführung des Projektes wir sind auf paar Probleme gestoßen worden vor allem - Das Kleben von Micro Taktilen Druckschalter hat zur folge das diese sich nicht mehr drücken lässt. - Die Ampelpfosten mit runden PVC Rohr war eine schlechte Wahl ,denn die Verkabelung war eng und unzuverlässig: Besser wäre ein 3D Präzise gedruckte Ampelpfosten. - Die schlechte Verkabelung in Ampelpfosten hat zu folge dass manche LED Ampel Modul nicht leuchten.
Projektunterlagen
Projektplan
-
Abb.Projektplan
Projektdurchführung
YouTube Video
Weblinks
Literatur
Schreiter, D. (2019). Arduino: Kompendium: Elektronik, Programmierung und Projekte (1. Aufl. 2018). BMU Verlag.
→ zurück zur Übersicht: WS 21/22: Angewandte Elektrotechnik (BSE)