.. 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! .. _4.1.7_py: 4.1.7 Zählgerät ========================================= Einführung ----------------- Hier werden wir ein Zählsystem mit Nummernanzeige erstellen, bestehend aus einem PIR-Sensor und einer 4-stelligen Segmentanzeige. Wenn der PIR erkennt, dass jemand vorbeigeht, erhöht sich die Zahl auf der 4-stelligen Segmentanzeige um 1. Diesen Zähler können Sie verwenden, um die Anzahl der Personen zu zählen, die durch den Durchgang gehen. Benötigte Komponenten ------------------------------ Für dieses Projekt benötigen wir die folgenden Komponenten. .. image:: ../img/list_Counting_Device1.png :align: center .. image:: ../img/list_Counting_Device2.png :align: center 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 * - KOMPONENTENBESCHREIBUNG - 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_4_digit` - \- * - :ref:`cpn_74hc595` - |link_74hc595_buy| * - :ref:`cpn_pir` - \- Schaltplan ---------------------- ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO27 Pin 13 2 27 GPIO22 Pin 15 3 22 SPIMOSI Pin 19 12 10 GPIO18 Pin 12 1 18 GPIO23 Pin 16 4 23 GPIO24 Pin 18 5 24 GPIO26 Pin 37 25 26 ============ ======== ======== === .. image:: ../img/Schematic_three_one1.png :align: center Experimentelle Verfahren ----------------------------- **Schritt 1**: Bauen Sie den Schaltkreis. .. image:: ../img/image235.png **Schritt 2**: Navigieren Sie zum Ordner des Codes. .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Schritt 3**: Führen Sie die ausführbare Datei aus. .. raw:: html .. code-block:: sudo python3 4.1.7_CountingDevice.py Nachdem der Code ausgeführt wurde, erhöht sich die Zahl auf der 4-stelligen Segmentanzeige um 1, sobald der PIR jemanden erkennt, der vorbeigeht. Auf dem PIR-Modul gibt es zwei Potentiometer: eines zur Einstellung der Empfindlichkeit und das andere zur Einstellung der Erkennungsentfernung. Um das PIR-Modul besser zu nutzen, sollten Sie beide im Uhrzeigersinn bis zum Anschlag 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**. Aber zuerst müssen Sie zum Quellcode-Pfad wie ``raphael-kit/python`` navigieren. Nachdem Sie den Code modifiziert haben, können Sie ihn direkt ausführen, um das Ergebnis zu sehen. .. raw:: html .. code-block:: python #!/usr/bin/env python3 import RPi.GPIO as GPIO import time sensorPin = 26 SDI = 24 RCLK = 23 SRCLK = 18 placePin = (10, 22, 27, 17) number = (0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90) counter = 0 def clearDisplay(): for i in range(8): GPIO.output(SDI, 1) GPIO.output(SRCLK, GPIO.HIGH) GPIO.output(SRCLK, GPIO.LOW) GPIO.output(RCLK, GPIO.HIGH) GPIO.output(RCLK, GPIO.LOW) def hc595_shift(data): for i in range(8): GPIO.output(SDI, 0x80 & (data << i)) GPIO.output(SRCLK, GPIO.HIGH) GPIO.output(SRCLK, GPIO.LOW) GPIO.output(RCLK, GPIO.HIGH) GPIO.output(RCLK, GPIO.LOW) def pickDigit(digit): for i in placePin: GPIO.output(i,GPIO.LOW) GPIO.output(placePin[digit], GPIO.HIGH) def display(): global counter clearDisplay() pickDigit(0) hc595_shift(number[counter % 10]) clearDisplay() pickDigit(1) hc595_shift(number[counter % 100//10]) clearDisplay() pickDigit(2) hc595_shift(number[counter % 1000//100]) clearDisplay() pickDigit(3) hc595_shift(number[counter % 10000//1000]) def loop(): global counter currentState = 0 lastState = 0 while True: display() currentState=GPIO.input(sensorPin) if (currentState == 0) and (lastState == 1): counter +=1 lastState=currentState def setup(): GPIO.setmode(GPIO.BCM) GPIO.setup(SDI, GPIO.OUT) GPIO.setup(RCLK, GPIO.OUT) GPIO.setup(SRCLK, GPIO.OUT) for i in placePin: GPIO.setup(i, GPIO.OUT) GPIO.setup(sensorPin, GPIO.IN) def destroy(): # When "Ctrl+C" is pressed, the function is executed. GPIO.cleanup() if __name__ == '__main__': # Program starting from here setup() try: loop() except KeyboardInterrupt: destroy() **Code-Erklärung** Basierend auf :ref:`1.1.5_py` fügt dieses Projekt ein **PIR-Modul** hinzu, um die automatische Zählung in eine Erkennungszählung zu ändern. Wenn der PIR erkennt, dass jemand vorbeigeht, erhöht sich die Zahl auf der 4-stelligen Segmentanzeige um 1. .. code-block:: python def display():     global counter                         clearDisplay()      pickDigit(0)       hc595_shift(number[counter % 10])     clearDisplay()     pickDigit(1)     hc595_shift(number[counter % 100//10])     clearDisplay()     pickDigit(2)     hc595_shift(number[counter % 1000//100])     clearDisplay()     pickDigit(3)     hc595_shift(number[counter % 10000//1000]) Zuerst starten Sie die vierte Segmentanzeige und schreiben die einstelligen Zahl. Dann starten Sie die dritte Segmentanzeige und geben die Zehnerziffer ein. Danach starten Sie nacheinander die zweite und erste Segmentanzeige und schreiben die Hunderter- und Tausenderziffern. Aufgrund der sehr schnellen Aktualisierungsrate sehen wir eine vollständige vierstellige Anzeige. .. code-block:: python def loop(): global counter     currentState = 0     lastState = 0     while True:         display()         currentState=GPIO.input(sensorPin)         if (currentState == 0) and (lastState == 1):             counter +=1         lastState=currentState  Dies ist die Hauptfunktion: Sie zeigt die Zahl auf der 4-stelligen Segmentanzeige an und liest den PIR-Wert aus. Wenn der PIR erkennt, dass jemand vorbeigeht, erhöht sich die Zahl auf der 4-stelligen Segmentanzeige um 1. Phänomen-Bild ------------------------- .. image:: ../img/image236.jpeg :align: center