Skip to content

Latest commit

 

History

History
268 lines (196 loc) · 8.03 KB

4.1.7_counting_device_python.rst

File metadata and controls

268 lines (196 loc) · 8.03 KB

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 [] und treten Sie heute bei!

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

image

Es ist definitiv praktisch, ein ganzes Kit zu kaufen. Hier ist der Link:

Name ARTIKEL IN DIESEM KIT LINK
Raphael Kit 337

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG KAUF-LINK
cpn_gpio_board
cpn_breadboard
cpn_wires
cpn_resistor
cpn_4_digit -
cpn_74hc595
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

Experimentelle Verfahren

Schritt 1: Bauen Sie den Schaltkreis.

image

Schritt 2: Navigieren Sie zum Ordner des Codes.

cd ~/raphael-kit/python/

Schritt 3: Führen Sie die ausführbare Datei aus.

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

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.

#!/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 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.

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.

def loop():
global counter
    currentState = 0
    lastState = 0
    while True:
        display()
        currentState=GPIO.input(sensorPin)
        if (currentState == 0and (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