Однопиксельная камера

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

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

Фоторезистор.

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

Размер фоторезистора порядка 5 мм, это значит, что физический размер пикселя 5 мм, т.е. если нужна фотография 320х200 пикселей, то расстояние, которое должен пройти фоторезистор составит порядка 1,6 метра по широкой стороне.

Если целиться во время экспозиции (т.е. время производство одной фотографии) хотя бы 20 секунд, то необходимо иметь скорость 3200 пикселей в секунду, т.е. 10 строк.

Очевидно, что реализация такой схемы в формате DIY вряд ли достижима – все-таки переместить каретку с фоторезистором 20 раз (с учетом возврата) на 1,5 метра за одну секунду это что-то за пределами адекватных возможностей.

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

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

Для управления кареткой фоторезистора использовал два шаговых двигателя (28BYJ-48-5V) с драйверами в комплекте, и готовую передачу винт-гайку. Легко находится на алиэкспрессе или ближайшем магазине где предлагают Ардуино и всякое для неё.

Управление производится с помощью Arduino Uno, подключение драйверов двигателей сделано через сдвиговый регистр 74HC595N для сокращения используемых выходов.

Данные от ограничивающих концевиков (чтобы понимать когда выключать двигатели) и кнопки ручного управления (для отладки) сделаны через сдвиговый регистр 74HC165N, опять-таки для сокращения используемых подключений к Ардуино. В качестве концевых выключателей использовалось что было в запасах – для одной оси это ик датчики с цифровым (логическим) выходом, для другой оси обычные кнопочные выключатели с цифровым (логическим) выходом.

Внутренности однопиксельной камеры.

Для съема значения светового потока собрана простейшая схема: подключаем +5V от Ардуино к одному контакту фоторезистора, второй же контакт к аналоговому входу Ардуино, параллельно с фоторезистором подключен переменный подстроечный резистор для подбора оптимального значения входного напряжения так, чтобы при ярком свете или недостаточной освещенности цифровые значения на входе аналогово пина не уходили в пределы 1024 и 0. Фактически происходит измерение падения напряжение на 5В контакте.

Вся конструкция монтируется на фанере в деревянном ящике.

Внутренности однопиксельной камеры.

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

Т.к. интегральная чувствительность (т.е. зависимость напряжения от мощности падающего излучения) близко к линейному, то такой подход позволяет малый диапазон измерений растянуть на весь диапазон отображения серого на экране компьютера. Простыми словами – диапазон показаний на аналоговом входе, например, от 46 до 81, сконвертировать в диапазон от 0 до 255 (градаций серого) или любой другой для достижения нужно эффекта контрастности.

Первые тесты на малом количестве точек показали корректность работы схемы и потенциальную возможность собранной конструкции. Один из тестов выглядел так: перед плоскостью движения фоторезистора расположил три линейки, которые давали тень от лампы над столом. Шаг фиксирования значений от фоторезистора составлял порядка 5 миллиметров, т.е. 1 пиксель полученной иллюстрации соответствовал 1 замеру на сетке 23х23, c шагом сетки 5 мм.

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

Первая тестовая съемка для проверки концепции.
Темные части соответствуют теням которые дают линейки. Числа в ячейках – значения на аналоговом входе.

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

А чтобы фокальная плоскость совпадала с плоскостью перемещения фоторезистора без применения каких-либо линз картинку разместил практически в плотную к плоскости перемещения фоторезистора. Заодно это позволило исключить влияние внешнего света на форторезистор.

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

Результат вдохновляющий!

Во-первых, размер снимка 221х186 пикселей – такой, что на нём уже могут поместиться различимые объекты. К слову, физический размер сканируемого поля 11х9 см.

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

Видимые горизонтальные полоски – это влияние изменений во времени регистрации:

  • общей освещенности (я наблюдал за процессом и тень от меня то падала на установку, то нет),
  • источника тока который выступает несущим сигналом.

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

В любом случае, полученный снимок отчетливо показал, что все работает.

Следующий шаг – необходимо сделать что-то на подобие объектива. Можно было бы сделать простую камеру обскура, но кажется микроотверстие будет пропускать слишком ужь мало света, потому купил самую дешёвую лупу (вроде бы х2) и использовал её в качестве линзы. В качестве “тела” объектива – картонная коробка. Экспериментальным путем определил примерное фокусное расстояние для съемки пейзажа (дома напротив).

Внутри будущего объектива. Слева отверстие и винты прижимающие снаружи лупу, справа проекция на папиросной бумаге вида из окна – голубое небо с облаками, горизонт, дом напротив.

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

Однопиксельная камера в сборе.

После, примерно, целого светового дня эскпониронивая, а это порядка 8 часов. Получился такой результат:

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

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

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

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

В память о Point de vue du Gras