Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

UltraV:портативный измеритель УФ-индекса

Компоненты и расходные материалы

Arduino Nano R3
× 1
Texas Instruments ML-8511
× 1
OLED-дисплей 128x64
× 1
повышающий преобразователь постоянного тока в постоянный для MT3608
× 1
Батарея CR2 (3 В)
× 1
Держатель батареи CR2
× 1

Об этом проекте

Не имея возможности подвергаться воздействию солнца из-за дерматологической проблемы, я использовал время, которое я бы провел на пляже, чтобы построить измеритель ультрафиолетовых лучей. UltraV.

Он построен на Arduino Nano rev3 с УФ-датчиком, преобразователем постоянного / постоянного тока для повышения напряжения батареи 3 В и небольшим OLED-дисплеем. Моей главной целью было сделать его портативным, чтобы я мог легко узнать УФ-индекс в любой момент и в любом месте.

Шаг 1. Детали и компоненты

  • Микроконтроллер Arduino Nano rev.3
  • УФ-датчик ML8511
  • 128 × 64 OLED-дисплей (SSD1306)
  • Повышающий DC-DC для MT3608
  • Батарея CR2
  • Держатель батареи CR2
  • Переключить
  • Корпус

Шаг 2. Датчик

ML8511 (Lapis Semiconductors) - это УФ-датчик, который подходит для измерения интенсивности УФ-излучения в помещении или на открытом воздухе. ML8511 оснащен внутренним усилителем, который преобразует фототок в напряжение в зависимости от интенсивности УФ-излучения. Эта уникальная функция предлагает простой интерфейс для внешних цепей, таких как АЦП. В режиме пониженного энергопотребления типичный ток в режиме ожидания составляет 0,1 мкА, что продлевает срок службы батареи.

Особенности:

  • Фотодиод, чувствительный к УФ-А и УФ-В.
  • Встроенный операционный усилитель
  • Аналоговый выход напряжения
  • Низкий ток питания (300 мкА, тип.) и малый ток в режиме ожидания (0,1 мкА, тип.)
  • Маленький и тонкий корпус для поверхностного монтажа (4,0 мм x 3,7 мм x 0,73 мм, 12-контактный керамический QFN)

К сожалению, мне не удалось найти какой-либо УФ-прозрачный материал для защиты датчика. Любой вид прозрачной крышки, которую я тестировал (пластик, стекло и т. Д.), Ослаблял УФ-измерение. Лучшим выбором кажется кварцевое стекло из плавленого кварца, но я не нашел его по разумной цене, поэтому решил оставить датчик вне коробки, на открытом воздухе.

Шаг 3. Операции

Чтобы измерить, просто включите устройство и наведите его на солнце на несколько секунд, удерживая его в соответствии с направлением солнечных лучей. Затем наблюдайте за дисплеем:индекс слева всегда показывает мгновенное измерение (по одному каждые 200 мс), а показание справа - это максимальное значение, полученное во время этого сеанса:это то, что вам нужно.

В нижней левой части дисплея также отображается эквивалентная номенклатура ВОЗ (НИЗКИЙ, Умеренный, ВЫСОКИЙ, ОЧЕНЬ ВЫСОКИЙ, ЭКСТРЕМАЛЬНЫЙ) для измеренного УФ-индекса.

Шаг 4. Напряжение батареи и показания

Выбираю батарею CR2, за ее размер и емкость (800 мАч). Я использовал UltraV все лето, и батарея по-прежнему показывает 2,8 В, так что я вполне доволен выбором. Во время работы схема потребляет около 100 мА, но измерение показаний занимает не более нескольких секунд. Поскольку номинальное напряжение батареи составляет 3 В, я добавил повышающий преобразователь постоянного тока в постоянный, чтобы довести напряжение до 9 вольт, и подключил его к выводу Vin.

Для того, чтобы на дисплее отображалось напряжение аккумулятора, я использовал аналоговый вход (A2). Аналоговые входы Arduino можно использовать для измерения постоянного напряжения от 0 до 5 В, но этот метод требует калибровки. Для калибровки вам понадобится мультиметр. Сначала включите в схему последний аккумулятор (CR2) и не используйте питание USB от компьютера; Измерьте 5 В на Arduino от регулятора (находится на выводе Arduino 5V):это напряжение используется для опорного напряжения АЦП Arduino по умолчанию. Теперь поместите измеренное значение в эскиз следующим образом (предположим, я прочитал 5.023):

  Voltage =((длинная) сумма / (длинная) NUM_SAMPLES * 5023) / 1024,0;  

В эскизе я беру измерение напряжения как среднее значение по 10 отсчетам.

Шаг 5:Схема и подключения

Шаг 6. Программное обеспечение

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

Что касается считывания напряжения с ML8511, я использовал опорный вывод 3,3 В Arduino (с точностью до 1%) в качестве основы для преобразователя АЦП. Таким образом, выполнив аналого-цифровое преобразование на выводе 3,3 В (подключив его к A1), а затем сравнив это показание с показанием датчика, мы можем экстраполировать реальное показание, независимо от того, какой VIN ( пока оно выше 3,4 В).

  int uvLevel =averageAnalogRead (UVOUT); int refLevel =averageAnalogRead (REF_3V3); float outputVoltage =3.3 / refLevel * uvLevel;  

Загрузите полный код по следующей ссылке.

UltraV_OLED.ino.zip

Шаг 7. Корпус

После нескольких (неудачных) тестов по вырезанию прямоугольного окна дисплея вручную на коммерческой пластиковой коробке я решил спроектировать для него свой собственный. Итак, с помощью приложения САПР я разработал коробку и, чтобы сделать ее как можно меньше, я установил батарею CR2 снаружи на задней стороне (с держателем батареи, приклеенным к самой коробке).

Загрузите файл STL для корпуса корпуса по следующей ссылке.

UltraV.stl.zip

Шаг 8:Возможные улучшения в будущем

  • использовать УФ-спектрометр для измерения фактических значений УФ-индекса в реальном времени в различных условиях (УФ-спектрометры очень дороги);
  • Одновременная запись вывода ML8511 с микроконтроллером Arduino;
  • Напишите алгоритм, связывающий выходные данные ML8511 с фактическим значением UVI в реальном времени в широком диапазоне атмосферных условий.

Шаг 10:Кредиты

  • Карлос Ортс:https://create.arduino.cc/projecthub/McOrts/mobil ...
  • Форум Arduino:http://forum.arduino.cc/index.php?topic=3922.0
  • Запуск электроники:https://startingelectronics.org/articles/arduino / ...
  • U8g2lib:https://github.com/olikraus/u8g2/wiki/u8g2referen ...
  • Всемирная организация здравоохранения, УФ-индекс:http://www.who.int/uv/intersunprogramme/activitie ...
https://github.com/olikraus/u8g2/wiki/u8g2reference

Код

  • UltraV
UltraV C / C ++
Код
 / * Fabio Marzocca @ 2018 Аналого-цифровое преобразование полностью зависит от VCC. Мы предполагаем, что это 5 В, но если плата питается от USB, это может быть как 5,25 В, так и 4,75 В:http://en.wikipedia.org/wiki/USB#Power Из-за этого неизвестного окна появляется АЦП в большинстве случаев довольно неточен. Чтобы исправить это, мы используем очень точное встроенное опорное напряжение 3,3 В (с точностью до 1%). Таким образом, подключив АЦП к выводу 3,3 В (A1), а затем сравнив его с показаниями датчика, мы можем экстраполировать реальные показания независимо от того, какой VIN (при условии, что он выше 3,4 В) .v. 2.0.0 - июль 2018 г. - перенесен с ЖК-дисплея 16x2 на OLEDv. 2.0.1 - сентябрь 2018 г. - изменена функция чтения батареи * / # include  #include  #include  U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2 (U8G2_R0, / * clock =* / SCL, / * data =* / SDA, / * сброс =* / U8X8_PIN_NONE); // Все платы без сброса дисплея # define FIRST_ROW_Y 16 # define FIRST_ROW_X 16 #define BOX_H 38 // Аппаратные определения контактовconst int UVOUT =A0; // Вывод датчика const int REF_3V3 =A1; // Питание 3.3V на плате Arduinoconst int VBATT =A2; // Напряжение батареи плавное maxUV =0; // Макс. УФ-индекс readvoid setup () {pinMode (UVOUT, INPUT); pinMode (REF_3V3, ВХОД); pinMode (VBATT, ВХОД); u8g2.begin ();} недействительный цикл () {u8g2.firstPage (); сделать {int uvLevel =averageAnalogRead (UVOUT); int refLevel =averageAnalogRead (REF_3V3); // Используйте вывод питания 3,3 В в качестве эталона, чтобы получить очень точное выходное значение от датчика с плавающей запятой outputVoltage =3.3 / refLevel * uvLevel; float uvIntensity =mapfloat (outputVoltage, 0,99, 2,6, 0,0, 15,0); // Преобразование напряжения в уровень интенсивности УФ-излучения readBattery (); если (maxUV  =0) &&(категория <3)) {strcpy (strCat, "LOW"); } иначе, если ((категория> =3) &&(категория <6)) {strcpy (strCat, "УМЕРЕННЫЙ"); } иначе, если ((категория> =6) &&(категория <8)) {strcpy (strCat, "ВЫСОКИЙ!"); } иначе, если ((категория> =8) &&(категория <10)) {strcpy (strCat, "ОЧЕНЬ ВЫСОКИЙ!"); } иначе, если (категория> =11) {strcpy (strCat, «ЭКСТРЕМАЛЬНЫЙ!»); } u8g2.setCursor (0,64); u8g2.print (strCat); } // Получает среднее значение для данного вывода // Возвращает среднее значение averageAnalogRead (int pinToRead) {byte numberOfReadings =16; беззнаковое int runningValue =0; для (int x =0; x  

Производственный процесс

  1. Делитель напряжения
  2. Картофельная батарея
  3. Что такое метр?
  4. Мультиметры
  5. Конструкция батареи
  6. Что такое переносной аппарат для точечной сварки?
  7. Портативная КИМ – стационарная или портативная?
  8. Понимание аккумуляторов, используемых в автомобилях
  9. Различные способы проверки генератора
  10. 7 признаков плохого или неисправного генератора