Miniaturisierte Verkehrsampeln in einer Kreuzung mit Warnung bei schlechten Durchfahrt

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

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

Tabelle 1: Testbare, atomare 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

Skizze eines funktionalen Systementwurf eines Verkehrsampelns

Komponentenspezifikation

Tabelle 2: Liste aller Komponenten
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
.jpg
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
.jpg
7 Schrumpfschlauch Schrumpfschlauch mit 12 Verschiedene Größen
.jpg
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
.jpg
9 PVC Rohr Rund starre Kunststoffrohr 4 Stück PVC Rohr Rund starre Kunststoffrohr 8mm ID 10mm AD 500mm Weiß für Kabelmuffe
.jpg
10 USB Anschlusskabel 0,3 m USB Anschlusskabel SW USB Stecker Typ A zu B für Arduino UNO, MEGA, usw...
.jpg
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.


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.


Programmierugsplan:


Code fürs Programm:

int rote_LED1=26;
int orange_LED1=24;  // Ampel für Verkehr auf Straße 1
int gruene_LED1=22;

int rote_LED2=31;
int orange_LED2=33;  // Ampel für Verkehr auf Straße 2
int gruene_LED2=35;

  bool Taster1 = 0; // Taster für Fußgänger,die die Traße 1 überqueren möchten
  bool Taster2 = 0; // Taster für Fußgänger,die die Traße 2 überqueren möchten
  
int Pin_Taster1=13;// Pin wo die Pin_Taster1 eingelesen wird
int Pin_Taster2=12;// Pin wo die Pin_Taster2 eingelesen wird

  unsigned long Zeit = 0;
  unsigned long ZeitLang = 1000;// Zeit Ansteurung
  unsigned long ZeitKurz = 500;

int fussgruene_LED1=36;// Ampel für Fußgänger auf Straße 1
int fussorange_LED1=38;
int fussrote_LED1=40;

int fussgruene_LED2=49;// Ampel für Fußgänger auf Straße 2
int fussorange_LED2=51;
int fussrote_LED2=53;

int i ; // Anzahl Inkrimete

int Weiss1V = 10; // Weiße Melder für vordere Ampel für Verkehr auf Straße 1
int Weiss1R = 8; // Weiße Melder für Rückseite Ampel für Verkehr auf Straße 1

int Weiss2V = 6; // Weiße Melder für vordere Ampel für Verkehr auf Straße 2
int Weiss2R = 4; // Weiße Melder für Rückseite Ampel für Verkehr auf Straße 2

int ECHO1V = 32; // Pins des 1. vorderen Ultraschallsensor für Verkehr auf Straße 1
int TRIG1V = 30;
float Abstand1V = 0; // gelieferte Abstand von der 1. vorderen Ultraschallsensor für Verkehr auf Straße 1

int ECHO2V = 25; // Pins des 2. vorderen Ultraschallsensor für Verkehr auf Straße 1
int TRIG2V = 23;
float Abstand2V = 0; // gelieferte Abstand von der 2. vorderen Ultraschallsensor für Verkehr auf Straße 1

int ECHO1R = 44; // Pins des 1. Rückseite Ultraschallsensor für Verkehr auf Straße 1
int TRIG1R = 42;
float Abstand1R = 0; // gelieferte Abstand von der 1. Rückseite Ultraschallsensor für Verkehr auf Straße 1

int ECHO2R = 43; // Pins des 2. Rückseite Ultraschallsensor für Verkehr auf Straße 1
int TRIG2R = 41;
float Abstand2R = 0; // gelieferte Abstand von der 2. Rückseite Ultraschallsensor für Verkehr auf Straße 1

int a1V ; // Taster für Bedingung des 1. vorderen Ultraschallsensor für Verkehr auf Straße 1
int a2V ; // Taster für Bedingung des 2. vorderen Ultraschallsensor für Verkehr auf Straße 1


int tW = 30;// Zeit des Weißen Melder für  Verkehrsampel

void setup() 
{
  pinMode(Weiss1V, OUTPUT);
  pinMode(Weiss1R, OUTPUT);
  pinMode (rote_LED1,OUTPUT);
  pinMode (orange_LED1,OUTPUT);
  pinMode (gruene_LED1,OUTPUT);
  pinMode (Pin_Taster1,INPUT);
  pinMode (fussrote_LED1,OUTPUT);
  pinMode (fussgruene_LED1,OUTPUT);
  pinMode (fussorange_LED1,OUTPUT);
                                     // Stustände von LEDs Pins
  pinMode(Weiss2V, OUTPUT);
  pinMode(Weiss2R, OUTPUT);
  pinMode (rote_LED2,OUTPUT);
  pinMode (orange_LED2,OUTPUT);
  pinMode (gruene_LED2,OUTPUT);
  pinMode (Pin_Taster2,INPUT);
  pinMode (fussrote_LED2,OUTPUT);
  pinMode (fussgruene_LED2,OUTPUT);
  pinMode (fussorange_LED2,OUTPUT);

  pinMode (ECHO1V,INPUT);
 pinMode (TRIG1V,OUTPUT);

 pinMode (ECHO2V,INPUT);
 pinMode (TRIG2V,OUTPUT);
                                   // Stustände von Ultraschlalle Pins
  pinMode (ECHO1R,INPUT);
 pinMode (TRIG1R,OUTPUT);

 pinMode (ECHO2R,INPUT);
 pinMode (TRIG2R,OUTPUT);
}

void loop() 
{
  Zeit = millis();
  for ( i= 0 ; i < 30; i++  )
 {
  Serial.print("Ziklus Nr. ");
  Serial.println( i );

  if( Zeit < 5000 )
 {
 digitalWrite (rote_LED1,LOW); 
 digitalWrite (fussrote_LED1,HIGH);     // Durchführung und Abruf von Supfonktionen
 
 digitalWrite (orange_LED1,LOW);
 digitalWrite (fussorange_LED1,LOW); 
  
  digitalWrite (gruene_LED1,HIGH);
  digitalWrite (fussgruene_LED1,LOW);

Zweite_Ultraschallt();

  }

  if( Zeit > 5000 && Zeit < 8000)
  {
  digitalWrite (orange_LED1,HIGH);
 digitalWrite (fussorange_LED1,HIGH);
 
  digitalWrite (rote_LED1,LOW);
  digitalWrite (fussrote_LED1,HIGH);
  
 digitalWrite (gruene_LED1,LOW);
 digitalWrite (fussgruene_LED1,LOW);
                                     // Durchführung und Abruf von Supfonktionen
 digitalWrite (orange_LED2,HIGH);
 digitalWrite (fussorange_LED2,HIGH);
 
  digitalWrite (rote_LED2,LOW);
  digitalWrite (fussrote_LED2,LOW);
  
 digitalWrite (gruene_LED2,LOW);
 digitalWrite (fussgruene_LED2,HIGH);
  }
  if( Zeit > 8000 && Zeit < 15000)
  {
  
digitalWrite (orange_LED2,LOW);
 digitalWrite (fussorange_LED2,LOW);
 
  digitalWrite (rote_LED2,LOW);
  digitalWrite (fussrote_LED2,HIGH);
  
 digitalWrite (gruene_LED2,HIGH);
 digitalWrite (fussgruene_LED2,LOW);
 
  Erste_Ultraschallt();

  }  
 Schalter1();
 Schalter2();                                  // Durchführung und Abruf von Supfonktionen
if(  Zeit > 15000)
  {
  Zeit = Zeit - 16000;
if( Zeit < 3000 )
  {
 digitalWrite (rote_LED1,LOW); 
 digitalWrite (fussrote_LED1,HIGH);
 
 digitalWrite (orange_LED1,LOW);
 digitalWrite (fussorange_LED1,LOW); 
  
  digitalWrite (gruene_LED1,HIGH);
  digitalWrite (fussgruene_LED1,LOW);
  
  Zweite_Ultraschallt();
  }
  if( Zeit > 5000 && Zeit < 8000)
  {
  digitalWrite (orange_LED1,HIGH);
 digitalWrite (fussorange_LED1,HIGH);
 
  digitalWrite (rote_LED1,LOW);
  digitalWrite (fussrote_LED1,HIGH);
  
 digitalWrite (gruene_LED1,LOW);
 digitalWrite (fussgruene_LED1,LOW);
                                                   // Durchführung und Abruf von Supfonktionen
 digitalWrite (orange_LED2,HIGH);
 digitalWrite (fussorange_LED2,HIGH);
 
  digitalWrite (rote_LED2,LOW);
  digitalWrite (fussrote_LED2,LOW);
  
 digitalWrite (gruene_LED2,LOW);
 digitalWrite (fussgruene_LED2,HIGH);
  }
  if( Zeit > 8000 && Zeit < 15000)
  {
  
digitalWrite (orange_LED2,LOW);
 digitalWrite (fussorange_LED2,LOW);
 
  digitalWrite (rote_LED2,LOW);
  digitalWrite (fussrote_LED2,HIGH);
  
 digitalWrite (gruene_LED2,HIGH);
 digitalWrite (fussgruene_LED2,LOW);
 
 Erste_Ultraschallt();
  }
  }
  }
}
void Schalter1()       //  Supfonktion für die Taster der erste Strasse
  {
  Taster1  =digitalRead(Pin_Taster1);
  if ( Taster1 == LOW)
  {
  delay(0);
  
 digitalWrite (orange_LED1,HIGH);
 digitalWrite (fussorange_LED1,HIGH);
  digitalWrite (rote_LED1,LOW);
  digitalWrite (fussrote_LED1,HIGH);
 digitalWrite (gruene_LED1,LOW);
 digitalWrite (fussgruene_LED1,LOW); 
 delay(3000);
  digitalWrite (gruene_LED2,HIGH);
 digitalWrite (rote_LED1,HIGH);
 digitalWrite (fussrote_LED1,LOW);
 digitalWrite (orange_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();

 }
  }

void Schalter2()      //  Supfonktion für die Taster der zweite Strasse

  {
  Taster2  =digitalRead(Pin_Taster2);
  if ( Taster2 == LOW)
  {
  delay(0);
  
 digitalWrite (orange_LED2,HIGH);
 digitalWrite (fussorange_LED2,HIGH);
  digitalWrite (rote_LED2,LOW);
  digitalWrite (fussrote_LED2,HIGH);
 digitalWrite (gruene_LED2,LOW);
 digitalWrite (fussgruene_LED2,LOW); 
 delay(3000);
 digitalWrite (rote_LED1,HIGH);
 digitalWrite (fussrote_LED2,LOW);
 digitalWrite (orange_LED2,LOW);
 digitalWrite (fussorange_LED2,LOW);
 digitalWrite (fussgruene_LED2,HIGH); 
delay(5000);
digitalWrite (fussgruene_LED2,LOW); 
digitalWrite (rote_LED1,LOW);
  Zweite_Ultraschallt();

 }
  }  
 void Erste_Ultraschallt()
 {
  
Erste_Ultraschallt1();
  }
  void Zweite_Ultraschallt()
 {
  
Zweite_Ultraschallt1();

  }
   void Erste_Ultraschallt1()  //  Supfonktion für den vorderen und hinteren Ultraschall der erste Strasse
   { 
digitalWrite (TRIG1V,LOW);
delayMicroseconds(2); 
 digitalWrite (TRIG1V,HIGH);
 delayMicroseconds(2);  
 digitalWrite (TRIG1V,LOW);
float Distance1V = pulseIn(ECHO1V,HIGH);
Abstand1V = Distance1V / 58.0;
digitalWrite (TRIG1R,LOW);
delayMicroseconds(2); 
 digitalWrite (TRIG1R,HIGH);
 delayMicroseconds(2);  
 digitalWrite (TRIG1R,LOW);
float Distance1R = pulseIn(ECHO1R,HIGH);
Abstand1R = Distance1R / 58.0;
   a1V = digitalRead (rote_LED1); 
    digitalWrite (rote_LED1,HIGH);
    digitalWrite (fussrote_LED1,LOW);

    digitalWrite (orange_LED1,LOW);
 digitalWrite (fussorange_LED1,LOW); 
 
 digitalWrite (gruene_LED1,LOW);
 digitalWrite (fussgruene_LED1,HIGH); 
    if(a1V ==  LOW && Abstand1V <10)
    {
       digitalWrite (rote_LED1,HIGH);
 digitalWrite(Weiss1V,HIGH );
  delay(10);
   digitalWrite (rote_LED1,HIGH);
  digitalWrite(Weiss1V,LOW );
  delay(5);
   digitalWrite (rote_LED1,HIGH); 
  digitalWrite(Weiss1V,HIGH );
  delay(10);
   digitalWrite (rote_LED1,HIGH);
  digitalWrite(Weiss1V,LOW );
  delay(5);
    }
     delay(tW);
     digitalWrite(Weiss1V,LOW ); 
     if(a1V ==  LOW && Abstand1R <10)
    {
  digitalWrite (rote_LED1,HIGH);
  digitalWrite(Weiss1R,HIGH );
  delay(10);
   digitalWrite (rote_LED1,HIGH);
  digitalWrite(Weiss1R,LOW  );
  delay(5); 
   digitalWrite (rote_LED1,HIGH);
  digitalWrite(Weiss1R,HIGH );
  delay(10);
   digitalWrite (rote_LED1,HIGH);
  digitalWrite(Weiss1R,LOW  );
  delay(5);
  digitalWrite (rote_LED1,HIGH);
    }
    delay(tW);    
digitalWrite(Weiss1R,LOW );  
digitalWrite (rote_LED1,LOW);
delay(0 );
    }
 void Zweite_Ultraschallt1() //  Supfonktion für den hinteren und vorderen Ultraschall der zweite Strasse
   { 
digitalWrite (TRIG2V,LOW);
delayMicroseconds(2); 
 digitalWrite (TRIG2V,HIGH);
 delayMicroseconds(2);  
 digitalWrite (TRIG2V,LOW);
float Distance2V = pulseIn(ECHO2V,HIGH);
Abstand2V = Distance2V / 58.0;
digitalWrite (TRIG2R,LOW);
delayMicroseconds(2); 
 digitalWrite (TRIG2R,HIGH);
 delayMicroseconds(2);  
 digitalWrite (TRIG2R,LOW);
float Distance2R = pulseIn(ECHO2R,HIGH);
Abstand2R = Distance2R / 58.0;
a2V = digitalRead (rote_LED2); 

 digitalWrite (rote_LED2,HIGH);
    digitalWrite (fussrote_LED2,LOW);
    
digitalWrite (orange_LED2,LOW);
 digitalWrite (fussorange_LED2,LOW);

 digitalWrite (gruene_LED2,LOW);
 digitalWrite (fussgruene_LED2,HIGH); 
    if(a2V ==  LOW && Abstand2V <10)
    {
      digitalWrite (rote_LED2,HIGH);
 digitalWrite(Weiss2V,HIGH );
  delay(10);
  digitalWrite (rote_LED2,HIGH);
  digitalWrite(Weiss2V,LOW );
  delay(5); 
  digitalWrite (rote_LED2,HIGH);
  digitalWrite(Weiss2V,HIGH );
  delay(10);
  digitalWrite (rote_LED2,HIGH);
  digitalWrite(Weiss2V,LOW );
  delay(5);
  digitalWrite (rote_LED2,HIGH);
    }
     delay(tW);
     digitalWrite(Weiss2V,LOW ); 
     if(a2V ==  LOW && Abstand2R <10)
    {
 digitalWrite (rote_LED2,HIGH);
  digitalWrite(Weiss2R,HIGH );
  delay(10);
  digitalWrite (rote_LED2,HIGH);
  digitalWrite(Weiss2R,LOW  );
  delay(5);
  digitalWrite (rote_LED2,HIGH); 
  digitalWrite(Weiss2R,HIGH );
  delay(10);
  digitalWrite (rote_LED2,HIGH);
  digitalWrite(Weiss2R,LOW  );
  delay(5);
  digitalWrite (rote_LED2,HIGH);
    }
    delay(tW);    
digitalWrite(Weiss2R,LOW );  
digitalWrite (rote_LED2,LOW);
delay(0 );
    }

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

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)