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

_images/list_Counting_Device1.png _images/list_Counting_Device2.png

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

_images/Schematic_three_one1.png

Procedimiento Experimental

Paso 1: Construye el circuito.

contador_bb

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

_images/image236.jpeg