Nota
¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Profundiza en el mundo de Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.
¿Por qué unirte?
Soporte de Expertos: Resuelve problemas posventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Vistas Exclusivas: Obtén acceso anticipado a anuncios de nuevos productos y adelantos.
Descuentos Especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.
Promociones Festivas y Sorteos: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy.
3.1.1 Dispositivo de Conteo
Introducción
Aquí crearemos un sistema de conteo con visualización numérica, compuesto por un sensor PIR y una pantalla de segmento de 4 dígitos. Cuando el PIR detecta que alguien pasa, el número en la pantalla de segmento de 4 dígitos aumentará en 1. Puedes utilizar este contador para contar el número de personas que pasan por un pasillo.
Componentes
Diagrama Esquemático
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 |
Procedimiento Experimental
Paso 1: Construye el circuito.
Para Usuarios de Lenguaje C
Paso 2: Ve a la carpeta del código.
cd ~/davinci-kit-for-raspberry-pi/c/3.1.1/
Paso 3: Compila el código.
gcc 3.1.1_CountingDevice.c -lwiringPi
Paso 4: Ejecuta el archivo ejecutable.
sudo ./a.out
Una vez que el código se ejecute, cuando el sensor PIR detecte que alguien pasa, el número en la pantalla de segmento de 4 dígitos aumentará en 1.
El módulo PIR tiene dos potenciómetros: uno para ajustar la sensibilidad y otro para ajustar la distancia de detección. Para optimizar el rendimiento del módulo PIR, debes girar ambos potenciómetros en sentido antihorario hasta el final.
Nota
Si no funciona después de ejecutar el código o aparece un mensaje de error: "wiringPi.h: No such file or directory», por favor consulta ¿El código en C no funciona?.
Explicación del Código
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]);
}
Primero, inicia la visualización en el cuarto segmento y escribe el número de una sola cifra. Luego inicia la visualización en el tercer segmento y escribe la cifra de las decenas. A continuación, activa el segundo y el primer segmento respectivamente, y escribe las cifras de las centenas y millares respectivamente. Debido a la alta velocidad de actualización, vemos una visualización completa de cuatro dígitos.
void loop(){
int currentState =0;
int lastState=0;
while(1){
display();
currentState=digitalRead(sensorPin);
if((currentState==0)&&(lastState==1)){
counter +=1;
}
lastState=currentState;
}
}
Esta es la función principal: muestra el número en el display de 4 dígitos y lee el valor del sensor PIR. Cuando el PIR detecta que alguien pasa, el número en el display aumentará en 1.
Para Usuarios de Python
Paso 2: Dirígete a la carpeta del código.
cd ~/davinci-kit-for-raspberry-pi/python/
Paso 3: Ejecuta el archivo ejecutable.
sudo python3 3.1.1_CountingDevice.py
Después de ejecutar el código, cuando el PIR detecta que alguien pasa, el número en el display de 4 dígitos aumentará en 1.
Código
Nota
Puedes Modificar/Resetear/Copiar/Ejecutar/Detener el código a continuación. Pero antes de eso, necesitas ir a la ruta del código fuente como 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(): # Cuando se presiona "Ctrl+C", se ejecuta esta función.
GPIO.cleanup()
if __name__ == '__main__': # Programa comienza aquí
setup()
try:
loop()
except KeyboardInterrupt:
destroy()
Explicación del Código
Basado en 1.1.5 Pantalla de 7 Segmentos de 4 Dígitos, en esta lección se añade el módulo PIR para cambiar el conteo automático de la lección 1.1.5 a una detección por conteo. Cuando el PIR detecta que alguien pasa, el número en el display de 4 dígitos aumentará en 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])
Primero, activa el cuarto segmento de la pantalla y escribe el número de una sola cifra. Luego activa el tercer segmento para ingresar la cifra de las decenas. A continuación, activa el segundo y el primer segmento respectivamente, e ingresa las cifras de las centenas y millares. Debido a la alta velocidad de actualización, vemos un display de cuatro dígitos 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
Esta es la función principal: muestra el número en la pantalla de 4 dígitos y lee el valor del PIR. Cuando el PIR detecta que alguien pasa, el número en la pantalla aumentará en 1.
Imagen del Fenómeno