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.
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 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.
Figura 2: Esquemático
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.
A conexão com a plataforma ThingSpeakTM via protocolo MQTT, foi realizada de acordo com o fluxograma mostrado na figura 4.
Figura 4: Fluxograma de conexão com a plataforma ThingSpeakTM
O código desenvolvido pode ser consultado e baixado em nosso repositório.
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.
Figura 5: Fluxograma de conexão com a planilha Google Sheets
- 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;
- Nomear os cabeçalhos das colunas A, B, C e D com os nomes Data, Hora, Temperatura (ºC) e Umidade (%) respectivamente;
- 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;
- 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;
- 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.
Figura 6: Spreadsheet ID
Figura 7: Local para inserção do Spreadsheet ID
- Para que o horário seja expresso corretamente, substituir a expressão Asia/Jakarta por America/Sao_Paulo.
- 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.
Figura 8: Autorização para acesso
- 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.
Figura 9: Link do aplicativo na web
- 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.
Figura 10: Envio de dados para a planilha no Google Sheet
- 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.
- 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.
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.
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.
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:
- Realizar o login na plataforma ThingSpeakTM e clicar no botão MATLAB Analysis;
- Selecionar: Custom (no starter code) e em seguida Create;
- Renomear o campo name para Media;
- Colar o código do arquivo "analiseMediaMatlab.m" na caixa de texto MATLAB Code;
- Clicar em Save;
- Na mesma página, um pouco mais abaixo, clicar na opção na parte inferior: Schedule Actions;
- Clicar em TimeControl e cadastrar de quanto em quanto tempo o código será executado;
- Na aba de cadastro de um newTimeControl, colocar um nome e selecionar a Frequency para Recurring;
- 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);
- Na mesma página, antes de salvar, verificar se na lista suspensa Action está selecionada a opção Matlab Analysis;
- Na caixa de seleção: Code to execute - selecionar o código da média;
- Voltar para a página do canal, onde aparecem os gráficos e clicar em Channel Settings;
- Criar mais 2 fields - Field 3 com o nome: Média - Temperatura [°C] e Field 4 com o nome Média - Umidade [%];
- Após 1 hora os dados serão carregados nos novos gráficos.