Nota

Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze di Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato a nuovi annunci di prodotti e anteprime speciali.

  • Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni festive e omaggi: Partecipa a promozioni speciali e concorsi durante le festività.

👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

4.1.7 Dispositivo Contatore

Introduzione

In questo progetto realizzeremo un sistema di conteggio con display a 4 cifre, composto da un sensore PIR e un display a 4 segmenti. Quando il sensore PIR rileva il passaggio di qualcuno, il numero sul display a 4 cifre incrementerà di 1. Puoi utilizzare questo contatore per conteggiare il numero di persone che passano attraverso un passaggio.

Componenti necessari

In questo progetto, avremo bisogno dei seguenti componenti.

../_images/list_Counting_Device1.png ../_images/list_Counting_Device2.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

Display a 7 Segmenti da 4 Cifre

-

74HC595

ACQUISTA

Modulo Sensore di Movimento PIR

-

Schema elettrico

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

../_images/Schematic_three_one1.png

Procedure sperimentali

Passo 1: Costruisci il circuito.

../_images/image235.png

Passo 2: Vai alla cartella del codice.

cd ~/raphael-kit/python/

Passo 3: Esegui il file eseguibile.

sudo python3 4.1.7_CountingDevice.py

Dopo l’esecuzione del codice, quando il sensore PIR rileva il passaggio di qualcuno, il numero sul display a 4 cifre incrementerà di 1.

Ci sono due potenziometri sul modulo PIR: uno regola la sensibilità e l’altro la distanza di rilevamento. Per far funzionare meglio il modulo PIR, devi girarli entrambi completamente in senso antiorario.

../_images/PIR_TTE.png

Codice

Nota

Puoi Modificare/Resettare/Copiare/Eseguire/Fermare il codice qui sotto. Ma prima di farlo, devi accedere al percorso del codice sorgente come raphael-kit/python. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.

#!/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():   # Quando si preme "Ctrl+C", viene eseguita la funzione.
    GPIO.cleanup()

if __name__ == '__main__':  # Il programma parte da qui
    setup()
    try:
        loop()
    except KeyboardInterrupt:
        destroy()

Spiegazione del codice

Basato su 1.1.5 Display a 7 Segmenti da 4 Cifre, questo progetto aggiunge il modulo PIR per trasformare il conteggio automatico in rilevamento del conteggio. Quando il PIR rileva il passaggio di qualcuno, il numero sul display a 4 cifre incrementerà di 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])

Prima si avvia il quarto display a segmenti e si scrive la cifra singola. Poi si avvia il terzo display a segmenti e si scrive la cifra delle decine; infine, si avviano rispettivamente il secondo e il primo display a segmenti e si scrivono rispettivamente le cifre delle centinaia e delle migliaia. Grazie alla velocità di aggiornamento molto elevata, vediamo un display a quattro cifre completo.

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

Questa è la funzione principale: visualizza il numero sul display a 4 cifre e legge il valore del PIR. Quando il PIR rileva il passaggio di qualcuno, il numero sul display a 4 cifre incrementerà di 1.

Immagine del fenomeno

../_images/image236.jpeg