Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

3.1.3 Rückwärtsfahrwarnung

Einleitung

In diesem Projekt werden wir ein LCD, einen Summer und Ultraschallsensoren verwenden, um ein Rückfahrassistenzsystem zu erstellen. Wir können es auf ein ferngesteuertes Fahrzeug setzen, um den tatsächlichen Vorgang des Rückwärtsfahrens eines Autos in die Garage zu simulieren.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

../_images/list_Reversing_Alarm.png

Es ist definitiv praktisch, ein ganzes Kit zu kaufen. Hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

GPIO-Erweiterungsplatine

BUY

Steckbrett

BUY

Jumper-Kabel

BUY

Widerstand

BUY

Summer

-

Transistor

BUY

Ultraschallmodul

BUY

I2C LCD1602

BUY

Schaltplan

Der Ultraschallsensor erfasst die Entfernung zwischen sich selbst und dem Hindernis, die in Form von Code auf dem LCD angezeigt wird. Gleichzeitig lässt der Ultraschallsensor den Summer je nach Entfernungsangabe einen Hinweiston unterschiedlicher Frequenz ausgeben.

T-Board Name

physical

wiringPi

BCM

GPIO23

Pin 16

4

23

GPIO24

Pin 18

5

24

GPIO17

Pin 11

0

17

SDA1

Pin 3

SCL1

Pin 5

../_images/Schematic_three_one3.png

Experimentelle Verfahren

Schritt 1: Schaltkreis aufbauen.

../_images/image242.png

Schritt 2: Verzeichnis wechseln.

cd ~/raphael-kit/c/3.1.3/

Schritt 3: Kompilieren.

gcc 3.1.3_ReversingAlarm.c -lwiringPi

Schritt 4: Starten.

sudo ./a.out

Wenn der Code läuft, erfasst das Ultraschallsensormodul die Entfernung zum Hindernis und zeigt die Informationen über die Entfernung auf dem LCD1602 an. Außerdem gibt der Summer einen Warnton aus, dessen Frequenz sich mit der Entfernung ändert.

Bemerkung

  • Wenn der Fehlerhinweis wiringPi.h: No such file or directory erscheint, beziehen Sie sich bitte auf Installieren und Überprüfen von WiringPi.

  • Wenn der Fehler Unable to open I2C device: No such file or directory auftritt, sollten Sie sich auf I2C Konfiguration beziehen, um I2C zu aktivieren und zu überprüfen, ob die Verkabelung korrekt ist.

  • Wenn der Code und die Verkabelung in Ordnung sind, das LCD aber immer noch keinen Inhalt anzeigt, können Sie das Potentiometer auf der Rückseite drehen, um den Kontrast zu erhöhen.

Code

Bemerkung

Der folgende Code ist unvollständig. Wenn Sie den vollständigen Code überprüfen möchten, empfehlen wir, den Befehl nano 3.1.1_ReversingAlarm.c zu verwenden.

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <string.h>

#define Trig    4
#define Echo    5
#define Buzzer  0

int LCDAddr = 0x27;
int BLEN = 1;
int fd;

//here is the function of LCD
void write_word(int data){...}

void send_command(int comm){...}

void send_data(int data){...}

void lcdInit(){...}

void clear(){...}

void write(int x, int y, char data[]){...}

//here is the function of Ultrasonic
void ultraInit(void){...}

float disMeasure(void){...}

//here is the main function
int main(void)
{
    float dis;
    char result[10];
    if(wiringPiSetup() == -1){
        printf("setup wiringPi failed !");
        return 1;
    }

    pinMode(Buzzer,OUTPUT);
    fd = wiringPiI2CSetup(LCDAddr);
    lcdInit();
    ultraInit();

    clear();
    write(0, 0, "Ultrasonic Starting");
    write(1, 1, "By Sunfounder");

    while(1){
        dis = disMeasure();
        printf("%.2f cm \n",dis);
        digitalWrite(Buzzer,LOW);
        if (dis > 400){
            clear();
            write(0, 0, "Error");
            write(3, 1, "Out of range");
            delay(500);
        }
        else
        {
            clear();
            write(0, 0, "Distance is");
            sprintf(result,"%.2f cm",dis);
            write(5, 1, result);

            if(dis>=50)
            {delay(500);}
            else if(dis<50 & dis>20) {
                for(int i=0;i<2;i++){
                digitalWrite(Buzzer,HIGH);
                delay(50);
                digitalWrite(Buzzer,LOW);
                delay(200);
                }
            }
            else if(dis<=20){
                for(int i=0;i<5;i++){
                digitalWrite(Buzzer,HIGH);
                delay(50);
                digitalWrite(Buzzer,LOW);
                delay(50);
                }
            }
        }
    }

    return 0;
}

Code-Erklärung

pinMode(Buzzer,OUTPUT);
fd = wiringPiI2CSetup(LCDAddr);
lcdInit();
ultraInit();

In diesem Programm verwenden wir vorherige Komponenten synthetisch. Hier nutzen wir Summer, LCD und Ultraschall. Wir können sie genauso initialisieren wie zuvor.

dis = disMeasure();
printf("%.2f cm \n",dis);
digitalWrite(Buzzer,LOW);
if (dis > 400){
     write(0, 0, "Error");
     write(3, 1, "Out of range");
}
else
{
    write(0, 0, "Distance is");
    sprintf(result,"%.2f cm",dis);
    write(5, 1, result);
}

Hier holen wir uns den Wert des Ultraschallsensors und berechnen die Entfernung.

Wenn der Wert der Entfernung größer ist als der zu erkennende Bereichswert, wird eine Fehlermeldung auf dem LCD angezeigt. Wenn der Entfernungswert innerhalb des Bereichs liegt, werden die entsprechenden Ergebnisse ausgegeben.

sprintf(result,"%.2f cm",dis);

Da der Ausgabemodus des LCD nur den Zeichentyp unterstützt und die Variable dis den Wert des Float-Typs speichert, müssen wir sprintf() verwenden. Die Funktion konvertiert den Wert des Float-Typs in einen Charakter und speichert ihn in der String-Variable result[]. %.2f bedeutet, zwei Dezimalstellen beizubehalten.

if(dis>=50)
{delay(500);}
else if(dis<50 & dis>20) {
    for(int i=0;i<2;i++){
    digitalWrite(Buzzer,HIGH);
    delay(50);
    digitalWrite(Buzzer,LOW);
    delay(200);
    }
}
else if(dis<=20){
    for(int i=0;i<5;i++){
    digitalWrite(Buzzer,HIGH);
    delay(50);
    digitalWrite(Buzzer,LOW);
    delay(50);
    }
}

Diese Bedingung wird verwendet, um den Ton des Summers zu steuern. Je nach Entfernungsunterschied gibt es drei Fälle, in denen unterschiedliche Tonfrequenzen auftreten werden. Da der Gesamtwert von delay 500 beträgt, können alle Fälle dem Ultraschallsensor ein 500 ms-Intervall bieten.

Phänomen-Bild

../_images/image243.jpeg