jucyara_silva
Published © GPL3+

Controle de Temperatura de Ambientes Críticos com Alarme

Foi foda!!

IntermediateFull instructions provided40
Controle de Temperatura de Ambientes Críticos com Alarme

Things used in this project

Hardware components

ESP8266 ESP-01
Espressif ESP8266 ESP-01
×1
Adafruit Waterproof DS18B20 Digital temperature sensor
Adafruit Waterproof DS18B20 Digital temperature sensor
×1
Switch Actuator, APEM A01 series Illuminated Push-Button Switches
Switch Actuator, APEM A01 series Illuminated Push-Button Switches
×1
RGB Diffused Common Anode
RGB Diffused Common Anode
×1
Buzzer
Buzzer
×1

Story

Read more

Schematics

Controle de Temperatura de Ambientes Críticos com Alarme

Code

Controle de Temperatura

C/C++
#include <OneWire.h> //Biblioteca que necessária
#include <DallasTemperature.h> //Biblioteca que necessária

OneWire pino(10);
DallasTemperature barramento(&pino);
DeviceAddress sensor;

const int RED = 6; // Led RGB vermelho
const int GREEN = 9; // Led RGB verde
const int BLUE = 7; // Led RGB azul
const int BUZZER = 8;
const int ESTADOPORTA = 11; //botao que dirá se a porta está aberta ou fechada
const int RelePin = 5;
const int BOTAOREMOTO = 3;

void setup() {
  Serial.begin(9600); //Inicia a serial para ler as temperaturas
pinMode(13,INPUT);
  barramento.begin();
  barramento.getAddress(sensor, 0);
  pinMode(ESTADOPORTA, INPUT_PULLUP);
  pinMode(BOTAOREMOTO, INPUT_PULLUP);
  pinMode(BUZZER, OUTPUT);
  pinMode(RelePin, OUTPUT);
}

void estado_porta() {
  if (digitalRead(ESTADOPORTA) == 1) {           // Leitura do botao para descrever o estado da porta
    Serial.println("A porta esta aberta..");
    Serial.println("");
    //digitalWrite(RelePin, LOW);
  } else {
    Serial.println("A porta esta fechada..");
    Serial.println("");
  }
}


void botao_remoto() {
  if (digitalRead(BOTAOREMOTO) == 1) {           // Controle remoto do rele
    Serial.println("Porta liberada");
    digitalWrite(RelePin, HIGH);
    delay(1000);
    digitalWrite(RelePin, LOW);
  }
}

void alarme() {
  barramento.requestTemperatures();
  float temperatura = barramento.getTempC(sensor);
  Serial.print("Temp: ");
  Serial.println(temperatura);

  if ((temperatura > 5 && temperatura < 10) || (temperatura > 20 && temperatura < 24)) {

    digitalWrite(BLUE, HIGH);
    digitalWrite(RED, LOW);
    digitalWrite(GREEN, LOW);

    //lcd.setCursor(0,1);
    Serial.print("WARNING       ");
    //Serial.print(val2);
    Serial.println("    ");

    digitalWrite(BUZZER, HIGH);
    delay(800);
    digitalWrite(BUZZER, LOW);
    delay(1500);

  }

  else if (temperatura >= 11 && temperatura < 19) {
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, LOW);
    digitalWrite(GREEN, HIGH);


    //lcd.setCursor(0,1);
    Serial.print("ACEITAVEL     ");
    //Serial.print(val2);
    Serial.println("   ");
    delay(1000);
  }

  else if (temperatura <= 4 || temperatura >= 25) {

    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    digitalWrite(GREEN, LOW);

    Serial.print("CRITICO       ");

    digitalWrite(BUZZER, HIGH);
    delay(800);
    digitalWrite(BUZZER, LOW);
    delay(800);
  }
}

void loop() {
  int alarme_re;
  int botao_re;
  delay(1000);

  alarme_re = Serial.read();                       
  botao_re = Serial.read();

  Serial.println(digitalRead(13));
  if (digitalRead(13) == HIGH) {
    while (digitalRead(13) == HIGH) {
      digitalWrite(BLUE, LOW);
      digitalWrite(RED, HIGH);
      digitalWrite(GREEN, LOW);

      Serial.println("Alarme remoto ativado       ");

      digitalWrite(BUZZER, HIGH);
      delay(800);
      digitalWrite(BUZZER, LOW);
      delay(800);
    }
    Serial.println("Alarme remoto desativado!");
  }

  if (botao_re == 1) {
    botao_remoto();
  }
  alarme();
  estado_porta();
}

Código do servidor

C/C++
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
 
#define DEBUG
#define porta_node D1
#define Ar1  14  //pino de saida para acionamento da Alarme Ar1
 
//informações da rede WIFI
const char* ssid = "JG";                 //SSID da rede WIFI
const char* password =  "santiago";    //senha da rede wifi
 
//informações do broker MQTT - Verifique as informações geradas pelo CloudMQTT
const char* mqttServer = "postman.cloudmqtt.com";   //server
const char* mqttUser = "snritjmi";              //user
const char* mqttPassword = "Buv9Yrt3Wtqf";      //password
const int mqttPort = 14274;                     //port
const char* mqttTopicSub ="alarme/Ar1";            //tópico que sera assinado

 
WiFiClient espClient;
PubSubClient client(espClient);
 
void setup() {
 
  Serial.begin(115200);
  pinMode(Ar1, OUTPUT);
 pinMode(D1,OUTPUT);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    #ifdef DEBUG
    Serial.println("Conectando ao WiFi..");
    #endif
  }
  #ifdef DEBUG
  Serial.println("Conectado na rede WiFi");
  #endif
 
  client.setServer(mqttServer, mqttPort);
  client.setCallback(callback);
 
  while (!client.connected()) {
    #ifdef DEBUG
    Serial.println("Conectando ao Broker MQTT...");
    #endif
 
    if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
      #ifdef DEBUG
      Serial.println("Conectado");  
      #endif
 
    } else {
      #ifdef DEBUG 
      Serial.print("falha estado  ");
      Serial.print(client.state());
      #endif
      delay(2000);
 
    }
  }
 
  //subscreve no tópico
  client.subscribe(mqttTopicSub);
 
}
 
void callback(char* topic, byte* payload, unsigned int length) {
 
  //armazena msg recebida em uma sring
  payload[length] = '\0';
  String strMSG = String((char*)payload);
 
  #ifdef DEBUG
  Serial.print("Mensagem chegou do tópico: ");
  Serial.println(topic);
  Serial.print("Mensagem:");
  Serial.print(strMSG);
  Serial.println();
  Serial.println("-----------------------");
  if(strMSG == "1"){
    Serial.println("cheguei aqui");
    digitalWrite(porta_node,HIGH);
    }else{
      digitalWrite(porta_node,LOW);
      }
  #endif
 
  //aciona saída conforme msg recebida 
  if (strMSG == "1"){         //se msg "1"
     digitalWrite(Ar1, LOW);  //coloca saída em LOW para ligar o alarme 
  }else if (strMSG == "0"){   //se msg "0"
     digitalWrite(Ar1, HIGH);   //coloca saída em HIGH para desligar o alarme 
  }
 
}
 
//função pra reconectar ao servido MQTT
void reconect() {
  //Enquanto estiver desconectado
  while (!client.connected()) {
    #ifdef DEBUG
    Serial.println("Tentando conectar ao servidor MQTT");
    #endif
     
    bool conectado = strlen(mqttUser) > 0 ? client.connect("ESP8266Client", mqttUser, mqttPassword) : client.connect("ESP8266Client");
 
    if(conectado) {
      #ifdef DEBUG
      Serial.println("Conectado!");
      #endif
      //subscreve no tópico
      client.subscribe(mqttTopicSub, 1); //nivel de qualidade: QoS 1
    } else {
      #ifdef DEBUG
      Serial.println("Falha durante a conexão.Code: ");
      Serial.println( String(client.state()).c_str());
      Serial.println("Tentando novamente em 10 s");
      #endif
      //Aguarda 10 segundos 
      delay(10000);
    }
  }
}
 
void loop() {
  
  if (!client.connected()) {
    reconect();
  }
  client.loop();
}

Credits

jucyara_silva
1 project • 0 followers

Comments