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