.. note::
¡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 [|link_sf_facebook|] 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
---------------
.. image:: img/list_Counting_Device1.png
:align: center
.. image:: img/list_Counting_Device2.png
:align: center
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
============ ======== ======== ===
.. image:: img/Schematic_three_one1.png
:align: center
Procedimiento Experimental
-------------------------------
**Paso 1**: Construye el circuito.
.. image:: img/image235.png
:alt: contador_bb
:width: 800
**Para Usuarios de Lenguaje C**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**Paso 2**: Ve a la carpeta del código.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/c/3.1.1/
**Paso 3**: Compila el código.
.. raw:: html
.. code-block::
gcc 3.1.1_CountingDevice.c -lwiringPi
**Paso 4**: Ejecuta el archivo ejecutable.
.. raw:: html
.. code-block::
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.
.. note::
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 :ref:`faq_c_nowork`.
**Explicación del Código**
.. code-block:: c
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.
.. code-block:: c
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.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/python/
**Paso 3**: Ejecuta el archivo ejecutable.
.. raw:: html
.. code-block::
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**
.. note::
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``.
.. raw:: html
.. code-block:: 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.
.. code-block:: python
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.
.. code-block:: python
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
----------------------
.. image:: img/image236.jpeg