Простейший измеритель пульсации света на датчике iArduino
Этот простой прибор поможет оценить пульсацию освещения и выбрать лампы без пульсации.
Собрать его можно буквально за пять минут.
На мой клич в блоге о создании «народного пульсметра» откликнулось много людей В комментариях на Дзене Вячеслав Т сообщил, что существует готовый датчик пульсации, который производит московская компания iArduino. Он называется "Датчик освещенности, люксметр, FLASH-I2C (Trema-модуль)" и стоит 320 рублей.
Этот датчик построен на сенсоре APDS-9930, который на самом деле является датчиком приближения, но заодно может измерять освещённость. Датчик содержит свой процессор и отдаёт по шине I2C освещённость в люксах, пульсацию в процентах и расстояние до объекта. На сайте iArduino написано, что пульсация вычисляется по 20 последним измерениям освещённости. С какой частотой делаются измерения и по какой формуле считается пульсация неизвестно. Я специально съездил в iArduino, чтобы узнать технические подробности, но там сказали, что датчик разрабатывался давно и они ничего не помнят.
Купил датчик, собрал прибор и изучил, как он работает.
Датчик не учитывает фоновую засветку, поэтому измерения желательно проводить в темноте, чтобы единственным источником света была исследуемая лампа.
Я взял светодиодные лампы разного качества с разным уровнем пульсации и сравнил показания самодельного пульсметра с показаниями спектрометра Uprtek MK350D и прибора Radex Lupin.
«Uprtek MK350D» и «Radex Люпин» рассчитывают коэффициент пульсации по разным формулам, поэтому их показания различаются. Показания самодельного прибора на датчике iArduino близки к показаниям MK350D, считающего пульсацию по упрощённой формуле. Отсутствие пульсации (0%) и небольшие уровни пульсации (1-50%) самодельный прибор показывает уверенно и достаточно точно. При пульсации 100% показания самодельного прибора начинают прыгать от 0 до 100%, но по этому «прыганью» можно понять, что лампа совсем плохая.
Во второй строке самодельный прибор показывает освещённость в люксах.
Я снял небольшое видео с экспериментом по сравнению показаний приборов.
Для того, чтобы сделать такой же прибор самостоятельно понадобится датчик «iArduino Датчик освещенности, люксметр, FLASH-I2C (Trema-модуль)» (можно купить тут), OLED-экран 0.96" с 4 выводами (I2C), плата D1 mini или, если не хотите ничего паять, Arduino Nano или Arduino Uno.
Четыре контакта датчика освещённости и четыре контакта экрана подключаются к одним и тем же контактам микроконтроллера: VCC к 5V, GND к GND или G, SCL к D1 у платы «D1 mini» или к A5 у плат Arduino, SDA к D2 у платы «D1 mini» или к A4 у плат Arduino. У платы Arduino Uno все эти контакты дублируются, поэтому одну плату (например, экран) можно подключить к 5V, GND, A5, A4, а вторую (например датчик iArduino) к 5V, GND, SCL, SDA.
Прибор можно использовать и без экрана: вся информация одновременно выводится в последовательный порт и её можно смотреть в мониторе порта Arduino.
//#include <ESP8266WiFi.h> // Уберите символы // в начале строки, если используете плату D1 mini или NodeMCU
#include <GyverOLED.h>
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
#include <Wire.h> // * Подключаем библиотеку для работы с аппаратной шиной I2C.
#include <iarduino_I2C_DSL.h> // Подключаем библиотеку для работы с датчиком освещённости I2C-flash (Digital Sensor Light).
iarduino_I2C_DSL dsl; // Объявляем объект dsl для работы с функциями и методами библиотеки iarduino_I2C_DSL.
void setup() {
// WiFi.mode(WIFI_OFF); // Уберите символы // в начале строки, если используете плату D1 mini или NodeMCU
// WiFi.forceSleepBegin(); // Уберите символы // в начале строки, если используете плату D1 mini или NodeMCU
oled.init(); // инициализация
oled.clear(); // очистка
oled.setScale(2); // масштаб текста (1..4)
oled.setCursorXY(0, 18);
oled.print(«Flicker»);
oled.setCursorXY(0, 36);
oled.print(" Test");
oled.setScale(4); // масштаб текста (1..4)
oled.home(); // курсор в 0,0
delay(500); // * Ждём завершение переходных процессов связанных с подачей питания.
Serial.begin(9600); //
while(!Serial){;} // * Ждём завершения инициализации шины UART.
dsl.begin(); // Инициируем работу с датчиком освещённости.
delay(2000); // Задержка после начальной заставки
}
void loop(){ //
Serial.print(«Light = „); //
Serial.print( dsl.getLux() ); // Выводим текущую освещённость, от 0 до 8191 лк.
Serial.print(“ lux. Flicker = „); //
Serial.print( dsl.getPulsation() ); // Выводим коэффициент пульсаций света, от 0 до 100%.
Serial.print(“ %rn»); //
oled.setCursorXY(0, 0);
oled.print( dsl.getPulsation() );
oled.print(" % ");
oled.setCursorXY(0, 32);
oled.print( dsl.getLux() );
oled.print(" ");
delay(500); // * Задержка между измерениями и отображением
}
Для компиляции понадобятся библиотеки iarduino_I2C_DSL и GyverOLED.
Для удобства всё, что нужно (скетч, библиотеки, схему подключения) можно скачать в одном архиве тут.
Но не спешите бежать в iArduino за датчиком. Как я сказал в начале, не мой призыв откликнулось много людей и двое уже создали гораздо более совершенные пульсметры.
Станислав Грицинов разработал пульсметр с аналоговым датчиком TEMT6000 и TFT-экраном.
Николай Хозяинов сделал пульсметр с маленькой солнечной батареей в качестве датчика и OLED-экраном.
В ближайшее время мы доведём «народный пульсметр» до совершенства и я опубликую подробную инструкцию по его сборке.
© 2021, Алексей Надёжин
- Саундбар AIRAUX AA-SAR1 на 60 Вт за $62.99
- USB изолятор
- Монтажная лампа-лупа. Обзор, разбор и разгон с вольтмодом
- "Умная" розетка BlitzWolf BW-SHP15 с ZigBee 3.0 за $12.95
- Как просверлить бетон без перфоратора шуруповертом за 1000 рублей. 5 подарков на Новый год
- Ударный шуруповерт под батарею Makita
- Мини-смартфон Soyes XS12. Действительно, eXtra Small
- Baseus CGNL020001 функциональное пусковое устройство для автомобиля
- Пластичное грузило своими руками
- Планка с разъёмами eSATApd (eSATAp 12V) для внешнего подключения SATA