Empty cart

No hay productos en el carrito ☹

Sensores de bricolaje para la Automatización del hogar

¡Compartelo con tus amigos!

Sensores de bricolaje para la Automatización del hogar

Esta publicación es parte de un tutorial sobre cómo construir sensores de automatización del hogar de bajo costo. Si ha aterrizado en esta página directamente, le sugiero que consulte primero Sensores de automatización del hogar de bajo costo. En esta parte del tutorial, creará la puerta de enlace. La puerta de enlace manejará las comunicaciones para todos los nodos de su red.

Si está comenzando con Arduino, debe consultar la Guía Arduino for Dummies , que lo ayudará a ponerse al día.

Lista de materiales

UnidadesDescripción
1NRF24L01 + RF inalámbrico de 2,4 GHz
1Arduino Nano V3
1Cables de salto
1Sensor de temperatura y humedad DHT22

Construye el circuito

Para este sensor en particular, estoy usando un Arduino Nano. Tiene un tamaño muy pequeño y funciona muy bien para los nodos que planea tener conectados a una toma de corriente.

sensores-de-bricolaje
sensores-de-bricolaje

Cuando compre el sensor DHT22, es posible que reciba uno que se ve ligeramente diferente al del diagrama. Si obtiene algo que se parece a este, no se preocupe. Es el mismo sensor pero algunos fabricantes lo envían integrado en un PCB solo con los 3 pines que son relevantes. Solo tienes que conectar  Out  a D3 y los otros 2 a VCC y GND.

Instalar bibliotecas adicionales

El código para Arduino que tiene a continuación requiere 2 bibliotecas, MySensors y DHT22.

MySensors

1.Descargue la última RC de la biblioteca MySensors desde este enlace .

sensores-de-bricolaje

2. Agregue el archivo zip como una nueva biblioteca.

sensores-de-bricolaje

DHT22

Cuando escribí este tutorial inicialmente, estaba usando la biblioteca descargada directamente del administrador de la biblioteca en el IDE de Arduino. Gracias a los comentarios de Nucutza (en los comentarios) llegué a saber que la biblioteca se ha actualizado y el código ya no se compila. Según su sugerencia, estoy agregando el enlace a las bibliotecas externas de MySensor.  Entre otras cosas, contiene una versión modificada de la biblioteca para interactuar con los sensores DHT11 y DHT22.

Sube el boceto al Arduino

Puede encontrar un enlace sobre cómo cargar bocetos en Arduino si aún no está familiarizado con la plataforma.

#include <DHT.h> #define MY_DEBUG#define MY_RADIO_NRF24#define MY_NODE_ID 1 #define CHILD_ID_TEMP 0#define CHILD_ID_HUM 1#define DHT_DATA_PIN 3#define SENSOR_TEMP_OFFSET 0 #include <MySensors.h> /**************************************************//****************** CONSTANTS *********************//**************************************************/ static const uint64_t UPDATE_INTERVAL = 10000;static const uint8_t FORCE_UPDATE_N_READS = 10; /**************************************************//****************** VARIABLES *********************//**************************************************/float lastTemp;float lastHum;float temperature;float humidity;uint8_t nNoUpdatesTemp;uint8_t nNoUpdatesHum; /**************************************************//****************** MESSAGES **********************//**************************************************/ MyMessage msgHum(CHILD_ID_HUM, V_HUM);MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); DHT dht; void presentation() { present(CHILD_ID_HUM, S_HUM);present(CHILD_ID_TEMP, S_TEMP);}  void setup(){delay(2000); //Wait 2 seconds before starting sequence if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {Serial.println(«Warning: UPDATE_INTERVAL is smaller than supported by the sensor!»);} sleep(dht.getMinimumSamplingPeriod()); dht.setup(DHT_DATA_PIN);} void loop() { sendTemperatureHumiditySensor(); wait(UPDATE_INTERVAL);} /**************************************************//**************** AUX. FUNCTIONS ******************//**************************************************/ void sendTemperatureHumiditySensor(){dht.readSensor(true);temperature = dht.getTemperature();humidity = dht.getHumidity(); if (isnan(temperature)) {Serial.println(«Failed reading temperature from DHT!»);} else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {lastTemp = temperature;nNoUpdatesTemp = 0;temperature += SENSOR_TEMP_OFFSET;send(msgTemp.set(temperature, 1)); #ifdef MY_DEBUGSerial.print(«T: «);Serial.println(temperature);#endif} else {nNoUpdatesTemp++;} if (isnan(humidity)) {Serial.println(«Failed reading humidity from DHT»);} else if (humidity != lastHum || nNoUpdatesHum == FORCE_UPDATE_N_READS){lastHum = humidity;nNoUpdatesHum = 0;send(msgHum.set(humidity, 1)); #ifdef MY_DEBUGSerial.print(«H: «);Serial.println(humidity);#endif} else {nNoUpdatesHum++;} }

Agregar nuevos elementos a OpenHab

El boceto de Arduino que acaba de cargar publicará valores en los siguientes temas.Temperatura -> mygateway1-out / 1/0/1/0/0Humedad         -> mygateway1-out / 1/1/1/0/1La definición del tema anterior dependerá de los parámetros definidos en su boceto, principalmente el identificador de nodo y las identificaciones que identifican a cada uno de los sensores.

123#define MY_NODE_ID 1#define CHILD_ID_TEMP 0#define CHILD_ID_HUM 1

Si cambia los parámetros en el boceto, asegúrese de modificar los temas en consecuencia.Temperatura -> mygateway1-out / MY_NODE_ID / CHILD_ID_TEMP / 1/0/0Humedad         -> mygateway1-out / MY_NODE_ID / CHILD_ID_HUM / 1/0/1Si está utilizando OpenHab, asegúrese de echar un vistazo al   tutorial de MQTT y OpenHab .Como referencia, aquí tienes la definición de los elementos del croquis de arriba.

12Number mqtt_bedroom_temperature «Temperature [%.1f]»  {mqtt=»<[mosquitto:mygateway1-out/1/0/1/0/0:state:default]»}Number mqtt_bedroom_humidity «Humidity [%.1f]»        {mqtt=»<[mosquitto:mygateway1-out/1/1/1/0/1:state:default]»}

Si desea obtener más información sobre el protocolo de comunicación de la biblioteca MySensor, consulte el Protocolo de comunicación de MySensors .

Espero que les haya gustado el tutorial, si tiene preguntas o sugerencias por favor publique algunos comentarios.

con la plataforma.

¡Compartelo con tus amigos!

Deja una respuesta

Su dirección de correo electrónico no será publicada. Required fields are marked *

Top