Quantcast
Channel: MakerHero
Viewing all articles
Browse latest Browse all 427

Medidor de índice UV com Arduino

$
0
0

Medidor de índice UV com Arduino

Todos sabem dos danos à saúde que uma exposição prolongada ao sol pode causar, devido à radiação UV (Ultravioleta). Neste post vamos montar um medidor de índice UV com Arduino que vai ajudar você a monitorar esse nível de exposição com muito mais segurança. O sensor que vamos utilizar é o Sensor de Raio Ultravioleta UV UVM-30A.

Sensor raio ultravioleta UV UVM-30A

O medidor utiliza uma tabela criada em 1992 chamada UV Index (ou Índice Ultravioleta), que vai de 0 (baixo) a 11 (extremo), indicando o nível dos raios UV. Com esse nível podemos criar uma tabela mostrando as providências que devem ser tomadas para se proteger do sol (usar óculos escuros, protetor solar, roupas adequadas,  etc).

Indice UV - Proteção

O sensor UVM-30A é capaz de detectar raios UV com tamanho de onda entre 200 e 370mm, com uma rápida resposta. A saída de dados é analógica e utiliza um único pino, cujo valor pode ser lido pela maioria dos microcontroladores. O módulo aceita tensão de alimentação entre 3 e 5V.

Ligação do sensor UV ao Arduino

No nosso circuito vamos utilizar um display Oled I2C Azul Amarelo para mostrar a informação do índice UV. Esse display é o mesmo que utilizamos recentemente no nosso projeto de Bafômetro com Arduino. A saída do módulo UV (pino OUT) será ligada ao pino analógico A0 do Arduino.

Circuito Arduino Uno - Sensor UV

No nosso circuito colocamos o sensor UV na protoboard, mas você pode utilizar um cabo para melhor posicionamento do sensor.

Programa medidor de índice UV com Arduino

O programa lê o valor da porta analógica A0, converte esse valor em milivolts e faz a associação com a tabela mostrada abaixo, para exibir no display o valor do índice UV (UV Index) correspondente.

Tabela UV - mV

O display Oled utiliza a biblioteca U8Glib, disponível neste link. A leitura e conversão dos valores lidos do sensor UV será feita dentro do programa, sem o uso de bibliotecas.

//Programa: Medidor de Indice UV com Arduino
//Autor: FILIPEFLOP

#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);

int pino_sensor = A0;
int valor_sensor = 0;
int posicao;
String UV_index = "0";

void draw()
{
  //Comandos graficos para o display devem ser colocados aqui
  u8g.drawRFrame(0, 16, 67, 48, 4);
  u8g.drawRFrame(67, 16, 61, 48, 4);
  u8g.drawRFrame(0, 0, 128, 16, 4);
  u8g.drawBox(11, 48, 45, 12 );
  u8g.setFont(u8g_font_8x13B);
  u8g.setColorIndex(0);
  u8g.drawStr( 13, 59, "INDEX");
  u8g.setColorIndex(1);
  u8g.drawStr( 24, 13, "Medidor UV");
  // Centraliza o valor na tela
  u8g.setFont(u8g_font_fur25);
  u8g.drawStr( 10, 45, "UV");
  //Ajusta posicao do valor do UV_Index
  if (UV_index.length() <= 1)
  {
    posicao = 88;
  }
  else
  {
    posicao = 78;
  }
  //Mostra valor do sensor
  u8g.setPrintPos(posicao, 52);
  u8g.print(UV_index);
}

void setup(void)
{
  Serial.begin(9600);
  pinMode(pino_sensor, INPUT);
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255, 255, 255);
  }
}

void loop(void)
{
  Calcula_nivel_UV();
  //Chama a rotina de desenho na tela
  u8g.firstPage();
  do
  {
    draw();
  }
  while ( u8g.nextPage() );
  delay(150);
}

void Calcula_nivel_UV()
{
  valor_sensor = analogRead(pino_sensor);
  //Calcula tensao em milivolts
  int tensao = (valor_sensor * (5.0 / 1023.0)) * 1000;
  //Compara com valores tabela UV_Index
  if (tensao > 0 && tensao < 50)
  {
    UV_index = "0";
  }
  else if (tensao > 50 && tensao <= 227)
  {
    UV_index = "0";
  }
  else if (tensao > 227 && tensao <= 318)
  {
    UV_index = "1";
  }
  else if (tensao > 318 && tensao <= 408)
  {
    UV_index = "2";
  }
  else if (tensao > 408 && tensao <= 503)
  {
    UV_index = "3";
  }
  else if (tensao > 503 && tensao <= 606)
  {
    UV_index = "4";
  }
  else if (tensao > 606 && tensao <= 696)
  {
    UV_index = "5";
  }
  else if (tensao > 696 && tensao <= 795)
  {
    UV_index = "6";
  }
  else if (tensao > 795 && tensao <= 881)
  {
    UV_index = "7";
  }
  else if (tensao > 881 && tensao <= 976)
  {
    UV_index = "8";
  }
  else if (tensao > 976 && tensao <= 1079)
  {
    UV_index = "9";
  }
  else if (tensao > 1079 && tensao <= 1170)
  {
    UV_index = "10";
  }
  else if (tensao > 1170)
  {
    UV_index = "11";
  }
}

Abaixo temos uma imagem do circuito em funcionamento, mostrando o índice UV em uma ensolarada manhã de inverno:

Medidor UV Arduino

Gostou? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo) e visite nossa loja FILIPEFLOP!

Site: Blog FILIPEFLOP


Viewing all articles
Browse latest Browse all 427

Latest Images