Macro shot of a red 3mm LED

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

Читателям моего блога известно, что я работаю над обновлённой версией «Precision Clock» (но не спешите радоваться, до релиза ещё не один месяц). Одна из доработок этих «точных часов» коснулась дисплея, который теперь отображает время с точностью до миллисекунды. Причём я переработал его в корне, чтобы убрать мерцание, возникающее при записи работы часов на скоростную камеру.

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

Но я не особо расстроен их отсутствием, и исключение мегагерцовых сигналов лишь увеличит электромагнитную совместимость. Вот только текущая схема автоматической корректировки яркости вряд ли продолжит работать.

Closeup of the LDR on the Precision Clock
Крупный план фоторезистора в модели «Precision Clock»

Пожалуй, лучшей частью моих точных часов как раз является схема автоматической корректировки яркости. Это полностью аналоговый механизм, состоящий из всего нескольких компонентов. Но при этом он функционирует настолько чётко, что я даже не могу придумать, чтобы ещё улучшить. Он работает во всём динамическом диапазоне, начиная от яркого солнечного дня и заканчивая беспроглядной тьмой. Механизм мгновенно реагирует, но с некоторым сглаживанием из-за кривой ответа фоторезистора, и в нём нет ШИМ. При всём при этом он ещё и настраиваемый. Создание подобной схемы оказалось возможным, только благодаря принципу, по которому драйвер дисплея получает опорный ток.

Screenshot from the MAX7219 datasheet
Скриншот из спецификации к MAX7219

Так работает большинство драйверов дисплеев. Контакт (обычно обозначенный, как Iset) получает опорный ток. Этот ток передаётся, или отображается, в управляющие транзисторы каждого сегмента, где в результате умножения на коэффициент усиления транзистора определяет ток этих сегментов. Предполагаемое применение такой схемы заключается в использовании резистора, который будет определять опорный ток, и регулировке яркости дисплея посредством ШИМ. Естественно, я смог взять её за основу для создания собственной схемы регулировки яркости с использованием всего нескольких компонентов.

В случае дискретных компонентов резисторы стоят дёшево, а транзисторы дорого, но в интегральных схемах всё наоборот. Транзисторы для них совсем недорогие, а резисторы добавлять очень трудно, особенно, если вы хотите соблюсти жёсткие допуски. Если говорить о схеме, где требуется множество подтягивающих резисторов, то она традиционно реализуется в виде одного резистора для установки опорного тока, после чего этот ток везде отображается транзисторами. И когда резистор должен иметь конкретную характеристику (с допуском менее 50%), легче всего просто вывести его на отдельный контакт микросхемы, чтобы можно было подключать внешние компоненты, как в случае с драйверами дисплея.

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

Контекст

Для понимания этой статьи вам достаточно знать, что я использую микроконтроллер STM32 среднего сегмента (возможно, STM32L476).

Macro shot of an STM32L476 on a PCB
Макросъёмка STM32L476 на плате

Хорошенько всё обдумав, я принял решение управлять матрицей дисплея напрямую с контактов микроконтроллера. Используя прямой доступ памяти (DMA) микросхемы, можно настроить кольцевой буфер, который будет непрерывно отправлять сигналы на контакты ввода-вывода. Это позволит получить матрицу дисплея, не создавая на МК лишней нагрузки.

О прямом доступе к памяти

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

Современные схемы DMA настолько сложны, что их порой очень трудно понять, но в случае STM32 всё не так страшно. В кольцевом режиме при достижении конца данных, происходит возврат к началу, так что здесь мы можем установить значения матрицы в памяти, и передавать их непрерывно на порт ввода-вывода. Матрица будет продолжать работать, и к данным потребуется обращаться только для обновления дисплея.

Контакты МК недостаточно мощны для управления всем дисплеем, сила тока которого при полной яркости может подниматься до 300 мА.

Учитывая количество сегментов, любое решение, связанное с использованием для каждого сегмента отдельного транзистора, окажется непрактичным. Существуют микросхемы на базе транзисторного массива Дарлингтона, которые могут подойти для сборки серии сегментов на постоянном токе, но в конечном итоге я решил использовать стандартные буферные микросхемы (например, в стиле 74HC244) и установить на каждый контакт обычные ограничивающие ток резисторы.

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

Регулировка яркости через напряжение получится нелинейной, но это можно компенсировать. Есть микросхемы, которые работают в диапазоне от 1,8 В до 3,6 В. С помощью такой можно достаточно легко управлять сегментами, используя вариацию напряжения от минимального до максимального.

Я могу обеспечить для этих буферных микросхем отдельный стабилизатор напряжения с возможностью корректировки, и тогда добавление в цикл обратной связи ещё одного резистора позволит мне управлять этим напряжением с помощью ЦАП основного микроконтроллера.

Прекрасно. Нужно лишь установить на плату датчик освещённости, соединить всё через DMA, и у нас получится дисплей с полностью автоматической регулировкой яркости.

Однако я же не просто хотел сделать альтернативу предыдущей модели, я хотел её улучшить. И одним из минусов старой схемы было то, что датчик освещённости находился с задней стороны часов. Это вроде и не особо важно, поскольку датчик всенаправленный, но разве не лучше, если он будет направлен вперёд?

Идея

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

У любого 7-сегментного дисплея есть десятичные точки, но большинство из них не используются.

Closeup of the front of the clock
Лицевая сторона дисплея крупным планом

Ни для кого не секрет, что в случае нужды светодиод можно использовать как датчик света. Можно ли тогда задействовать эти невостребованные десятичные точки для детекции освещённости?

Я подцепил мультиметр к одной из таких точек и посветил на дисплей фонарём — результат оказался многообещающим.

Multimeter connected to the pins of the display, reading 94.7mV
Мультиметр, подключённый к контактам дисплея, показания 94.7мВ

Однако подключение 7-сегментных дисплеев организовано через общий минус, что обычно очень удобно, но в данном случае затрудняет считывание уровня освещённости со свободной точки после включения дисплея. Использование матрицы означает, что катоды сегментов необходимо поочерёдно активировать, подтягивая то к нижнему, то к верхнему уровню. Можно реализовать подключение по принципу «открытый сток», тогда при отключении цифры будет возникать высокое сопротивление. Но выбранные мной буферные микросхемы являются двунаправленными.

Теперь поговорим о том, как измерять уровень освещённости с помощью светодиода. Для этого есть несколько способов. Простейший — это просто замерять напряжение разомкнутой цепи. Поступающий на датчик свет генерирует ток, число электронов в котором прямо пропорционально количеству поступившего света. P-N переход светодиода имеет ёмкость, и проходящий через него фототок ведёт к накоплению на конденсаторе заряда, пока не будет достигнуто равновесие с утечкой тока. 

Входное сопротивление мультиметра в 1 MΩ может значительно повлиять на напряжение. Более того, равновесное напряжение имеет очень нелинейную зависимость от интенсивности поступающего света.

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

Transimpedance amplifier with a reverse-biased LED
Трансимпедансный усилитель со светодиодом, подключённым с обратным смещением

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

Тем не менее в моём замысле с использованием десятичной точки эта ёмкость оказалась губительной. Я думал, мне удастся получать сигнал с трансимпедансного усилителя в подходящей части матрицы, чтобы напряжение смещения было согласованным для каждого показания. Но в итоге стало ясно, что на ожидаемых нами частотах дисплея это не сработает. Кроме того, рассеивающий материал, закрывающий точку, поглощает много света. Я надеялся, что можно будет это обойти, подключив все точки параллельно, чтобы усреднить их выходные сигналы, но это тоже увеличивает общую ёмкость.

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

Идея получше

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

Illuminated colon separators of the clock
Разделительные двоеточия в часах

Отличие здесь в том, что эти светодиоды должны светиться, и это создаёт новую серию проблем. Хотя я уверен, что они вполне преодолимы.

Можно собрать для управления этими светодиодами кастомную плату, которая позволит регулировать их яркость посредством ШИМ. В моменты отключения ШИМ-сигнала я смогу измерять уровни освещения.

После нескольких доработок у меня получилась такая схема:

Schematic for the automatic LED
Схема подключения автоматического светодиода

Первый усилитель настроен как трансимпедансный, а второй этап служит просто для некоторого усиления сигнала. ШИМ-сигнал микроконтроллера работает с двумя состояниями и передаётся как на светодиод, так и на (ограниченную по току) базу NPN-транзистора. Когда сигнал ШИМ находится на высоком уровне, он обеспечивает ток для анода светодиода и также активирует транзистор, зажигая этот светодиод. Если же сигнал на низком уровне, транзистор отключён, и анод, по сути, оказывается близок к нулю.

В трансимпедансном усилителе есть один интересный момент. Дело в том, что неважно, как именно к нему подключён источник тока. Если вы не используете обратное смещение, а просто подключаете его к земле, то разворот светодиода приведёт к инвертированию выходного сигнала. Тем не менее, если операционные усилители (ОУ) питаются от одного источника, нужно быть осторожным. Естественно, низковольтный «rail-to-rail» операционник будет предпочтительней, так как генерация отрицательного напряжения создаёт дополнительную нагрузку. Если же усилитель не может выдавать отрицательное напряжение, нужно следить за тем, чтобы сигналы оставались положительными.

Two ways of wiring up a transimpedance amplifier
Два способа подключения трансимпедансного усилителя

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

Для усиления сигнала можно подключить все 4 светодиода параллельно. Если все они из одной партии, то проблем с этим возникнуть не должно.

Максимально доступная нам частота ШИМ ограничена ёмкостью. Когда сигнал оказывается на нуле, возбуждённый светодиод медленно затухает до значения, пропорционального окружающему освещению. По факту окружающему свету пропорциональны не только итоговая яркость, но и скорость затухания. По сути, нам не нужно ждать окончательного установления уровня сигнала — можно просто фиксировать его через фиксированные промежутки времени.

Вот этот эффект, снятый на слегка трясущуюся камеру:

Здесь частота ШИМ была 1 кГц. И хотя это намного медленнее скорости, с которой должен работать основной дисплей, для управления двоеточиями такой частоты вполне достаточно.

Значения параметров я выбрал путём долгих проб и ошибок. Кстати, я не уточнил динамический диапазон, с которым работаю. Здесь у меня где-то 16 экспозиционных ступеней (EV) между солнечной уличной сценой и ужином при свечах. То есть в первой сцене примерно в 32 000 раз больше света, чем во второй, иначе говоря, разница где-то в 45 дБ.

Один из вариантов расширить этот диапазон — применить логарифмическую кривую усиления с помощью второго ОУ. В случае наших низковольтных усилителей «rail-to-rail» это будет непросто, но необходимо, если мы хотим получить полный динамический диапазон. АЦП в микроконтроллере 10-битный, значит, логарифмическая кривая усиления преодолеет низкую битовую глубину. Но прежде, чем приступать к этой доработке, я решил оценить, можно ли реализовать её, не добавляя процессору излишней нагрузки.

Автоматизация

Испытываешь некую особую удовлетворённость, когда удаётся задействовать практически все возможности микроконтроллера. Зачастую микросхемы оснащены кучей всяких фич, из которых одновременно ты обычно используешь лишь часть. Но иногда подворачивается случай, где МК идеально подходит, и всю его периферию можно задействовать разом.

Микросхемы STM32 среднего уровня имеют огромное число каналов DMA, и к этому моменту я уже использовал почти все из них. Например, несколько каналов ушло на дисплей, так как для всей матрицы задействуются несколько портов ввода-вывода. Передача по USB и флэш-память QSPI используют DMA при необходимости. Особенно активно прямым доступом к памяти пользуется UART, так как в более продвинутых моделях STM32 есть механизм прерывания по «Character Match» (CMIE). Он позволяет активировать прерывание при завершении строки и сбрасывать DMA, чтобы считывать следующую строку. Процессор при этом задействуется, только когда поступают готовые для обработки данные. Вполне неплохо.

В моём случае ШИМ генерируется по таймеру. Нам нужно на определённой фазе волны ШИМ фиксировать напряжение АЦП. Затем это показание нужно передать в память. Собрав определённое число таких показаний, можно будет вычислить по ним среднее и отправить его на ЦАП.

Все каналы DMA довольно однозначны, и с каждым из них можно использовать только конкретные таймеры и периферию. Мне пришлось немного вмешаться в эту схему и освободить Timer 2, чтобы назначить его на генерацию ШИМ. У таймера есть несколько каналов, один из которых управляет скважностью ШИМ. Другой канал, хоть и тактируется и сбрасывается тем же таймером, устанавливается на другое значение сравнения. АЦП настроен на активацию при этом событии сравнения, а канал DMA отдельно настроен сбрасывать значения с АЦП в память. В прерываниях DMA можно усреднить показания и отправлять значения яркости на ЦАП.

Если частота ШИМ равна 1 кГц, и мы хотим усреднить сотню измерений, то яркость дисплея будет обновляться с частотой 10 Гц. Звучит вроде не сильно плохо, но по факту при изменении уровня освещения наблюдаются рывки. Вместо этого можно настроить ещё один таймер и канал DMA на отправку значений в ЦАП. В прерываниях на середине передачи и в её конце можно делать последние измерения, вычислять новое значение яркости и генерировать гладкую кривую значений для отправки в ЦАП. При необходимости можно усреднять целую секунду данных и делать прерывания только раз в секунду, что создаст совсем незаметную нагрузку. Получится очень плавный переход, хотя и с заметной задержкой.

Итак, моя эпопея с поиском правильной конфигурации завершилась. Мне удалось реализовать автоматический механизм корректировки яркости без нагрузки на процессор с определением уровней освещённости при помощи одного из светодиодов дисплея.

Macro shot of a 3mm LED
Макроснимок светодиода 3 мм

Изменение скважности ШИМ слегка влияет на показания, так что нужно это компенсировать. Малые коэффициенты заполнения не возбуждают светодиод полноценно, и его чувствительность падает. Но на макетной плате эта система выглядела очень обещающей.

В STM32L476 даже в качестве периферии есть операционные усилители. Крайне удобно!

Заключение

Несмотря на всю продуманность и эффективность получившегося дизайна, я решил его не использовать.

Собрав прототип часов с этой схемой контроля яркости, я всё-таки счёл её недостаточно хорошей.

И дело не в динамическом диапазоне — его можно расширить. И не в чувствительности — она вполне приемлема. Проблема, из-за которой устройство получилось никчёмным, в однонаправленности светодиодов. Я даже счистил их макушки, но и без них конус видимости оказался очень узким. Это означает, что простой наклон часов вверх может привести к максимальному повышению яркости дисплея, а тень от вашего лица — к его максимальному затемнению. В предыдущей модели я использовал фоторезистор, а он всенаправленный, причём настолько, что даже махание перед ним рукой практически никак на него не влияет.

Один из вариантов исправить мою схему — это установить на заднюю стенку дополнительные светодиоды, направленные в разные стороны. Среднего по их показаниям должно быть достаточно. Но если уж добавлять датчики, то тогда надо брать сразу фотодиоды, а это сделает саму идею использования светодиодов для детекции освещённости бессмысленной.

Короче, поскольку я решил сделать так, чтобы каждый аспект обновлённых часов был не хуже, а то и лучше прежнего, новая модель будет завершена ещё не скоро. Зато, когда я её всё же закончу, это будут крутейшие настенные часы в мире! 

Комментарии (44)


  1. randomsimplenumber
    03.08.2025 10:47

    Сколько усилий. Для экономии на фототдатчике ценой в 5 центов?


    1. Astroscope
      03.08.2025 10:47

      Хотя готовое изделие и доступно к покупке как коммерческое изделие, мне этот проект кажется принципиально хоббийным, а не промышленным для мелкой или крупной серии. Тогда усилия нужно оценивать не в разрезе экономической целесообразности, а исключительно с точки зрения иррациональной, субъективной и самоценной только для автора проекта ценности проведенной для собственного удовольствия работы. В таком смысле, считаю, ценность проекта высока.


      1. randomsimplenumber
        03.08.2025 10:47

        Ну, решение тривиальной задачи нетривиальными средствами, оно может для автора и ценно, а у стороннего наблюдателя вызывает удивление. Это же часы, да? Зачем в часах такая безумная скорость обновления? Можно же и полностью статическую индикацию сделать. А это креативное измерение яркости.. В корпусе часов совсем-совсем нет места для фоторезистора?


        1. Astroscope
          03.08.2025 10:47

          Я так и говорю - ценно [только] для автора конструкции.


        1. engine9
          03.08.2025 10:47

          Такие часы можно ставить в кадр к камерам с высоким значения fps.
          Но зачем?


        1. sim2q
          03.08.2025 10:47

          Зачем в часах такая безумная скорость обновления?

          так по условиям задачи же!

          меня кстати удивляют эти вопросы словно в школе мы не писали тыщи раз:
          Дано:

          чтобы убрать мерцание, возникающее при записи работы часов на скоростную камеру.

          Можно же и полностью статическую индикацию сделать.

          на фото в статье индикатор скорее всего в виде матрицы где электроды смежные и по другому не сделать


          1. randomsimplenumber
            03.08.2025 10:47

            Можно взять другой индикатор..


            1. sim2q
              03.08.2025 10:47

              и 100500 ножек - это уже совсем другой проект и иногда индикатор по цвету/форме - уникальная - основополагающая штука в задумке...


        1. Dozer88
          03.08.2025 10:47

          Когда я вижу мерцающие индикаторы (а периферическим зрением оно очень заметно), сразу возникает мысль, что это какая-то дешевая разработка студентов-недоучек... Минимум килогерц обновления всего дисплея считаю приемлемым, а лучше - статика...


        1. isden
          03.08.2025 10:47

          Ну так for fun же =)

          Это примерно как реализовать какой-то красивый и эффективный алгоритм в коде в своем пет проекте (который технически можно заменить, скажем тупым деревом if/else), при этом зная что его может быть увидит полтора анонимуса.


    1. acc0unt
      03.08.2025 10:47

      Во-первых это попросту круто. Успешно использовать светодиод как датчик - схемотехнический флекс.

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


      1. randomsimplenumber
        03.08.2025 10:47

        можно в очень большой партии на эти самые 5 центов купить себе дом.

        Закладываться на недокументированные особенности.. В индикаторе из другой коробки этот эффект может работать совершенно иначе. Вплоть до никак. Если речь о настолько большой партии - датчик будет стоить не 5 центов, а 0.5.


        1. Astroscope
          03.08.2025 10:47

          А еще можно на 5 центов поднять цену готового изделия. Не готов сходу оценить эластичность спроса, но бездоказательно считаю, что этот прием в данном частном случае не повлиял бы на продажи измеримо сильно.


  1. TrykinSchultz
    03.08.2025 10:47

    Круто конечно. Но проще взять цифровой датчик и разместить его сверху или сбоку.


  1. TrykinSchultz
    03.08.2025 10:47

    Пытаюсь понять, почему стандартные драйвера не подошли? Если взять "народный" MBI5026 на частоту в 25 Мгц, то 5 микросхем в каскаде сможет теоретически обновлять 8 сегментов где с частотой 300 кГц. Но даже если 100 кГц то, это заведомо больше, чем любая скоростная камера. Но на два последних сегмента можно и отдельный канал пустить, остальные так часто обновлять не надо. А аппаратный SPI заведомо грузить контроллер менее, чем самому дергать ножками. Или я чего то не учел?


    1. ahdenchik
      03.08.2025 10:47

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


      1. TrykinSchultz
        03.08.2025 10:47

        Так тут то же. Подаешь на output enable шим и вот тебе контроль яркости. 7219 в общем со своей спецификой, динамическая индикация, общий катод... ну и он совсем не дешевый.

        Ну то есть я имел в виду взять не драйвер светодиодных семисегментных индикаторов, а просто драйвер светодиодов. Их полно всяких разных. В данном случае это просто сдвиговый регистр с контролем тока.


        1. ahdenchik
          03.08.2025 10:47

          Там оно софтовое, через переданную через SPI команду


  1. firehacker
    03.08.2025 10:47

    напряжение которого при полной яркости может подниматься до 300 мА.

    O_O


    1. Bright_Translate Автор
      03.08.2025 10:47

      Спасибо, исправил.


  1. Superzoos
    03.08.2025 10:47

    Когда я получаю задачу в котрой что-то должно работать быстрее, чем за 1 миллисекунду и с железной точностью , то я сразу кладу глаз на ПЛИС. Не думали? Или МК справляется с огромным запасом?


    1. firehacker
      03.08.2025 10:47

      Не думали? Или МК справляется с огромным запасом?

      Это же перевод, тут нет автора.


      1. Superzoos
        03.08.2025 10:47

        Не обратил внимание:)


    1. LaoWai2000
      03.08.2025 10:47

      А зачем? Например, в своё время на пике без аппаратного уарт с 1 мипсом можно было реализовать передатчик DMX512 для включения, к примеру, дежурного света на сцене не включая огромный световой пульт.


    1. Dozer88
      03.08.2025 10:47

      Ну это же дорого, размер платы больше, знаний надо больше, поддержка итп. А современные МК за 1мс могут сотни тысяч тактов отработать. И периферия у них зачастую может сделать сложные вещи в автоматическом режиме.


  1. vadimk91
    03.08.2025 10:47

    Как все сложно в современном цифровом мире :) У меня настольные электронные часы, собранные в 1988 году, регулируют яркость автоматически, датчик -фоторезистор (скорость реакции там совершенно не нужна). Правда для индикации в часах используется ИВЛ, яркость регулируется просто изменением подаваемого напряжения, если мне не изменяет память, оно от 10 до 27 вольт.


    1. randomsimplenumber
      03.08.2025 10:47

      Как все сложно в современном цифровом мире :)

      В современном мире всё очень просто ;) Скорее всего, есть готовый чип, который решает 99% задачи. Тонкость в том, как решить оставшийся 1%


      1. venanen
        03.08.2025 10:47

        Вторым чипом. Дело не в том, чтобы это решить - с современной схемотехникой такая задача - студенту 3 курса условного МИРЭА на два вечера.
        Дело в том, как эту задачу решать - это хоббийный проект, в нем нет цели сделать срочно задачу к дедлайну, а чтобы поразбираться, покопаться, научиться, сделать необычно.

        P.S. Было бы прикольно посмотреть, до каких частот можно разогнать газоразрядные лампы-индикаторы, и какие штуки нужно для этого провернуть.


  1. sim31r
    03.08.2025 10:47

    16 экспозиционных ступеней (EV) между солнечной уличной сценой и ужином при свечах. То есть в первой сцене примерно в 32 000 раз больше света, чем во второй, иначе говоря, разница где-то в 45 дБ.

    В идеале еще больше ступеней, для безлунной ночи например, чувствительность глаза возрастает в миллиард раз, света совсем немного надо, иначе индикатор будет слепить.


  1. LaoWai2000
    03.08.2025 10:47

    Во-первых, СД управляют имя током, а не напряжением. Во-вторых, использовать драйвера шины с регулируемым питанием возможно будет плохой идеей из-за наличия защитных диодов на входах. Трансляторы уровней могут помочь в такой ситуации. В-третьих, СД нормально работают как датчики света, но их надо калибровать + элементарно работать с ними как с генераторами тока в паузах коммутации матрицы. ОУ, в принципе, не нужны. Нужны или точные термо стабильные конденсаторы для интегрирования тока и простая схема или какие угодно конденсторы и схема посложнее.


  1. Panzerschrek
    03.08.2025 10:47

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


    1. osmanpasha
      03.08.2025 10:47

      Наверное так в ГОСТах закреплено, старые ламповые светофоры же тоже никак не регулировались


    1. ailcat
      03.08.2025 10:47

      Потому что Техрегламент (читай ГОСТ) регламентирует только разрешенный диапазон яркости ("не менее, но не более"), независимо от засветки табло светофора.
      С регулировкой яркости светофоры делались, но не прижились (т.к. драйверы для LED-ламп не умеют в динамическую регулировку яркости - приходилось "изобретать велосипед" ценой замороченности схем. Что отнюдь не уменьшало себестоимость - а в любых госзакупках рулит исключительно цена).


    1. Fox_Alex
      03.08.2025 10:47

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


      1. Panzerschrek
        03.08.2025 10:47

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


        1. randomsimplenumber
          03.08.2025 10:47

          Разве что он совсем неправильно установлен. Это же не прожектор.


  1. Fox_Alex
    03.08.2025 10:47

    Я когда-то еще в школе сделал робота для езды по линии. И датчик у него был только из светодиодов. Никто не мог понять как он вообще работает)

    Я тогда использовал тот прикол, что обратносмещенный диод это емкость. А в светодиоде эта емкость разряжается на свету быстрей, чем в темноте. В те времена АЦП вовсюда еще не ставили, контроллер был дремучий. Работало все просто: и катоды и аноды всех светодиодов шли на пины контроллера. Все диоды кроме одного зажигались, а этот один включался на какое-то время обратно (для зарядки) и затем пин превращался во вход и таймер считал за какое время сигнал вернется обратно в ноль. Это время и было значением яркости. Черную полосу от белого фона отличить было не сложно. Дальше все повторялось уже со считыванием следующего диода. Всего их в сенсоре было штук 15 вроде. Но там лимит был в количестве свободных ног контроллера, а не в быстродействии.


    1. sim2q
      03.08.2025 10:47

      интересное решение как и в статье, но хорошо бы ещё и температуру учитывать


  1. tempart
    03.08.2025 10:47

    У автора или кликбейт, или он реально не понимает разницы между "светодиодом" и "схемой со светодиодами".
    Ожидал увидеть реализацию светодиода, а тут...


  1. Aleks3700
    03.08.2025 10:47

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


  1. alcotel
    03.08.2025 10:47

    Давно хотел проверить чувствительность светодиодов к освещению. А тут как раз совпало несколько событий - вышла эта статья, я получил пачку выводных светодиодов с али, и с Питерского неба стабильно светит 1 kW/m². Результаты:

    Подробности здесь

    Выводные 3-миллиметровые светодиоды неизвестного производителя. Цветные - слегка рассеивающие, белый и ИК - прозрачные. ИК скорее всего направленный с углом в 30°.

    Красный давал самый плохой результат. 3 штуки проверил, у одного спилил почти весь корпус, но всё примерно повторялось.

    Диоды 0603 без светофильтров и рассеивателей, L-C191KRCT, KYCT и GCT. Размер кристалла у них на вид одинаковый. Белые осветительные диоды 2835 - HL-AM-2835H489W-S1-08HL-HR3, однокристальные с двумя разными цветовыми температурами.

    Первое измерение - в фотовольтаическом режиме с нагрузкой на внутреннее сопротивление вольтметра 10 MΩ. Свет солнечный рассеянный, довольно много чистого голубого неба.

    Второе измерение - в режиме фототока. Прямой солнечный свет. Нагрузка - амперметр на 200 μA.

    Фоторезистор на второй картинке - 200 kΩ, неизвестного производителя с али. При освещении в первом случае я получил 320 Ω , во втором 130 Ω. При комнатном освещении - 1,8 kΩ. Фоторезистор нелинейный, и из-за этого имеет огромный динамический диапазон.

    В целом что-то измерять можно, но непредсказуемо. Внутри индикатора рассеиватель, и обычно индикатор ставят под светофильтром. Поэтому вообще не факт, что заработает.


    1. Grey83
      03.08.2025 10:47

      Белые осветительные диоды

      А если удалить с них аккуратно люминофор (растворителем или чем там он может снят так, чтобы не разъело весь остальной светодиод), чтобы лучи солнца на кристаллы смогли попасть напрямую?

      И ещё бывают ультрафиолетовые с бесцветным корпусом. Их тоже неплохо было бы проверить: может как раз у них и будет самая большая чувствительность.


      1. alcotel
        03.08.2025 10:47

        Растворил в 646 до состояния синих светодиодов.

        И ещё вспомнил про спектр. В солнечном свете много всего невидимого, и для целей подстройки яркости оно нам не нужно. Поэтому ещё провёл измерения в 10 cm от тёплой LED-лампы. Итого:

        УФ-светодиод даже пробовать не буду - 99%, что видимый свет они не почувствуют. У полупроводников аналогичная красная граница фотоэффекта есть, на сколько я понимаю.


  1. Jenny41
    03.08.2025 10:47

    The scalability solutions described here feel practical and well-tested — this could serve as a blueprint for smaller AI startups. Reference:3A