Note
Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.
Pourquoi rejoindre ?
Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.
Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.
Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.
Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.
Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.
👉 Prêt à explorer et à créer avec nous ? Cliquez [Ici] et rejoignez-nous aujourd’hui !
4.1.9 Alerte de Recul
Introduction
Dans ce projet, nous allons utiliser un écran LCD, un buzzer et des capteurs ultrasoniques pour créer un système d’assistance au recul. Nous pouvons le placer sur un véhicule télécommandé pour simuler le processus réel de recul d’une voiture dans un garage.
Composants Nécessaires
Dans ce projet, nous avons besoin des composants suivants.
Il est certainement pratique d’acheter un kit complet, voici le lien :
Nom |
ÉLÉMENTS DANS CE KIT |
LIEN |
|---|---|---|
Kit Raphael |
337 |
Vous pouvez également les acheter séparément à partir des liens ci-dessous.
INTRODUCTION DES COMPOSANTS |
LIEN D’ACHAT |
|---|---|
- |
|
Schéma de Câblage
Le capteur ultrasonique détecte la distance entre lui-même et l’obstacle qui sera affichée sur l’écran LCD sous forme de code. En même temps, le capteur ultrasonique fait émettre au buzzer un son d’alerte de fréquence différente en fonction de la valeur de la distance.
Nom de la Carte |
Brochage |
wiringPi |
BCM |
GPIO23 |
Pin 16 |
4 |
23 |
GPIO24 |
Pin 18 |
5 |
24 |
GPIO17 |
Pin 11 |
17 |
|
SDA1 |
Pin 3 |
||
SCL1 |
Pin 5 |
Procédures Expérimentales
Étape 1 : Construisez le circuit.
Étape 2 : Changez de répertoire.
cd ~/raphael-kit/python/
Étape 3 : Exécutez.
sudo python3 4.1.9_ReversingAlarm.py
Pendant l’exécution du code, le module de capteur ultrasonique détecte la distance par rapport à l’obstacle et affiche l’information sur l’écran LCD1602. De plus, le buzzer émet un son d’avertissement dont la fréquence varie en fonction de la distance.
Note
Si vous obtenez l’erreur
FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1', vous devez vous référer à Configuration I²C pour activer l’I2C.Si vous obtenez l’erreur
ModuleNotFoundError: No module named 'smbus2', veuillez exécutersudo apt install python3-smbus2.Si l’erreur
OSError: [Errno 121] Remote I/O errorapparaît, cela signifie que le module est mal câblé ou défectueux.Si le code et le câblage sont corrects mais que l’écran LCD n’affiche toujours pas de contenu, vous pouvez tourner le potentiomètre à l’arrière pour augmenter le contraste.
Code
Note
Vous pouvez Modifier/Réinitialiser/Copier/Exécuter/Arrêter le code ci-dessous. Mais avant cela, vous devez aller dans le chemin du code source comme raphael-kit/python. Après avoir modifié le code, vous pouvez l’exécuter directement pour voir l’effet.
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()
Explication du Code
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()
Dans ce programme, nous appliquons de manière synthétique les composants utilisés précédemment. Ici, nous utilisons des buzzers, un écran LCD et un capteur ultrasonique. Nous pouvons les initialiser de la même manière que nous l’avons fait auparavant.
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')
Ici, nous obtenons les valeurs du capteur ultrasonique et calculons la distance. Si la valeur de la distance est supérieure à la plage de détection, un message d’erreur est affiché sur l’écran LCD. Si la distance est dans la plage de fonctionnement, les résultats correspondants seront affichés.
LCD1602.write(5, 1, str(round(dis,2)) +' cm')
Étant donné que la sortie LCD ne prend en charge que les types de caractères, nous devons utiliser str() pour convertir les valeurs numériques en caractères. Nous allons arrondir à deux décimales.
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)
Cette condition de jugement est utilisée pour contrôler le son du buzzer. Selon la différence de distance, elle peut être divisée en trois cas, chacun ayant des fréquences sonores différentes. Étant donné que la valeur totale du délai est de 500, toutes peuvent fournir un intervalle de 500 ms pour le fonctionnement du capteur ultrasonique.
Photo du Phénomène