Phase 2 2021/22
In diesem Buch sind die Teamergebnisse der FST21 in Phase 2 dokumentiert.
#include <TM1637Display.h> // Bibliothek für die 7- Segment Anzeige
#define echo 25 //Anschluss ECHO vom HC-SR04 wurde für PIN 25 festgelegt
#define trig 33 //Anschluss TRIG vom HC-SR04 wurde für PIN 33 festgelegt
#define display_clk 16 //Anschluss CLK von der Anzeige wurde für PIN 16 festgelegt
#define display_dio 13 //Anschluss DIO von der Anzeige wurde für PIN 13 festgelegt
#define passiver_buzzer 27 //Der PIN für den passiven Summer wurde auf 27 festgelegt
//Pinbelegung für die H-Brücke
int inc1 = 18;
int inc2 = 19;
int motor = 17;
//Entfernung als globale Variable anlegen
int entfernung = 0;
//schalter
int schalter = 2;
int schalterStatus = 0;
//Pulsweitenmodulation
const int freq = 30000;
const int resolution = 8;
//Funktion zur Messung der Entfernung über den Ultraschallsensor HC-SR04 (mit Echo und Trigger), Einheit: cm
int getEntfernung()
{
long entfernung = 1;
long zeitx = 0;
digitalWrite (trig, LOW); //setzt den Zustand von trig auf LOW
delayMicroseconds(3); //setzt eine Pause/Unterbrechung von 3 Mikrosekunden
noInterrupts(); //keine Unterbrechung
digitalWrite(trig, HIGH); //setzt den Zustand von trig auf HIGH
delayMicroseconds(10); //setzt eine Pause/Unterbrechung von 10 Mikrosekunden
digitalWrite(trig, LOW); //setzt den Zustand von trig auf LOW
zeitx = pulseIn(echo, HIGH); //setzt den Zustand von echo auf HIGH
interrupts(); //unterbricht den Vorgang
zeitx = (zeitx / 2); //teilt die Zeit durch 2
entfernung = zeitx / 29.1; //teilt die Restzeit durch die Geschwindigkeit des Schalls
return (entfernung); //gibt die berechnete Entfernung zurück
}
// Funktion zur Antriebssteuerung ---> mit geringer werdendem Abstand soll der Motor langsamer laufen
void antrieb(int entfernung)
{
if ((entfernung <= 50) && (entfernung >= 25))
{
digitalWrite(inc1, LOW); //Laufrichtung einstellen
digitalWrite(inc2, HIGH); //
ledcWrite(2, 230); // Sendet ein Signal an den Channel 2 mit einem Duty Cyle(Auslastungsgrad) von 230
}
else if ((entfernung <= 24) && (entfernung >= 5))
{
digitalWrite(inc1, LOW); //Laufrichtung einstellen
digitalWrite(inc2, HIGH); //
ledcWrite(2, 200); //Sendet ein Signal an den Channel 2 mit einem Duty Cyle(Auslastungsgrad) von 200
}
else if (entfernung < 5)
{
digitalWrite(inc1, LOW); //Laufrichtung einstellen
digitalWrite(inc2, HIGH); //
ledcWrite(2, 0); // Motor steht
}
else
{
digitalWrite(inc1, LOW); //Laufrichtung einstellen
digitalWrite(inc2, HIGH);
ledcWrite(2, 255); //Sendet ein Signal an den Channel 2 mit einem Duty Cyle(Auslastungsgrad) von 255
}
}
//LEDs Wann sie Leuchten in abhängigkeit der Entfernung
void bremslicht (int entfernung)
{
if (entfernung <= 5)
{
digitalWrite(LED_bremslicht, HIGH);
digitalWrite (LED_licht, HIGH);
}
else if (entfernung > 5)
{
digitalWrite(LED_bremslicht, LOW);
digitalWrite(LED_licht, HIGH);
}
}// Funktion zur Tonsteuerung ---> mit geringer werdendem Abstand soll sich die Tonfrequenz höher werden
void sound(int entfernung)
{
// die Entfernungsabstände können beliebig angepasst werden
if ((entfernung <= 50) && (entfernung >= 25))
{
ledcWriteTone(1, 300);
delay(10);
}
else if ((entfernung <= 24) && (entfernung >= 15))
{
ledcWriteTone(1, 800);
delay(5);
}
else if ((entfernung <= 14) && (entfernung >= 6))
{
ledcWriteTone(1, 1300);
delay(2);
}
else if (entfernung <= 5)
{
ledcWriteTone(1, 1700);
delay(1);
}
else
{
ledcWriteTone(1, 0);
delay(1);
}
}
TM1637Display display(display_clk, display_dio);
void setup()
{
pinMode(trig, OUTPUT); //Legt den Eingangstyp des angegebenen PINs fest
pinMode(echo, INPUT); //Legt den Eingangstyp des angegebenen PINs fest
pinMode(passiver_buzzer, OUTPUT); //Legt den Eingangstyp des angegebenen PINs fest
pinMode(motor, OUTPUT); //Legt den Eingangstyp des angegebenen PINs fest
pinMode(inc1, OUTPUT); //Legt den Eingangstyp des angegebenen PINs fest
pinMode(inc2, OUTPUT); //Legt den Eingangstyp des angegebenen PINs fest
pinMode(LED_bremslicht, OUTPUT); //Legt den Eingangstyp des angegebenen PINs fest
pinMode(LED_ruecklicht, OUTPUT); //Legt den Eingangstyp des angegebenen PINs fest
pinMode(schalter, INPUT); //Legt den Eingangstyp des angegebenen PINs fest
ledcSetup(1, freq, resolution); // Konfigurieren der Pulsweitenmodulation für Channel Sound
ledcAttachPin(passiver_buzzer, 1); //passiver Buzzer mit PWM-Channel verbinden
ledcSetup(2, freq, resolution); //Konfigurieren der Pulsweitenmodulation für Channel Antrieb
ledcAttachPin(motor, 2); //Motor mit dem PWM-Channel verbinden
}
void loop()
{
schalterStatus = digitalRead(schalter); //setzen vom Schalterstatus
if (schalterStatus == HIGH) //starten der UPs, wenn der Schalter betätigt wurde
{
antrieb(entfernung); //Aufruf der Funktion zum Antrieb des Motors
entfernung = getEntfernung(); //Aufruf der Funktion zum Messen der Entfernung
sound(entfernung); //Aufruf der Funktion zum Ansteuern des passiven Buzzers
}
else
{
digitalWrite(inc1, LOW); //Laufrichtung einstellen
digitalWrite(inc2, HIGH); //
ledcWrite(2, 0); //Motor steht
ledcWriteTone(1, 0); //pasiver Buzzer Aus
}
bremslicht(entfernung); //Aufruf der Funktion für die LED´s
//Einstellungen für die 7 Segment Anzeige
display.setBrightness(7);
display.showNumberDec(entfernung);
delay(20);
}