Придумал и сделал прибор

    Сегодня утром я не стал писать посты и тестировать лампочки, а занялся творчеством. Пару дней назад я «изобрёл» прибор, которого мне очень не хватало при тестировании ламп, и сегодня смог сделать его.


    Прибор показывает изменение яркости в процентах по прошествии времени. Прежде всего он нужен мне в проекте lamptest.ru для измерения минимального напряжения, при котором горят лампы, не снижая яркость более, чем на 10%. Помимо информации о минимальном напряжении, которая пригодится тем, кто живёт в местах с не очень качественным электропитанием, где напряжение в сети может существенно снижаться (например, в сельских районах), это поможет сделать выводы о типе драйвера и качестве ламп.

    Ещё прибор пригодится для анализа снижения яркости ламп по мере прогрева.

    В левом верхнем углу экрана показывается текущее значение освещённости в люксах, в левом нижнем углу — исходное значение освещённости. В правом верхнем — какой процент составляет первое число от второго. Кнопка Select устанавливает исходное значение освещённости равное текущему.

    Дополнительно сделал индикацию пульсации, но она весьма приблизительна. Я использую цифровой датчик света TSL2561, у него минимальное время интеграции 13 мс, а длительность одного полупериода сетевого напряжения — 10 мс. Я делаю 12 замеров подряд с надеждой, что какой-нибудь из них случайно попадёт на минимум яркости при пульсации, а какой-нибудь другой на максимум. Кнопкой Left можно сделать коррекцию внешнего освещения для расчёта пульсации, нажав её, когда исследуемая лампа выключена.

    Вся конструкция состоит из трёх готовых модулей — Arduino UNO R3, LCD Keypad Shield, MH-2561 и и четырёх проводов.

    Скетч для Arduino
    Скетч для Arduino:
    <textarea rows="130" cols="110">
    #include <Wire.h>
    #include <Adafruit_Sensor.h>
    #include <Adafruit_TSL2561_U.h>
    #include <LiquidCrystal.h>
    
    //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, Алексей Надёжин
    Метки:
    LampTest 34,76
    Тестирование светодиодных ламп
    Поделиться публикацией
    Похожие публикации
    Комментарии 66
    • +1
      Телеграмм kiltum, пиши. Ардуинка, Пимена, стм32 и куча других страшных слов. (double) означает всего лишь приведение типов. Что бы компилятор с устатку не выкинул дробную часть
      • 0
        Спасибо!
        • +2
          «ардуинка и куча других страшных слов» — это насколько же надо быть талантливым и альтернативно одаренным, чтобы ардуина казалась чем-то страшным?
          • +3
            Ну слово-то страшное.
            • 0
              При том, что автор умеет в ассемблер БК-0010…
          • 0
            if(!tsl.begin()) — тут не переменная, а вызов метода класса, возвращающий либо целое число, либо булевое значение (true/false).

            (double)((l_max — l_min))*100/(double)l_max; — это приведение целых чисел (делимого и делителя) к числам с плавающей запятой с двойной точностью, это позволяет получить минимальную ошибку при делении. Его можно конвертировать в целое, вызвав функцию округления round() или floor(), смотря как надо. round() округляет как учили в школе, а floor() отбрасывает десятичную часть.
          • 0
            Ну раз с электричеством разбираешся, а с кодом сложно — то тебе точно сюда.
            Кстати для люксометра (BH1750) там есть стандартный блок. Так же есть стандартный блок для измерителя цвета TCS230.
          • +1
            Я делаю 12 замеров подряд с надеждой, что какой-нибудь из них случайно попадёт на минимум яркости при пульсации, а какой-нибудь другой на максимум.

            У TSL в даташите пишут про "Automatically Rejects 50/60-Hz Lighting Ripple" так что вряд ли им получится мерить пульсации лампочки. Более подробной информации по этой фиче не нашел к сожалению.

            • 0
              Да, какая-то фигня получается. У лампочки со 100% пульсацией около 33%, у ламп вообще без пульсации 1-2%, но вот маленькую пульсацию ловит плохо.
            • +1
              Для измерения пульсаций можно добавить простой фоторезистор. Ведь не требуется измерять освещённость (этим занимается люксометр), а необходимо только измерять её изменение за определённый период времени.
              То есть в течении например 500 мс в цикле читаем значение с аналогового выхода к которому подключён фоторезистор, определяем максимальное и минимальное значение за это время, и разница между ними в процентах как раз будет необходимая величина.
              • +1
                Да, я тоже думаю, что это будет проще и легче, только не фоторезистор (он медленный), а фотодиод.
                • 0
                  То же верно
                  • 0
                    Ну и для полного счастья подключаем часы реального времени, картридер, и гоним на флешку статистику с метками времени в csv файл.
                    После проведения замеров флешку в комп, и считай готовый отчёт в экселе (который кстати умеет строить графики по таблицам).
                    Получится готовый анализатор
                    • 0

                      Тогда еще ИК датчик температуры и твердотельное реле, последним можно вкл/выкл лампочку и замерять время старта и время выхода на максимальную яркость, хотя это только для газоразрядных актуально.

                      • 0
                        Не надо часы и кардридер. Arduino UNO умеет по USB данные на комп отправлять, а там и часы есть и всё что нужно.
                        • 0
                          Но с часами и ридером можно сделать автономное устройство. И не таскать с собой ноут
                      • 0

                        Тогда уж и выносной термодатчик добавить, чтобы сразу снимать и график нагревания лампы.

                        • +2
                          Ты замучаешься искать фотодиод с чувствительностью, соответствующей видимому диапазону.

                          Доступные BPW21R немного захватывают ИК, этого достаточно, чтобы привирать. У Hamamatsu Photonics есть модели с очень хорошей аппроксимацией чувствительности глаза, но они ни разу не доступные.
                          • 0
                            А фильтр поставить не поможет?
                            • +1
                              Отрезающий ИК? Можно попробовать, но точности хорошего оптодатчика колхозными методами вряд ли удастся достичь.

                              Vishay BPW21R: https://yadi.sk/i/iy2rB6eN3EW9uQ

                              Видно, что хотя максимум у него совпадает с максимом глаза, но хвосты сильно лезут и в ИК, и в УФ, на уровне 10-20 % от пика видимого диапазона.

                              Хотя для лампочек, пожалуй, он более-менее пригоден, особенно светодиодных.

                              Hamamatsu S7686: https://yadi.sk/i/X9njuuWj3EWAi4

                              Тут уже всё красиво, но когда я их последний раз заказывал — десятилетие тому назад примерно — с меня попросили для начала форму экспортного контроля, а потом в итоге так и не смогли привезти.
                            • 0
                              А какая мне разница, если он нужен исключительно для измерения пульсации.
                              • 0
                                А у тебя инфракрасная компонента в пульсациях строго следует видимой?

                                Я изволю сильно в этом сомневаться.
                                • 0
                                  А почему она может быть отличной от нее?
                                  • +1
                                    Начиная с тепловой компоненты (малосущественная при температурах в районе +100 °С, впрочем) до нелинейной зависимости компонент спектра светодиода от питающего тока.

                                    Я BPW21R пользовался, и на замерах светимости ламп, и на тестировании мониторов. В обоих случаях линейность оставляла желать лучшего, если говорить мягко, при том, что у усилителя с линейностью особых проблем не было, он-то вполне себе тривиален.
                                    • 0
                                      нелинейной зависимости компонент спектра светодиода от питающего тока.

                                      У ТС вроде же белые светодиоды в основном, а там люминофор и синие/уф кристаллы. Причем излучение самого кристалла наружу не выходит. Получается, что до изменения спектра кристалла при прогреве нам особого дела нет — спектр излучения люминофора меняться не должен, только интенсивность, если вдруг случается так, что при изменении спектрального состава излучения «голого» кристалла люминофор стал возбуждаться меньше/больше.
                                      Хотя, там что-то может быть и хитрее, я так, с дивана свое мнение вставил.
                                      • +1
                                        У люминофора хвост уходит в ИК.

                                        Вряд ли там будет измеримое влияние, но априори полагаться на то, что уж «а чего там может быть-то» — неверно.
                                        • 0
                                          Белых с УФ кристаллами нет в продаже, только фиолетовые в дорогих экземплярах.
                                          Почему наружу не выходит, а как же синий пик на всех графиках?
                                          • 0
                                            А в дешевых что?
                                            Пик зависит от типа кристалла? Мне казалось, это часть спектра люминофора.
                                            • 0
                                              В дешёвых синий кристалл. Зависит пик. Вот график светодиода с синим кристаллом: image
                                              А этот уже с фиолетовым: image
                                              Спектр люминофора это всё, что справа от синего/фиолетового пика.
                              • 0
                                Вспомнилось (сработал в памяти триггер на «фотодиод») — сразу после университета работал на заводе и принял участие в разработке прибора для измерения параметров фар автомобиля, в том числе и измерения частоты срабатывания поворотников. Все работало, но как выяснилось, прибор ловил пульсацию ламп освещения. Время поджимало и в Руководстве по эксплуатации опытной партии без затей записали требование: «выключить освещение на время проведения измерения» (поглядел бы я на того, кто на СТО будет бегать светом щелкать). К счастью, было немного времени после приемки комиссией и заказчик получил уже «допиленный» вариант.
                            • –1
                              Почему нельзя купить нормальный калиброванный и сертифицированный люксметр и мерять им?
                              • 0
                                Ну во первых не спортивно)))) Смотрите какой здесь полёт мысли пошёл.
                                Ну и во вторых стоит такой сертифицированных люксометр будет наверное немало.
                                • 0
                                  Нет, Вы тоже невнимательно прочитали.
                                • +1
                                  У меня их много. Нормальных, калиброванных и всё такое. Но этот прибор НЕ является люксметром и НЕ нужен для измерения освещённости. Он измеряет изменение освещённости в процентах, чего ни один готовый прибор не умеет, а мне было нужно именно это.
                                • +1
                                  Главный вопрос — как и чем калибровали свой шедевр? А то он может и погоду на Марсе показывать с таким же успехом
                                  • 0
                                    Его не нужно калибровать. Его задача — показывать изменение освещённости в процентах, всё остальное — вспомогательная информация.
                                    • 0
                                      И по спектральному отклику?

                                      Ты хоть внутрь ардуиновской библиотеки смотрел, что там компенсация ИК-компоненты делается в каком-то соответствии с даташитом?
                                      • 0
                                        Это не имеет никакого значения. Мне нужны лишь проценты падения яркости. Спектральный отклик на них никак не влияет.
                                        • +1
                                          Ага, конечно. Если лампочка не греется.
                                        • 0
                                          У Алексея несколько поверхностное отношение к измерениям.
                                          в обсуждении его обзора по мультиметру я написал: "… Ты претендуешь на объективность в своих публикациях. А такие мелочи могут свидетельствовать о поверхностном подходе к делу ;)"

                                          В данном конкретном случае — калибровка будет доказательством того, что прибор корректно измеряет именно то, что должен измерять не реагируя на иные излучения. А уж удобство использования в виде разности\суммы\среднего — это функциональное дополнение.
                                        • –1
                                          то есть ты правда веришь, что китайский датчик идеально линеен по своим параметрам? Даже очень хорошее оборудование имеет кучу поправок и ОС чтобы хотя бы+-1% «настоящих» добиться.

                                          Зачем было вообще писать такую статью? Ведь единственно важного аспекта не то, что нет — просто автор про него не в курсе. Или это рассказ «ой как круто я какой-то левый скетч прикрутил»? Где хоть что-то интересное?
                                          • 0
                                            то есть ты правда веришь, что китайский датчик идеально линеен по своим параметрам?


                                            Не знал, что Техас уже в Китае.
                                            • 0
                                              хм… точно ams? Не копия? И их правда именно в Штатах штампуют, а не в ЮВА? Надо производителю это сообщить, а то он не знает об этом.
                                              И как мне кажется говорить об оригинальности компонентов можно лишь купив их где нибудь на маузере или диджикее. Тут же я вижу китайский модуль и не более.
                                              • 0
                                                А на черта их копировать? У них всё же достаточно сложная начинка, при сохранении совместимости особо не упростишь.

                                                Когда китайцам надо дешёвый датчик — они делают какоё-нибудь своё угрёбище типа DHT22, которое врёт и глючит, зато за три копейки и паять несложно.
                                                • +1
                                                  Вы видимо не представляете себе вообще производство в Китае. В пример, как-то заказывали партию ASIC, сделали пилотную партию 100 штук — все ок. Даем добро на старт первой партии 10000 штук, сделали — летим делать приемку, а они по ТТХ не соответствуют. Ок, если договор составляли не идиоты, то берем джекичанов за хобот и заставляем переделывать. Но 10к камней это около 150к$, китайцы не идиоты чтобы просто их выкинуть. Смотрят какой функционал у камня (у нас была программируемая версия TL494 скажем так) и начинают его продавать как 494 (оригинал), т.к. качество у них все же не гавно, но как ни крути проверить ТТХ себе позволить мелкие конторы и физики не могут вот и отгребают потом.
                                                  С датчиками и прочим точно такая же история. У нас был asic и это пол беды, а если это какие-то стандартные решения типа контроллеров, датчиков, микрух и прочего, то на рынок попадает огромное количество отбраковки.
                                                  Так, что пока железка не куплена у проверенного дистрибьютора остается лишь фантазировать о ее оригинальности и шикарности.
                                          • 0

                                            Так тут же в том и вопрос, что чувствительность прибора к изменениям может оказаться нелинейной. Т.е. он может показать 1% разницы там, где ее реально 50% и 80% там где реально 3%, в завися, например, от силы светового потока. Как с этим бороться, кроме как калибровкой.

                                            • 0
                                              Сравнил с показанием дорогого профессионального поверенного прибора ТКА-ПКМ(09). Совпадает.
                                        • +1
                                          Я использую цифровой датчик света TSL2561, у него минимальное время интеграции 13 мс, а длительность одного полупериода сетевого напряжения — 10 мс. Я делаю 12 замеров подряд с надеждой, что какой-нибудь из них случайно попадёт на минимум яркости при пульсации, а какой-нибудь другой на максимум


                                          Надежда довольно беспочвенная.

                                          https://en.wikipedia.org/wiki/Integrating_ADC

                                          Интегрирующий АЦП по определению не даёт мгновенного значения измеряемой величины, поэтому хоть сто двадцать раз измеряй — ты получишь среднее по больнице, а не минимум и максимум.
                                          • 0
                                            Угу. Так и есть. Но тут пульсация скорее для развлечения.
                                          • 0
                                            Есть характеристики линейности датчика?
                                            Может оказаться, что «по приборам» изменение яркости 10%, а на самом деле 50%, или наоборот, у сенсора абсолютно точно есть линейные и нелинейные участки
                                            • 0
                                              https://yadi.sk/i/_0MJ_T4K3EWDQM

                                              Линейность у него хорошая, если в ардуиновской библиотеке с пересчётом raw data в люксы не поэкономили чуток.
                                              • 0
                                                Сравнил показания с ТКА-ПКМ. Всё нормально.
                                            • –2
                                              Желтый заголовок умиляет, шпалу тебе!
                                              • 0
                                                Что в нём жёлтого? Прибора с таким функционалом не существовало в природе до вчерашнего утра. Я его придумал и сделал. Очень удобно теперь с ним.
                                                • 0

                                                  Алексей привет, мы можем помогать с Arduino и даже какие то желёзки давать поюзать)

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

                                            Самое читаемое