Está en la página 1de 13

DEPARTAMENTO DE CIENCIAS DE LA ENERGÍA Y MECÁNICA

CARRERA DE
INGENIERÍA MECATRÓNICA

ASIGNATURA INTRODUCCIÓN A LOS SISTEMAS CIBERFÍSICOS


NRC 8463

TRABAJO PREPARATORIO 1.3

TEMA(S) MONITOREO Y CONTROL DE UN SISTEMA USANDO NODERED

DOCENTE ING. MAYRA COMINA

INTEGRANTES
PACHACAMA LOACHAMIN MICHAEL STALIN
MASABANDA QHISPE CHRISTIAN JAVIER

FECHA 26 DE MAYO DE 2022


1. TEMA
Monitoreo y control de un sistema usando NodeRED.

2. OBJETIVOS
General:
• Realizar el monitoreo y control de un sistema domestico o industrial a baja escala,
empleando sensores y actuadores de manera inalámbrica bajo el protocolo MQTT
con NodeRED como central de procesamiento.
Específicos:
• Emplear los nodos de “función” de NodeRED para realizar el procesamiento e
interpretación de datos recibidos y a enviar al bróker MQTT
• Programar una tarjeta ESP8266 usando Arduino IDE para realizar la lectura de
varios sensores y control de un actuador y un indicador
• Controlar un actuador de forma manual y automática usando programación en
NodeRED
• Mostrar los valores leídos por los sensores mediante una representación visual de
Dashboard

3. EQUIPO Y MATERIALES NECESARIOS


3.1. Materiales
• Microcontrolador ESP8266
• 2 sensores (libre elección)
• 1 Actuador y 1 Indicador
• Cables
• Ordenador

3.2. Software
• NodeRED

4. CUESTIONARIO DEL TRABAJO PREPARATORIO


4.1. Plantear un sistema de monitoreo empleando con los sensores elegidos.

Sistema de apertura de puerta automática


En hospitales, centros comerciales, cines, bancos, edificios, la apertura de puertas se realiza
de manera automática utilizando sensores. Cuando las personas se encuentra a una
distancia dentro del rango de los sensores, las puertas se abren y se mantienen así durante
unos segundos hasta que no existan presencia de personas.

Dentro de los sensores más utilizados está el sensor PIR el cuál detecta la presencia a través
de las radiaciones infrarrojas emitidas por ejemplo por el calor del cuerpo humando o
animales. En la salida del sensor se obtiene una señal digital que puede ser usada para
activar un relé y un motor que permita la apertura de la puerta.

Para simular este sistema se utilizará el sensor PIR y un servomotor conectados a una tarjeta
ESP32. La detección del sensor PIR enviará una señal digital a la tarjeta ESP32 y luego
este valor será publicado en un tópico para que a través de un nodo Fucntion en NodeRED
se realice el procesamiento. Si el sensor detecta presencia entonces el servomotor girará
180°, y retornará a 0° cuando el sensor no detecte presencia.
Características técnicas del sensor PIR
Es un sensor que funciona a partir de la captación de radiación infrarroja, por lo que,
también es llamado Pasivo Infrarrojo. Es usado para la detección de presencia de personas
o animales, y tiene varias aplicaciones como: control de iluminación, detección de
movimiento, apertura automática de puertas, sistemas de alarma de seguridad, entre otros.

Figura 1: Sensor PIR. Fuente: (Rambal, s.f.).

Características:
o Voltaje de entrada: CC 4.5-20V.
o Corriente estatica: 50uA.
o Señal de salida: 0,3 V o 5 V (alta salida cuando se detecta movimiento).
o Angulo: 110 grados.
o Distancia: max. 7 mts.
o Derivacion para fijar el gatillo: H - Si, L – No.

Características técnicas del servomotor


Los servomotores tienen la característica particular que permiten controlar la posición del
eje, es decir, se puede establecer los grados de rotación. Está compuesto por un motor DC,
caja de engranes y circuito electrónico encargado de controlar el movimiento.

Características
o Voltaje de funcionamiento: 3,0-7,2V
o Velocidad (4.8V sin carga): 0.12sec/60 degrees
o Fuerza: 1.2kg / 42.3oz(4.8V);1.6 kg / 56.4oz (6.0V)
o Temperatura de trabajo: -30 to +60 grados ºC
o Longitud de cable: aprox. 23cm
o Incluye accesorios de la foto y tornillos
o Dimensiones: 22x11.5x27mm

Figura 2: Servomotor. Fuente: (SolectroShop, s.f.)


Variables a controlar
La variable a controlar está asociada con la radiación infrarroja emitida por las personas
generada por el calor corporal. De la variable física no se obtiene su valor numérico, puesto
que el sensor entrega una señal digital de 1 o 0 bajo la presencia o no de personas.

Acondicionamiento de sensores
El sensor PIR requiere una alimentación de 5 Voltios, y al entregar una señal digital en la
salida, no es necesario colocar elementos de acondicionamiento. El factor a destacar es la
ubicación del sensor para que permita una correcta detección de las personas.

Tipo de control
Control ON/OFF
El tipo de control seleccionado es ON/OFF debido a que solamente se debe controlar la
activación y desactivación del servomotor. La programación del condicional en base a la
señal enviada por el sensor PIR es realizada en un nodo Function de NodeRED.

Sistema de control de ventilación

La ventilación general consiste en el movimiento del aire a través de espacios confinados,


con la finalidad de mejorar las condiciones del ambiente gracias al control de la
temperatura, de distribución y de la pureza del aire y, en ciertos casos, también de la
humedad. La ventilación puede ser natural u obtenida mecánicamente.

En nuestro sistema planteado vamos a controlar el movimiento de un motor que simulará


la apertura de una rendija que permita circular aire, este control vendrá determinado por la
lectura de un sensor de temperatura LM35 que a medida que aumente la temperatura hasta
llegar a un punto crítico se procederá a activa el motor DC (sistema de ventilación) y se
mantendrá en movimiento hasta que se vuelva a estabilizar la temperatura a un nivel por
debajo del crítico.

En nuestro caso decidimos tomar la medida de temperatura crítica para que se active el
sistema de ventilación en 30º C.

Características técnicas del sensor LM35:

LM35 es un sensor de temperatura analógico con buenas prestaciones, económico, sencillo


de usar, dimensiones reducidas. Permite medir temperatura en un rango desde -55ºC hasta
150ºC. Su salida es de tipo analógica y lineal con una pendiente de 10mV/ºC. El sensor es
calibrado de fábrica a una precisión de 0.5ºC. Entre sus aplicaciones podemos encontrar
termómetros, termostatos, sistemas de monitoreo y más.

Figura 3: Sensor LM35

• Modelo: LM35
• Voltaje de alimentación: 4V – 30V (5V recomendado)
• Rango de sensado temperatura: -55℃ hasta +150℃
• Precisión en el rango de -10°C hasta +85°C: ±0.5°C
• Pendiente: 10mV/ºC
• Bajo consumo energético: 60uA
• No necesita componentes adicionales
• Pines: +VCC, V salida, GND
• Baja impedancia de salida

4.2. Consultar el lenguaje de programación que se emplea en los nodos de “función” en


NodeRED y desarrollar un código para el cálculo del control planteado, empleando
los valores leídos por los sensores. En caso de emplearse un sensor que ofrece una
señal análoga (por ejemplo, una fotorresistencia), el cálculo de la variable en función
del voltaje medido deberá realizarse en NodeRED.
JavaScript es el lenguaje de programación utilizado para programar los nodos Fucntion.
Los mensajes que son recibidos al nodo son usados como datos de entrada para realizar la
programación en base a los requerimientos solicitados.
A través de la propiedad payload se puede acceder al contenido del mensaje y realizar
modificaciones. De igual manera existe la propiedad topic. El nodo entrega en la salida uno
o varios objetos de mensaje, aunque también puede no entregarse nada para detener el flujo.

Figura 4: Nodo Function en NodeRED. Fuente: (Aprendiendo Arduino, s.f.).

Código para cálculo de control planteado


El valor del sensor PIR es publicado en el topico Sensor PIR, este dato es enviado hacia el
nodo function en el cual se realiza la programación del control ON/OFF a partir 1
condicional IF, finalmente el valor de salida del nodo Function es publicado en el tópico
esp32iot en el cual está suscrito la ESP32 para realizar el giro de 0 o 180 grados.
Figura 5: Programación del nodo function para el control ON/OFF.

Código para cálculo del voltaje de una lectura analógica.


El valor en bits de la lectura analógica es enviado al tópico lecturaLM35, este dato es
llevado hacia el primer nodo function en el que simplemente se retornará el mismo valor
en bits y lo mostrará en un gráfico tipo chart.
El dato en bits también es conectado con el segundo nodo fucntion, en el cual se obtendrá
el valor de voltaje, la salida de este nodo está conectado a un gráfico tipo chart. La salida
del segundo nodo fucntion es conectada también al tercer nodo fucntion, en el cual se
realiza la conversión a grados y se programa el control ON/OFF. La salida de este tercer
nodo es publicada en el tópico esp32iot en el cual está suscrito el motor DC.
Figura 6: Programación en NodeRED.

Figura 7: Programación del primero nodo function.

Figura 8: Programación del segundo nodo fucntion.

Figura 9: Programación del tercer nodo fucntion.


4.3. Desarrollar un código para la tarjeta ESP8266 usando Arduino IDE para publicar y
suscribirse al tópico MQTT
#include <WiFi.h>
#include <PubSubClient.h>

//sensor DHT11
#include "DHT.h"
#define DHTPIN 2 //PIN DIGITAL CONECTADO AL SENSOR
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

//Variables
int pot;
int pin_pot=36;
int pulsador = 21;
int led = 22;
char data_pot[4]="";
char data_temp[12]="";
char data_humi[12]="";
char data_templm35[12]="";
char data_digital[2]="";
String messageData;

//LM35
const int pinlm35= 34;
int sensorlm35 = 0;
float templm35;

//Credenciales
const char* ssid = "Redmi Note 7";
const char* password = "1v38c310";

//IP address MQTT broker


const char* mqtt_server = "192.168.43.12"; // IP del ipconfig

WiFiClient esp32;
PubSubClient client(esp32);

long lastMSg = 0;
long tdhtx= 0;
char msg[50];
int value = 0;

// Timers auxiliar variables


long now = millis();
long lastMeasure = 0;

//************Funciones para MQTT *********************

void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {


delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi connected - ESP IP address: ");
Serial.println(WiFi.localIP());
}

//***********Lectura de datos que llegan despues de suscribir*********


void callback(String topic, byte* message, unsigned int length) {
Serial.print("Mensaje que llega del topic: ");
Serial.print(topic);
Serial.print(". Message: ");

for (int i = 0; i < length; i++) {


//Serial.print((char)message[i]);
messageData += (char)message[i];
}

//Enciende led
if(messageData == "true"){
digitalWrite(led,HIGH);
}
if(messageData == "false"){
digitalWrite(led,LOW);
}

//**************Conexion a broker/Suscribir***********
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
String clienteID = "ESP32";
if (client.connect(clienteID.c_str())) {
Serial.println("connected");
client.subscribe("esp32iot"); //topic para suscribir
}
else {
Serial.print("Failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}

void setup() {

pinMode(pulsador, INPUT);
pinMode(led, OUTPUT);
Serial.begin(115200);
setup_wifi();
dht.begin();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);

void loop() {

if (!client.connected()) {
reconnect();
}
client.loop();

long tiempo = millis(); //envia cada dos segundos

if (tiempo - lastMeasure > 1000) {


lastMeasure = tiempo;

//pulsador - digital
int pulsa = digitalRead(pulsador);
sprintf(data_digital,"%lu",pulsa);
client.publish("digital",data_digital);
Serial.println("Estado logico: "+String(pulsa));

messageData = "";

if(tiempo - tdhtx > 2000){


tdhtx = tiempo;

// Datos del LM35


sensorlm35 = analogRead(pinlm35);
templm35 = ((sensorlm35 * 3.3)/4096.0)*100.0;

if (isnan(templm35)) {
Serial.println(F("Failed to read from LM35 sensor!"));
//return;
}

//Enviando Humedad y temperatura

float h = dht.readHumidity();
float t = dht.readTemperature();

if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}

sprintf(data_temp,"%3.2f",t);
client.publish("temperatura", data_temp);
Serial.print("Temperatura: ");
Serial.println(data_temp);

sprintf(data_humi,"%3.2f",h);
client.publish("humedad", data_humi);
Serial.print("Humedad: ");
Serial.println(data_humi);

sprintf(data_templm35,"%3.2f",templm35);
client.publish("temperaturalm35",data_templm35);
Serial.print("TemperaturaLM35: ");
Serial.println(data_templm35);

}
}
5. BIBLIOGRAFÍA

Aprendiendo Arduino. (s.f.). Funciones en Node-RED. Obtenido de


https://aprendiendoarduino.wordpress.com/2020/12/02/funciones-en-node-red/

OurPCB. (s.f.). Aplicaciones de los Sensores Infrarrojos Pasivos /Sensores PIR. Obtenido de
https://www.ourpcbar.com/sensores-pir.html

Rambal. (s.f.). Sensor Movimiento Pir Detector Objetos. Obtenido de https://rambal.com/ir-


distancia-tacto/243-sensor-de-movimiento-pir.html

SolectroShop. (s.f.). Servomotores - cómo configurarlos para Arduino. Obtenido de


https://solectroshop.com/es/blog/servomotores-como-configurarlos-para-arduino-n41

También podría gustarte