Skip to content
forked from shoifg/SHO

O presente conteúdo trata-se dos assets do artigo "Smart Home Office",desenvolvido pelos alunos: Bruna Michelly, Daniel Oliveira e Fabrycio Almada, do curso de Pós Graduação em "Prédios Inteligentes", do Instituto Federal de Goiás câmpus Goiânia

Notifications You must be signed in to change notification settings

Fabrycio-Nakano/SHO

 
 

Repository files navigation

MONITORAMENTO INTELIGENTE DA QUALIDADE DO AR PARA AMBIENTES DE TRABALHO REMOTO

Em uma empresa, vários fatores são verificados e monitorados para manter a saúde ocupacional dos funcionários. Quando o ambiente de trabalho é alterado para o trabalho remoto, ou seja, feito na casa do funcionário, torna-se complexo para a empresa ter conhecimento se as condições ambientes previstas em legislação estão sendo seguidas. Em virtude disso, é necessário que haja um sistema que possa realizar o monitoramento adequado nesses ambientes. Desse modo, este trabalho apresenta o sistema SHO (Smart Home Office) que consiste em uma solução IoT para o monitoramento da qualidade do ar em ambientes de trabalho remoto.

Neste projeto, o monitoramente dos dados coletados pelo sensor de temperatura e umidade foram enviados para a plataforma ThingSpeakTM para a visualização em tempo real e para uma planilha no Google Sheets, que servirá como um banco de dados dos parâmetros lidos pelo sensor.


ÍNDICE


HARDWARE

Para a montagem do protótipo foram utilizados o NodeMcu ESP32, o sensor de temperatura e umidade DHT22, LEDs, resistores de 68 Ohm e uma fonte de alimentação 5 VDC, mostrados na figura 1.

figura componentes

Figura 1: Materiais utilizados

Na tabela 1 são mostrados os componentes e as quantidades dos materiais utilizados.

Item Componente Quantidade
1 NodeMcu Esp32 1
2 DHT22 1
3 Led 3mm (verde e vermelho) 2
4 Resistores 68 Ohm 2
5 Resistor 1k Ohm 1

Os componentes foram conectados por meio de jumpers tipo macho em duas protoboards, pois o tamanho da placa NodeMCU ESP32 não permite que seja utilizada somente uma protoboard (mesmo que com muitos furos). O diagrama esquemático e protótipo montado são mostrados nas figuras 2 e 3.

esp32_bb

Figura 2: Esquemático

prototipo

Figura 3: Protótipo montado

Nos tópicos a seguir são mostradas as etapas para a comunicação e envio de dados via protocolo MQTT para a plataforma ThingSpeakTM e para a planilha no Google Sheets.


CONEXÃO VIA PROTOCOLO MQTT

A conexão com a plataforma ThingSpeakTM via protocolo MQTT, foi realizada de acordo com o fluxograma mostrado na figura 4.

Fluxograma MQTT (1)

Figura 4: Fluxograma de conexão com a plataforma ThingSpeakTM

O código desenvolvido pode ser consultado e baixado em nosso repositório.


ENVIO DE DADOS PARA O GOOGLE SHEETS

A conexão com a planilha Google Sheets, foi realizada de acordo com o fluxograma mostrado na figuras 5. Para melhorar o entendimento, a implementação do script na planilha será mostrado passo-a-passo a seguir.

Fluxograma GS (1)

Figura 5: Fluxograma de conexão com a planilha Google Sheets

IMPLEMENTAÇÃO DO SCRIPT NA PLANILHA ON-LINE

  1. Criar uma nova planilha no Google Sheet, com usuário e senha válidos. Recomenda-se renomear a planilha com um nome que seja relacionado com o objeto de trabalho. exemplo: Banco de dados DHT22;
  2. Nomear os cabeçalhos das colunas A, B, C e D com os nomes Data, Hora, Temperatura (ºC) e Umidade (%) respectivamente;
  3. Clicar em Ferramentas e a seguir em script editor. Recomenda-se usar o editor de script legado e renomear o script com um nome que seja relacionado com o objeto de trabalho;
  4. Copiar todo o código fonte do arquivo "Código do Script Google sheet.txt" para o script editor. O código pode ser consultado e copiado de nosso repositório;
  5. No código dentro do script editor, copiar o Spreadsheet ID da planilha que servirá como banco de dados, para o interior das aspas em frente à variável "var sheet_id". O Spreadsheet ID e o local para onde deve ser copiado, são mostrados nas figuras 6 e 7 a seguir.

image

Figura 6: Spreadsheet ID

image

Figura 7: Local para inserção do Spreadsheet ID

  1. Para que o horário seja expresso corretamente, substituir a expressão Asia/Jakarta por America/Sao_Paulo.
  2. Clicar em Publicar e em Implantar como aplicativo da web. Na próxima janela, no menu suspenso da opção Who has access to the app: escolha a opção Anyone, even anonymous, conforme mostra a figura 8. Neste momento o usuários estará autorizando que qualquer um poderá ter acesso ao aplicativo, mesmo que anônimo.

deploy as web

Figura 8: Autorização para acesso

  1. Nas janelas a seguir, autorizar que o aplicativo tenha acesso à planilha criada. Quando a janela apresentada na figura 9 aparecer, copie o link do aplicativo na web (Current web app URL). Este link servirá para testar e para ser inserido no código do microcontrolador para o envio dos dados do sensor para a planilha.

current app url

Figura 9: Link do aplicativo na web

  1. Para testar o envio de dados para a planilha, cole o link copiado na janela do navegador, seguido pela expressão ?temperature=100&humidity=20. Conferir se a planilha recebeu os dados com sucesso. Caso afirmativo, a planilha terá aspecto similar com aquele mostrado na figura 10.

planilha tutorial

Figura 10: Envio de dados para a planilha no Google Sheet

  1. Para que qualquer usuário tenha acesso à visualização dos dados da planilha, é necessário alterar as opções de compartilhamento da planilha, no canto superior direito da tela, clicando em "compartilhar" e concedendo as permissões necessárias.

ADAPTAÇÃO DO CÓDIGO DO NODEMCU ESP32

  1. Inserir o nome da rede na qual se deseja ter conexão e a respectiva senha. Inserir entre as aspas da variável String GAS_ID o spreadsheet script ID. O trecho de código a seguir mostra o local de inserção do spreadsheet script ID.
const char* host = "script.google.com";
const int httpsPort = 443;
//-------------------------------------------------------------------------------------------------------------------------
WiFiClientSecure client;                                                    //--> Criação do objeto WiFiClientSecure.                                                       
String GAS_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";  //--> spreadsheet script ID

IMPORTANTE:

O spreadsheet script ID pode ser extraído do Current web app URL obtido no item 9. Se, por exemplo, o Current web app URL for:

https://script.google.com/macros/s/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/exec

O spreadsheet script ID será o código entre /s/ e /exec, ou seja: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.

Um video explicativo de apoio pode ser consultado no link: https://www.youtube.com/watch?v=okNECYf2xlY, creditado ao canal Uteh Str.

O código desenvolvido pode ser consultado e baixado em nosso repositório.


RESULTADOS

Neste projeto, os dados provenientes das leituras do sensor DHT22 foram disponibilizados em um site construído através do serviço Google Sites. Os dados podem ser visualizados graficamente e em tempo real. A figura 11 mostra uma captura de tela do site construído até o momento.

image

Figura 11: Visualização da leitura do sensor no Site

Além do site, os dados também podem ser visualizados através de canais na plataforma ThingSpeakTM, conforme mostra a figura 12.

image

Figura 12: Visualização da leitura na plataforma ThingSpeakTM

A construção do Site não será detalhada neste tutorial, pois pode ser facilmente realizada através da plataforma Google Sites. O principal detalhe é o código a ser incorporado no site para a leitura dos sensores, podendo ser feita através das seguintes linha de comando:

Gráfico das leituras:

<iframe width="450" height="260" style="border: 0px solid #cccccc;" src="https://thingspeak.com/channels/CHANNEL_ID/charts/2?bgcolor=%23ffffff&color=%23d62020&dynamic=true&results=60&type=line&update=15"></iframe>

IMPORTANTE: Substituir "Channel_ID" pelo número do canal e atualizar o valor da , obtido na platadorma ThingSpeak.


Última leitura do sensor (tempo real):

	<!DOCTYPE html>
	<html lang="en">
	<head>
	<title>JavaScript - read JSON from URL</title>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
	 <script>
		   
	 $(function() {
	   setTime();
	   function setTime() {
			var date = new Date().getTime();
			  //var string = "Timestamp: "+date;
			
			//Adicionar cdg para atualizar
			fetch('https://api.thingspeak.com/channels/CHANNEL_ID/feeds/last.json?api_key=XXXXXXXXXXXXXXXX')
			.then(response => response.json())
			.then(data => {
					
			//umidade		
			if (data.field2 <= 65) {
			document.getElementById("umidade").style.color = '#08298A';
			document.getElementById("umidade").innerHTML = Math.trunc(data.field2)+"%";
			}
			if (data.field2 >= 66) {
			document.getElementById("umidade").style.color = 'red';
			document.getElementById("umidade").innerHTML = Math.trunc(data.field2)+"%";
			}

			})
			.catch(error => console.error(error))
			
				
			//fim cdg atualizar

			setTimeout(setTime, 3000);
			  $('#setTime').html(string);
			}
		});
		
	</script>

	<body>

	<div class="div-float">
		<h1 id="umidade" style="text-align:center"></h1>
		<p  class="div-texto" style="text-align:center">Umidade Relativa</p>		
		<p style="text-align:center">Faixa Recomendável: 40% à 65%</p>

	</div>
	</body>

	<style rel="stylesheet" type="text/css">


	.div-texto{
	  font-size:20px;
	  color: #08298A;
}

	.div-clear {
		clear: center;
	}

	</style>
	</html>

IMPORTANTE: Substituir "Chanel_ID" pelo número do canal, obtido na platadorma ThingSpeak. O campo api_key (Read) também deve ser atualizado, obtido na mesma plataforma (substituindo XXXXXXXXXXXXXXXX api_key).


Gráfico das leituras médias de temperatura e umidade:

Para a apresentação das leituras médias do período de 1 hora, é necessário realizar os procedimentos relatados a seguir:

  1. Realizar o login na plataforma ThingSpeakTM e clicar no botão MATLAB Analysis;
  2. Selecionar: Custom (no starter code) e em seguida Create;
  3. Renomear o campo name para Media;
  4. Colar o código do arquivo "analiseMediaMatlab.m" na caixa de texto MATLAB Code;
  5. Clicar em Save;
  6. Na mesma página, um pouco mais abaixo, clicar na opção na parte inferior: Schedule Actions;
  7. Clicar em TimeControl e cadastrar de quanto em quanto tempo o código será executado;
  8. Na aba de cadastro de um newTimeControl, colocar um nome e selecionar a Frequency para Recurring;
  9. Quando o Recurring for selecionado, vão aparecer opções de Recurrence. Selecionar hour e colocar o valor 1 no campo de texto, para que o código possa ser executado de 1 em 1 hora);
  10. Na mesma página, antes de salvar, verificar se na lista suspensa Action está selecionada a opção Matlab Analysis;
  11. Na caixa de seleção: Code to execute - selecionar o código da média;
  12. Voltar para a página do canal, onde aparecem os gráficos e clicar em Channel Settings;
  13. Criar mais 2 fields - Field 3 com o nome: Média - Temperatura [°C] e Field 4 com o nome Média - Umidade [%];
  14. Após 1 hora os dados serão carregados nos novos gráficos.

About

O presente conteúdo trata-se dos assets do artigo "Smart Home Office",desenvolvido pelos alunos: Bruna Michelly, Daniel Oliveira e Fabrycio Almada, do curso de Pós Graduação em "Prédios Inteligentes", do Instituto Federal de Goiás câmpus Goiânia

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 91.8%
  • Python 6.2%
  • Other 2.0%