Самодельный люксметр 2.

Модернизация люксметраВ предыдущей статье я написал о изготовление самодельного люксметра на Ардуино.

Настала пора довести его до ума и реализовать все задумки.

Модернизация люксметра

  1. Убрал выносной датчик внутрь корпуса люксметра
  2. Заменил датчик BH1750 на TSL2561
  3. Сделал несколько режимов отображения, в том числе режим отображения пульсаций в виде графика. Задействовал вторую кнопку для переключения между режимами.
  4. Добавил функцию включения/отключение подсветки дисплея по кратковременному нажатию кнопки питания.

Модернизация люксметра

 Изменение в схеме

Кнопку переключения режимов перебросил с 10-го цифрового входа на 3-й, чтобы этой кнопкой можно было управлять по внешнему прерыванию так же и кнопкой питания.

Вывод RST дисплея переключен с 3-го на 10-ый

Схема самлдельного люксомтра

 

Изменение работы люксметра

Кнопка «MODE» переключает режим измерения/отображения

Режим 1. Измерение освещенности и коэффициента пульсаций

Для измерения пульсаций, датчик работает в режиме с самым коротким временем работы (13мс), в течение примерно 1 сек. делает серию измерений. Коэффициент пульсаций это разница между минимальным и максимальным значением выраженная в процентах

Режим 1 работы люксметра

Режим 2. График пульсаций.

Пульсации отображаются в виде графика.

Режим 2. График пульсаций

 

Режим 3. Только освещенность

В этом режиме датчик переводится в режим максимальной точности измерения (время измерения 403мс). Пульсации с таким временем измерения не определяются, поэтому выводится только значение освещенности

Режим 3. Освещенность с максимальной точностью

 

Управление подсветкой дисплея

Кратковременное нажатие кнопки PWR при работающем люксметре включает/отключает светодиодную подсветку дисплея

Включение подсветки дисплея

Тестирование прибора

Сравнение проводил с прибором Эколайт-1

Освещенность выходила немного ниже. В среднем на 5-10%. Скорее всего причина в том, что датчик у Эколайта имеет сферическую линзу светорассеиватель и на него попадает больше света. В будущем, если нужно увеличить точность измерения, можно откалибровать прибор.

Вот с пульсациями все вышло хуже. На люминисцентных лампах Эколайт показывал 40%. Мой прибор только 15%. Все верно — время измерения 13мс явно не достаточно для нормального определения пульсаций даже на 50-100Гц.

Дома протестировал прибор на светодиодном драйвере в настольной лампе. Драйвер под нагрузкой выдавал на мультиметр около 1В на шкале переменного напряжения при постоянке 20В. Если поставить на выходе дополнительный кондер на 1000мкФ, переменка на выходе уменьшается до 0.4В. При 2000мкФ до 0.25В

Люксметр показал пульсации 12%, 5.3% и 3% соответственно.  То есть при измерении пульсаций частотой 50 и 100Гц можно сравнивать их величину, хотя для более точных показаний нужны аналоговые фотодиоды с высокой скоростью измерения, как в этом проекте.

Для моих экспериментов со светом прибор оказался вполне пригодным.

Фото окончательной версии прибора

Модернизация люксметра

Полезные ссылки

Коту сделал телевизор в виде кормушки за окном, поэтому на этом этапе он слегка выпал из жизни

cat110

cat112

cat111

Если нужно проверить I2C устройство

Сканер I2C

Обновил версию скетча!!!

  1. Дисплей перевел на библиотеку u8glib
  2. Убрал режимы сна и экономии питания. Теперь питание должно включаться аппаратной кнопкой с фиксацией
  3. Первая кнопка вкл/выкл прошивку
  4. Вторая кнопка переключает режимы экрана
Новый скетч люксметра v2.1

Библиотеки к проекту

Скоро напишу статью про использование датчиков MAX44009

 

Скетч люксметра на TSL2561
Скетч люксметра на TSL2561
luxometr_v1.1.ino
Version: 1.1
11.1 KiB
855 Downloads
Детали
Сканер I2C
Сканер I2C
i2c_scanner.ino
2.0 KiB
494 Downloads
Детали
Люксметр v2.1
Люксметр v2.1
luxometr_v2.1.zip
Version: 2.1
4.0 KiB
274 Downloads
Детали
Вы можете оставить отзыв или трекбек со своего сайта.

29 комментариев на «Самодельный люксметр 2.»

  1. Ден:

    Спасибо за статью,очень интересно.
    Можно узнать почему заменили датчик BH1750 на TSL2561 ?
    я уже заказал себе пару 1750.

    • Alexey Alexey:

      В основном, TSL2561 имеет минимальное время измерения 13мс, BH1750 — 40мс
      Для измерения пульсаций TSL лучше.
      Ну и два сенсора делают TSL более точным

  2. Ден:

    Т е для измерения светодиодных ламп,как я понял, вполне подойдут?

  3. Ден:

    Алексей, спасибо!

  4. Похоже пульсации и была основная фишка, жалко что точность храмает. Подскажите а в чем затыка повесить фотоэлемент на аналог и снимать показания быстрее чем с частотой 13мс ?

  5. […] Для тестирования применяю стрелочный прибор в режиме измерения переменного напряжения и самодельный люксметр, измеряющий пульсации светового … […]

  6. snag:

    Алексей! 5110 и tsl2561 питается и управляется 3,3v.
    Но плата Arduino у вас по ссылке 5-вольтовая (как и у меня).
    Для этого рекомендуют преобразователи уровней. Не попалится при таком включении периферия? Или все таки плата 3-вольтовая? Вы запитываете схему со стороны USB контроллера. Есть ли разница с пином с длинной стороны? (они звонятся накоротко). И достаточно ли питания 3,7 v без DC преобразователя (если плата 5-вольтовая)?
    Хочу повторить ваш проект. Терзают сомнения. Спасибо

    • Alexey Alexey:

      У контроллера я перешиваю фьюзы-биты отвечающие за контроль напряжения питания.
      Arduino Pro Mini 5В после этого нормально работает начиная от 3.3В. Логические уровни там тоже получаются 3-х вольтовые.

      Разница в питании есть. Нога RAW идет на встроенный стабилизатор. Я подаю на ногу USB контроллера, который идет прямо на ATMegу.
      В трех местах такая схема уже давно успешно трудится

  7. snag:

    Огромное спасибо за оперативный ответ. Ведь видел Вашу ссылку на mysku ((.
    Я правильно понимаю, что плата после перепрошивки превращается в 3-вольтовую да еще с внешней частотой 16? И тогда та же паранойя — для ее питания не много не стабилизированного источника 3,7 — 4,2 в?
    Программатор закажу сейчас же. Читал, что ардуину можно использовать как ISP программатор. Нельзя ли на базе более взрослой платы (например MEGA 2560 — имеется) сделать нужную прошивку Pro Mini?
    И последний вопрос (ответ на который я пожалуй уже знаю, но все же) — если мне необходимы логические уровни 5в. в комплексном проекте, то для вашей части схемы нужно добавить преобразователь уровней (уже заказал) и стабилизатор 3,3в ?

    • Alexey Alexey:

      Оригинальная плата Arduino Pro Mini 3.3V работает на 8Мгц.
      На самом деле все ответы в Даташите на Atmega 328:

      Operating Voltage:
      ? 1.8 - 5.5V

      Speed Grade:
      ?0 - 4MHz@1.8 - 5.5V, 0 - 10MHz@2.7 - 5.5.V, 0 - 20MHz @ 4.5 - 5.5V

      То есть атмеге точно ничего не будет, просто она не будет гарантированно работать на 3.3В/16МГц.
      Может, например, уходить в перезагрузку, но мои все стабильно работают.
      Но подавать питание напрямую до 5.5В вполне безопасно. По TTL уровням тоже довольно большой допуск по напряжениям.

      MEGA 2560 паботает на Atmega2560, который не совместим по выводам с Atmega328. Поэтому как минимум номера портов нужно будет поменять.
      Кроме того у 2560 больше ОЗУ и если программа большая, то не факт, что будет работать на младшей Arduino.

      Перепрошивать одну ардуину или голый Atmega328 через другую можно. Есть подробные инструкции в интернете.

      Если все делать по правилам — то преобразователи логических уровней нужны. Но на деле многие устройства работают на 3 и 5В логики.
      Поэтому сперва нужно попробовать. На деле я ни разу этот преобразователь не использовал.

  8. snag:

    Спасибо Алексей за вразумительные ответы на дилетантские вопросы. Действительно контроллер и 3 и 5 в. распознает как HIGH. ведь единица у него от 2,5в. Разница МЕГИ и МИНИ мне понятна. Я имел ввиду использовать МЕГУ как «Arduino as ISP» (пример с USBASP Вы привели как частный случай и прошивку можно залить без специального программатора?)
    Набрал ссылок по теме (есть даже заброшенный SinaProg где нужные фьюзы можно указать из ГУИ нужно только вытащить hex из кэша IDE)вечером буду изучать.
    Еще раз большое спасибо — Вы рассеяли мои сомнения!

  9. Зачем изобретать, можно использовать фотоаппарат. При снимке он определяет освещенность, нужно только её обратно посчитать по параметрам снимка, вот пример онлайн как это делается : http://www.gidroponika.su/gidroponika-teorija.html/osvewenie/163-kak-izmerit-osveschennost-pomescheniya-bez-lyuksmetra.html

    • Alexey Alexey:

      Пользоваться люксметром для измерения освещенности на порядок удобнее.
      Не нужно ничего пересчитывать.
      К тому же фотиком вы получается отраженный свет, а не прямой падающий.
      Ну и, если вы читали статью, уровень пульсаций вы как будете мерить?
      При помощи видео? )))

  10. Егор:

    Вообще-то то, что свет отраженный это учитываться должно (если вы опять же там читали 🙂 ). В вики написано (конечно, это не постулат), что фотоаппараты «считают», что от белого листа они получают 18 % отраженного света. Думаю, это учитывается в том расчете. Т.к. имею и фотоап. и люксметр (правда дешевый, китайский +- километр 🙂 ) значения в пределах 20% совпадают (измерял только дома зимой, не на улице, там освещенность больше, погрешность может быть больше).

    На счет пульсаций… Если снять видио… Потом покадрово проанализировать… …. … 🙂

  11. snag:

    Здравствуйте.
    Пытаюсь повторить Вашу конструкцию в оригинале.
    Сначала скетч luxometr_v1.1.ino не компилировался.
    Не хватало библиотеки Arduino_sensor. Несуществующий класс tsl.enableAutoGain заменил на tsl.enableAutoRange.
    При инициализации дисплея стандартной библиотекой порядок пинов почему то не соответствует схеме зеркально Adafruit_PCD8544(10, 4, 5, 6, 7) вместо 7,6,5,4,10.
    На экране ничего нет, в компорт данные поступают, но напряжение батареи показывает — 0в.Показания датчика есть, режимы переключаются.
    Транзисторы как у Вас (только индекс С).
    При загрузке стандартного примера pcdtest, картинка есть но не устойчива.
    При запуске, напряжение на VCC дисплея 2в. Если подать питание напрямую с батареи (акк от ноутбука 3,7в, на момент испытаний 4,1в) на VCC, то при его снятии оно остается 2,7в, картинка остается до перезапуска. Как будто транзистор не полностью открывается.
    Схему естественно проверил-прозвонил. Плату прошил фьюзами и бутлодером как в статье на этом сайте. Помогите, где я ошибаюсь?

    • Alexey Alexey:

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

      Я скоро буду делать версию 1.2 с учетом некоторых хотелок и замечаний.

      • igor:

        Алексей подскажите как подобрать значения контрастности?
        собирая ваш прибор наступаю на те-же грабли как snag,
        и вопрос по пинам дисплея, их нужно зеркалить?

  12. igor:

    Немного разобрался.
    у вас индикатор на синей плате, у меня на красной
    выводы нужно зеркалить, рассмотрел распиновку на ваших
    фотографиях.
    Я, так понял на контраст у вас обратная связь с датчика,
    он у меня пока показывает ноль,
    на время настройки выставил контрастность у меня нормальное значение 55
    // display.setContrast(cl);
    display.setContrast(55);

    • Alexey Alexey:

      Контраст либо обратная связь с батареей, либо константа. Подбирайте опытным путем, я думаю в разных экранах может быть по разному

  13. igor:

    TSL2561 так и не увидел приборчик.
    куда рыть?

    • Alexey Alexey:

      Попробовать сканер I2C портов. Должен найти датчик

      Если не наше, то рыть в сторону правильности подключения, исправности датчика и согласование уровней I2C 5В/3.3В (Например, я бы попробовал запитать Atmegу и датчик от 3.3В

  14. Igor:

    Алексей Спасибо!
    подозрение на датчик, заказал другой,
    по версии 1.2 не расскажите что нового ждать,
    может что прикупить заранее?

  15. Алексей:

    Собрал приборчик.Дисплей красный.Те же грабли что у snag-отсутствие библиотек,перестановка пинов

    (Adafruit_PCD8544 10,4,5,6,7 вместо 7,6,5,4,10).С контрастом засада,пока не забил во всех условиях 55,думал шо

    уже шото сдохло(в программировании полный 0).Добавил платку зарядки аккумулятора с али на TP4056.TSL2561

    запитал через резистор и 133й стабилитрон(на всякий случай-на платке выход 4,2В).Пришлось изменить подключение

    т2(К на LIGHT(в синем дисплее BL), Э на минус питания) изза полярности подсветки.Дисплей и arduino pro питаются

    от батареи без каких либо согласований по уровню.На arduino впаял штырьки для возможного программирования(т.к.

    он без USBконтроллёра-пригодилось).Корпус-какаято коробочка-всё очень хорошо влезло.Крепление платок

    термоклеем,индикатор посажен на медную проволоку(закреплена холодноц сваркой),для лёгкого снятия.Индикатор и

    датчик закрыты прозрачным пластиком.Выяснилось что датчик при перекрытии пластиком занижает на 10%.Нашол прибор

    mastech ms8229 с люксметром(гдето на сайте было описание).Разница показаний с самоделкой +35-40%.Исправил в

    отображении display.print(l1*14/10); показания стали похожими, но разница есть всё равно, особенно на низкой

    освещённости.Транзистор на питание индикатора, мне кажется вообще не нужен, подключал без него-выигрыша по току

    потребления нет(сон 2,5-2,7ма, с подсветкой 25,6ма, без 12,5ма).Заморочки с контрастом от батареи мне кажется

    тоже лишние.Автор порадовал, конструкция зер гут, спасибо от души.Себе сделал для экспериментов со

    светодиодами.

  16. Дмитрий:

    Подскажите, какое максимальное значение удавалось снимать с TSL2561 ?

    Использую библиотеку Adafruit, в режимах 101, 12 ms (усиление откл.) максимум измеряет 7000 лк, потом насыщение. В режиме 402 ms — максимум 4000 лк. Включение/отключение усиления не влияет на предел.
    Не пойму, это датчик некондиция или так и должно быть ? В даташите, вроде, другие цифры.

    • Практика показала, что максимальный уровень освещенности для датчика BH1750 54612 люкс, а не 65535 как написано в даташите.
      Выше 54612 значение просто не поднимается. Проверял на 3-х своих датчиках.

      Может кто посоветует датчик с более высокой верхней границей измерений?

      • Alexey Alexey:

        У датчиков освещенности можно выставлять разные режимы по точности, времени измерения и т.д.
        Если нужен датчик с большим диапазоном то это MAX44009
        0.04 — 100000 лк

        Можно поставить два одинаковых датчика рядом, но один через фильтр, ослабляющий освещенность, например, в 10 раз. Тогда диапазон измерения еще расширится

  17. serenya:

    Здравствуйте. Подскажите пожалуйста почему отказались от режима сна? Батарейку жрет или проблемы с выходом из сна? У меня после включения выходит только 1 раз, включаю, выключаю и все, не реагирует. Досадно, вчера только получил платы, собрал, а когда дошел до прошивки увидел новую версию.

Ваш отзыв