두번째 프로젝트는 RTC모듈을 이용한 알람시계이다.
RTC이란 Real Time Clock의 약자이며 쉽게 '시계'라고 생각하면 된다.
내부적으로 시간을 연산하는 프로그램을 갖고 있어서 초기값만 설정해 준 후 전원만 연결하면 실제시계와 똑같이 동작한다.
처음 RTC모듈을 접했다면 대부분 Serial화면으로 출력하는 법 먼저 배웠을 것이다.
그러나 아두이노는 제품을 만들 수 있는 장점이 있는데 왜 PC화면으로만 출력을 하는가?
보드에 RTC뿐만 아니라 LCD화면과 피에조 부저, LED, 블루투스 통신이 가능하도록 PC와 독립적인 알람시계를 만들어 보자!
준비물
RTC모듈, LCD패널(I2C), HC-06, 피에조부저, RLED, 9V배터리, 여러 점퍼선과 저항
설계 방법
1. RTC모듈에 초기값(현재시간), 알람을 울릴 시간을 프로그램으로 설정해준다.
2. LCD화면에 현재시간을 띄운다.
2-1) 첫째줄에 (연 / 월 / 일 / 요일)을 띄우고
2-2) 둘째줄에 (시 : 분 : 초)를 띄운다.
3. 알람시간이 되면 LED가 점등을 하고 피에조 부저를 울린다.
4. 블루투스 통신을 하여 스위치로 OFF할 수 있도록 한다.
5. 9V배터리를 연결하여 PC와 독립적인, 별개의 시계처럼 사용한다.
소스코드
#include <virtuabotixRTC.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include<hd44780.h>
#include<hd44780ioClass/hd44780_I2Cexp.h>
virtuabotixRTC myRTC(22, 24, 26);
LiquidCrystal_I2C lcd(0x27, 16, 2);
int piez = 30;
int led = 32;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
myRTC.setDS1302Time(30, 11, 18, 5, 1, 7, 2021); //rtc 현재시간 설정
pinMode(piez, OUTPUT); //피에조
Serial.begin(9600);
Serial1.begin(9600); //블루투스 시작
pinMode(led, OUTPUT);
}
void loop() {
myRTC.updateTime();
lcd.setCursor(1, 0);
lcd.print(myRTC.year); //연
lcd.print("/");
lcd.print(myRTC.month); //월
lcd.print("/");
lcd.print(myRTC.dayofmonth); //일
lcd.print("/");
switch (myRTC.dayofweek) { //요일
case 1:
lcd.print("Sun");
break;
case 2:
lcd.print("MON");
break;
case 3:
lcd.print("TUE");
break;
case 4:
lcd.print("WED");
break;
case 5:
lcd.print("THU");
break;
case 6:
lcd.print("FRI");
break;
case 7:
lcd.print("SAT");
break;
}
lcd.setCursor(5, 1);
lcd.print(myRTC.hours);
lcd.print(":");
lcd.print(myRTC.minutes);
lcd.print(":");
lcd.print(myRTC.seconds);
if (myRTC.hours == 18 && myRTC.minutes == 11 && myRTC.seconds == 35) { //알람시간설정
tone(piez, 698);
digitalWrite(led, HIGH);
}
if (Serial1.available()) { //블루투스로 데이터가 들어오면
char ch = Serial1.read(); //ch변수로 데이터 받기
Serial1.write(ch); //모니터 프로그램에 출력
switch (ch) {
case '1':
noTone(piez);
digitalWrite(led, LOW);
break;
case '2':
noTone(piez);
digitalWrite(led, LOW);
break;
}
}
if (Serial.available()) {
Serial1.write(Serial.read());
}
delay(1000);
lcd.clear();
}
사진 및 동영상
결론 및 느낀점
이번 프로젝트는 일상생활에서 흔시 사용되는 모듈 3개를 융합시켜보았다.
시계, LCD화면, 블루투스 이것들은 우리가 평소에 사용하면서 그저 각각의 기능만 갖고있는 줄 알았지만
사실 전부 융합되어 있어서 결국엔 하나의 시스템을 갖추고 있다는 사실을 알게 되었다.
나는 단순히 3개의 모듈만 연결시키는것도 어려웠는데 PC, 스마트폰은 대체 얼마나 복잡하게 설계가 되어있기에
작은 공간안에 수많은 기능을 할 수 있는지 다시한번 놀랐다.
또한 이번 경험을 통해 임베디드에 살짝(?)가까워진 느낌도 들었고
우리가 사용하는 전자제품은 전부 센서의 조합인 것을 알게 되었다.
지금은 비록 단순한 알람시계를 만들었지만 더 나아가서 언젠간 고성능의 시제품을 개발할 수 있는날까지 끝까지 도전하자!!
'아두이노 > 프로젝트' 카테고리의 다른 글
[아두이노] 위치에 따라 회전하는 선풍기(다중초음파센서 제어) (4) | 2021.07.11 |
---|---|
[아두이노] 신호등 프로젝트(초음파, 7세그먼트, 피에조부저) (0) | 2021.06.26 |