DIY Експонометр для фотографії на плівку
Опубліковано 29.12.2024, 12:13 в категорії YouTube
Одним з перших моїх хоббі була фотографія. За майже 10 років в цій сфері я подолав приблизно такий шлях:
- Смартфон - Nomi i4510
- Мильниця - Canon A590
- Мильниця покраще - Fujifilm Finepix S2800HD
- Старенька DSLR - Olympus E400
- Більш менш сучасна DSLR - Nikon D3200, на яку я й записую відео на YouTube.
І десь на якомусь з цих етапів, я зацікавився фотографією на плівку. Думаю це природно, адже старі дзеркальні аналогові камери дозволяють сповна насолодитись процесом зйомки - від виставлення експо-параметрів, до ручного перемотування плівки. За своє життя я поки відзняв всього лише 3 котушки плівки.
Ці 3 котушки я відзняв не на свій прекрасний Київ-19, а на Зеніт 11. В нього є одна проблема - експонометр, це пристрій який допомагає виставити потрібні експо-параметри, був виконаний на основі селенового елементу. Для простоти можете сприймати це як невеличку сонячну панель - сонячне світло потрапляє на датчик експонометру, селеновий елемент генерує струм, який і рухає стрілку на шкалі експонометру.
А обертаючи спеціальне коліщатко, на шкалі рукається рамка. Коли рамка та стрілка співпадають, можна побачити експопари при яких буде нормальна експозиція.
Так ось, за довгі 30 років, чи скільки там, цей Селен втратив свої властивості, і тому експонометр працює некоректно. Точніше в моєму випадку - взагалі не працює. В цій ситуації, фотоапарат Київ-19 краще - мало того що в ньому так званий TTL експонометр - тобто Through The Lens, сприймається лише те світло що проходить крізь об'єктив, так ще й замість селену використовуються звичайні фоторезистори, які набагато більш стійкі до впливу часу. Хоча натомість вони менш чутливі до світла, та потребують різного роду електроніки для функціонування, тому для роботи експонометру потрібні батарейки.
Що ж робити?
Але що ж робити якщо в камері немає експонометру, або він вже не працює?
Є декілька варіантів:
- завчити правило Sunny 16
- використовувати іншу камеру як експонометр
- використовувати спеціалізовані застосунки на телефоні
Або ж найцікавіше - використовувати експонометр як окремий прилад. Щоправда ціни на нові якісь божевільні, а старі мають схожі проблеми - або вже мертвий експонометричний елемент, або потребують застарівших елементів живлення. Але ж не дарма ми тут електронікою займаємось? Давайте створимо власний!
Щоправда як і багато з чим - за нас вже давно все створили :D Варто лише добре пошукати. Саме так я й знайшов цей проєкт на GitHub - експонометр на Arduino. Автор цього проєкту, до речі, - теж українець! Скільки ж крутих проєктів створено українцями, той же PlatformIO наприклад.Функціонал цього DIY експонометру звісно вражає, і ціна виходить теж не велика, тому пропоную приступити до збірки!
Компоненти
Для збірки експонометру нам знадобиться:
- Arduino Nano
- OLED екранчик з шиною SPI (SH1106)
- купка кнопок
- цифровий датчик освітленості BH1750.
BH1750 коштує аж в 10 разів більше за фоторезистор, але при цьому набагато точніше, ще й повертає значення у Люксах по I2C шині, а не в якихось там умовних Омах або Вольтах, як це робить фоторезистор. Всередині цієї мікросхемки знаходиться фотодіод, який набагато швидше та точніше реагує на світло, ніж фоторезистор. Також там стоїть підсилювач для цього фотодіоду, аналогово-цифровий перетворювач, та блок логіки, через який мікроконтролер і отримує значення освітлення.
Збірка та прошивка
Зібрати все це доволі просто - датчик освітленості підключається до I2C шини, екран до SPI шини, ну і кнопки ще до вільних GPIO пінів. Більш детально можна подивитись на цій крутій схемі яка присутня в репозиторії, або безпосередньо в самому коді.
#define OLED_DC 11
#define OLED_CS 12
#define OLED_CLK 8 //10
#define OLED_MOSI 9 //9
#define OLED_RESET 10 //13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
BH1750 lightMeter;
#define DomeMultiplier 2.17 // Multiplier when using a white translucid Dome covering the lightmeter
#define MeteringButtonPin 2 // Metering button pin
#define PlusButtonPin 3 // Plus button pin
#define MinusButtonPin 4 // Minus button pin
#define ModeButtonPin 5 // Mode button pin
#define MenuButtonPin 6 // ISO button pin
#define MeteringModeButtonPin 7 // Metering Mode (Ambient / Flash)
Тепер стосовно прошивки - проєкт був написаний в ArduinoIDE, і хоч його можна легко перенести і в PlatformIO, давайте для різноманітності скомпілюємо прошивку в ArduinoIDE. Треба встановити залежності проєкту, тут це 4 бібліотеки бібліотека для роботи з датчиком освітленості, ну і 3 бібліотеки від Adafruit для роботи з графікою та дисплеєм:
- BH1750
- Adafruit_BusIO
- Adafruit-GFX-Library
- Adafruit_SSD1306
Ще є одна умовність, через те що проєкт був написаний дуже давно, на секундочку 6 років назад, треба виправити один рядок коду в файлі lightmeter.h
, а саме 52й рядок - треба прибрати false з дужок. Справа в тому що за ці 6 років бібліотека датчику освітлення, BH1750, встигла змінитись, і тепер функція readLightLevel()
не приймає більше ніяких аргументів, тому якщо не прибрати false
, буде помилка.
uint16_t lux = lightMeter.readLightLevel(false);
->
uint16_t lux = lightMeter.readLightLevel();
Тепер прошивку можна скомпілювати та залити на Arduino. Але є ще один момент. Якщо у вас графіка на екрані виглядає так само як і в мене, треба ще дещо зробити.
Спочатку я подумав що це ефект такий. Ну а шо, виглядає прикольно :D Але насправді це проблема, як мінімум тому, що частина інформації на екрані недоступна. Щоб це виправити, треба в файлі lightmeter.ino
додати 2 нових дефайни, з розмірами екрану, а також трішки змінити строку ініціалізації дисплею, і все буде працювати як слід. Ну або можна просто одразу додати розміри в строку ініціалізації дисплею, і все.
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Для тестів я зібрав все на бредборді, і без кнопок. Роль кнопок імітує жовтий дротик.
Протестувавши все і впевнившись що все гаразд, я спаяв все на макетній платі. Замість деяких кнопок я використав енкодер, так на мою думку набагато зручніше. Стосовно живлення ж - автор пропонує використовувати 2 послідовно з'єднані батарейки ААА. Це звісно таке собі, але мені не хотілось щось вигадувати з акумулятором в цьому плані, тулити ще кудись перетворювач та плату зарядки, тому я зробив ще гірше :D Я поставив гніздо під батарейку CR2032. Ємність в неї ледь не в 20 разів менша, але навіть так, якщо я все правильно порахував, експонометр і від такої батарейки немало пропрацює, так як він споживає всього лише 8-10 мА. Хоча як потім підказали в коментарях, настільки великий струм є небажаним для CR2032.
Виглядає звісно так собі, але за то працює.
Тепер коли експонометр зібраний, пропоную швиденько пройтись по його функціям.
Він вміє міряти як просто оточуюче світло, так і світло спалаху. З останнім трішки складніше, можете подивитись Issue на GitHub, але якщо коротко - Arduino та BH1750 занадто повільні для такого. Хоча воно наче все одно якось працює.
Є 2 режими пріоритету - пріоритет витримки та пріоритет діафрагми. Обираєте потрібний вам параметр, а експопару для нього підбере вже сам експонометр. Також є можливість не змінюючи заміри, змінювати один з параметрів, щоб дивитись інші можливі експопари. Також є компенсація для роботи з ND фільтрами.
Ну і на додачу він ще й показує силу освітленості в люксах, тобто його в теорії можна використовувати не тільки для фотографії.
Ось такий ось вийшов цікавий проєкт. Звісно я не думаю що його можна порівнювати з готовими рішеннями, але, за такі невеликі гроші отримати експонометр який цілком робить свою роботу, я вважаю прикольно. Принаймні для любителської плівкової фотографії його точно більш ніж достатньо.
Post Scriptum
Це текстова версія мого відео на YouTube. Переглянути відео можна за посиланням.