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


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 |

Procedure Sperimentali
Passo 1: Costruisci il circuito.

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
