Publicado el Deja un comentario

Sensor PIR: Detectar movimiento / Leer una Entrada Digital

Un Sensor PIR, o Sensor de Infrarrojos Pasivos por sus siglas en inglés (Passive Infrared Sensor), es un tipo de sensor electrónico que detecta la radiación infrarroja. Estos sensores se utilizan comúnmente en aplicaciones de detección de movimiento, como sistemas de seguridad, control de iluminación y puertas automáticas. La característica «pasiva» de estos sensores radica en que no emiten energía por sí mismos; en cambio, detectan la radiación infrarroja emitida o reflejada por objetos en su campo de visión.

Principio de Detección

Los sensores PIR detectan cambios en la radiación infrarroja dentro de su rango de detección. Los seres humanos y otros animales de sangre caliente emiten radiación infrarroja, y el sensor puede detectar variaciones en esta radiación a medida que los objetos se mueven dentro de su campo de visión.

Material Piroeléctrico

Los sensores PIR utilizan un material piroeléctrico, el cual genera un voltaje cuando se expone a cambios rápidos de temperatura. Este material suele estar hecho de una sustancia cristalina que tiene la propiedad de generar una carga eléctrica en respuesta a cambios de temperatura.

Diseño

Detección con Dos Elementos

Los sensores PIR suelen constar de dos mitades o elementos. Cada mitad se encarga de detectar la radiación infrarroja de una zona específica en el campo de visión del sensor. La diferencia en la salida de estos dos elementos se utiliza para determinar si hay un cambio en el patrón de radiación infrarroja, indicando movimiento.

Lente de Fresnel:

  • La lente de Fresnel es una lente delgada y plana que se utiliza para enfocar la radiación infrarroja en los elementos sensoriales del PIR.
  • Su función principal es mejorar la sensibilidad y precisión del sensor PIR al dirigir la radiación infrarroja hacia los elementos detectores. También ayuda a ampliar el área de detección del sensor.
  • Se encuentran con variedad de diseños, como segmentos o anillos concéntricos, para optimizar la detección en diferentes direcciones.

Conexión a un microcontrolador:

Conectar el Sensor PIR al Microcontrolador:

  • VCC (Alimentación): Conectar al pin de alimentación del microcontrolador (por ejemplo, 5V en placa tipo Wemos D1 Mini).
  • GND (Tierra): Conectar al pin de tierra (GND) del microcontrolador.
  • OUT (Salida de señal): Conectar al pin de entrada/salida digital del microcontrolador (por ejemplo, un pin digital en un microcontrolador).

Algunos sensores PIR también pueden tener pines adicionales, como ajustes de sensibilidad o retardo.

Código para Compilar IDE de Desarrollo

El siguiente código es uno de los más simples para corroborar el correcto funcionamiento del sensor.

int pirPin = 2;  // El PIN de Señal

void setup() {
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
}

void loop() {
  int pirValue = digitalRead(pirPin);
  Serial.println(pirValue);
  delay(1000);  // Espera 1 segundo antes de realizar la próxima lectura
}

Observar la Salida

Abrir el Monitor Serie para ver la salida. Debería verse «1» cuando se detecte movimiento y «0» cuando no haya movimiento.

Publicado el 1 comentario

Sensor DHT11 y DHT22: Medir temperatura y humedad

¿Qué son los sensores DHT11 y DHT22?

Dichos sensores, el DHT11 y el DHT22 (o AM2302) son modelos de una familia de sensores de medición simultánea de temperatura y humedad.

Estos sensores disponen de un procesador interno que realiza el proceso de la medición, proporcionando la medición mediante una señal digital, por lo que es sencillo obtener la medición desde un microcontrolador como un Atmega 328P o un ESP32

Ambos sensores presentan una carcasa plástica similar. Se pueden diferencia ambos modelos por el color del mismo. El DHT11 presenta una carcasa azul, mientras que en el caso del sensor DHT22 el exterior es blanco.

DHT11 es el sensor más básico, y cuenta con características técnicas más básicas. Tiene mayor precisión y rango de temperatura (fundamental para medir la humedad ambiente por encima del 80%), pero a un costo económico mayor.

Las características del DHT11 son realmente escasas, especialmente en rango de medición y precisión.

  • Medición de temperatura entre 0 a 50, con una precisión de 2ºC
  • Medición de humedad entre 20 a 80%, con precisión del 5%.
  • Frecuencia de muestreo de 1 muestras por segundo (1 Hz)

El modelo DHT22 tiene unas características relativamente muy superiores (según aplicaciones en entornos comunes):

  • Medición de temperatura entre -40 a 125 ºC, con una precisión de 0.5ºC
  • Medición de humedad entre 0 a 100%, con precisión del 2-5%.
  • Frecuencia de muestreo de 2 muestras por segundo (2 Hz)

EL DHT22 (sin llegar a ser un sensor de alta precisión) tiene cualidades que suelen ser más útiles para emplearlo en proyectos reales de monitorización o registro, que requieran una precisión convencional.

/*
Ejemplo de sketch de prueba para varios sensores de humedad/temperatura DHT



Biblioteca de sensores DHT: https://github.com/adafruit/DHT-sensor-library
Biblioteca Adafruit Unified Sensor: https://github.com/adafruit/Adafruit_Sensor
*/

#include "DHT.h"
#define DHTPIN 2     // Conectar el sensor a este pin


/*
Conectar una resistencia de 10K desde el pin 2 (datos) al pin 1 (alimentación) del sensor
Inicializa el sensor DHT.
enga en cuenta que las versiones anteriores de esta biblioteca tomaron un tercer parámetro opcional para
ajusta los tiempos para procesadores más rápidos. Este parámetro ya no es necesario
a medida que el algoritmo de lectura DHT actual se ajusta para funcionar en procesos más rápidos.

*/


DHT dht(DHTPIN, DHTTYPE);

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)


void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}