Você está na página 1de 5

//Projeto Ete_TCC 23/10/2022 test ok

//Autor: Diogo Landi

#include <WiFi.h> //Bilioteca wi fi


// Biblioteca Mqtt
#include <PubSubClient.h>
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
//...
#include "ACS712.h" //Bilioteca sensor de corrente elétrica
#include <driver/adc.h> //Bibliotecas do sensor ntc 103
#include <esp_adc_cal.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <esp_err.h>
#include <esp_log.h>
esp_adc_cal_characteristics_t adc_cal; //Estrutura que contem as informacoes para
calibração
//Bibliotecas do sensor ntc 103
bool esp32 = true;
int ThermistorPin;
double adcMax, Vs;

//calibrando tenção esp


//const float ADC_LUT[4096] PROGMEM =
//////////////////
String TempReal;
double R1 = 10000.0; // resitor 10k
double Beta = 2950.0; // Beta value 3950.0
double To = 298.15; // temperatura em kelvin Kelvin
double Ro = 10000.0; // resitor 10k em C
uint32_t delayMS;
#define DEBUG
#define S1 27 //pino de saida para acionamento da Soprador 1
#define S2 26 //pino de saida para acionamento da Soprador 2
#define ledint LED_BUILTIN

//informações da rede WIFI


const char* ssid = "SPACE_NET -LANDI"; //SSID da rede WIFI
const char* password = "6kxuh4kk"; //senha da rede wifi

//informações do broker MQTT - Verifique as informações geradas pelo CloudMQTT


const char* mqttServer = "driver.cloudmqtt.com";
const int mqttPort = 18928;
const char* mqttUser = "gkubwxlo";
const char* mqttPassword = "3R2_4cQ19D55";
const char* mqttTopicSub = "esp/ete"; //tópico

//Parâmetros do sensor de corrente ACS712 20A


ACS712 ACS(A0, 3.3, 4095, 66); //Entrada do sinal do sensor corrente elétrica ACS
e parametros
float m = 0;
WiFiClient espClient;
PubSubClient client(espClient);

void setup() {

Serial.begin(9600); // Velocidade de comunicação porta com


pinMode(S1, OUTPUT);
digitalWrite(S1, HIGH);

// Parâmetros de calibração sensor de temperatura ntc 103


adc1_config_width(ADC_WIDTH_BIT_12);
adc1_config_channel_atten(ADC1_CHANNEL_6, ADC_ATTEN_DB_0); //pin 34 esp32 devkit
v1
esp_adc_cal_value_t adc_type = esp_adc_cal_characterize(ADC_UNIT_1,
ADC_ATTEN_DB_0, ADC_WIDTH_BIT_12, 1100, &adc_cal); //Inicializa a estrutura de
calibracao
////////// temperatura

ThermistorPin = 34; // Entrada de sinal sensor de temperatura


adcMax = 4095.0; // ADC 12-bit (0-4095)
Vs = 3.3; // voltagem

ACS.autoMidPoint();

WiFi.begin(ssid, password);

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


delay(50);
#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("", mqttUser, mqttPassword )) {


#ifdef DEBUG
Serial.println("Conectado");
#endif

} else {
#ifdef DEBUG
Serial.print("falha estado ");
Serial.print(client.state());
#endif
delay(2000);
ESP.restart(); //Reset geral se falhar conexão co broker
}
}

//subscreve no tópico
client.subscribe(mqttTopicSub);

void callback(char* topic, byte* payload, unsigned int length) {


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("-----------------------");
#endif

//aciona saída conforme msg recebida


if ((char)payload[0] == 'a') { //se msg "rele1_on"
digitalWrite(S1, HIGH); //coloca saída em LOW para ligar
snprintf (msg, MSG_BUFFER_SIZE, "Soprado_1 Desligado");
client.publish("ete/Soprador_1", msg);
}

else if ((char)payload[0] == 'A')


{ //se msg "rele1_off"
digitalWrite(S1, LOW); //coloca saída em HIGH para desligar
snprintf (msg, MSG_BUFFER_SIZE, "Soprado_1 ligado");
client.publish("ete/Soprador_1", msg);
}

//função pra reconectar ao servido MQTT


void reconect() {
//Enquanto estiver desconectado
while (!client.connected()) {
#ifdef DEBUG
Serial.print("Tentando conectar ao servidor MQTT");
#endif

bool conectado = strlen(mqttUser) > 0 ?


client.connect("ESP32Client", mqttUser, mqttPassword) :
client.connect("ESP32Client");

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() {
uint32_t AD = 0;
for (int i = 0; i < 100; i++)
{
AD += adc1_get_raw(ADC1_CHANNEL_6);//Obtem o valor RAW do ADC
ets_delay_us(30);
}
AD /= 100;

double Vout, Rt = 0;
double T, Tc, Tf = 0;

double adc = 0;

adc = analogRead(ThermistorPin);
adc = AD;

Vout = adc * Vs / adcMax;


Rt = R1 * Vout / (Vs - Vout);

T = 1 / (1 / To + log(Rt / Ro) / Beta); // Kelvin


Tc = T - 273.15 + 13.5; // Celsius 11.3
Tf = Tc * 9 / 5 + 32; // Fahrenheit
if (Tc > 0) ;

delay(15);

float average = 0;
uint32_t start = millis();
for (int i = 0; i < 100; i++)
{

average += (ACS.mA_AC() / 1000 - 1.9); //Média multiplicado pela constante


*0.0008058-.05
}
float mA = average / 110 ;
uint32_t duration = millis() - start;
if (mA < -0.1) {
mA = 0;
}

//Condição de funcionamento seguro do Soprador

if (Tc > 100 || mA > 13) // Se temperatura for maior que 100c° ou a Corrente
eletrica mA for maior que 4A, desligará o soprador.
{

//(char)payload[0] == 'a';
digitalWrite(S1, HIGH); //coloca saída em LOW para ligar
snprintf (msg, MSG_BUFFER_SIZE, "Soprado_1 Desligado");
client.publish("ete/Soprador_1", msg);
// snprintf (msg, MSG_BUFFER_SIZE, "Sobrecarga/Sobre corrente"); //Mensagem tag
para ser inserida
//client.publish("ete/SobreCarga", msg);
}
Serial.print(" A: ");
Serial.println(mA);
Serial.print(" Temp : ");
Serial.println(Tc);

delay(2);
delay(delayMS);
//sensors_event_t event;
sprintf(msg, "%f", mA);
client.publish("ete/corrente", msg);
sprintf(msg, "%f", Tc);
client.publish("ete/temperatura", msg);

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

Você também pode gostar