UV Senzor pro Arduino je měřící modul, který umožňuje měřit ultrafialové záření. Na tomto modulu je umístěn UV senzor UVM-30, který umožňuje měření záření vlnové délky 200 až 375 nanometrů, tedy část UVA a UVB záření. Naměřené hodnoty lze pak podle údajů výrobce přepočíst na UV index v rozpětí 0 až 11+. Více informací o UV indexu lze nalézt například zde: https://cs.wikipedia.org/wiki/UV_index. Co se týká provozních teplot, doporučený rozsah je -20 ℃ až +85 ℃. Napájecí napětí senzoru je možné použít v rozsahu 3,3 až 5 V, výstupní napětí se pak pohybuje v rozsahu 0 až 1,17 V.

UV senzor UVM-30

Pro úspěšné propojení s Arduinem stačí použít tři propojovací piny. Propojíme pin OUT s A0, pin VCC s napájecím napětím 5 V Arduina a GND se zemí Arduina. Pro pin OUT je možné využít také ostatní analogové piny Arduina, ale je nutné tuto změnu provést také v programu. Taktéž lze využít jiné napájecí napětí, ale opět je nutné toto zohlednit v programu v části s přepočtem měřené analogové hodnoty.

UV senzor UVM-30 schéma zapojení

Ukázkový kód obsahuje na začátku nastavení čísla propojovacího pinu, vytvoření proměnné pro uložení výsledku a dále vytvoření pole s limity pro UV indexy, kdy tyto hodnoty vychází z údajů od výrobce senzoru. V podprogramu setup() je nastavena komunikace po sériové lince. Nekonečná smyčka loop() na svém začátku načte analogovou hodnotu z propojovacího pinu OUT a tuto hodnotu poté přepočteme na elektrické napětí. V případě, že by naměřené napětí bylo větší než 1170 mV, tedy větší než změřitelné maximum, omezíme toto napětí pouze na zmíněné maximum. Dále pomocí for smyčky zjistíme, mezi jakými indexy se nachází náš výsledek a při jeho nalezení opustíme for smyčku. Následně při naměřeném výsledku větším než index 0 dopočteme desetinnou hodnotu UV indexu a následně všechny dostupné informace vytiskneme po sériové lince. Na konci programu se nachází už jen volitelná pauza po dobu 1000 milisekund.

// UV senzor

// nastavení propojovacího pinu senzoru
#define pinOUT A0
// nastavení proměnné pro uložení desetinného čísla s výsledkem
float uvIndex;
// pole s limity pro jednotlivé UV indexy
int uvIndexPole [12] = { 50, 227, 318, 408, 503, 606, 696, 795, 881, 976, 1079, 1170};

void setup() {
  // komunikace přes sériovou linku rychlostí 9600 baud
  Serial.begin(9600);
}

void loop()
{
  // načtení analogové hodnoty do proměnné uvAnalog
  int uvAnalog = analogRead(pinOUT);
  // přepočet analogové hodnoty na napětí
  // (výpočet pro napájecí napětí 5V = 5000 mV)
  float uvNapeti = uvAnalog * (5000.0 / 1023.0);
  // pokud je napětí větší než 1170 mV,
  // jedná se o maximální měřitelný rozsah
  // a výsledek bude omezen na tuto hodnotu
  if (uvNapeti > 1170) {
    uvNapeti = 1170;
  }
  // for smyčka, která postupně projde pole s limity UV indexů
  int i;
  for (i = 0; i < 12; i++)
  {
    // v případě, že je nalezena limitní hodnota,
    // uložíme si tento index do proměnné uvIndex
    // a pomocí break ukončíme for smyčku
    if (uvNapeti <= uvIndexPole[i]) 
    {
      uvIndex = i;
      break;
    }
  }
  // při naměřeném výsledku alespoň UV index 1
  // dopočítáme desetinnou hodnotu indexu
  if (i>0) {
    // do proměnné rozdilIndexu uložíme rozdíl napětí mezi
    // dosaženým indexem a předchozím, do proměnné
    // rozdilHodnot pak rozdíl mezi naměřeným napětím
    // a napětím pro předchozí index
    float rozdilIndexu=uvIndexPole[i]-uvIndexPole[i-1];
    float rozdilHodnot=uvNapeti-uvIndexPole[i-1];
    // výsledek je pak vypočten jako obrácená hodnota rozdilIndexu
    // krát rozdílHodnot mínus jedna a takto připočten k nalezenému
    // uvIndexu
    uvIndex+=(1.0/rozdilIndexu)*rozdilHodnot-1.0;
  }
  // vytištění informací o naměřeném napětí UV senzoru
  Serial.print("Napeti UV senzoru: ");
  Serial.print(uvNapeti);
  // vytištění informací o naměřeném UV indexu
  Serial.print(" mV | UV Index: ");
  Serial.println(uvIndex,2);
  // volitelná pauza mezi měřením
  delay(1000);
}

Po nahrání programu do Arduino desky s připojeným UV senzorem dostaneme například tento výpis:

Napeti UV senzoru: 0.00 mV | UV Index: 0.00
Napeti UV senzoru: 10.00 mV | UV Index: 0.00
Napeti UV senzoru: 12.00 mV | UV Index: 0.00
Napeti UV senzoru: 325.00 mV | UV Index: 2.08
Napeti UV senzoru: 341.00 mV | UV Index: 2.26

UV senzor pro Arduino je snadno použitelný měřící modul, který nás může ochránit před spálením Sluncem a dalšími zdroji UV záření. Je tedy velmi dobrým kandidátem například do domácích měřících meteostanic či měřičů UV záření. Vzhledem k tomu, že Slunce v době psání článku příliš nesvítilo, vyzkoušel jsem měření na UV LED diodách a UV lampě, kdy jsem si ověřil, že UV LED diody nejsou příliš nebezpečné (první výsledky výše), zatímco UV lampa už není příliš vhodná pro delší kontakt s lidskou pokožkou.

 

Seznam použitých komponent:

http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html

http://dratek.cz/arduino/1263-ultrafialovy-modul-uv-senzor-pro-arduino-1459973283.html

FB tw

Další podobné články