O projeto busca avisar o usuário, o momento mais adequado para a reaplicação do protetor solar. Para isso, foi utilizado um sensor de coleta de dados do ambiente, um controlador para viabilizar o envio desses dados para o site em que serão processados, e por fim, um aplicativo para receber a resposta desse site, para atualizar o usuário.
Quantidade | Nome | Link para referência |
---|---|---|
1 | Placa de desenvolvimento ESP-WROOM-32 e cabo USB | https://www.amazon.com.br/gp/product/B09491Q4F6/ref=ppx_yo_dt_b_asin_title_o08_s00?ie=UTF8&psc=1 |
1 | Sensor de Luz Ultravioleta UV ML8511 | https://www.institutodigital.com.br/produto/sensor-de-luz-ultravioleta-uv-ml8511/ |
3 | Jumpers Macho-Macho | --- |
1 | Protoboard | --- |
1 | Fonte de Alimentação (PowerBank) | --- |
ESP32 | ML8511 |
---|---|
3.3V | 3.3V |
GND | GND |
GPIO 34 | OUT |
Fazer as conexões listadas, configurar, transferir e executar main.ino
no ESP32.
Para transferir e executar o código, é interessante fazer uso do Arduino IDE.
Figura 1 - Esquema do projeto, arquivo-fonte da figura em /img/esquema.png:
Primeiro os dados são coletados, utilizando o sensor (ML8511), e em seguida utilizando o controlador (ESP32), esses dados são interpretados e convertidos na escala Índice Ultravioleta. Além disso, o controlador também é responsável por conectar-se à internet (e.g. ponto de acesso do celular) como um cliente wi-fi, e enviar as informações para o site ThingSpeak.
Com isso, o aplicativo servirá como uma interface para o usuário, tanto para enviar dados adicionas ao site, quanto para receber a resposta. No app, ao escolher as opções mais adequadas para o contexto do usuário, o site recebe essas informações e consegue prever o tempo estimado para a próxima reaplicação do protetor solar, e por fim, devolve esse valor para o aplicativo que vai atualizar o usuário.
O ML8511 é um sensor de luz ultravioleta. Ele emite um sinal analógico em relação à quantidade de luz UV que detecta. Isso pode ser útil na criação de dispositivos que avisam o usuário de queimaduras solares ou detectam o índice UV no que se refere às condições climáticas.
Este sensor detecta a luz de 280-390nm de forma mais eficaz. Isso é categorizado como parte do espectro UVB (raios de queima) e a maior parte do espectro UVA (raios bronzeadores).
Para mais informações.
Para a entrada do controlador foi escolhido o GPIO 34
:
int UVOUT = 34;
O valor do pino irá passar por uma função para tirar a média das medidas:
int averageAnalogRead(int pinToRead) {
byte numberOfReadings = 8;
unsigned int runningValue = 0;
for(int x = 0 ; x < numberOfReadings ; x++)
runningValue += analogRead(pinToRead);
runningValue /= numberOfReadings;
return(runningValue);
}
Esse valor será utilizado para calcular o valor da voltagem que o sensor emite.
int uvLevel = averageAnalogRead(UVOUT);
float outputVoltage = 3.3 / 4095 * uvLevel;
Então primeiro, foi utilizado o pino GPIO 34
para encontrar a voltagem.
Depois, é necessário utilizar uma função de mapeamento, para converter a voltagem em mW/cm².
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
Com isso, utilizando a seguinte informação, é possível assumir que nehuma luz UV começa em 1V, e além disso possui um máximo de 15 mW/cm² em torno de 2.8V.
float uvIntensity = mapfloat(outputVoltage, 0.99, 2.8, 0.0, 15.0);
Para mais informações.
Primeiro foram incluídas duas bibliotecas:
#include <WiFi.h>
#include "ThingSpeak.h"
- A primeira, habilita a conexão de rede (local e Internet) usando o Arduino WiFi shield.
- A segunda permite que o controlador escreva ou leia dados de ou para o ThingSpeak.
Primeiro é necessário declarar as credenciais:
const char* ssid = "MySSID"; // replace MySSID with your WiFi network name
const char* password = "MyPassword"; // replace MyPassword with your WiFi password
Criar um cliente que pode se conectar a um endereço IP da Internet especificado e a uma porta.
WiFiClient client;
Configurar o modo de uso do wi-fi, no caso, foi escolhido que o controlador funcionasse como um cliente wireless,
WiFi.mode(WIFI_MODE_STA);
Por fim, para a conexão com o ponto de acesso,
if(WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
while(WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, password); // Connect to WPA/WPA2 network.
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected.");
}
Primeiro é necessário declarar as credenciais:
unsigned long myChannelNumber = 0000000; // replace 0000000 with your channel number
const char * myWriteAPIKey = "XYZ"; // replace XYZ with your channel write API Key
Depois, inicializar o ThingSpeak:
ThingSpeak.begin(client);
O controlador irá enviar as informações a cada 30 segundos,
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;
if ((millis() - lastTime) > timerDelay) {
lastTime = millis();
}
Para o controlador comunicar com o site, enviando o valor do índice ultravioleta.
ThingSpeak.setField(1, uvIntensity);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if(x == 200) {
Serial.println("Channel update successful.");
}
else {
Serial.println("Problem updating channel. HTTP error code " + String(x));
}
Como mencionado anteriormente, o site utilizado para o projeto é o ThingSpeak. Nele, serão enviadas as seguintes variáveis:
- Índice Ultravioleta (ESP32);
- Contagem de Tempo (ESP32);
- Fator de Proteção Solar (Aplicativo);
- Possibilidade de Remoção do Protetor Solar (Aplicativo);
E devolvida a quantidade de tempo até a próxima reaplicação. Para isso foi feita a pesquisa para computar esse valor.
Para analisar os dados, o MATLAB Analysis compila o código main.m
e o TimeControl executa automaticamente a cada 5 minutos.
Para mais informações.
Figura 2 - Tela principal do aplicativo em /img/app.jpg:
Para facilitar a comunicação entre o sistema e usuário, foi criada uma aplicação mobile utilizando o MIT App Inventor para que o usuário possa inserir as informações relacionadas a: horário da aplicação, fator de proteção solar, necessidade de alarme e se terá exposição a suor, piscina ou mar. Desta forma, interage com o intermediário ThingSpeak, que fará o cálculo e devolve para o aplicativo em quantos minutos deve-se reaplicar o protetor solar.
O esquema a seguir mostra a criação de variáveis globais, a programação em blocos do comportamento das variáveis e as funções de retorno das informações do ThingSpeak para o aplicativo.
Figura 3 - Configuração das variáveis globais, arquivo-fonte da figura em /img/variaveis_globais.png:
Figura 4 - Programação em blocos dos botões inseridos na tela, arquivo-fonte da figura em /img/send_data.png:
Figura 5 - Retorno das informações processadas no ThinkSpeak, arquivo-fonte da figura em /img/recieve_data.png:
Para mais informações.
Para calcular a quantidade de tempo até a próxima reaplicação do protetor solar, foram utilizadas as variáveis descritas aqui.
Com isso, primeiro é necessário calcular uma função, relacionando o tempo médio para o usuário se queimar, e o ídice ultravioleta. Para isso foi utilizado a Figura 6:
Figura 6 - Minutes to Skin Damage, arquivo-fonte da figura em /img/uv:
Interpretando a figura, é possível estimar a função da seguinte forma:
Sabendo disso, segundo a SkinCabin é possível determinar o tempo até a próxima reaplicação do protetor solar da seguinte forma:
Para mais informações.