본문 바로가기

아두이노 수경재배

아두이노로 만드는 수경재배 장치; 6. 조도계 (광센서)

아두이노로 만드는 수경재배 장치 목차

1. 아두이노 시작하기

2. 아두이노 IDE

3. 첫 번째 아두이노 개발

4. 온도, 습도계 v 1.0

5. 온도, 습도계 v 2.0

6. 조도계 (광센서)

7. 시간 지연 릴레이 (자동 스위치)

8. 와이파이 연결 (ESP 01) - 1

9. 와이파이 연결 (ESP 01) - 2

 

오늘은 식물의 성장 설계하는데 꼭 필요한 조도계 (빛의 양을 측정할 수 있는 아두이노 장치)를 만들어 보려고 한다.

 

조도계에 사용한 광센서는 BH1750FVI 로 지난번에 같이 구매했다.

인터넷에서 광센서의 사양을 찾아보니,

Operation Condition

  • VCC Voltage Typical = 3.0 V
  • Current Typical = 120 µA

아두이노가 보통 사용하는 전압은 5V인데, 다행히 3V 전압을 제공하는 핀을 제공한다. 그런데, 5V만을 사용하는 만능기판으로 장치를 제작한다면 어떻게 할까 한번 생각해 봤다. 오래전에 배웠던 전압 분배의 법칙을 사용해서 설계하면 될 것 같다.

1. 전압 분배의 법칙

출처: 위키피디아

아두이노가 사용하는 전압은 5V, 즉 Vin은 5V이다. 우리가 원하는 전압은 Vout에서 찾으면 되고 Vout은 센서의 전압 3V이다. 따라서, 전체 R1 + R2 를 R로 뒀을 때 센서의 전류 120 µA 이 나오도록 하면 41.666K정도가 될 테니, R1과 R2를 계산하면

R2 = 3 / 0.00012 = 25K이고

R1 = 42 K - 25 K = 17K이다. 이런 값을 가진 저항이 없으니, R1을 22K로 쓰면 R2는 33K를 사용하면 대략 R1, R2의 비 가 맞는다.

 

하지만 프로토타입 쉴드에는 3V를 쉽게 뽑을 수 있으니, 일단 이 방식은 나중에 필요하면 쓰고 그냥 3V를 뽑아 쓰기로 했다.

2. 회로의 구성 1차

 

광센서 BH1750FVI의 연결선을 보니,

  1. VCC
  2. SCL
  3. DAT
  4. GND
  5. ADDR (3.3V에 연결하면 0x5C, 연결하지 않으면 0x23이 I/O 주소)

로 표시되어 있는 것으로 보아 I2C방식으로 통신을 하고 있는 것으로 보이며, SCL이 Serial CLock이니 DAT가 아마 Serial DAta일 것으로 추측된다. ADDR이 있으니 아마 I2C통신을 할 때 사용하는 Address를 이 선으로 변경할 수 있을 것으로 보이는데, 딱히 그럴 일이 없을 것 같아 ADDR선은 연결하지 않는 것으로 했다. 이제 조도계를 만드는 회로를 그려보면,

출처: randomnerdtutorials.com (BH1750 그림이 없어 인터넷에서 가져옴)

 

3. 스케치 프로그램 1차

먼저, 광센서 BH1750FVI를 연결하기 위한 라이브러리를 아두이노 IDE의 Library Manager에서 찾아 설치한다.

 

이제 More info 링크를 눌러 이전처럼 example에 있는 아래와 같은 "BH1750FVI_4Wire.ino" 프로그램을 사용하여 테스트해 보자.

 

GitHub - PeterEmbedded/BH1750FVI: Digital Light Sensor

Digital Light Sensor. Contribute to PeterEmbedded/BH1750FVI development by creating an account on GitHub.

github.com

 

...

#include <BH1750FVI.h>

// Create the Lightsensor instance
BH1750FVI LightSensor(BH1750FVI::k_DevModeContLowRes);

void setup() 
{
  Serial.begin(115200);
  LightSensor.begin();  
}

void loop()
{
  uint16_t lux = LightSensor.GetLightIntensity();
  Serial.print("Light: ");
  Serial.println(lux);
  delay(250);
}

 

프로그램을 복사해 아두이노 IDE로 옮기고 Upload 버튼을 사용해서 올리고 나면, Serial Monitor 버튼을 눌러 아래와 유사한 결과를 확인할 수 있다.

 

4. 회로 구성 2차

온도, 습도계 V2.0에서 설명한 것과 같이 I2C 프로코콜을 사용하면 I2C 방식을 사용하는 여러 개의 구성 요소들을 한 쌍의 SCL, SDA선을 사용해서 모두 연결하면 된다. 이제 I2C방식의 LCD와 광센서를 연결해 조도계를 완성하고 LCD로 빛의 양을 표시해 보자.

 

브레드 보드를 이용해서 SCL끼리 연결하고, SDA끼리 연결하도록 구성하고 나머지는 전원선만 연결하면 조도계가 완성된다.

5. 스케치 프로그램 2차

온도 습도계를 만들면서 이미 설치한 LiquidCrystal_I2C 라이브러리를 사용하여 LCD화면에 빛의 양을 표시하도록 프로그램을 수정하면 다음과 같이 된다. 깜빡임을 줄이기 위해 delay는 2초로 바꿨다.

 

#include <BH1750FVI.h>
#include <LiquidCrystal_I2C.h>

// Create the Lightsensor instance
BH1750FVI LightSensor(BH1750FVI::k_DevModeContLowRes);

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() 
{
  Serial.begin(115200);
  LightSensor.begin();

  lcd.init();  // initialize the lcd
  lcd.backlight();
}

void loop()
{
  uint16_t lux = LightSensor.GetLightIntensity();
  Serial.print("Light: ");
  Serial.println(lux);

  lcd.clear();          // clear display
  lcd.setCursor(0, 0);  // move cursor to   (0, 0)
  lcd.print("Light: ");
  lcd.print(lux);

  delay(2000);
}

 

이렇게 만든 조도계를 사용해서 모종을 배양 중인 방의 빛의 양을 측정해 보고 식물이 필요한 빛에 대해 좀 더 정확한 관리를 할 수 있게 되었다.

 

알리익스프레스에서 조도계를 구매하면 아마 아두이노로 만들 것보다 비쌀까?