O verão foi embora mas você não vai deixar de se cuidar, certo? Um das maiores preocupações das pessoas deveria ser com a exposição ao sol e os danos que os raios ultravioleta podem causar. Para ajudar você a medir isso, hoje vamos 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.

Detalhe circuito Arduino Uno e Sensor UV Guva S12SD

Antes de começar o nosso projeto, vamos ver qual a importância de medir e ficar atento ao índice UV.

O índice UV

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.

A escala ou í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.

Escala Indice UV Ultravioleta

Importante destacar que evitar a exposição aos raios UV mais intensos é apenas uma das formas de se prevenir de problemas de pele, ok? Até porque mesmo em dias nublados devemos fazer uso de protetor solar, chapéu, roupas adequadas, etc, pois mesmo nesses dias temos a incidência desse tipo de raio.

Medidor de índice UV com Arduino

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 relativamente compacto, conta com furos para fixação e tem somente 1 pino de conexão com o microcontrolador:

No pino Vcc podemos usar uma alimentação de 2.2 a 5V (o que é bem interessante, pois permite que o módulo seja alimentado por pilhas). O GND é o conhecido “terra/negativo” e SIG é o pino de sinal, que no nosso circuito será conectado ao pino analógico A0 do microcontrolador.

O circuito de conexão ao Arduino Uno fica então desse jeito, com o módulo e o display compartilhando a alimentação de 5V:

Circuito Arduino Sensor UV GUVA-S12SD e Display Oled 128x32

Para exibição dos dados do nosso medidor de UV vamos usar um display Oled I2C 128×32 de 0,91″, outro componente de fácil conexão no Arduino e que como podemos ver no circuito acima está conectado nos pinos analógicos A4 (SDA) e A5 (SCL).

Programa medidor UV com Arduino

No programa abaixo vamos usar duas bibliotecas da Adafruit: a GFX e a SSD1306, instalando as duas a partir da IDE do Arduino.

Primeiro vamos instalar a SSD1306. Na IDE do Arduino, vá até o menu Sketch->Incluir Biblioteca->Gerenciar Bibliotecas e procure por SSD1306 clicando em seguida em Instalar, conforme a imagem abaixo:

Instalação biblioteca Adafruit SSD1306 IDE Arduino

Em seguida faça a mesma coisa com a biblioteca GFX:

Instalação biblioteca Adafruit GFX IDE Arduino

O programa abaixo 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 a cada 5 segundos:

//Programa: Sensor UV Guva s12sd Arduino e display Oled 128x32
//Autor: Arduino e Cia

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//Resolucao do display Oled (em pixels)
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32

#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &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(2000);
}

void loop()
{
  //Leitura dos dados do sensor
  int leitura_porta = analogRead(A0);

  //De acordo com a leitura define o indice UV corrrspondente
  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_porta <= 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;
  }

  //Mostra os valores no Serial Monitor
  Serial.print("Valor porta: ");
  Serial.print(leitura_porta);
  Serial.print(" - Indice: ");
  Serial.println(indiceUV);

  //Apaga o display
  display.clearDisplay();

  //Desenha retangulos
  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);
  //Posicao 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(2000);
}

Existem várias maneiras de calcular o índice UV dentro do programa. Você pode por exemplo aumentar o número de amostras e depois tirar uma média, ou realizar um cálculo baseado na tensão (milivolts) do pino do sensor. No caso eu optei por usar uma entrada simples da porta analógica.

Gostou? Confira também o post Como usar um sensor de chuva com Arduino aqui mesmo no Arduino e Cia!

5/5 - (2 votes)