«Камера» из светодиодов

Original author: Udo Klein
  • Translation

В этой заметке речь пойдет о том, как массив светодиодов может быть использован в качестве «камеры» очень низкого разрешения (20 пикселей). Практического смысла в этом немного, но опыт применения светодиодов в качестве фотодатчиков может оказаться для кого-то полезным. В работе используется плата Arduino Blinkenlight Shield, изначально предназначенная для демонстрации световых эффектов.


Я упоминал о возможности подключения катодов всех светодиодов к шине +5 вольт. Сейчас расскажу, для чего эта возможность сделана [прим. перев.: автор статьи является разработчиком описанного шилда]. Этот эксперимент показывает, как превратить светодиоды в датчики освещенности. Так как Blinkenlight Shield содержит 20 светодиодов, его можно использовать как 20-пиксельную «камеру».

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

Теперь светодиоды будут работать как фотодиоды. Так как они предназначены для излучения света, фотоприемники из них получатся неважные, фототок будет очень мал. Кроме того, число аналоговых выводов контроллера обычно ограничено, в то время как цифровых гораздо больше. То, что цифровые КМОП-входы имеют очень высокое сопротивление, дает нам другой путь снятия сигнала со светодиодов, который мы сейчас рассмотрим. Идея заключается в обратном смещении светодиода путем вывода на порт логического «0». В этом режиме светодиод не проводит ток и ведет себя как конденсатор. Когда он зарядится, мы переключаем вывод в Z-состояние, и наблюдаем, что произойдет. Если диод освещен, возникает очень малый фототок, который будет разряжать емкость. Чем выше освещенность, тем больше сила тока, и тем быстрее происходит разряд. В определенный момент времени вход зафиксирует переход из состояния «0» в «1». Измерение времени, прошедшего до момента этого перехода, даст возможность определить освещенность.

Если вы хотите детальнее разобраться в описанных явлениях, можете прочитать эту работу: www.merl.com/papers/docs/TR2003-35.pdf
Полный исходный код приведен здесь или здесь.

Функция setup() пробегает по всем выводам и устананаливает каждый в состояние «0». Также функция инициализирует массивы для хранения отсчетов времени. После этого выводы переключаются в режим входа. Так как прежде на них выводился «0», подтягивающие резисторы будут отключены [прим. перев.: в AVR один и тот же регистр PORTn отвечает в режиме вывода за выводимое значение, а в режиме ввода — за включение подтягивающих резисторов]. Теперь выводы находятся в Z-состоянии. Обратите внимание, что некоторые контакты исключены, они использованы в Arduino для подключения последовательного порта и индикаторного светодиода. Если на вашей плате можно отключить эти выводы от дополнительной нагрузки, можно использовать и их. В таком случае просто сделайте так, чтобы функция pin_is_ok() всегда возвращала истину. Перед тем, как отключать последовательный порт, задумайтесь, как вы будете переносить данные на компьютер.

Основной цикл программы выполняет следующее: для каждого светодиода отмечается переход от низкого уровня к высокому. Если это случилось, на светодиод снова подается 0 В, и вычисляется время с момента последнего перехода. Затем вывод снова переводится в Z-состояние. Здесь я явным образом опираюсь на то, что команда pinMode() выполняется довольно медленно, а значит у светодиода будет несколько тактов на заряд емкости.

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


Это видео показывает «камеру» в действии. При написании прошивки я не учел, что Arduino будет располагаться «вверх ногами», USB-портом слева, поэтому данные на мониторе отображаются в обратном порядке. Тем не менее, работа фотодатчиков хорошо видна.
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 23

    0
    реализовалась моя давняя мечта
      +49
      Быть первым в комментариях?
        0
        ну сам спаять не могу
        +5
        уже джва года ждёте? :)
          0
          не два, думаю 4 как минимум
          • UFO just landed and posted this here
              +1
              На всякий случай оставлю здесь образовательную ссылку bit.ly/v2bYbZ
              • UFO just landed and posted this here
                  0
                  хорошо
                    –2
                    Нет, плохо.
              –1
              вот она, вот она — моя мечта, вот она!.. (с)
              –2
              Неделя светодиодов
                +1
                Может я чего-то не понимаю, но зачем это надо? И почему для этой цели нельзя использовать обыкновенные фотодиоды?
                  +4
                  Это из разряда нестандартного использования стандартных вещей, вроде тетриса на осциллографе. Хотя можно найти и некое практическое значение.
                  1) Допустим, нам _срочно_ нужен фотодатчик, а под рукой только светодиоды. Радиолюбители помнят, что еще совсем недавно было проблемой достать фотодиоды, особенно ИК. Ставили вместо них светодиоды, плохо, но работало.
                  2) Еще один пример приведен в статье (ссылка на pdf в теле поста). Двусторонняя оптическая линия связи. Дуплекса не получается, зато для приема и передачи используется один и тот же диод.
                    0
                    Спасибо за обьяснение :)
                  +5
                  Светодиодные лампы следят за нами…
                    +4
                    Можно реализовать этим жест на подобие «Slide to Unlock».
                    И двери например открывать или свет включать :)
                    Наверное и MultiTouch жесты можно задействовать :)
                      0
                      Хм, а AMOLED в данном случае применимы?
                        0
                        Без доработок — нет. В матрицу AMOLED встроены управляющие транзисторы, что не позволяет снимать сигнал со светодиодов.
                        0
                        попроще способ нельзя найти для такого «модно-актуального» приема? например емкостный датчик, о котором было написано, емнип, в «электроника для начинающих» Иванова?
                        и почему все сейчас заклинились на этих новомодных приемчиках? а почему не открытие по отпечатку пальца?
                        кстати, может кто подскажет--насколько реально осуществить связку: сканер отпечатков в связке с контроллером питания--«пользователь 1--включить свет в ванной и комп, пользователь 2-вытяжку на кухне и „лаврадио“?
                        +1
                        Раз уж олдскул вспомнили, надо было найти старые шляпные транзисторы. Спилить с них верхнюю крышку и с них снимать сигнал.
                        Помню ещё в садике такой фигнёй занимался.
                          +1
                          И солнечные батареи из диодов Д9 (стеклянных)…
                          0
                          Может пригодится. Спасибо.

                          Only users with full accounts can post comments. Log in, please.