.. note::
¡Hola! Bienvenidos a la comunidad de entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto con otros apasionados.
**¿Por qué unirse?**
- **Soporte de Expertos**: Soluciona problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
- **Aprende y Comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades.
- **Avances Exclusivos**: Accede anticipadamente a anuncios de nuevos productos y adelantos.
- **Descuentos Especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes.
- **Promociones y Sorteos Festivos**: Participa en sorteos y promociones especiales en días festivos.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy.
2.2.4 PIR
===========
Introducción
-------------
En este proyecto, construiremos un dispositivo utilizando sensores
piroeléctricos de infrarrojos para detectar el cuerpo humano. Cuando
alguien se acerque al LED, este se encenderá automáticamente; de lo
contrario, permanecerá apagado. Este sensor de movimiento por infrarrojos
es capaz de detectar la radiación infrarroja emitida por personas y animales.
Componentes
-------------
.. image:: img/list_2.2.4_pir.png
Principio
------------
El sensor PIR detecta la radiación de calor infrarrojo, que se usa para
detectar la presencia de organismos que emiten este tipo de radiación.
El sensor PIR está dividido en dos ranuras conectadas a un amplificador
diferencial. Cuando un objeto estático se encuentra frente al sensor,
ambas ranuras reciben la misma cantidad de radiación y la salida es cero.
En cambio, si un objeto en movimiento está frente al sensor, una de las
ranuras recibe más radiación que la otra, lo que provoca que la salida
oscile entre niveles altos y bajos. Este cambio en la salida es consecuencia
de la detección de movimiento.
.. image:: img/image211.png
:width: 200
Después de conectar el módulo de detección, hay un período de inicialización
de un minuto. Durante este tiempo, el módulo emitirá señales entre 0 y 3 veces
a intervalos. Luego, el módulo entrará en modo de espera. Mantén alejadas las
fuentes de interferencia, como la luz y otros elementos, para evitar falsos
positivos debido a señales externas. Es mejor utilizar el módulo en ausencia
de corrientes de aire, ya que el viento también puede afectar el sensor.
.. image:: img/image212.png
:width: 400
**Ajuste de Distancia**
Girando el potenciómetro de ajuste de distancia en el sentido de las agujas del
reloj, aumenta el rango de detección, con una distancia máxima de aproximadamente
0 a 7 metros. Si se gira en sentido contrario, el rango se reduce, con una distancia
mínima de detección de alrededor de 0 a 3 metros.
**Ajuste de Retardo**
Girando el potenciómetro de ajuste de retardo en sentido horario, se
incrementa el tiempo de retardo de detección, con un máximo de hasta
300 segundos. En cambio, si se gira en sentido antihorario, el retardo
disminuye, con un mínimo de 5 segundos.
Dos modos de disparo (se eligen mediante el puente de configuración):
- **H:** **Modo de disparo repetible**, después de detectar a una persona, el módulo mantiene la salida en nivel alto. Durante el período de retardo, si alguien entra en el rango de detección, la salida continuará en nivel alto.
- **L:** **Modo de disparo no repetible**, la salida se mantiene en nivel alto solo mientras detecta a una persona. Después del retardo, cambia automáticamente de alto a bajo.
Diagrama de Circuito
-------------------------
.. image:: img/image327.png
Procedimientos Experimentales
---------------------------------
**Paso 1:** Construye el circuito.
.. image:: img/image214.png
:width: 800
**Paso 2:** Accede a la carpeta del código.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/c/2.2.4/
**Paso 3:** Compila el código.
.. raw:: html
.. code-block::
gcc 2.2.4_PIR.c -lwiringPi
**Paso 4:** Ejecuta el archivo ejecutable.
.. raw:: html
.. code-block::
sudo ./a.out
Después de ejecutar el código, el PIR detectará el entorno y hará que el LED
RGB se ilumine en amarillo si detecta a alguien pasando. El módulo PIR tiene
dos potenciómetros: uno para ajustar la sensibilidad y otro para la distancia
de detección. Para un mejor funcionamiento, gíralos en sentido antihorario
hasta el final.
.. image:: img/PIR_TTE.png
.. note::
Si no funciona tras ejecutar el código, o aparece el mensaje de error: \"wiringPi.h: No such file or directory", consulta :ref:`faq_c_nowork`.
**Código**
.. code-block:: c
#include
#include
#include
#define uchar unsigned char
#define pirPin 0 //el pir se conecta a GPIO0
#define redPin 1
#define greenPin 2
#define bluePin 3
void ledInit(void){
softPwmCreate(redPin, 0, 100);
softPwmCreate(greenPin,0, 100);
softPwmCreate(bluePin, 0, 100);
}
void ledColorSet(uchar r_val, uchar g_val, uchar b_val){
softPwmWrite(redPin, r_val);
softPwmWrite(greenPin, g_val);
softPwmWrite(bluePin, b_val);
}
int main(void)
{
int pir_val;
if(wiringPiSetup() == -1){ //si inicializar wiring falla, imprime mensaje en pantalla
printf("setup wiringPi failed !");
return 1;
}
ledInit();
pinMode(pirPin, INPUT);
while(1){
pir_val = digitalRead(pirPin);
if(pir_val== 1){ //si la lectura de pir es nivel ALTO
ledColorSet(0xff,0xff,0x00);
}
else {
ledColorSet(0x00,0x00,0xff);
}
}
return 0;
}
**Explicación del Código**
.. code-block:: c
void ledInit(void);
void ledColorSet(uchar r_val, uchar g_val, uchar b_val);
Estas funciones configuran el color del LED RGB. Consulta :ref:`1.1.2_rgb` para más detalles.
.. code-block:: c
int main(void)
{
int pir_val;
//……
pinMode(pirPin, INPUT);
while(1){
pir_val = digitalRead(pirPin);
if(pir_val== 1){ //si la lectura de pir es nivel ALTO
ledColorSet(0xff,0xff,0x00);
}
else {
ledColorSet(0x00,0x00,0xff);
}
}
return 0;
}
Cuando el PIR detecta el espectro infrarrojo humano, el LED RGB emite luz
amarilla; de lo contrario, emite luz azul.