Code Monkey home page Code Monkey logo

ach2157's Introduction

Projeto Protetor Solar

Descrição

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.

Lista de Materiais

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) ---

Conexões

ESP32 ML8511
3.3V 3.3V
GND GND
GPIO 34 OUT

Montagem do dispositivo físico

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.

Arquitetura e organização

Figura 1 - Esquema do projeto, arquivo-fonte da figura em /img/esquema.png:

esquema

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.

Funcionamento do sensor

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.

Processamento dos dados do sensor

Pinos

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;

Converter a Voltagem para o Índice Ultravioleta

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.

Comunicação do ESP32

Bibliotecas

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.

WiFi.h

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.");
}

ThingSpeak.h

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));
}

Utilização do site

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.

Funcionamento do aplicativo

Figura 2 - Tela principal do aplicativo em /img/app.jpg:

app

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:

variaveis_globais

Figura 4 - Programação em blocos dos botões inseridos na tela, arquivo-fonte da figura em /img/send_data.png:

send_data

Figura 5 - Retorno das informações processadas no ThinkSpeak, arquivo-fonte da figura em /img/recieve_data.png:

recieve_data

Para mais informações.

Pesquisa

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:

uv

Interpretando a figura, é possível estimar a função da seguinte forma: $$t_i = \dfrac{66}{u}$$ Em que $t_i$ representa o tempo médio que leva para o usuário para se queimar e $u$ o índice ultravioleta do ambiente.

Sabendo disso, segundo a SkinCabin é possível determinar o tempo até a próxima reaplicação do protetor solar da seguinte forma: $$t_f = \dfrac{t_i \cdot f}{u}$$ Em que $t_f$, o tempo até a próxima reaplicação do protetor solar e $f$, o fator de proteção solar.

Para mais informações.

Referência

https://t16k-ach2157.rtfd.io

ach2157's People

Contributors

t16k avatar tangiota avatar

Watchers

 avatar  avatar

ach2157's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.