SERENA: TFT LCD 터치스크린 탑재 아두이노 메가 2560 커스텀 알람 시스템
부품 및 소모품
| 부품 |
수량 |
| Arduino Mega 2560 |
1 |
| 3.2" TFT LCD 터치스크린 |
1 |
앱 및 온라인 서비스
프로젝트 소개
기존 알람 시스템들을 살펴보고 어떻게 작동하는지 분석한 후, 나만의 더 나은 시스템을 만들어보기로 했습니다. 컴퓨터 공학 전공자(학부생, 곧 졸업)로서 당연한 도전이었습니다.
이 프로젝트의 탄생
여러 시스템의 기능을 검토하고 내가 원하는 기능들을 단일 아두이노 보드에 통합해 알람 제어 패널로 만들기로 했습니다. 복잡한 건 없습니다. 보드와 3.2" 터치스크린만 구매하면 됩니다. 화면 구동을 위해 Henning Carlsen의 라이브러리(UTFT, URTouch)를 사용했습니다. 라이브러리 제공에 감사드립니다!
프로그램
완성하는 데 꽤 시간이 걸렸습니다. 코드가 복잡해 보여도 필요한 곳에 주석을 다 달아두었습니다!
알람 주요 기능
세 가지 다른 비밀번호를 구현했습니다: 4자리, 5자리, 6자리. 많아 보이지만 향후 업데이트에서 4자리 비활성화 옵션을 추가할 예정입니다.
- 4자리 비밀번호: 알람 무장(Arm)용
- 5자리 비밀번호: 알람 부분 해제(Partial Disarm)용
- 6자리 비밀번호: 알람 완전 해제(Full Disarm)용
자동 무장(Auto-arm) 기능: 5자리 코드 입력 후 카운트다운(기본 40초) 시작. 시간 초과 시 자동으로 다시 무장됩니다. 평소 알람 무장하는 걸 잊는 분들에게 유용합니다.
옵션 메뉴
옵션 메뉴에서 세 가지 비밀번호 모두 변경 가능하며, 자동 무장 시간도 설정할 수 있습니다.
향후 업데이트 예정 사항
- 날짜/시간 설정
- SD 카드 지원 (정전 시 데이터 보존)
- 자동 무장 비활성화 옵션
- 4자리 비밀번호 비활성화 옵션
- 기타 다수
시연 영상
(영상 링크)
코드
SERENA v.1.01 (아두이노)
아두이노 보드에 업로드만 하면 됩니다. 일부 주석은 그리스어로 되어 있는데 곧 변경할 예정입니다.
////////////////////////////////////////////////////////////////////////////////
// SERENA Alarm System
// Author: Michael Marinis
// Copyright (C)2016 Michael Marinis. All Rights Reserved
// Website: https://www.youtube.com/SauROnmiKE
//
// UTFT & URTouch 라이브러리(Henning Karlsen) 및 호환 LCD 실드 필요
////////////////////////////////////////////////////////////////////////////////
#include <UTFT.h>
#include <URTouch.h>
UTFT myGLCD(ITDB32WC, 38, 39, 40, 41);
URTouch myTouch(6, 5, 4, 3, 2);
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
int x, y;
int armpass[4] = {1, 2, 3, 4}; // 4자리 무장 비번
int autopass[5] = {1, 2, 3, 4, 5}; // 5자리 자동무장/해제 비번
int manualpass[6] = {1, 1, 1, 1, 1, 1}; // 6자리 완전해제 비번
int timeinput[4], arminput[4], autoinput[5], manualinput[6];
int autolength = 0, manuallength = 0;
int buzzerpin = 8, systarm = 9, serenapin = 10, buttonpin = 13;
int autoarmtime = 40, autoarmtimemem = autoarmtime;
int month = 1, day = 1, year = 2016;
// ... 화면 그리기 함수들 (alarmtitle, drawbutton1, drawbuttons 등) ...
void setup() {
myGLCD.InitLCD();
myGLCD.clrScr();
myTouch.InitTouch();
myTouch.setPrecision(PREC_EXTREME);
pinMode(buzzerpin, OUTPUT);
pinMode(systarm, OUTPUT);
pinMode(serenapin, OUTPUT);
digitalWrite(buzzerpin, HIGH); delay(1000); digitalWrite(buzzerpin, LOW);
title();
drawoptions();
drawarm();
}
void loop() {
while (true) {
mainmenu:
if (myTouch.dataAvailable()) {
myTouch.read();
x = myTouch.getX(); y = myTouch.getY();
// OPTIONS 버튼 터치 시
if ((x >= 20) && (x <= 300) && (y >= 70) && (y <= 120)) {
options: optionsmenu();
// 비밀번호 변경 메뉴 진입 로직...
// (코드 길이상 생략, 전체 코드는 다운로드 참조)
}
// ARM 버튼 터치 시 - 4자리 비번 입력 화면
// DISARM 버튼 터치 시 - 5자리 비번 입력 화면
// 완전 해제 - 푸시버튼으로 진입 (6자리 비번)
}
}
}
전체 코드는 길어 생략했습니다. 다운로드하여 확인하세요.