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 4 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)

Umsetzung (HW/SW)


Code fürs Programm:

//****************************************************************************//

//      Hochschule Hamm-Lippstadt - Studiengang B. Mechatronik - SoSe 22      *

//*****************************************************************************

// Modul           :  GET-Praktikum                                           *

//                                                                            *

// Datum           : 10. 01. 2023                                             *

//                                                                            *

// Funktion        :  Ampel in einer Kreuzung steuern                         *

//                                                                            *

// Implementation  : Arduino IDE vers. 1.8.16                                 *

//                                                                            *

// Hardware        : Arduino MEGA                                             *

//                                                                            *

// Device          :    LED-leuchte                                           *

//                                                                            *

// Prüfer          : Prof. Schneider,Prof.Göbel und Herr  Ebmeyer             *

//                                                                            *

// Authoren        :Delmas Ngoumtsa & Christian Teyou

//                                                                            *

// Gruppe          : 2.5                                                *

//                                                                            *

//*****************************************************************************

 

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);

  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);
 
  pinMode (ECHO1R,INPUT);
 pinMode (TRIG1R,OUTPUT);

 pinMode (ECHO2R,INPUT);
 pinMode (TRIG2R,OUTPUT);
 
  Serial.begin(9600);
}

void loop() 
{ 

Serial.print("Abstand ist : ");
Serial.print(Abstand1V);
Serial.println(" cm");

Serial.print("Abstand ist : ");
Serial.print(Abstand1R);
Serial.println(" cm");

  
  Zeit = millis();
 Serial.print("Zeit =  ");
Serial.println( Zeit);

  for ( i= 0 ; i < 100; i++  )
 {
  Serial.print("Ziklus Nr. ");
  Serial.println( i );

  if( Zeit < 5000 )
 {
 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);


 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();
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);
 

 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()

  {
  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 (orange_LED1,LOW);
 digitalWrite (fussorange_LED1,LOW);

  Erste_Ultraschallt();

 }
  }

void Schalter2()

  {
  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 (orange_LED2,LOW);
 digitalWrite (fussorange_LED2,LOW);

  Zweite_Ultraschallt();

 }
  }

  
 void Erste_Ultraschallt()
 {
  
Erste_Ultraschallt1();

  }


  void Zweite_Ultraschallt()
 {
  
Zweite_Ultraschallt1();

  }

  
   void Erste_Ultraschallt1()
   { 
digitalWrite (TRIG1V,LOW);
delayMicroseconds(2); 
 digitalWrite (TRIG1V,HIGH);
 delayMicroseconds(2);  
 digitalWrite (TRIG1V,LOW);
float Distance1V = pulseIn(ECHO1V,HIGH);
Abstand1V = Distance1V / 58.0;
Serial.print("Abstand ist : ");
Serial.print(Abstand1V);
Serial.println(" cm");


digitalWrite (TRIG1R,LOW);
delayMicroseconds(2); 
 digitalWrite (TRIG1R,HIGH);
 delayMicroseconds(2);  
 digitalWrite (TRIG1R,LOW);
float Distance1R = pulseIn(ECHO1R,HIGH);
Abstand1R = Distance1R / 58.0;
Serial.print("Abstand ist : ");
Serial.print(Abstand1R);
Serial.println(" cm");



   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(Weiss1V,HIGH );
  delay(10);
  digitalWrite(Weiss1V,LOW );
  delay(5); 
  digitalWrite(Weiss1V,HIGH );
  delay(10);
  digitalWrite(Weiss1V,LOW );
  delay(5);
    }
     delay(tW);
     digitalWrite(Weiss1V,LOW ); 
     if(a1V ==  LOW && Abstand1R <10)
    {
 
  digitalWrite(Weiss1R,HIGH );
  delay(10);
  digitalWrite(Weiss1R,LOW  );
  delay(5); 
  digitalWrite(Weiss1R,HIGH );
  delay(10);
  digitalWrite(Weiss1R,LOW  );
  delay(5);
    }
    delay(tW);    
digitalWrite(Weiss1R,LOW );  
digitalWrite (rote_LED1,LOW);
delay(0 );
    }


 void Zweite_Ultraschallt1()
   { 
digitalWrite (TRIG2V,LOW);
delayMicroseconds(2); 
 digitalWrite (TRIG2V,HIGH);
 delayMicroseconds(2);  
 digitalWrite (TRIG2V,LOW);
float Distance2V = pulseIn(ECHO2V,HIGH);
Abstand2V = Distance2V / 58.0;
Serial.print("Abstand ist : ");
Serial.print(Abstand2V);
Serial.println(" cm");


digitalWrite (TRIG2R,LOW);
delayMicroseconds(2); 
 digitalWrite (TRIG2R,HIGH);
 delayMicroseconds(2);  
 digitalWrite (TRIG2R,LOW);
float Distance2R = pulseIn(ECHO2R,HIGH);
Abstand2R = Distance2R / 58.0;
Serial.print("Abstand ist : ");
Serial.print(Abstand2R);
Serial.println(" cm");


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(Weiss2V,HIGH );
  delay(10);
  digitalWrite(Weiss2V,LOW );
  delay(5); 
  digitalWrite(Weiss2V,HIGH );
  delay(10);
  digitalWrite(Weiss2V,LOW );
  delay(5);
    }
     delay(tW);
     digitalWrite(Weiss2V,LOW ); 
     if(a2V ==  LOW && Abstand2R <10)
    {
 
  digitalWrite(Weiss2R,HIGH );
  delay(10);
  digitalWrite(Weiss2R,LOW  );
  delay(5); 
  digitalWrite(Weiss2R,HIGH );
  delay(10);
  digitalWrite(Weiss2R,LOW  );
  delay(5);
    }
    delay(tW);    
digitalWrite(Weiss2R,LOW );  
digitalWrite (rote_LED2,LOW);
delay(0 );
    }

Komponententest

Ergebnis

Zusammenfassung

Lessons Learned

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)