цифровая электроника
вычислительная техника
встраиваемые системы

 




Измеритель УФ индекса на основе Arduino и GUVA-S12SD своими руками

Автор: Mike(admin) от 7-06-2021, 03:55

В этом проекте будет показано вам, сделать измеритель УФ-индекса, который может отображать УФ-индекс и состояние УФ-излучения с помощью датчика ульрафиолетового излучения GUVA-S12SD.


Измеритель УФ индекса на основе Arduino и GUVA-S12SD своими руками

GUVA-S12SD представляет собой фотодиод типа Шоттки на основе нитрида галлия. Он имеет типичную длину волны обнаружения УФ-излучения 240–370 нм (которая охватывает УФ-В и большую часть УФ-А спектра). Этот датчик выдает откалиброванное аналоговое напряжение, которое зависит от интенсивности УФ-излучения. В итоге мы сможем прочитать аналоговое значение через АЦП Arduino.


Измеритель УФ индекса на основе Arduino и GUVA-S12SD своими руками

Измеритель УФ индекса на основе Arduino и GUVA-S12SD своими руками

Подключение Arduino к датчику GUVA-S12SD следующее:


  • ARDUINO A0 - GUVA-S12SD SIG
  • ARDUINO A4 - OLED SDA
  • ARDUINO A5 - OLED SCL
  • ARDUINO 5V - GUVA-S12SD и OLED VCC
  • ARDUINO GND - GUVA-S12SD и OLED GND

В результате схема подключения выглядит так:


Измеритель УФ индекса на основе Arduino и GUVA-S12SD своими руками

Измеритель УФ индекса на основе Arduino и GUVA-S12SD своими руками

Датчик GUVA-S12SD выдает аналоговое напряжение, поэтому мы должны считывать данные с помощью команды analogRead (). Затем мы рассчитываем выходное напряжение с датчика так: sensorVoltage = sensorValue/1024*5.0 . После этого мы вычисляем УФ-индекс, разделив напряжение датчика на 0,1 в соответствии с технической документацией на датчик: UV_index = sensorVoltage 0.1; Затем, используя данные из Википедии, мы определяем состояния относительно УФ-индекса, и в итоге отображаем УФ-индекс и УФ-состояние на OLED-дисплее. Полный код программы измерителя УФ-индекса приведен далее:



#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans9pt7b.h>
#include <Fonts/Org_01.h>
#include <Fonts/FreeMonoBoldOblique12pt7b.h>
#include <Fonts/FreeMonoBoldOblique9pt7b.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_RESET     4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define bitmap_height   128
#define bitmap_width    64
static const unsigned char PROGMEM bitmap[] =
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x79, 0xE0, 0x00, 0x0F, 0x00, 0x00,
0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x79, 0xF0, 0x00, 0x1F, 0x00, 0x00,
0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x79, 0xF0, 0x00, 0x1E, 0x00, 0x00,
0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0xF8, 0x00, 0x3E, 0x00, 0x00,
0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x78, 0x00, 0x3C, 0x00, 0x00,
0x01, 0xFE, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x7C, 0x00, 0x7C, 0x00, 0x00,
0x03, 0xFC, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x3C, 0x00, 0xF8, 0x00, 0x00,
0x07, 0xF8, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x3E, 0x00, 0xF8, 0x00, 0x00,
0x0F, 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x1F, 0x01, 0xF0, 0x00, 0x00,
0x0F, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x1F, 0x01, 0xE0, 0x00, 0x00,
0x1F, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x0F, 0x83, 0xE0, 0x00, 0x00,
0x1F, 0xE0, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x07, 0x83, 0xC0, 0x00, 0x00,
0x1F, 0xE0, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x07, 0xC7, 0xC0, 0x00, 0x00,
0x1F, 0xE0, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x03, 0xCF, 0x80, 0x00, 0x00,
0x1F, 0xE0, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x03, 0xEF, 0x80, 0x00, 0x00,
0x1F, 0xE0, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x01, 0xFF, 0x00, 0x00, 0x00,
0x1F, 0xE0, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x03, 0xF0, 0x01, 0xFE, 0x00, 0x00, 0x00,
0x0F, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x07, 0xC0, 0x00, 0xFE, 0x00, 0x00, 0x00,
0x0F, 0xF8, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x7C, 0x00, 0x00, 0x00,
0x07, 0xF8, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00,
0x03, 0xFC, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0xFE, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7F, 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3F, 0xF8, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};


void uv_index()
{

  float sensorVoltage; 
  float sensorValue;
  int UV_index;
  String quality =""; 
  sensorValue = analogRead(A0);
  sensorVoltage = sensorValue/1024*5.0;
  UV_index= sensorVoltage/0.1;


 if(UV_index<=2){ 
   quality = "   LOW ";
  }

  else if(UV_index > 2 && UV_index <=5){
   quality = "   MOD ";
  }

  else if(UV_index>5 && UV_index<=7){
   quality = "   HIGH ";
  }

  else if(UV_index>7 && UV_index<=10){
   quality = "VERY HIGH";

  }

  else{
   quality = " EXTREME ";
  }

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(16, 6);
  display.setFont(&Org_01);
  display.println("UV INDEX");
  display.setCursor(53, 35);
  display.setTextSize(1);
  display.setFont(&FreeMonoBoldOblique12pt7b);
  display.println(UV_index);
  display.setTextSize(2);
  display.setCursor(10, 55);
  display.setFont();
  display.println(quality);   
  display.display();  
  delay(1000);

}

void setup() {
  Serial.begin(9600);

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
  }
  showBitmap();
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(15, 9);
  display.setFont(&FreeMonoBoldOblique12pt7b);
  display.println("INDEX");
  display.setTextSize(1);
//    display.setFont();
  display.setCursor(55, 37);
  display.setFont(&FreeSans9pt7b);
  display.println("meter");
  display.display();
  delay(1000);
}

void loop() {
  display.clearDisplay();
  uv_index();

}

void showBitmap(void) {
  display.clearDisplay();

  display.drawBitmap(5, 0, bitmap, bitmap_height, bitmap_width, WHITE);
  display.display();
  delay(2000);
}



© digitrode.ru


Теги: Arduino, датчик УФ-излучения




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
Цитата
  • Ar

  • 29 января 2023 00:11
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
конкретно про purple версию pcb модуля Guva-S12SD видел комментарии и статьи, что она непойми как откалибрована и непойми для чего изначально сделана была. уже при сумерках значегия выходнфе зашкаливающие. её с светофильтром или спнц диффузором применять надо или еще как. непонятно.

а в даташите, вроде бы, на сенсор указано, что надо четко направлять прямо в сторону солнца.

дрцгие варианты содулей этого сенсора имеют не такое дикое усиление и там всё норм.

эта табличка пересчета значений вообще кочует непойми с каких времен для совсем другого сенсора. ко всем остальным она имеет весьма далекое отношение. крч хз, что выбирать из сенсоров сегодня.

раньше был двухканальный uva uvb veml6075. теперь недорого остался только veml6070 одноканальный. есть ё als+uv сенсор ltr390. ди даже он дешевле veml6070. а за 6075 вообще под 2 к на али. нашел еще какой-то чип, забыл название, там тоже 2 канала. но плат с ним нет, только голый чип, библиотек тоже нет. и цена под 1.5к на али. смысла нет, крч.

есть новфй чип 10.2022 года osram as7331. 3 канала! но пока не нашел вообще на али. только на mouser и digikey каких-ниб. и доставка через mail forwarder. крч, морока. но выйдет +- как 6075, наверное. а. скину германский бдог о сенсорах uv в том числе.

https://wolles-elektronikkiste.de/uv-sensoren?unapproved=18842&moderation-hash=5
776ddd14b7fbb009ffeae627e3a7758#comment-18842
вышел новый

можно, плз, предыдущий комментарий удалить. там ошмбок много.

конкретно про purple версию pcb модуля Guva-S12SD видел комментарии и статьи, что она не пойми как откалибрована и не пойми для чего изначально сделана была. уже при сумерках значения выходные зашкаливающие. их с светофильтром или спец диффузором применять надо или еще как, непонятно.
а в даташите на сенсор, вроде бы, указано, что надо четко направлять прямо в сторону солнца.

другие варианты модулей этого сенсора имеют не такое дикое усиление и там всё норм.

далее. эта табличка пересчета значений вообще кочует не пойми с каких времен, и она вроде бы для совсем другого сенсора. ко всем остальным осенсорам имеет весьма относительное отношение.

крч не знаю, что выбирать из сенсоров сегодня.

раньше был двухканальный uva uvb veml6075. теперь не выпускается, подорожал дико, и +- недорого остался только veml6070 одноканальный. есть ещё als+uv сенсор ltr390. и даже он дешевле veml6070. а за 6075 вообще под 2к на али. нашел еще какой-то чип, забыл название, там тоже 2 канала. но плат с ним нет, только голый чип, библиотек тоже нет, и цена под 1.5к на али. смысла нет, крч.

есть новый чип 10.2022 года от osram as7331. 3 канала! но пока не нашел вообще ни модулей, ни чипов на али. только на mouser и digikey каких-ниб. и доставка через mail forwarder. крч, морока. но выйдет +- как 6075, наверное.