Fogão Inteligente
Amanda Luiza, Samuel Araújo, Vinicius Guimarães e Wellington Resende

Introdução

Devido ao grande número de acidentes domésticos que envolvem gás de cozinha e fogão, desenvolvemos um sistema de proteção e monitoramento para fogões e botijões de gás. O conceito se baseia em sensores de gás e fumaça que detectarão vazamentos de gás e focos de incêndio, ativando, caso positivo, um sistema de alarme.
Além disso haverá um sistema de aferimento da quantidade de gás no botijão, informando quando estiver próximo do momento da troca do mesmo. O estado dos componentes será disponibilizado em um aplicativo para smartphones Android e iOS.

Montagem

Circuito

Programa Arduino

#include "HX711.h" // Biblioteca HX711
#include <EtherCard.h>
#include <Wire.h>
#define STATIC 1 // set to 1 to disable DHCP (adjust myip/gwip values below)



#if STATIC
// Endereço IP da interface
static byte myip[] = { 172,16,10,176 };
// Endereço IP do Gateway
static byte gwip[] = { 172,16,10,1 };
#endif

// carregando config internet. Deve ser a unica da rede
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[500]; // tcp/ip buffer de envio e recepção de dados
BufferFiller bfill;// biblioteca para montar a pagina como string


#define DOUT A0 // HX711 DATA OUT = pino A0 do Arduino
#define CLK A1 // HX711 SCK IN = pino A1 do Arduino

HX711 balanca(DOUT, CLK); // instancia Balança HX711

int C = 70; //peso do conjunto gas+botijao
int B = 57; //peso do botijao
int G = 60; //peso do gas
float I = C - B; //massa inicial de gas
int P = 100; //percentual de massa do gas
float K = 100/I; //equacao da reta massa de gas X percentual


float calibration_factor = 22000; // fator de calibração aferido na Calibraçao
int pinSensor = A2; //Pino Sensor
int buzzer = 2; //Pino Buzzer
int var = 0;
int ValDesarm = 20; //Variável para selecionar a quantidade de Gás/Fumaça detectada
int valor = 0;
static char str(15);// variavel para imprimir float como string

void setup() {
Serial.begin(9600);

if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println( "Erro de acesso a Ethernet controller");
#if STATIC
ether.staticSetup(myip, gwip);
#else
if (!ether.dhcpSetup())
Serial.println("DHCP falhou");
#endif

Serial.println("Balança com HX711 - celula de carga 4x50 Kg");
Serial.println("Pressione t para Tara"); // imprime no monitor serial
balanca.set_scale(calibration_factor); // ajusta fator de calibração
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);

balanca.tare();// zera a Balança
pinMode(buzzer, OUTPUT);
}


void loop() {
//||||||||Calculo para quantidade de gás||||||||||
Serial.print("Peso: "); // imprime no monitor serial
Serial.print(balanca.get_units(), 3); // imprime peso na balança com 3 casas decimais
Serial.println(" kg"); // imprime no monitor serial // atraso de 0,5 segundos
if (Serial.available()) {// se a serial estiver disponivel
char temp = Serial.read(); // le carcter da serial
if (temp == 't' || temp == 'T') { // se pressionar t ou T
balanca.tare(); // zera a balança
Serial.println(" Balança zerada"); // imprime no monitor serial
}
}

G = balanca.get_units() - B; //calcula a massa de gas
P = G*K;//calculo de valor percentual
Serial.print("Percentual de gás:");
Serial.print(P);
Serial.println("%");
Serial.print(" G=");
Serial.print(G);
Serial.print(" I=");
Serial.println(I);
Serial.println(K);
if (P<=8){
Serial.println("O gás está acabando. Providencie a troca.");
}
if (P>8){
Serial.println("O gás está OK!");
}

//||||||||||Calculo para vazamentos||||||||||||
valor = analogRead(pinSensor); //Faz a leitura da entrada do sensor
valor = map(valor, 0, 1023, 0, 100); //Faz a conversão da variável para porcentagem
if (valor>=ValDesarm){
digitalWrite(buzzer, HIGH); //Dispara alarme de vazamento ou possível incêndio
Serial.println("VAZAMENTO DE GÁS!!!"); //Apresenta mensagem na porta serial
delay(1000); //Tempo de disparo do alarme
digitalWrite(buzzer, LOW); //Desliga o alarme
delay(1000); //Aguarda
}
delay(3000);


//exibir na web se tiver
word len = ether.packetReceive();
word pos = ether.packetLoop(len);

if (pos){ // checa se recebeu uma requisicao
ether.httpServerReply(homePage(P, valor)); // retorna a requisicao com o retorno de retornada de homePage()
}



delay(100);

}


static word homePage(float P, int gas) {
dtostrf(P, 7, 3, str); // converte a variavel P para uma string, para poder ser exibida no html
bfill = ether.tcpOffset();
bfill.emit_p(PSTR(// monta a pagina html
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n"
"\r\n"
"<meta http-equiv='refresh' content='1'/>"
"<title>Balanca</title>"
"<h1> IoT Day</h1><br>"
"<h3>Percentual de gas no botijao: <span style='color: blue'>$Skg</span><br>"
"Gas vazando: <span style='color: red'>$D%</span>"
"</h3"
),
str, gas);
return bfill.position(); //retorna a pagina html
}

Conclusão

O projeto tenta viabilizar uma solução prática e de baixo custo, podendo ser utilizada em qualquer tipo de fogão sem interferir em seu funcionamento. Isso possibilita que qualquer um possa realizar a implementação do conjunto sem maiores dificuldades e sem correr os riscos do manuseio de gases inflamáveis.

Referências

*https://ieeexplore.ieee.org/document/7443474/?reload=true
*https://ieeexplore.ieee.org/document/6461750/
*https://blog.usinainfo.com.br/sensor-de-peso-com-arduino-variacao-de-um-strain-gage/
*https://www.baudaeletronica.com.br/Documentos/datasheet-CR18-8DP.pdf
*https://www.draw.io/
*http://fedablio.com.br/blog/balanca-com-celula-de-carga-modulo-conversor-hx711-e-arduino/
*https://electronics.stackexchange.com/questions/102164/3-wire-load-cells-and-wheatstone-bridges-from-a-bathroom-scale?rq=1
*http://www.fundacentro.gov.br/Arquivos/sis/EventoPortal/AnexoPalestraEvento/Acidentes%20dom%C3%A9sticos%20%20e%20em%20pequenas%20instala%C3%A7%C3%B5es.pdf
*http://www.inmetro.gov.br/consumidor/pdf/acidente-consumo-infografico-2017.pdf



Administrado por: Epaminondas Lage