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.
Es ist definitiv praktisch, ein ganzes Kit zu kaufen. Hier ist der Link:
Name |
ARTIKEL IN DIESEM KIT |
LINK |
---|---|---|
Raphael Kit |
337 |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
---|---|
- |
|
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 |
Experimentelle Verfahren¶
Schritt 1: Schaltkreis aufbauen.
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.