.. 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.15_py: 4.1.15 Alarme ================================ Introduction ----------------- Dans ce projet, nous allons créer un dispositif d'alarme manuel. Vous pouvez remplacer l'interrupteur à bascule par un thermistor ou un capteur photosensible pour créer une alarme de température ou de lumière. Composants Requis ------------------------------ Pour ce projet, nous avons besoin des composants suivants. .. image:: ../img/list_Alarm_Bell.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 DU COMPOSANT - 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_led` - |link_led_buy| * - :ref:`cpn_buzzer` - |link_passive_buzzer_buy| * - :ref:`cpn_slide_switch` - |link_slide_switch_buy| * - :ref:`cpn_transistor` - |link_transistor_buy| * - :ref:`cpn_capacitor` - |link_capacitor_buy| Schéma de Câblage ------------------------- ============ ======== ======== === Nom T-Board physique wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 GPIO22 Pin 15 3 22 ============ ======== ======== === .. image:: ../img/Schematic_three_one10.png :align: center Procédures Expérimentales ----------------------------- **Étape 1** : Construisez le circuit. .. image:: ../img/image266.png **É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.15_AlarmBell.py Après le démarrage du programme, l'interrupteur à bascule sera basculé vers la droite et le buzzer émettra des sons d'alarme. En même temps, les LED rouges et vertes clignoteront à une certaine fréquence. **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``. .. raw:: html .. code-block:: python #!/usr/bin/env python3 import RPi.GPIO as GPIO import time import threading BeepPin=22 ALedPin=17 BLedPin=27 switchPin=18 Buzz=0 flag =0 note=150 pitch=20 def setup(): GPIO.setmode(GPIO.BCM) GPIO.setup(BeepPin, GPIO.OUT) GPIO.setup(ALedPin,GPIO.OUT,initial=GPIO.LOW) GPIO.setup(BLedPin,GPIO.OUT,initial=GPIO.LOW) GPIO.setup(switchPin,GPIO.IN) global Buzz Buzz=GPIO.PWM(BeepPin,note) def ledWork(): while flag: GPIO.output(ALedPin,GPIO.HIGH) time.sleep(0.5) GPIO.output(ALedPin,GPIO.LOW) GPIO.output(BLedPin,GPIO.HIGH) time.sleep(0.5) GPIO.output(BLedPin,GPIO.LOW) def buzzerWork(): global pitch global note while flag: if note >= 800 or note <=130: pitch = -pitch note = note + pitch Buzz.ChangeFrequency(note) time.sleep(0.01) def on(): global flag flag = 1 Buzz.start(50) tBuzz = threading.Thread(target=buzzerWork) tBuzz.start() tLed = threading.Thread(target=ledWork) tLed.start() def off(): global flag flag = 0 Buzz.stop() GPIO.output(ALedPin,GPIO.LOW) GPIO.output(BLedPin,GPIO.LOW) def main(): lastState=0 while True: currentState =GPIO.input(switchPin) if currentState == 1 and lastState == 0: on() elif currentState == 0 and lastState == 1: off() lastState=currentState def destroy(): off() GPIO.cleanup() if __name__ == '__main__': setup() try: main() except KeyboardInterrupt: destroy() **Explication du Code** .. code-block:: python import threading Ici, nous importons le module ``Threading`` qui permet d'exécuter plusieurs tâches en même temps, alors que les programmes normaux ne peuvent exécuter le code que de haut en bas. Avec les modules ``Threading``, la LED et le buzzer peuvent fonctionner séparément. .. code-block:: python def ledWork():     while flag:         GPIO.output(ALedPin,GPIO.HIGH)         time.sleep(0.5)         GPIO.output(ALedPin,GPIO.LOW)         GPIO.output(BLedPin,GPIO.HIGH)         time.sleep(0.5)         GPIO.output(BLedPin,GPIO.LOW) La fonction ``ledWork()`` aide à définir l'état de fonctionnement de ces 2 LED : elle maintient la LED verte allumée pendant 0,5 s puis l'éteint ; de même, elle maintient la LED rouge allumée pendant 0,5 s puis l'éteint. .. code-block:: python def buzzerWork():     global pitch     global note     while flag:         if note >= 800 or note <=130:             pitch = -pitch         note = note + pitch          Buzz.ChangeFrequency(note)         time.sleep(0.01) La fonction ``buzzWork()`` est utilisée pour définir l'état de fonctionnement du buzzer. Ici, nous définissons la fréquence entre 130 et 800, pour accumuler ou diminuer à un intervalle de 20. .. code-block:: python def on():     global flag     flag = 1     Buzz.start(50)     tBuzz = threading.Thread(target=buzzerWork)      tBuzz.start()     tLed = threading.Thread(target=ledWork)      tLed.start()   Dans la fonction ``on()`` : 1) Définir le marqueur « flag=1 », indiquant la fin du thread de contrôle. 2) Démarrer le Buzz et régler le cycle de service à 50 %. 3) Créer **2** threads distincts pour que la LED et le buzzer puissent fonctionner en même temps. La fonction ``threading.Thread()`` est utilisée pour créer le thread et son prototype est le suivant : ``class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)`` Parmi les méthodes de construction, le paramètre principal est ``target``, nous devons assigner un objet appelable (ici les fonctions ``ledWork`` et ``BuzzWork``) à ``target``. Ensuite, ``start()`` est appelé pour démarrer l'objet thread, par exemple, ``tBuzz.start()`` est utilisé pour démarrer le thread nouvellement installé ``tBuzz``. .. code-block:: python def off():     global flag     flag = 0     Buzz.stop()     GPIO.output(ALedPin,GPIO.LOW)     GPIO.output(BLedPin,GPIO.LOW) La fonction ``Off()`` définit « flag=0 » afin de quitter les threads **ledWork** et **BuzzWork** et ensuite éteindre le buzzer et les LED. .. code-block:: python def main():     lastState=0     while True:         currentState =GPIO.input(switchPin)         if currentState == 1 et lastState == 0:             on()         elif currentState == 0 et lastState == 1:             off()         lastState=currentState ``Main()`` contient l'ensemble du processus du programme : d'abord lire la valeur de l'interrupteur à glissière ; si l'interrupteur à bascule est basculé vers la droite (la lecture est 1), la fonction ``on()`` est appelée, le buzzer est actionné pour émettre des sons et les LED rouges et vertes clignotent. Sinon, le buzzer et les LED ne fonctionnent pas. Image du Phénomène ------------------------ .. image:: ../img/image267.jpeg :align: center