임베디드 시스템 과제- 필름 카메라📷 전용 Light Meter✨ 및 손 떨림 방지 장치✋

TaeUk·2023년 10월 30일
0

Project 정리

목록 보기
1/6
post-thumbnail

0. 시작에 앞서...

이 Project는 대학교 3학년 때, 수강하였던 "임베디드 시스템"이라는 교과목으로 강의 수강 중 제출해야 되는 과제였다.

주제는 따로 정해진 것이 없었으며, Interrupt를 활용하여 임베드디 시스템을 제작하는 것이였다.

따라서 평소 좋아하던 필름 카메라를 이용한 주제를 고안했으며, 그 결과 "필름 카메라 전용 Light Meter 및 손 떨림 방지 장치"을 구현하기로 하였다!!


1. Project 주제 선정

평소, 색다른 색감과 촬영에 재미를 느낄 수 있는 필름 카메라를 자주 사용한다. 하지만 필름 카메라는 스마트 폰 카메라와 달리 Lux, 노출값(EV) 등 촬영 당시의 정보들을 측정할 수 없다는 단점이 있다.

"조리개값"이나 "노출 설정" 등의 사진의 질을 향상시킬 수 있는 중요한 요소인데, 이러한 정보를 볼 수 없다는 점이 큰 단점으로 느껴졌다.

또한 최근 출시되는 카메라와 달리, 손 떨림 방지 기능이 없어 촬영 당시에 이를 신경 쓰지 않으면 흐릿한 결과물을 볼 수 있게 된다. 이 또한 필름을 현상한 후, 큰 아쉬움이 느껴져 손 떨림을 잡아줄 수 있는 기능도 함께 구현하기로 하였다.

최종적으로 위 두 문제를 해결할 수 있는 장치를 만드는 것을 프로젝트 주제로 선정하게 되었다.

프로젝트 주요 주제 및 구현 기능

  • 필름 카메라를 통해 촬영할 당시의 노출, 셔터스피드를 출력하는 기능(Light Meter)을 구현
  • 손 떨림 방지 기능과 유사한 기능을 구현

기존 필름 카메라 시장에서 유사한 장비들은 존재하지만, 촬영일자를 기록해주거나 노출값을 바탕으로 조리개 값이나 셔터 스피드 값을 알려주는 장치들만 있으며 이러한 장비들도 모든 카메라에 적용할 수 없다는 단점이 있다.

따라서 현재 가지고 있는 카메라에 적합한 "Light Meter"와 "손 떨림 방지 장치"의 필요성을 느꼈다.


2. 이론적 배경

프로젝트의 주요 목표인 Light Meter와 손 떨림 방지 장치를 만들기 위해서는 필름 카메라의 촬영 원리를 어느 정도 알고 있어야 구현이 가능하며, 아래는 사진에서 필요한 3요소이다.

  • 사진의 3요소인 조리개, ISO, 셔터스피드의 관계

사진 출처 : 노출의 3요소 - 조리개, 셔터스피드, ISO (feat. 카메라 수동모드)

위 사진에서 알 수 있듯이 조리개, ISO, 셔터스피드, 이 3개의 값만 있으면 사진을 찍을 수 있다.

타겟이 되는 카메라는 "Yashica Electro 35CC"라는 카메라로 A.V.(조래개)식 카메라이다.

  • Yashica Electro 35CC

이 카메라는 조리개 값과 ISO를 사용자가 직접 설정하여 사용하는 카메라로, 카메라 내부의 회로에서 셔터스피드를 결정하여 촬영을 하게 된다.

이미 조리개와 ISO, 이 두 가지 값을 알고 있기에 아래의 수식들을 통해 셔터스피드를 구할 수 있다.

E.V=A.V(조리개값)+T.V(셔터스피드)E.V = A.V(조리개값) + T.V(셔터 스피드)\\
L(LuxValue)E=KC\frac{L(Lux Value)}{E}=\frac{K}{C}

첫 번째 수식은 조리개 값과 셔터스피드 값의 합은 노출 값인 것이고, 두 번째 수식은 빛의 양인 Lux 값을 이용하여 노출 값을 구하는 수식이다.

연산에 필요한 값 : 조리개, 필름 ISO(ASA), EV(LUX), Shutter Speed(EV = 조리개 값 + 셔터 스티드 값)

두 수식을 이용하여 셔터스피드를 구할 수 있는데, 이 값을 이용하면 사진을 찍을 당시 어느 정도의 떨림에 대한 민감도를 가져야 하는지를 알 수 있어 결과물에 큰 영향을 미칠 수 있다.


3. Sensor 및 H/W 설계

📝 Project 회로 및 Sensor 선정

Raspberry Pi 4B를 사용함에 있어, 프로젝트에서 I2C 모듈이 많이 사용되어 특정 라이브러리 없이 제어하기는 상당히 버거웠으며 이를 해결하기 시도하였지만 실패하였다.

따라서 Raspberry Pi 4B가 아닌 "ESP32-WROOM-32E"라는 32bit, 3.3V의 프로세서를 사용하여, 기존에 사용하던 센서를 동일하게 가져와 사용하였다.

  • Raspberry Pi 4B와 사용된 센서 및 장치를 연결한 회로도

위 회로에서 "ADS1115"는 Raspberry Pi 4B 내에 ADC 기능이 없기에 사용하였으며, 아래의 ESP32는 ADC를 내장하고 있기에 사용하지 않았다.

  • ESP32를 Main Processor로 사용한 최종 회로도

✨ Light Meter 기능에 사용된 센서 및 장치

  • Shutter Button
  • Laser Module

Shutter Button을 누르면 Laser Module을 통해 촬영할 피사체를 지시하게 되어, 초점을 잡는데 더욱 편리하다.

  • ISO, Aperature Value Selector
  • BH1750(Light Meter Sensor)
  • I2C LCD

가변저항으로 조리개 값, ISO 값을 입력할 수 있도록 하였고, Lux 값을 받아올 BH1750(Light Meter Sensor)을 통하여 연산을 거쳐 셔터 스피드에 대한 값을 I2C LCD에 출력시킨다.

✋ 손 떨림 방지 기능에 사용된 센서 및 장치

  • Touch Sensor

프레임의 손잡이에 정전식 Touch Sensor를 내장하여 사용자가 손잡이를 잡았을 때 손 떨림 방지 기능을 구현하며, 평소에는 작동하지 않도록 만들어 배터리를 절약할 수 있도록 설계하였다.

  • Tilt Sensor
  • Tilt State LED

사용자가 Touch Sensor를 활성화 시키면 Tilt Sensor에서 입력값을 활용하여 설정한 감도와 비교한 후, 뒤틀림이 크면 손잡이에 내장된 Tilt State LED를 작동시켜 사용자에게 손 떨림을 인지시켜 사진이 덜 흔들리도록 유도한다.

🖥️ Parts Modeling 및 Frame Design

Project에 사용된 "Yashica Electro 35 CC" 필름 카메라는 하단부에 삼각대와 연결하기 위한 나사선이 있으며, 1/4 볼트와 결합되는 크기이다.

1/4 크기의 볼트를 사용하여 프레임과 필름카메라를 결합하도록 구상하였으며, 프레임은 3D 프린터를 사용을 고려하여 설계하였다.

  • 프레임에 Raspberry Pi 4B와 사용될 센서 및 장치를 부착한 모습

프레임 중앙에 구멍을 볼 수 있는데, 이를 통해 카메라 바디와 프레임을 결합할 목적으로 설계되었다.

  • 필름 카메라 하단부에 부착될 프레임 모듈

또한 Project 산출물을 야외에서 사용한다는 가정 하에, 안정적인 전원을 공급할 수 있도록 TP4056이라는 배터리 충전 모듈을 사용하기로 구상하였으며 배터리는 3000mAh를 사용하였다.

Raspberry Pi 4B의 정격 전류는 1250mAh로 3000mAh 배터리를 사용하였을 때 단순 연산으로 2시간 20분 정도 사용할 수 있다는 것을 알 수 있다.

ESP32의 정격 전류는 최대 500mAh로 Raspberry Pi 4 B보다 훨신 더 많은 시간동안 사용할 수 있을 것이다.

💾 구동 S/W 설계 목표

배터리를 사용하여 전원부를 설계한 것을 보아 운용 시간이 제한되는 것을 알 수 있다.

각종 Sensor 값을 Polling 방식으로 처리하여 프로세서를 낭비하는 것이 아닌, Interrupt를 통한 입력값 처리를 통해 프로세서의 전력소비를 최소화하는 것이다.

따라서 ESP32가 더욱 효율적으로 프로세서를 사용하여 전력소비를 최소화하는 것을 목표로 S/W를 구성하는 것이 목표이다.

만약 가능하다면 이 또한 전력소모의 최소화를 위해 저전력으로 구현할 수 있는 방안을 시도해 볼 것이다.


4. H/W, S/W 구현 및 Project 제작

📷 H/W Part

Project의 Frame은 3D Printer를 사용하여 구성했고, 내부의 물리적인 BUS 회로를 만들어 메인 프로세서와 회로를 구성하였다.

  • 3D 프린터 프레임을 통해 HW 제작

📸 S/W Part

ESP32-WROOM-32E는 Arduino와 동일한 IDE에서 프로그래밍이 가능하여 Arduino IDE에서 개발환경을 구축하여 프로젝트를 진행하였다. I2C 통신을 기반으로 하는 센서들은 모두 라이브러리를 통해 제어하였다.

제작한 코드를 전부 다 올리기에는 코드의 길이가 너무 길어, 핵심 기능만 정리하였다.

- Laser Module, Tilt Sensor Setting

  if (digitalRead(Shutter_Button) == LOW)
    digitalWrite(Laser_Module, HIGH);
  else
    digitalWrite(Laser_Module, LOW);


  if (digitalRead(Touch_Sensor) == HIGH) {
    if (digitalRead(Tilt_Sensor) == HIGH)
      digitalWrite(Tilt_State_Led, HIGH);
    else
      digitalWrite(Tilt_State_Led, LOW);
  } else
    digitalWrite(Tilt_State_Led, LOW);
- Lux, EV, Shutter Speed Calculation

int ISO_Data = map(analogRead(ISO_Selector), 0, 4095, 0, 5);
  ISO_Value(ISO_Data);  //ISO_Data -> ISO_Value() -> ISO

  int Aperature_Data = map(analogRead(Aperature_Selector), 0, 4095, 0, 6);
  Aperature_Value(Aperature_Data);  //Aperature_Data -> Aperature_Value() -> Aperature

  Lux = lightMeter.readLightLevel();
  EV = log10(Lux * ISO / Calibration_Value) / log10(2);
  Shutter_Speed = (pow(2, EV) / pow(Aperature, 2));
- Aperature, ISO Value Selector Function

void Aperature_Value(int value1) {
  /****** Aperature Select Function ******/
  if (value1 == 0)
    Aperature = 1.8;
  else if (value1 == 1)
    Aperature = 2.8;
  else if (value1 == 2)
    Aperature = 4;
  else if (value1 == 3)
    Aperature = 5.6;
  else if (value1 == 4)
    Aperature = 8;
  else if (value1 == 5)
    Aperature = 11;
  else if (value1 == 6)
    Aperature = 16;
}

void ISO_Value(int value1) {
  /****** ISO Select Function ******/
  if (value1 == 0)
    ISO = 25;
  else if (value1 == 1)
    ISO = 50;
  else if (value1 == 2)
    ISO = 100;
  else if (value1 == 3)
    ISO = 200;
  else if (value1 == 4)
    ISO = 400;
  else if (value1 == 5)
    ISO = 500;
}

5. Project 동작 확인 및 환경 변화 Test

완성된 "필름 카메라 전용 Light Meter 및 손 떨림 방지 장치"을 통해 셔터스피트의 결과값과 손 떨림 방지 기능을 확인해보는 실험을 하였다.

⌛️ 동일한 Aperature, ISO에서의 Shutter Speed 측정 실험

위 실험에서 ISO(ASA)가 200이며 조리개 값이 5.6으로 고정된 상태에서 주변 환경만 변화를 주어, 카메라가 측정하는 조도량에 영향을 주었다. 주변 환경이 밝아짐에 따라, 1/7s에서 1/1.08으로 Shutter Speed가 영향을 받은 것을 볼 수 있다.

실험 결과는 아래의 Shutter Speed - Aperature와 EV 관계와 비슷한 변화 형태를 확인할 수 있다.

  • Shutter Speed와 Aperature 값에 따른 EV 변화

사진 출처 : Exposure Value Explained – Plus EV Charts(Shutter Speed와 Aperature 변화에 따른 EV 변화)

⏳ EV(조도)는 일정하고 ISO, Aperature의 변화를 줄 때의 Shutter Speed 측정 실험

  • Aperature만 변화를 줄 때의 Shutter Speed 변화

ISO : 200, 동일 환경(EV)
좌 - F : 1.8, S : 1/10 우 - F : 16.0, S : 7.8

  • ISO와 Aperature에 변화를 줄 때의 Shutter Speed 변화

동일 환경(EV)
좌 - ISO : 200, F : 11.0, S : 1.5 우 - ISO : 25, F : 5.6, S : 7.5

  • Aperature에 값에 따른 Shutter Speed 변화

위 사진처럼 조리개의 수치가 낮아지면 필름에 많은 빛이 들어올 수 있어 Shutter Speed가 작아진다는 것을 볼 수 있으며, 조리개 수치가 높아지면 빛이 적게 들어와 오랜 시간 셔터를 열고 있어야 하기에 Shutter Speed가 높아진다.

실험 결과도 위 사진과 비슷한 변화를 보여주고 있기에 Light Meter에 관한 기능은 정상적으로 잘 작동한다는 것을 알 수 있었다.

⭐️ Laser Module Test 및 손 떨림 방지 기능 Test

Light Meter 뿐만 아니라, 아래의 그림들을 통해 손 떨림 방지 기능도 잘 작동한다는 것을 실험을 통해 알 수 있었다.


6. 필름 카메라 전용 Light Meter 및 손 떨림 방지 장치 각 기능별 동작

  • Aperature, ISO Selector 동작

  • 주변 환경 변화에 따른 Shutter Speed 변화

  • Touch Sensor가 활성화 될 때만 동작하는 손 떨림 방지 LED 동작

Frame 측면에 위치한 정전식 Touch Sensor가 손바닥(손가락)을 인식할 때만 동작하도록 설계하였다.

  • 초점을 맞추기 위한 Laser Module 동작

전반적으로 모든 기능들이 정상적으로 동작하는 것을 볼 수 있다!!


7. 임베디드 시스템 과제를 마무리 하며...

평소 관심사였던 카메라를 프로젝트의 주제를 선정하는 것이 상당히 큰 재미로 다가왔으며, 이번 프로젝트를 통해 다양한 센서를 제어해보고 임베디드의 이론적인 부분도 함께 얻어갈 수 있는 시간이 되었다.

하지만 기존의 목표로 하였던 Raspberry Pi 4를 메인 프로세서로 사용하지 못하여서 다른 프로세서로 프로젝트를 구현한 것이 크게 아쉬움이 남는다. 🙈


8. 참고 자료 및 문헌

0개의 댓글