.. 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 [|link_sf_facebook|] et rejoignez-nous aujourd'hui ! .. _4.1.9_py: 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. .. image:: ../img/list_Reversing_Alarm.png :align: center Il est certainement pratique d'acheter un kit complet, voici le lien : .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nom - ÉLÉMENTS DANS CE KIT - LIEN * - Kit Raphael - 337 - |link_Raphael_kit| Vous pouvez également les acheter séparément à partir des liens ci-dessous. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCTION DES COMPOSANTS - LIEN D'ACHAT * - :ref:`cpn_gpio_extension_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_buzzer` - \- * - :ref:`cpn_transistor` - |link_transistor_buy| * - :ref:`cpn_ultrasonic_sensor` - |link_ultrasonic_buy| * - :ref:`cpn_i2c_lcd` - |link_i2clcd1602_buy| 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 =============== ======== ======== === .. image:: ../img/Schematic_three_one3.png :align: center Procédures Expérimentales ------------------------------ **Étape 1 :** Construisez le circuit. .. image:: ../img/image242.png :width: 700 :align: center **Étape 2 :** Changez de répertoire. .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Étape 3 :** Exécutez. .. raw:: html .. code-block:: 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 à :ref:`i2c_config` pour activer l'I2C. * Si vous obtenez l'erreur ``ModuleNotFoundError: No module named 'smbus2'``, veuillez exécuter ``sudo apt install python3-smbus2``. * Si l'erreur ``OSError: [Errno 121] Remote I/O error`` apparaî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. .. raw:: html .. code-block:: python 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** .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python 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. .. code-block:: python 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 -------------------- .. image:: ../img/image243.jpeg :align: center