본문 바로가기
Arduino(아두이노) 활용 강좌

Arduino Uno 로 BH1750 조도센서를 사용해서 Light Meter 만들어 보기

by 오마이엔지니어 2022. 9. 22.
반응형

Arduino Uno 로 BH1750 I2C 디지털 조도센서의 사용방법을 알아보고 I2C 1602 캐릭터 LCD를 사용해서
간단한 Light Meter 를 만들어 보는 프로젝트 입니다

<BH1750 I2C 조도센서 모듈 이미지>
디지털 16bit 시리얼 출력타입 조도센서 IC BH1750FVI 기반의 I2C 인터페이스의 조도센서 입니다
포토레지스터 센서와 달리 아날로그 출력값을 디지털로 변환해야 하는 번거로움 없이
디지털 lux(Lx)출력값 (0 - 65535 lx)을 제공합니다
I2C 인터페이스 구성으로 아두이노 등의 마이크로컨트롤러 보드와 연결해 간편하게 사용 가능합니다

BH1750FVI Datasheet.pdf
0.53MB

<BH1750 I2C 조도센서 모듈 상세사양>


사용된 부품

Arduino Uno R3 (Italy)

브래드 보드
BH1750 I2C 조도센서 모듈

I2C 1602 Character LCD 모듈

점퍼케이블

구성 배선도-아두이노 IDE 시리얼 모니터로 실내 조도 변화에 따른 출력값 변화 확인해 보기 

구성 배선도-I2C 1602 캐릭터 LCD 모듈로 실내 조도 변화에 따른 출력값 변화 확인해 보기 

사용된 라이브러리

BH1750.zip
0.00MB
LiquidCrystal_I2C.zip
0.02MB

 

사용된 예제소스 

BH1750.txt
0.00MB
BH1750-I2C 1602.txt
0.00MB


주의사항
기본적으로 BH1750 과 LiquidCrystal_I2C 2가지의 라이브러리 설치가 필요합니다
라이브러리 설치 방법은 하단링크 포스팅을 참조해 주세요
Arduino IDE 설치하기

"I2C 1602 캐릭터 LCD 모듈로 실내 조도 변화에 따른 출력값 변화 확인해 보기" 테스트를 할때는
I2C 1602 LCD는 반드시 5V로 BH1750 I2C 조도센서는 3.3V로 각각 전원공급합니다
(캐릭터 LCD는 전류를 많이 소모하기 때문에 센서와 동일한 전원으로 공급하면 출력이 제대로 안될수 있습니다)

첫번째 "BH1750" 예제를 살펴보면
#include <Wire.h>
#include <BH1750.h>
위 두가지 라이브러를 사용합니다


void setup(){
  Serial.begin(9600);
  lichtMeter.begin();
}
   
void loop() {
  uint16_t lux = lichtMeter.readLightLevel();
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lux");
  delay(500);
}
조도 변화에 따른 출력값을 lux 로 계산해서 시리얼 모니터로 출력해 줍니다

두번째 "BH1750 I2C 1602" 예제를 살펴보면
#include <BH1750.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> 
위 세가지 라이브러리를 사용합니다

BH1750 lightMeter;
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2); 
I2C 1602 캐릭터 LCD 의 I2C 주소는 0x27 입니다
I2C 주소가 틀리다면 I2C 1602 캐릭터 LCD의 백라이트만 들어오고 글씨가 출력되지 않을수 있습니다
꼭 I2C 주소를 확인한 다음 테스트 합니다
I2C 1602 캐릭터 LCD의 I2C 주소 확인하는 방법

void setup() {
  Wire.begin();
  lightMeter.begin();
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("BH1750 Test");
  lcd.setCursor(0,1);
  lcd.print("Please wait...");
  delay(3000);
  lcd.clear();
}
void loop() {
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("Light Intensity ");
   lcd.setCursor(5, 1);
   float lux = lightMeter.readLightLevel();
   lcd.print(lux);
   lcd.print(" Lux");
   delay(2000);
}
조도 변화에 따른 출력값을 lux 로 계산해서 I2C 1602 캐릭터 LCD로 출력해 줍니다
delay 타임(2000)을 수정해서 테스트 해봅니다

프로젝트 동영상-아두이노 IDE 시리얼 모니터로 실내 조도 변화에 따른 출력값 변화 확인해 보기


프로젝트 동영상-I2C 1602 캐릭터 LCD 모듈로 실내 조도 변화에 따른 출력값 변화 확인해 보기 

반응형

댓글