테크/프로젝트

[아두이노] 알람시계 프로젝트(RTC, LCD, 블루투스)

시그널보내 2021. 7. 1. 19:58

두번째 프로젝트는 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();
}

사진 및 동영상

왼) 전원연결X                                                                                   오) 전원연결O

 


결론 및 느낀점

이번 프로젝트는 일상생활에서 흔시 사용되는 모듈 3개를 융합시켜보았다.

 

시계, LCD화면, 블루투스 이것들은 우리가 평소에 사용하면서 그저 각각의 기능만 갖고있는 줄 알았지만

 

사실 전부 융합되어 있어서 결국엔 하나의 시스템을 갖추고 있다는 사실을 알게 되었다.

 

나는 단순히 3개의 모듈만 연결시키는것도 어려웠는데 PC, 스마트폰은 대체 얼마나 복잡하게 설계가 되어있기에

 

작은 공간안에 수많은 기능을 할 수 있는지 다시한번 놀랐다.

 

또한 이번 경험을 통해 임베디드에 살짝(?)가까워진 느낌도 들었고 

 

우리가 사용하는 전자제품은 전부 센서의 조합인 것을 알게 되었다.

 

지금은 비록 단순한 알람시계를 만들었지만 더 나아가서 언젠간 고성능의 시제품을 개발할 수 있는날까지 끝까지 도전하자!!