Оглавление:

Фотографический люксметр своими руками: 5 шагов
Фотографический люксметр своими руками: 5 шагов

Видео: Фотографический люксметр своими руками: 5 шагов

Видео: Фотографический люксметр своими руками: 5 шагов
Видео: Принцип Работы Экспонометра Для Начинающих! - Настройки Камеры Для Идеальной Экспозиции 2024, Июль
Anonim
Фотографический люксметр своими руками
Фотографический люксметр своими руками
Фотографический люксметр своими руками
Фотографический люксметр своими руками

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

Поскольку Instructables не позволяет мне вставлять собственные видео, попробуйте эту ссылку:

www.youtube.com/embed/avQD10fd52s

Для меня целью был люксметр, который сопровождал бы мою среднеформатную пленочную камеру Bronica ETRSi.

Вещи, которые я хотел, чтобы он показал:

  • одиночный ASA (100), потому что я использую почти только пленку ASA 100
  • как можно меньше
  • дайте мне только комбинации, которые может воспроизвести моя Bronica, что означает f2.8-f22 и от 1 секунды до 1/500 секунды
  • никаких лишних функций, кроме простых значений времени и значений диафрагмы

Вещи, которые я использовал:

  • Цифровой люкс-метр Adafruit (Vishay) VEML 7700 (около 5 $)
  • Микроконтроллер Adafruit Trinket M0 (около 9 $)
  • OLED-дисплей 128x32 (около 10 долларов)
  • кнопка для временного включения (несколько центов)
  • крошечный кусок стрип-картона, потому что я стараюсь не использовать кабели, но вы, безусловно, можете использовать кабели

Шаг 1. Основные расчеты | Люкс в EV

Основные расчеты | Люкс в EV
Основные расчеты | Люкс в EV
Основные расчеты | Люкс в EV
Основные расчеты | Люкс в EV

Купленный мною датчик использует две функции, которые позволили мне выбрать его:

  • выводит 16-битные значения люкс вместо «безразмерных» значений освещенности
  • выводит значения через I2C

Фотографический экспонометр использует значения экспозиции (EV), купленный мной датчик использует значения люкс, которые представляют собой совершенно другую шкалу. Итак, первый шаг - получить EV из значений люкс, предоставленных датчиком.

Беглый взгляд на Википедию, и вы можете найти формулу для измерения инцидентов и преобразования EV в Lux:

E = 2,5 * 2 ^ EV

где E измеряется в люксах.

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

EV = log2 (E / 2,5)

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

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

Шаг 2: Представление ценностей на дисплее | Библиотека Adafruit GFX

Представление ценностей на дисплее | Библиотека Adafruit GFX
Представление ценностей на дисплее | Библиотека Adafruit GFX
Представление ценностей на дисплее | Библиотека Adafruit GFX
Представление ценностей на дисплее | Библиотека Adafruit GFX
Представление ценностей на дисплее | Библиотека Adafruit GFX
Представление ценностей на дисплее | Библиотека Adafruit GFX

Сначала я попытался представить значения целыми шагами, потому что это то, на что я могу настроить свою Bronica, но это привело меня к проблеме:

Предположим, что датчик Lux выдает значение ровно 20480, что будет означать, что это ровно EV 13, поэтому я мог бы, например, установить свою камеру на f4 и 1/500 секунды, и было бы хорошо

Затем предположим, что датчик Lux будет выдавать 20479 люкс, 1 люкс под EV13, что даст значение EV 12, но это всего в люксе от EV13

Поэтому я бы установил свою камеру на f2,8 и 1/500 секунды, что привело бы к передержке на 1 ступень, даже если я даже не знал, насколько я близок к EV13.

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

После попытки использовать встроенные буквы и шрифт библиотеки GFX я решил использовать две настраиваемые графики, которые будут перемещаться по экрану OLED.

Один для значений диафрагмы, один для времени.

Библиотека GFX использует 8-битные значения для представления графики, поэтому я сделал лист в формате xls (см. Изображение выше).

  • каждое значение имеет одинаковое количество пикселей на значение
  • время и апертуры имеют одинаковое количество значений в строке
  • Я добавил обязательную букву «B» в начале каждого байта и «,» в конце.
  • Затем я экспортировал его в обычный текст и вуаля: я прикрепил третий рисунок.

Значения времени начинаются с 1/8 секунды, а значения диафрагмы начинаются с f2.8

Используя справочную таблицу на предыдущем шаге, мы знаем, что это 160 люкс или EV6.

Тогда самые темные значения будут f22 и 1/500 секунды

Снова в справочной таблице мы видим, что это означает 655360 люкс или EV18.

Все идет нормально.

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

Шаг 3: Считывание и компенсация значений люкс | VEML7700

Чтение и компенсация ценностей люкс | VEML7700
Чтение и компенсация ценностей люкс | VEML7700
Чтение и компенсация ценностей люкс | VEML7700
Чтение и компенсация ценностей люкс | VEML7700

Просматривая таблицу Vishay VEML7700, которую Adafruit использует для своей платы, я обнаружил довольно тревожное замечание:

Датчик работает линейно только в диапазоне от 0 до 1000 люкс (!)

см. снимок экрана с оранжевой (линейной) линией и синей (фактический выходной сигнал датчика) линией

Солнечный свет (EV15) составляет около 80 000 люкс, что означает, что без компенсации нелинейной части датчика он был бы совершенно бесполезен в качестве экспонометра.

Vishay это знает, поэтому они предоставили своим клиентам еще один PDF-файл под названием «Проектирование VEML7700 в приложении».

В этом PDF-файле вы можете найти формулу для компенсации нелинейности датчиков:

LUX_CORR = 6.0135e-13 * pow (LUX, 4) -9.3924e-9 * pow (LUX, 3) + 8.1488e-5 * pow (LUX, 2) + 1,0023 * LUX

Где LUX_CORR - это скорректированное значение люкс, а LUX - это значение, которое выводит датчик.

Это те переменные, которые я использовал, использованные разные в их листе.

Что меня немного беспокоит, так это то, что Adafruit не упоминает об этом ни одним словом на своей странице, в своей документации, в своей библиотеке или где-либо еще.

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

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

Но есть еще одна подсказка, скрытая в документации датчика:

Эта формула компенсации работает, только если вы установите датчик на 25 мс и коэффициент усиления 1/8.

Это довольно легко сделать с библиотекой Adafruits, добавив:

veml.setGain (VEML7700_GAIN_1_8); veml.setIntegrationTime (VEML7700_IT_25MS);

в вашей настройке void ()

Таким образом, после установки 1/8 и 25 мс и добавления формулы компенсации вы можете измерять до 120000 люкс, что достаточно, чтобы покрыть солнечный свет на уровне 80–100 люкс

Шаг 4: Arduino / C-код

Поскольку это зависит от используемого вами дисплея и предпочитаемого контроллера, я не буду вдаваться в подробности, просто добавлю несколько мыслей и советов, особенно при использовании библиотек Adafruit и OLED 128x32 пикселей:

в настройке void:

Я установил библиотечную часть VEML на:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (правда);

в пустом цикле:

обязательно добавьте компенсацию:

int LUX_CORR = 6.0135e-13 * pow (LUX, 4) -9.3924e-9 * pow (LUX, 3) + 8.1488e-5 * pow (LUX, 2) + 1.0023 * LUX;

чтобы получить электромобили от Lux, используйте эту строку:

с плавающей точкой EV = log2 ((LUX_CORR / 2.5));

перемещение растровых изображений

чтобы убедиться, что растровые изображения перемещаются только тогда, когда значения находятся в диапазоне от 160 до 655360 люкс, как указано на предыдущем шаге, заключите его в предложение if следующим образом:

если (LUX_CORR> 159 && LUX_CORR <655361)

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

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

int EV_DSPL = EV * 100;

а также:

ВРЕМЯ = карта (EV_DSPL, 600, 1900, -260, 39); АПЕРТУРА = карта (EV_DSPL, 600, 1900, 39, -260);

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

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

Затем нам нужно переместить растровые изображения в соответствии с координатами следующим образом:

display.drawBitmap ((ВРЕМЯ), (0), TIMES_bmp, 352, 16, 1); display.drawBitmap ((APERTURE), (15), APERTURES_bmp, 352, 16, 1);

И это все, что нужно сделать

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

Шаг 5: Собираем все вместе

Собираем вместе
Собираем вместе
Собираем вместе
Собираем вместе

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

Просто подключите к Arduino линии данных, заземления часов и 3 В, и все готово.

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

На моем рисунке белые точки должны быть подключены к дисплею и датчику, а желтые точки подключены к брелку.

Единственным исключением будет вывод данных линии I2C, который подключается к дисплею, этот вывод также подключается к выводу данных Trinkets.

Я решил не использовать переключатель включения / выключения, а вместо этого использовал кнопку и две кнопочные ячейки 3 В для временного включения, пока я нажимаю кнопку. Он включается менее чем за 1/10 секунды, так что мне достаточно быстро, чтобы сэкономить кнопку и сделать ее меньше.

Рекомендуемые: