.. note:: 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 [|link_sf_facebook|] und treten Sie heute bei! .. _2.2.7_py: 2.2.7 PIR ========= Einführung ---------- In diesem Projekt werden wir ein Gerät mit Hilfe von Infrarot-Pyrosensoren für den menschlichen Körper herstellen. Wenn sich jemand dem LED nähert, wird das LED automatisch eingeschaltet. Wenn nicht, erlischt das Licht. Dieser Infrarot-Bewegungssensor ist eine Art von Sensor, der das von Menschen und Tieren abgegebene Infrarot erkennen kann. Benötigte Komponenten --------------------- Für dieses Projekt benötigen wir die folgenden Komponenten. .. image:: ../img/list_2.2.4_pir2.png Es ist definitiv praktisch, ein ganzes Kit zu kaufen. Hier ist der Link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Name - ARTIKEL IN DIESEM KIT - LINK * - Raphael Kit - 337 - |link_Raphael_kit| Sie können sie auch einzeln über die untenstehenden Links kaufen. .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTEN EINFÜHRUNG - KAUF-LINK * - :ref:`cpn_gpio_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_rgb_led` - |link_rgb_led_buy| * - :ref:`cpn_pir` - \- Schaltplan ---------- .. image:: ../img/image327.png Experimentelle Verfahren ------------------------ **Schritt 1:** Schalte die Schaltung. .. image:: ../img/image214.png **Schritt 2:** Gehe zum Ordner des Codes. .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Schritt 3:** Führe die ausführbare Datei aus. .. raw:: html .. code-block:: sudo python3 2.2.7_PIR.py Nachdem der Code ausgeführt wurde, erkennt PIR die Umgebung und lässt die RGB-LED gelb leuchten, wenn jemand vorbeigeht. Am PIR-Modul befinden sich zwei Potentiometer: eines zur Einstellung der Empfindlichkeit und das andere zur Einstellung der Erfassungsentfernung. Um das PIR-Modul besser zu nutzen, müssen Sie beide im Uhrzeigersinn bis zum Ende drehen. .. image:: ../img/PIR_TTE.png :width: 400 :align: center **Code** .. note:: Sie können den untenstehenden Code **Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen**. Davor müssen Sie jedoch zum Quellcodepfad wie ``raphael-kit/python`` gehen. Nachdem Sie den Code geändert haben, können Sie ihn direkt ausführen, um das Ergebnis zu sehen. .. raw:: html .. code-block:: python import RPi.GPIO as GPIO import time rgbPins = {'Red':18, 'Green':27, 'Blue':22} pirPin = 17 # the pir connect to pin17 def setup(): global p_R, p_G, p_B GPIO.setmode(GPIO.BCM) # Set the GPIO modes to BCM Numbering GPIO.setup(pirPin, GPIO.IN) # Set pirPin to input # Set all LedPin's mode to output and initial level to High(3.3v) for i in rgbPins: GPIO.setup(rgbPins[i], GPIO.OUT, initial=GPIO.HIGH) # Set all led as pwm channel and frequece to 2KHz p_R = GPIO.PWM(rgbPins['Red'], 2000) p_G = GPIO.PWM(rgbPins['Green'], 2000) p_B = GPIO.PWM(rgbPins['Blue'], 2000) # Set all begin with value 0 p_R.start(0) p_G.start(0) p_B.start(0) # Define a MAP function for mapping values. Like from 0~255 to 0~100 def MAP(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min # Define a function to set up colors def setColor(color): # configures the three LEDs' luminance with the inputted color value . # Devide colors from 'color' veriable R_val = (color & 0xFF0000) >> 16 G_val = (color & 0x00FF00) >> 8 B_val = (color & 0x0000FF) >> 0 # Map color value from 0~255 to 0~100 R_val = MAP(R_val, 0, 255, 0, 100) G_val = MAP(G_val, 0, 255, 0, 100) B_val = MAP(B_val, 0, 255, 0, 100) #Assign the mapped duty cycle value to the corresponding PWM channel to change the luminance. p_R.ChangeDutyCycle(R_val) p_G.ChangeDutyCycle(G_val) p_B.ChangeDutyCycle(B_val) #print ("color_msg: R_val = %s, G_val = %s, B_val = %s"%(R_val, G_val, B_val)) def loop(): while True: pir_val = GPIO.input(pirPin) if pir_val==GPIO.HIGH: setColor(0xFFFF00) else : setColor(0x0000FF) def destroy(): p_R.stop() p_G.stop() p_B.stop() GPIO.cleanup() # Release resource if __name__ == '__main__': # Program start from here setup() try: loop() except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the child program destroy() will be executed. destroy() **Code-Erklärung** .. code-block:: python rgbPins = {'Red':18, 'Green':27, 'Blue':22} def setup(): global p_R, p_G, p_B GPIO.setmode(GPIO.BCM) # …… for i in rgbPins: GPIO.setup(rgbPins[i], GPIO.OUT, initial=GPIO.HIGH) p_R = GPIO.PWM(rgbPins['Red'], 2000) p_G = GPIO.PWM(rgbPins['Green'], 2000) p_B = GPIO.PWM(rgbPins['Blue'], 2000) p_R.start(0) p_G.start(0) p_B.start(0) def MAP(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min def setColor(color): ... Mit diesen Codes wird die Farbe der RGB-LED festgelegt. Weitere Details finden Sie unter :ref:`1.1.2_py`. .. code-block:: python def loop(): while True: pir_val = GPIO.input(pirPin) if pir_val==GPIO.HIGH: setColor(0xFFFF00) else : setColor(0x0000FF) Wenn das PIR den menschlichen Infrarotbereich erkennt, strahlt die RGB-LED gelbes Licht aus; wenn nicht, strahlt sie blaues Licht aus. Phänomen-Bild ------------- .. image:: ../img/image215.jpeg