Arduino Uno 로 우적센서를 사용해서 부저와 LED를 활성화 시켜서 빗방울 감지 경보 키트를 만들어 보고
아두이노 시리얼 모니터와 LCD로 출력값 변화를 확인해 보는 프로젝트 입니다
우적센서는 저렴한 가격에 아두이노나 그밖의 AVR, STM, PIC 등의 마이크로 컨트롤 보드와 연결해서
간단하고 쉽게 빗방울을 감지하고 모니터링 하기 적합한 제품입니다
디지털(0과1)과 아날로그(전압출력) 출력이 가능하며, 가변저항이 달려 있어서 돌려서 감도 조정을 할 수 있습니다
1602 캐릭터 LCD의 핀맵은 아래와 같습니다 (스탄다드 핀맵의 핀맵만 아래와 같다면 다른 LCD로도 큰 문제없이 테스트 가능합니다)
사용된 부품
Arduino Uno R3 (Italy)
우적센서 모듈
1602 Character LCD - (QAPASS 1602A)
브래드 보드
가변저항 10K Ohm
5mm LED - 블루
Active 능동부저 5V
막대저항 220 (Ohm)
점퍼케이블
사용된 키트
구성 배선도-빗방울 감지시 LED 점등시켜 보기
구성 배선도-빗방울 감지시 부저 울리고 LCD로 출력값 확인해보기
구성 배선도-빗방울 감지시 LED 점등 시키고 LCD로 출력값 확인해보기
사용된 예제소스
주의사항
위 세가지 첨부된 예제를 위 세가지 배선도 순서대로 테스트 하면 됩니다
첫번째 Rain Sensor 예제는 "빗방울 감지시 LED 점등시켜 보기" 예제입니다
예제 코드는 아주 간단합니다
int led = 3;
int sensor = 2;
void setup()
{
pinMode(led, OUTPUT);
pinMode(sensor, INPUT);
}
void loop()
{
if( digitalRead(sensor) == LOW )
digitalWrite(led, HIGH);
else
digitalWrite(led, LOW);
delay(100);
}
우적센서 연결 핀은 2번 이며, LED 연결 핀은 3번 입니다
2번 우적센서 감지시 3번 LED가 HIGH 로 점등되는 간단한 예제입니다
시리얼 통신속도 9600, 딜레이 타임(100);
두번째 Rain Sensor_Buzzer 예제는 "빗방울 감지시 부저 울리고 LCD로 출력값 확인해보기" 예제입니다
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // RS, En, D4, D5, D6, D7
int rainSen_pin = A0;
int Buzzer_pin = 13;
LiquidCrystal.h 라이브러리를 사용하는것을 확인할 수 있습니다 (아두이노 IDE 기본 설치시 설치되는 라이브러리 입니다)
1602 LCD 핀맵도 확인 가능합니다 D2~D7번까지 배선합니다, 아시다시피 1602LCD의 1,2번핀은 전원핀 15,16은 백라이트 입니다
우적센서 아날로그 출력핀은 아두이노의 A0에 연결합니다
부저는 13번 핀에 연결 합니다
void loop() {
int RainSenReading = analogRead(rainSen_pin);
Serial.print("SensorValue:");
Serial.print("\t");
Serial.print(RainSenReading);
Serial.print("\t");
if (RainSenReading <= 800)
{
digitalWrite(Buzzer_pin, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Rain Water Alam");
lcd.setCursor(0, 1);
lcd.print("Status: ");
lcd.setCursor(8, 1);
lcd.print("Rain");
Serial.println("Rain");
}
else
{
digitalWrite(Buzzer_pin, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Rain Water Alam");
lcd.setCursor(0, 1);
lcd.print("Status: ");
lcd.setCursor(8, 1);
lcd.print("No Rain");
Serial.println("No Rain");
}
delay(250);
}
void loop() 부분을 보면
if (RainSenReading <= 800)
아날로그 0~1023 값중 800 밑으로 출력값이 나오면 부저가 울리고 LCD에 Water Alam Status: Rain 이 출력되게 되어 있습니다
하단 동영상에서 보면 알 수 있듯이 빗방울이 감지 안될때는 아날로그 출력값이 900대 이고, 감지되면 800대 이하로 떨어집니다
Buzzer_pin HIGH 와 LOW 일때 시리얼 모니터와 LCD로 출력되는 부분 확인 가능합니다
세번째 Rain Sensor_Led 예제는 "빗방울 감지시 LED 점등 시키고 LCD로 출력값 확인해보기" 예제입니다
예제코드는 두번째 예제코드와 동일합니다 Buzzer_pin 대신 Led_pin 으로 변경 되었습니다
스케치 업로드시 컴파일 에러도 없었고, 배선도 문제 없는데 만약 LCD가 안나온다면?
1. A(전류) 부족입니다 (0.8A 이상되는 PC나 노트북에 연결-LCD나 모터는 전류를 많이 소모합니다)
2. 아두이노의 RST 버튼을 눌러 줍니다 (스케치 업로드 후 아두이노의 RST 버튼을 눌러줍니다)
3. 가변저항(전위차계)를 돌려서 LCD의 콘트라스트를 조절합니다
프로젝트 동영상-빗방울 감지시 LED 점등시켜 보기
프로젝트 동영상-빗방울 감지시 부저 울리고 LCD로 출력값 확인해보기
프로젝트 동영상-빗방울 감지시 LED 점등 시키고 LCD로 출력값 확인해보기
일본 SUNLIKE 사의 LCD 모듈을 사용한 동영상 (예제코드와 배선도는 아래 제품 리뷰링크를 확인해 주세요)
우적센서(Rain Sensor) 모듈 리뷰
추가로 우적센서를 사용해서 빗방울감지시 서보모터를 제어해 보는 프로젝트 입니다
구성 배선도
사용된 예제소스
주의사항
가장 주의해야 할 점은 마이크로 서보모터이긴 하지만 SG90 서보모터 역시 제대로 동작하려면
안정적인 전압과 전류가 필요하므로 빗방울 감지 우적센서와 별도의 전압으로 5V로 연결해 줍니다
빗방울 감지 우적센서는 3.3V 에도 동작하므로 SG90 서보모터와 별도로 3.3V로 연결해 줍니다
예제코드를 살펴보면
#include <Servo.h>
기본 Servo.h 라이브러리를 사용합니다
int pinIR=5; //IR sensor digital pin
int pinServo=3; //servo motor pin
int pinLED=2;
int val=0;
빗방울 감지 우적센서는 아두이노 5번핀
SG90 서보모터는 아두이노 3번핀
LED는 아두이노 2번핀에 연결합니다
2번핀에는 부저를 연결해도 무관합니다 (부저의 소리를 크게 하기 위해서는 저항을 빼고 연결합니다)
void setup(){
Serv.attach(pinServo);
pinMode(pinLED,OUTPUT);
}
셋업에서 센싱값을 받아서 서보모터와 LED를 동작시킵니다
void loop(){
val = digitalRead(pinIR);
if (val ==0) {
Serv.write(10);
digitalWrite(pinLED,HIGH);
delay(100);
}
else{
Serv.write(150);
digitalWrite(pinLED,LOW);
delay(100);
}
}
루프에서 if문을 사용해서 디지털 센서값을 읽어서
빗방울이 감지되었을 때는 서보모터가 10도 복귀하며 LED가 켜집니다
else문을 사용해서 그밖의 빗방울이 감지되지 않았을 때는 서보모터가 150도로 움직이고 LED가 꺼집니다
예제코드의 Serv.write(10); 10도 또는 Serv.write(150); 150도를 적당하게 바꾸어서 테스트 가능합니다
하단 동영상에서는 150도로 테스트 해보았습니다 (SG90 서보모터는 180도 회전이 가능하니 수정해서 테스트 해보세요)
프로젝트 동영상
이렇게 아두이노로 빗방울이 감지되면 LED가 켜지거나 경보가 울리면서 모터가 동작하는 방법을 응용하여
식물 하우스 등의 지붕이 비가오면 열고 닫을수 있게 하는 구조물의 제작원리를 공부해 볼수 있습니다
댓글