본문 바로가기
창고/D.I.Y

카메라 셔터속도 측정(/w Arduino Micro pro)

by 신의손길 2021. 9. 13.

▷ 사용부품

1. 아두이노 프로 마이크로(Atmega32U4 5V 16MHz)
2. 디지털 조도센서 모듈 GY-30 (BH1750FVI)
3. 아두이노 0.91인치 128x32 OLED 4핀 I2C 모듈

▷ 인용한 프로젝트
https://create.arduino.cc/projecthub/alankrantas/ardumeter-arduino-incident-light-meter-606f63

- 지인요청으로 아두이노 프로 마이크로에 조도센서와 0.91" OLED를 I²C로 연결해 셔터속도 측정 모듈을 만들어 봄.

- 기초는 위 링크의 소스에서 모듈 사용에 대한 코드분석을 한 후 불필요한 부분을 걷어냄.

- 프로그래머는 아니라 소스를 수정하는 선에서 기능상 구동은 함(부끄럽지만 공유_소스아래에 ino 파일 링크).

 

/* ------------------------------
  https://create.arduino.cc/projecthub/alankrantas/ardumeter-arduino-incident-light-meter-606f63
  
  ArduMeter (Arduino incident light meter) version 2
  by Alan Wang
  
  Ardumeter V2에 사용된 구성이 목적에 맞아 가져와서 수정함.
  OLED와 BH1750외에는 모두 제거했고, 최종 처리는 루프문에 의해 폴링됨.
  정밀한 시간측정이 최우선이라 BH1750도 저해상도 고속모드(0.016ms)로 설정.
  코드 전체에 delay()를 사용하지 않았고, 동작도 문제없음.

  Arduino Pro micro(5V)

  BH1750/BH1750FVI digital light intensity sensor:
  Library: https://github.com/claws/BH1750
  VCC -> 3.3V
  GND -> GND
  SDA -> pin 2 (pin A4)
  SCL -> pin 3 (pin A5)
  ADD -> (none)

  Full mode list:
  BH1750_CONTINUOUS_LOW_RES_MODE
  BH1750_CONTINUOUS_HIGH_RES_MODE (default)
  BH1750_CONTINUOUS_HIGH_RES_MODE_2
  BH1750_ONE_TIME_LOW_RES_MODE
  BH1750_ONE_TIME_HIGH_RES_MODE
  BH1750_ONE_TIME_HIGH_RES_MODE_2
  
  
  0.96" SSD1306 OLED 128x64 display:
  Library: https://github.com/greiman/SSD1306Ascii
  VCC -> 3.3V
  GND -> GND
  SDA -> pin 2 (pin A4)
  SCL -> pin 3 (pin A5)
  ------------------------------ */

#include <Wire.h>
#include <BH1750.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiAvrI2c.h"

BH1750 lightMeter(0x23);
SSD1306AsciiAvrI2c oled;

float lux;
unsigned long current_ms = 0;
unsigned long measure_ms = 0;

void setup() {

  // initialize serial port
  Serial.begin(9600);
  Wire.begin();

  // begin returns a boolean that can be used to detect setup problems.
  if (lightMeter.begin(BH1750::CONTINUOUS_LOW_RES_MODE)) {
    Serial.println(F("BH1750 Advanced begin"));
  } else {
    Serial.println(F("Error initialising BH1750"));
  }

  // initialize OLED
  oled.begin(&Adafruit128x32, 0x3c);
  oled.setFont(System5x7);
  oled.set2X();

  oled.clear();
  oled.println(" ArduMeter");
  oled.print(" millisec..");
}

void loop() {
  lux = lightMeter.readLightLevel();
  current_ms = millis();
  
  while (lux > 50) {
    lux = lightMeter.readLightLevel();
    measure_ms = current_ms;
    if (lux < 50) {
      current_ms = millis();
      oled.clear();
      oled.println(" ArduMeter");
      oled.print(" ");
      oled.print(current_ms-measure_ms);
      oled.print("ms");
      break;
    }
  }
}

 

ArduMeter_ShutterSpeed.ino
0.00MB

여튼,

이렇게 테스트해서 완성하고..

케이스 모델링하고, 출력... (STL 파일 아래에 링크)

01234567
Ardumeter_cover.zip
0.16MB

잘 됨! 끝~