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