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!

4.1.9 Rückwärts-Alarm

Einführung

In diesem Projekt nutzen wir ein LCD, einen Buzzer und Ultraschallsensoren, um ein System zur Unterstützung beim Rückwärtsfahren zu erstellen. Dies kann auf ein ferngesteuertes Fahrzeug gesetzt werden, um den realen Vorgang des Rückwärtsfahrens eines Autos in die Garage zu simulieren.

Benötigte Komponenten

Für dieses Projekt benötigen wir folgende Komponenten.

../_images/list_Reversing_Alarm.png

Es ist sicherlich praktisch, ein komplettes Set zu kaufen. Hier ist der Link dazu:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können diese 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 misst den Abstand zwischen sich und dem Hindernis, welcher in Form von Code auf dem LCD angezeigt wird. Gleichzeitig gibt der Ultraschallsensor über den Buzzer einen Hinweiston unterschiedlicher Frequenz je nach gemessenem Abstandswert aus.

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: Schaltung aufbauen.

../_images/image242.png

Schritt 2: Verzeichnis wechseln.

cd ~/raphael-kit/python/

Schritt 3: Ausführen.

sudo python3 4.1.9_ReversingAlarm.py

Während der Code läuft, misst das Ultraschall-Sensormodul den Abstand zum Hindernis und zeigt die Informationen über die Entfernung auf dem LCD1602 an. Zusätzlich gibt der Buzzer einen Warnton aus, dessen Frequenz sich mit dem Abstand ändert.

Bemerkung

  • Falls der Fehler FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1' auftritt, beziehen Sie sich auf I2C Konfiguration, um den I2C zu aktivieren.

  • Bei dem Fehler ModuleNotFoundError: No module named 'smbus2' führen Sie bitte sudo pip3 install smbus2 aus.

  • Wenn der Fehler OSError: [Errno 121] Remote I/O error erscheint, bedeutet dies, dass das Modul falsch verdrahtet ist oder defekt ist.

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

Code

Bemerkung

Sie können den untenstehenden Code Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen. Zuvor müssen Sie jedoch zum Quellcodepfad wie raphael-kit/python wechseln. Nachdem Sie den Code modifiziert haben, können Sie ihn direkt ausführen, um das Ergebnis zu sehen.

import LCD1602
import time
import RPi.GPIO as GPIO

TRIG = 16
ECHO = 18
BUZZER = 11

def lcdsetup():
LCD1602.init(0x27, 1)   # init(slave address, background light)
LCD1602.clear()
LCD1602.write(0, 0, 'Ultrasonic Starting')
LCD1602.write(1, 1, 'By SunFounder')
time.sleep(2)

def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
GPIO.setup(BUZZER, GPIO.OUT, initial=GPIO.LOW)
lcdsetup()

def distance():
GPIO.output(TRIG, 0)
time.sleep(0.000002)

GPIO.output(TRIG, 1)
time.sleep(0.00001)
GPIO.output(TRIG, 0)

while GPIO.input(ECHO) == 0:
    a = 0
time1 = time.time()
while GPIO.input(ECHO) == 1:
    a = 1
time2 = time.time()

during = time2 - time1
return during * 340 / 2 * 100

def destroy():
GPIO.output(BUZZER, GPIO.LOW)
GPIO.cleanup()
LCD1602.clear()

def loop():
while True:
    dis = distance()
    print (dis, 'cm')
    print ('')
    GPIO.output(BUZZER, GPIO.LOW)
    if (dis > 400):
        LCD1602.clear()
        LCD1602.write(0, 0, 'Error')
        LCD1602.write(3, 1, 'Out of range')
        time.sleep(0.5)
    else:
        LCD1602.clear()
        LCD1602.write(0, 0, 'Distance is')
        LCD1602.write(5, 1, str(round(dis,2)) +' cm')
        if(dis>=50):
            time.sleep(0.5)
        elif(dis<50 and dis>20):
            for i in range(0,2,1):
                GPIO.output(BUZZER, GPIO.HIGH)
                time.sleep(0.05)
                GPIO.output(BUZZER, GPIO.LOW)
                time.sleep(0.2)
        elif(dis<=20):
            for i in range(0,5,1):
                GPIO.output(BUZZER, GPIO.HIGH)
                time.sleep(0.05)
                GPIO.output(BUZZER, GPIO.LOW)
                time.sleep(0.05)


if __name__ == "__main__":
    setup()
    try:
        loop()
    except KeyboardInterrupt:
        destroy()

Code-Erklärung

def lcdsetup():
    LCD1602.init(0x27, 1)   # init(slave address, background light)

def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(TRIG, GPIO.OUT)
    GPIO.setup(ECHO, GPIO.IN)
    GPIO.setup(BUZZER, GPIO.OUT, initial=GPIO.LOW)
    lcdsetup()

In diesem Programm verwenden wir die zuvor genutzten Komponenten synthetisch. Hier benutzen wir Buzzer, LCD und Ultraschall. Sie können genau so initialisiert werden, wie wir es zuvor getan haben.

dis = distance()
print (dis, 'cm')
print ('')
GPIO.output(BUZZER, GPIO.LOW)
if (dis > 400):
    LCD1602.clear()
    LCD1602.write(0, 0, 'Error')
    LCD1602.write(3, 1, 'Out of range')
    time.sleep(0.5)
else:
    LCD1602.clear()
    LCD1602.write(0, 0, 'Distance is')
    LCD1602.write(5, 1, str(round(dis,2)) +' cm')

Hier erfassen wir die Werte des Ultraschallsensors und berechnen die Entfernung. Wenn der Entfernungs-Wert größer ist als der erkannte Wertebereich, wird auf dem LCD eine Fehlermeldung angezeigt. Wenn die Entfernung jedoch im Arbeitsbereich liegt, werden die entsprechenden Ergebnisse ausgegeben.

LCD1602.write(5, 1, str(round(dis,2)) +' cm')

Da die LCD-Ausgabe nur Zeichentypen unterstützt, müssen wir str() verwenden, um numerische Werte in Zeichen umzuwandeln. Wir runden auf zwei Dezimalstellen.

if(dis>=50):
    time.sleep(0.5)
elif(dis<50 and dis>20):
    for i in range(0,2,1):
        GPIO.output(BUZZER, GPIO.HIGH)
        time.sleep(0.05)
        GPIO.output(BUZZER, GPIO.LOW)
        time.sleep(0.2)
elif(dis<=20):
    for i in range(0,5,1):
        GPIO.output(BUZZER, GPIO.HIGH)
        time.sleep(0.05)
        GPIO.output(BUZZER, GPIO.LOW)
        time.sleep(0.05)

Diese Abfragebedingung wird verwendet, um den Klang des Buzzers zu steuern. Je nach Entfernungsunterschied gibt es drei Fälle, in denen unterschiedliche Tonfrequenzen vorkommen. Da der Gesamtwert der Verzögerung 500 beträgt, können alle einen 500ms-Intervall für die Arbeit des Ultraschallsensors bereitstellen.

Phänomen-Bild

../_images/image243.jpeg