Сегодня утром я не стал писать посты и тестировать лампочки, а занялся творчеством.
Пару дней назад я «изобрёл» прибор, которого мне очень не хватало при тестировании ламп, и сегодня смог сделать его.
Ещё прибор пригодится для анализа снижения яркости ламп по мере прогрева.
В левом верхнем углу экрана показывается текущее значение освещённости в люксах, в левом нижнем углу — исходное значение освещённости. В правом верхнем — какой процент составляет первое число от второго. Кнопка Select устанавливает исходное значение освещённости равное текущему.
Дополнительно сделал индикацию пульсации, но она весьма приблизительна. Я использую цифровой датчик света TSL2561, у него минимальное время интеграции 13 мс, а длительность одного полупериода сетевого напряжения — 10 мс. Я делаю 12 замеров подряд с надеждой, что какой-нибудь из них случайно попадёт на минимум яркости при пульсации, а какой-нибудь другой на максимум. Кнопкой Left можно сделать коррекцию внешнего освещения для расчёта пульсации, нажав её, когда исследуемая лампа выключена.
Вся конструкция состоит из трёх готовых модулей — Arduino UNO R3, LCD Keypad Shield, MH-2561 и и четырёх проводов.
Скетч для Arduino:
//initialize LCD with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int start;
int lm;
int procent;
//Переменные из люксметра от samopal.pro
#define MAX_UNITS 12
uint16_t l_min=0,l_max=0,l=0,env=0;
int pulse = 0;
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);
void configureSensor(void)
tsl.setGain(TSL2561_GAIN_1X); /* No gain … use in bright light to avoid sensor saturation */
// tsl.setGain(TSL2561_GAIN_16X); /* 16x gain … use in low light to boost sensitivity */
// tsl.enableAutoRange(true); /* Auto-gain … switches automatically between 1x and 16x */
/* Changing the integration time gives you better sensor resolution (402ms = 16-bit data) */
// tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* fast but low resolution */
// tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* medium resolution and speed */
tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* 16-bit data but slowest conversions */
void setup(void)
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
Serial.begin(9600);
/* Initialise the sensor */
if(!tsl.begin())
/* There was a problem detecting the TSL2561 … check your connections */
Serial.print(«Ooops, no TSL2561 detected … Check your wiring or I2C ADDR!»);
while(1);
/* Setup the sensor gain and integration time */
configureSensor();
// Записываем исходное значение
sensors_event_t event;
tsl.getEvent(&event);
start = event.light;
lcd.setCursor(0,1);
lcd.print(start);
void loop(void)
tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS);
/* Get a new sensor event */
sensors_event_t event;
tsl.getEvent(&event);
lm = event.light;
lcd.setCursor(0,0);
lcd.print(lm); lcd.print(» «);
procent = (event.light/start*100);
lcd.setCursor(10,0);
lcd.print(procent); lcd.print(«% «);
int x;
x = analogRead (0);
if (x < 60) {
// lcd.print («Right «);
}
else if (x < 200) {
// lcd.print («Up «);
}
else if (x < 400){
// lcd.print («Down «);
}
else if (x < 600){
// lcd.print («Left «);
env = event.light;
}
else if (x < 800){
start = lm;
lcd.setCursor(0,1);
lcd.print(start);
lcd.print(» «);
}
// Замер пульсации
tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS);
l=event.light-env;
l_min = l;
l_max = l;
for (int i = 0; i < MAX_UNITS; i = i + 1) {
tsl.getEvent(&event);
l=event.light-env;
if( l < l_min )l_min = l;
if( l > l_max )l_max = l;
if( l_max != 0 )pulse = (double)((l_max — l_min))*100/(double)((l_max + l_min));
else pulse = 0;
lcd.setCursor(10,1);
lcd.print(pulse);
lcd.print(» «);
Честно говоря, не надеялся, что вот так за полдня у меня получится готовый работающий прибор. И это при том, что из языков программирования я когда-то знал только ассемблер БК0010 и многое делаю просто методом тыка.
В программе для Arduino я использовал фрагменты программ-примеров использования TSL2561, LCD Keypad Shield, а для расчёта пульсации кусочек из скетча люксметра с samopal.pro. Некоторые вещи работают, но я не понимаю, что они означают. 🙂
Тем не менее прибор работает и очень значительно экономит время. С его помощью уже протестировал полсотни лампочек на минимальное напряжение и тип драйвера.
p.s. Буду очень благодарен, если кто-нибудь, хорошо знакомый с Arduino, будет готов иногда отвечать на мои вопросы в Telegram, Facebook или Вконтакте.
© 2017, Алексей Надёжин
Основная тема моего блога — техника в жизни человека. Я пишу обзоры, делюсь опытом, рассказываю о всяких интересных штуках. А ещё я делаю репортажи из интересных мест и рассказываю об интересных событиях.
Добавьте меня в друзья здесь. Запомните короткие адреса моего блога: Блог1.рф и Blog1rf.ru.
Второй мой проект — lamptest.ru. Я тестирую светодиодные лампы и помогаю разобраться, какие из них хорошие, а какие не очень.
Этот пост в моём блоге LiveJournal: Придумал и сделал прибор