[아두이노] 토양수분 측정기

IOT/아두이노|2019. 7. 9. 09:00

[아두이노] 토양수분 측정기



지난 시간에 토양수분센서 값을 간단히 출력하는 실험을 하였습니다. 오늘은 토양수분센서로 측정한 값을 어떤 출력방식을 상상할지 고민하다가 LCD16x2에 센서값을 출력하도록 하여 간단히 토양수분 측정기를 만들어보는 실험을 해 보겠습니다.


1. 토양수분 측정기 회로도


  • 준비물 : LCD16x2 I2C 모듈, 토양수분센서, 아두이노우노
  • 내용 : 아두이노우노 A0핀을 토양수분센서의 A0에 연결하고 LCD16x2 I2C 모듈에 SDA(A4), SCL(A5)핀에 연결하시오
  • 참고 : [아두이노] LCD16x2 I2C(LiquidCrystal_I2C) 제어

LCD16x2 I2C 모듈에서 I2C통신에 사용되는 아두이노우노 A4, A5핀에 주의해서 연결하시면 나머지는 연결하는데 어려움이 없습니다.


3. 코딩



[함수]

LiquidCrystal_I2C lcd(0x3F,16,2);  // 0x27 or 0x3F
  • 초기화 : lcd.init()
  • 배경 : lcd.backlight()
  • 커서위치 : lcd.setCursor(0, 0)
  • 출력 : lcd.print("문자열")

추가 함수는 참조 링크된 곳에 가셔서 "LiquidCrystal_I2C.h"파일에 가셔서 함수명들을 살펴보시기 바랍니다.

[기존소스]

void setup() {  
  Serial.begin(9600);
}
void loop() {
  int val = analogRead(A0);  //토양수분센서값 읽기
  Serial.println(val);
  delay(1000);
}

LCD16x2 I2C모듈에 결과를 출력하는 코딩을 추가하시면 됩니다.

종합해보면,

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x3F,16,2);  // 0x27 or 0x3F

void setup() {    
  lcd.init(); //초기화
  lcd.backlight(); //배경불켜기
  lcd.setCursor(0, 0);
  lcd.print("Sensor Start!");
  delay(1000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Moisture Sensor");
  lcd.setCursor(0, 1);
  lcd.print("value : ");
}
void loop() {
  int val = analogRead(A0);   
  lcd.setCursor(9, 1);
  lcd.print(val);    
  delay(1000);
  lcd.setCursor(9, 1);
  lcd.print("    "); //센서값0~1023사이가 값이 출력되기 때문에 4칸을 공백처리하면 센서값만 지울 수 있음.
}

lcd.setCursor(0, 0)은 첫줄의 0번째 위치에 커서가 위치합니다. 이 함수 뒤에 lcd.print(값)함수로 출력함수를 표현하면 커서의 위치에서부터 값이 출력됩니다. lcd.setCursor(9, 1)함수는 두번째 줄의 9번째칸의 커서가 위치하고 그 9번째 칸부터 lcd.print(값)함수의 출력값이 LCD16x2에 출력됩니다.

혹시, LCD16x2 I2C모듈에 관한 위 코딩이 이해가 안되신다면 사전학습으로 링크 걸어놓은 post를 한번 읽고 오세요.

4. 결과


이번 실험에서도 토양에 직접 토양수분센서를 꼽지 않고 손에 물을 묻혀서 측정하는 방식을 선택했습니다. 그리고 PC USB로 전원을 공급 받았는데 외부 건전지를 이용해서 아두이노우노를 자유롭게 분리해 냈습니다. 이동식 토양수분측정기로 만들었는데 모양을 이쁘게 케이스로 만들었다면 손전등같은 형태로 측정기를 만들었을텐데 그러지는 못했네요.

아무튼 손으로 토양수분센서를 만지면 LCD16x2 I2C 모듈에 측정된 센서값이 아래 동영상에서 보는 것처럼 정상적으로 출력되었네요.


5. 추가 출력 방식


1) Bluetooth 응용


Bluetooth를 이용하여 스마트폰으로 토양수분센서를 출력할 수 있습니다.

위 링크된 조도센서값을 Bluetooth를 이용하여 스마트 폰에 센서값을 출력한 예제에서 토양수분센서 부분만 수정하면 됩니다.

스마트폰으로 토양수분센서값을 전송 받을 수 있게 된다면 많은 것들을 할 수 있습니다. 가령 화분에 토양수분센서가 꼽아져 있으면 화분에 수분상태를 실시간으로 스마트폰으로 확인이 가능합니다. 화분에 물주는 시기를 스마트폰으로 확인이 가능해 지겠죠. 그리고, 토양수분상태를 확인하고 물을 줘야 할 상황이면 자동으로 물을 줄 수 있으며 아니면 스마트폰으로 물주는 명령을 아두이노 수동으로 명령을 내릴 수 도 있습니다. Bluetooth 대신에 wifi모듈을 이용한다면 화분이 있는 위치에서 벗어난 외부에서도 화분 토양수분상태를 확인이 가능해지고 외부에서 화분에 물을 줄지를 원격으로 제어할 수 있습니다.

2) LED or 피에조부저 응용


위 링크된 LED와 피에조부저를 이용하면 토양의 현재 수분상태를 LED Color로 시각적으로 표현이 가능합니다. 그리고 피에조부저를 이용하면 수분상태를 소리로도 표현이 가능합니다. 어떻게 이용하느냐에 따라서 다양한 응용이 가능합니다.

마무리


오늘은 토양수분 측정기를 만들어 보았습니다. 측정기를 만들었지만 이 토양수분센서를 통신에 이용하면 더 많은 것들을 할 수 있습니다. 응용으로는 식물을 재배하는 곳에 설치하면 모터펌프를 이용해서 자동으로 토양에 물을 줄 어 식물재배에 이용할 수 있습니다. 또는 주기적으로 토양수분상태를 측정하게 되면 이 데이터로 토양의 수분상태의 정보를 수집하여 그 정보를 토대로 토양수분변화를 분석하는 통계 자료로 활용할 수 있습니다. 즉, 토양수분값을 어떤 방향으로 상상하느냐에 따라서 그 활용도는 넓습니다.

여러분들은 토양수분센서가 있다면 무엇을 하고 싶은지 상상의 나래를 펼쳐 보세요.


댓글()