Nota

Ciao, benvenuto nella Community di appassionati SunFounder di Raspberry Pi, Arduino e ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.

Perché unirti?

  • Supporto da esperti: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.

  • Impara e Condividi: Scambia consigli e tutorial per migliorare le tue abilità.

  • Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime.

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

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

👉 Sei pronto per esplorare e creare con noi? Clicca [Qui] e unisciti oggi!

3.1.1 Dispositivo Contatore

Introduzione

Qui costruiremo un sistema di conteggio visualizzato su display numerico a 4 cifre, composto da un sensore PIR e un display a segmento. Quando il PIR rileva il passaggio di una persona, il numero sul display a 4 cifre aumenterà di 1. Questo contatore può essere utilizzato per contare il numero di persone che attraversano un corridoio.

Componenti

_images/list_Counting_Device1.png _images/list_Counting_Device2.png

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

Per utenti del linguaggio C

Passo 2: Vai alla cartella del codice.

cd ~/davinci-kit-for-raspberry-pi/c/3.1.1/

Passo 3: Compila il codice.

gcc 3.1.1_CountingDevice.c -lwiringPi

Passo 4: Esegui il file eseguibile.

sudo ./a.out

Dopo l’esecuzione del codice, quando il PIR rileva il passaggio di una persona, il numero sul display a 4 cifre aumenterà di 1.

Sul modulo PIR sono presenti due potenziometri: uno per regolare la sensibilità e l’altro per regolare la distanza di rilevamento. Per ottenere le migliori prestazioni, ruota entrambi i potenziometri in senso antiorario fino in fondo.

Nota

Se non funziona dopo l’esecuzione o appare un errore: "wiringPi.h: No such file or directory", consulta Il codice C non funziona?.

Spiegazione del Codice

void display()
{
    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]);
}

Per prima cosa, attiva il quarto display segmentato e scrivi il numero delle unità. Poi attiva il terzo display e inserisci la cifra delle decine; successivamente, attiva il secondo e il primo display per scrivere rispettivamente le centinaia e le migliaia. Poiché la velocità di aggiornamento è molto rapida, vediamo un display completo a quattro cifre.

void loop(){
    int currentState =0;
    int lastState=0;
    while(1){
        display();
        currentState=digitalRead(sensorPin);
        if((currentState==0)&&(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 una persona, il numero sul display aumenterà di 1.

Per Utenti del Linguaggio Python

Passo 2: Vai alla cartella del codice.

cd ~/davinci-kit-for-raspberry-pi/python/

Passo 3: Esegui il file eseguibile.

sudo python3 3.1.1_CountingDevice.py

Dopo l’esecuzione del codice, quando il PIR rileva il passaggio di una persona, il numero sul display a 4 cifre aumenterà di 1.

Codice

Nota

È possibile Modificare/Reimpostare/Copiare/Eseguire/Interrompere il codice seguente. Prima di procedere, assicurati di trovarti nel percorso del codice sorgente, come ad esempio davinci-kit-for-raspberry-pi/python.

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 viene premuto "Ctrl+C", questa funzione viene eseguita.
    GPIO.cleanup()

if __name__ == '__main__':  # Inizio del programma
    setup()
    try:
        loop()
    except KeyboardInterrupt:
        destroy()

Spiegazione del Codice

Basato su 1.1.5 Display a 4 Cifre 7-Segmenti, questa lezione aggiunge il modulo PIR per cambiare il conteggio automatico della lezione 1.1.5 in un conteggio rilevato. Quando il PIR rileva il passaggio di una persona, il numero sul display a 4 cifre aumenterà 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])

Per prima cosa, attiva il quarto display a segmenti e scrivi il numero delle unità. Poi attiva il terzo display e inserisci la cifra delle decine; successivamente, attiva il secondo e il primo display per scrivere rispettivamente le centinaia e le migliaia. Poiché la velocità di aggiornamento è molto rapida, vediamo un display completo a quattro cifre.

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 una persona, il numero sul display aumenterà di 1.

Immagine del Fenomeno

_images/image236.jpeg