Sei sulla pagina 1di 5

PROJETO DE UM MEDIDOR DE RADIAÇÃO ULTRAVIOLETA

1. INTRODUÇÃO

Uma das maiores preocupações das pessoas é exposição ao sol e os


danos que a radiação ultravioleta pode causar. Para ajudar você a medir isso,
proponho construir um medidor de UV com Arduino e Sensor de Raio Ultravioleta
UV Guva-S12SD, exibindo o valor do índice em um display OLED 128×32.

O índice UV, ou índice ultravioleta, é uma escala relativamente recente


(criada em 1992) e mede a força dos raios ultravioleta em um determinado lugar
e tempo. É um padrão internacional desenvolvido por cientistas canadenses e é
aprovada e padronizada pela Organização Mundial de Saúde e pela
Organização Meteorológica Mundial.

O índice UV é utilizada para previsões diárias e em muitos sites e serviços


meteorológicos encontramos a previsão de incidência de raios UV ao longo do
dia, o que pode ajudar em muito a prevenção, por exemplo, de câncer de pele.
2. DESENVOLVIMENTO

O nosso medidor utilizar uma placa Arduino Uno e um Sensor de Raio


Ultravioleta UV Guva-S12SD como esse da imagem abaixo. Ele é um sensor
compacto, conta com furos para fixação e tem somente 1 pino de conexão com
o arduíno. No pino Vcc podemos usar uma alimentação de 5V e GND é no
pino terra e SIG é o pino de sinal, que no nosso circuito será conectado
ao pino analógico A0 do arduíno.

Figura 1 - Ligação dos componentes do medidor UV

No programa do Arduino foi usado duas bibliotecas da Adafruit: a


GFX e a SSD1306, instalado as duas a partir da IDE do Arduino. A GFX
para usamos o sensor UV e a SSD1306 para o display OLED.

O programa carregado no Arduino faz a leitura da porta analógica A0,


onde está conectado o sensor de raio UV, e calcula o índice UV
correspondente. Depois apresenta o valor do índice no display OLED, que
usa as portas A4 e A5 para comunicação com o Arduino por meio da
interface I2C.

O valor medido pelo sensor Guva-S12SD é classificado de acordo com


a tabela de classificação dos índices de radiação.
Figura 2 - Circuito Montado
CÓDIGO FONTE DO ARDUÍNO
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//Resolução do display Oled (em pixels)


#define DISPLAY_LARGURA 128
#define DISPLAY_ALTURA 32
#define OLED_RESET 4 // Pino de Reset

Adafruit_SSD1306 display(DISPLAY_LARGURA, DISPLAY_ALTURA, &Wire,


OLED_RESET);

int indiceUV;

void setup()
{
Serial.begin(9600);
//Checagem do display no endereço I2C 0x3C
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))
{
Serial.println(F("SSD1306 allocation failed"));
for (;;); //Para o programa
}
//Inicializa o display Oled
display.display();
delay(1000);
}
void loop()
{
//Leitura dos dados do sensor
int leitura_porta = analogRead(A0);
//De acordo com a leitura define o índice UV correspondente
if (leitura_porta <= 10) {
indiceUV = 0;
} else if (leitura_porta > 10 && leitura_porta <= 46) {
indiceUV = 1;
} else if (leitura_porta > 46 && leitura_porta <= 65) {
indiceUV = 2;
} else if (leitura_porta > 65 && leitura_porta <= 83) {
indiceUV = 3;
} else if (leitura_porta > 83 && leitura_porta <= 103) {
indiceUV = 4;
} else if (leitura_porta > 103 && leitura_porta <= 124) {
indiceUV = 5;
} else if (leitura_porta > 124 && leitura_porta <= 142) {
indiceUV = 6;
} else if (leitura_porta > 142 && leitura_po rta <= 162) {
indiceUV = 7;
} else if (leitura_porta > 162 && leitura_porta <= 180) {
indiceUV = 8;
} else if (leitura_porta > 180 && leitura_porta <= 200) {
indiceUV = 9;
} else if (leitura_porta > 200 && leitura_porta <= 221) {
indiceUV = 10;
} else {
indiceUV = 11;
}
//Apaga o display

display.clearDisplay();

//Desenha um retângulo

display.fillRect(46, 0, 81, 32, SSD1306_INVERSE);


display.drawRect(0, 0, 45, 32, SSD1306_WHITE);
display.display();

//Define tamanho da fonte

display.setTextSize(1);

//Texto com letras em branco

display.setTextColor(SSD1306_WHITE);

//Posição do cursor

display.setCursor(4, 3);
display.println(F("INDICE"));
display.setCursor(12, 14);
display.setTextSize(2);
display.println(F("UV"));
display.setTextSize(4);

//Texto invertido, com texto preto e fundo branco

display.setTextColor(SSD1306_BLACK, SSD1306_WHITE);
display.setCursor(65, 2);
display.println(indiceUV);
display.display();
delay(1000);
}

Potrebbero piacerti anche