인텔 갈릴레오2 측우기 만들기(LCD + 수위센서 + RGB LED)

 간단한 측우기를 만들어보려고 한다. 수위센서를 이용하여 강수량을 측정하고 이를 LCD에 출력해주는 간단한 모듈이다. LCD모듈을 제어하는 방법은 [인텔 갈릴레오2 LCD에 Hello, world 찍기(링크)]을 참고하기 바란다. 그리고 수위가 증가하면 빨간색 LED를 깜빡이고 수위가 감소하면 초록색LED를 깜빡이게 하였다.
준비물 : 준비물 : IIC/I2C LCD1602(HD44780 호환), 수위센서, RGB LED
 스케치 코드
/* Include the SPI/IIC Library */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
/* Initialise the LiquidCrystal library. The default address is 0x27 and this is a 16x2 line display */
LiquidCrystal_I2C lcd(0x27,16,2);
int preState;
int nowState;
void setup()
{
  preState = 0;
  nowState = 0;

  Serial.begin(9600);
  /* LCD모듈을 초기화 한다. */
  lcd.init();

  pinMode(3, OUTPUT); // Red
  pinMode(5, OUTPUT); // Green
  pinMode(7, OUTPUT); // Blue
 
  digitalWrite(3, HIGH);  // Red Off
  digitalWrite(5, HIGH);  // Green Off
  digitalWrite(7, HIGH);  // Blue Off
}
void loop()
{
  int level = analogRead(A0);    // 아날로그0 에 연결한 수위센서로부터 값을 읽어온다.
  Serial.print("Rainfall : ");   // 시리얼 모니터에 측정값을 출력한다.
  Serial.println(level);
  /* LCD백라이트를 켠다. */
  lcd.backlight();
  /* LCD내용을 출력한다. */
  lcd.setCursor(0,0);
  lcd.print("Rain Gauge");
  lcd.setCursor(0,1);
  lcd.print("Rain: ");
  lcd.print(preState);
  lcd.print("->");
  lcd.print(level);

  nowState = level;

  if(preState < nowState)
  {
    Serial.println("Rainfall +");
    digitalWrite(3, LOW);   // Red On
    digitalWrite(5, HIGH);  // Green Off
    digitalWrite(7, HIGH);  // Blue Off
  }
  else if(preState > nowState)
  {
    Serial.println("Rainfall -");
    digitalWrite(3, HIGH);  // Red On
    digitalWrite(5, LOW);   // Green Off
    digitalWrite(7, HIGH);  // Blue Off
  }
  else if(preState == nowState)
  {
    Serial.println("Rainfall ==");
    digitalWrite(3, HIGH);  // Red On
    digitalWrite(5, HIGH);  // Green Off
    digitalWrite(7, LOW);   // Blue On
  }
  preState = nowState;
  // 지연시간
  delay(500);

  lcd.init();
}
 기본 회로도

 스케치 코드 분석
 수위센서를 아날로그1번에 연결한다.
 RGB LED를 PWD 3번-Red, 5번-Green, 7번-Blue에 각각 연결을 하고 GND에 연결하는 한 가닥에는 저항을 하나 연결한다. 수위센서의 내용을 읽어와 LCD에 출력을 하고, 이전값과 비교하여 출력할 LED를 결정한다.

 회로 만들기
수위 센서를 연결한다. frizing에서 수위센서를 찾을수가 없어서 비슷한 모양으로 골랐다. 가장 오른쪽을 아날로그0번에 연결한다.
 RGB LED를 연결한다. GND는 수위센서와 공유한다.
  LCD I2C모듈을 연결한다. 이전 글을 참고해서 연결하면 된다. 수위 모듈에서 입력받은 값을 LCD모듈에서 출력한다.
 수위가 증가하면 빨간불, 감소하면 초록불, 변하지 않으면 파란불이 켜진다. 위 사진에서는 수위가 변하지 않았기 때문에 파란불이 켜졌다.
 아래 동영상에서 분무기를 이용하여 컵의 아래쪽에 물을 흘려내려 보내니, LCD에 표시되는 값이 증가하는 것을 볼 수 있다. 물뿌림을 중단하면 숫자값이 변화되지 않다가 작게나마 감소하는 것을 볼 수 있다.