SlideShare a Scribd company logo
1 of 32
한수빈
안드로이드, IoT 포트폴리오
스마트 램프와 수면관리
Application
tearightss@gmail.co
m
1
목차
2
• 프로젝트 개요
프로젝트
3
• 프로젝트 주요기능 5
• 프로젝트 구성도 6
• 기기간 통신 구성 7
스마트 램프
• 스마트 램프 내부 8
• 스마트 램프 코드 블록 9
• 스마트 램프 메인 루프 10
• 스마트 램프 LED 명령처리 방식 11
어플리케이션
• 어플리케이션 최초 시작 12
• 사용자 테스트 13
• 회원 등록 14
• 스피너 사용 15
• 위치 찾기 16
• MainActivity 17
• App에서의 블루투스 통신 19
• Bluetooth 메뉴 20
• 홈 메뉴 21
• 조명 메뉴 22
• 조명 메뉴 - 세부화면 23
• 모니터링 메뉴 24
• 내 정보 메뉴 25
• 내 정보 메뉴 - 수면정보 26
• 설정 27
• PendingIntent를 사용하는 기능의 구조 28
• 노티피케이션 서비스 29
• 기상 알람과 날씨 알림 30
• 미흡한 점 31
• 프로젝트명 : SleepKit
• 프로젝트 목표 : 스마트 램프를 통한 컬러 테라피와 앱을 활용한 램프 제어 및 수면 관리에 도움
• 담당파트 : 기획, 하드웨어 프로그램 및 앱 개발(1인 개발)
• 사용언어 : Java(Android), C(Arduino)
• 안드로이드 사용 라이브러리 : android support lib(v7:22.2.0), simplebluetoothlibrary, material-dialogs,
MPAndroidChart
• 개발기간 : 6개월(하드웨어, App)
프로젝트 개요
3
• 먼지, 온습도 센서가 부착되어 있는 스마트 램프와 안드로이드 Application으로 구성되어 있음
• 스마트 램프는 Arduino와 주변 센서들을 이용해서 만들어졌고, App과의 블루투스 연동을 통해 제
어됨
스마트 램프 SleepKit App
프로젝트 개요
4
App
• 블루투스 연동을 통하여 스마트램프 제어
• 기상 직후 설문을 통한 수면 자가진단
• 노티피케이션을 이용한 수면 조언
• 수면기록을 토대로 차트 표현
• 기상 시 알람과 함께 날씨 알림
스마트 램프
• Led Dimming(끄기, 켜기, 점점 어두워지기, 밝아지기, 주기적인 색상변환 등)
• Led를 이용한 알람 기능
• 센서를 통한 수면환경 측정(먼지농도, 온습도)
프로젝트 주요기능
5
Product
MCU
LED Light
Sensor
온습도 미세먼지
Bluetooth
Module
SEND RECEIVE
sensor data
control command
schedule
(alarm)
앱
프로젝트 구성도
6
기기간 통신 구성
• 기기간 통신은 블루투스 페어링을 사용
• 메시지 문법을 정의하여 문법대로 통신
7
• Arduino(With Bluetooth)
• Grove Temp, Humi Sensor
• Dust Sensor
• Led Strip
스마트 램프 내부
8
Setup
센서, LED 초기화
EEPROM에서
이전 설정 불러오기
타임 인터럽트 설정
출력버퍼 비우기
Loop
블루투스 명령어 받기
(LED 모드 변경, 센서 값 출력)
센서 값 읽기
요청 받은 명령 처리
(LED 모드 변경, 센서 값 출력)
Time
Interrupt
LED Dimming 스케줄에
따른 Led 제어
기기 전원 On시 실행 프로그램 메인 루프 루프도중 주기적으로 실행
스마트 램프 코드 블록
9
스마트 램프 메인 루프
요청 목록(배열)
명령어 해
석
센서 값 읽기명령 처리
저장불러오기
• 명령어 해석 단계에서 블루투스 읽기버퍼가 빌 때 까지
명령어 해석 후 해석마다 배열에 해석된 명령어 저장
• 센서 값 읽기 단계에서 센서 값을 읽은 후 센서 값 배열에
저장
• 배열에 존재하는 해석된 명령어들을 인덱스 순서대로 처리
10
스마트 램프 LED 명령처리 방식
명령 처
리
현재 스케줄에 따른
변수처리
(RGB 변수[] 등)
LED 작동(RGB 변수[])
조건 분기에 따른 스케줄 인덱스
증가
Time Interrupt
끄기 색1 설정 루프색2 설정 색2로 변화색1 시작
LED 스케줄 배열
EX )
LED 모드, 색1, 색2, 시간 등 전달
LED 스케줄 배열에 스케줄 배정, 매개변수
저장
11
• Shared Preference를 통해 앱의 첫 구동을 확인, 사용자 가입을 하도록 유도
어플리케이션 최초 시작
12
• 3지선다의 성격유형 테스트와 2지선다의 수면유형 테스트를 진행
• 수면타입 지도를 배열의 형태로 짜서 yes, no에 따라 정해진 답으로 가도록 유도
사용자 테스트
13
• 회원등록 화면은 Activity 한 개와 9개의 정보입력 Fragment로 구성, 각각의 Fragment는
JoinFragment라는
추상클래스를 상속받으며, JoinFragment에는 회원정보를 Activity로 전달하기 위한 Listener와 다음 목
적지 Fragment를 set, 그 이외에 필요한 과정은 인터페이스를 사용하여 획일화 하고 공통되는 과정은
Override함
회원 등록
14
• 회원등록 절차에 스피너가 많아 스피너를 생성하는 클래스를 구현하여 스피너 사용
• 스피너 내용을 입력하는 메소드와 아이템이 선택되었을 때 이벤트 메소드를 인터페이스화
하여
사용
//스피너에 사용되는 Item List를 작성하여
반환
//스피너의 아이템이 선택되었을 때 호출 됨
스피너 사용
15
• Material Dialog 라이브러리를 사용하여 Material 형태의 다이얼로그 사용
• GPS가 켜져있지 않으면 GPS를 키도록 함
• 구글 API, GeoCoder 클래스를 이용하여 현 위치의 좌표를 얻고 ~시 ~구 까지 지역 이름
을 알 수 있음
위치 찾기
16
App 설명
• 가입 이후 MainActivity로 이동하게 됨. MainActivity는 위와 같은 구조로 구성되어 있음
• 메뉴 이동을 위한 Navigation Drawer 구성과 Toolbar가 화면에 적용되어 있음
• Toolbar, NavDrawer는 Activity단에서 제어함
Fragment
Toolbar
Navigation Drawer
MainActivity
17
• MainActivity는 그림과 같은 기능을 담당
• 회원가입 이후 모든 화면은 MainActivity에 BluetoothFragment가 Attach 되어 보여짐
Toolbar
Option
Menu
Bluetooth 객체
Navigation Drawer
Fragment와의 메시
지 교환을 위한
Listener
Fragment 관리
MainActivity
MainActivity 역
할
Bluetoot
h
Fragmen
t
extends
BaseFragment
BaseFragm
ent
Backstack 관리
Fragment
Manager 의 함수
사용
extends Fragment
Attach
18
• 블루투스 통신 자체는 오픈소스 라이브러리를 활용하였고, 블루투스 객체는 MainActivity에서 관리된다.
• 메시지 Send는 MainActivity의 sendMessage 메소드를 활용, 메시지 Receive는 Activity에 Listener를
등록하여 이벤트가 일어났을 때 Listener로 Callback 하도록 하였다.
• BluetoothFragment를 상속하는 Fragment는 Attach시 자동으로 activity에 Listener를 생성하여 등록
을 하며,
App에서의 블루투스 통신
BluetoothFragment
protected abstract MainActivity.BluetoothLister
createListener();
public void onAttach(… …)
{
MainActivity.BluetoothListener = return
createListener();
}
MainActivity
void
onBluetoothReceive(String s)
{
if(bt != null) bt.call(s);
}
private BluetoothListener bt;
public void
sendMessage(String s)
{
…
}
19
• Toolbar의 Bluetooth메뉴는 어떤 메뉴에서든 실행할 수 있음
• 블루투스가 켜져 있지 않을 시 그림과 같이 확인 메시지가 뜸
• 페어링 목록에 있지않은 기기는 Scan을 하여 목록에 추가 가능
Bluetooth 메뉴
20
• 등록 시 기입했던 정보를 보여줌
• 앱 이용시 취침, 기상버튼을 통해 기록한 정보가 sqlite에 저장되어 최근 수면을 잘 했는지 분석하여 3가지 상태로 표현
• 현재 시간과 취침시간을 비교하여 현재까지의 수면조언을 보여줌, Layout에 addView 되는 형식으로 차곡차곡 조언이 누적된다.
• 취침, 기상버튼으로 취침, 기상시각을 sqlite에 저장하고, 만약 램프와 페어링되어 있다면 램프를 수면모드로 바꾸거나 해제한다
• 예상수면시간과 기상시간은 램프에 입력되어 수면시각 이후 일정 시간동안 수면모드, 기상 전 일정시간 전부터 기상모드로 불빛이 변화한
홈 메뉴
1
2
3
1
4
2
5
5
3
4
5
21
• 조명메뉴는 램프의 조명 메뉴 중 4가지를 제어 할 수 있도록 만들어졌으며, 화면은 listView로 만들어져 있고 listView는
viewHolder를 사용하여 view를 중복으로 불러오지 않도록 하였음
• 각 메뉴의 오른쪽에는 메뉴를 통해 램프를 키면 어떤 색이 나올 지 보여주고 있음, SharedPreference를 이용하여 구현
• 램프 특성상 조명모드는 한번에 한 개 밖에 되지 않으므로 여러 개의 Switch가 On되지 않도록 하였음, listView에 set되는
Adapter에 Switch들을 Collection 안에 모아 넣고, 각 스위치 별로 ON, OFF의 상태를 확인하도록 구현함
• 블루투스 연결이 되지 않았을 때 Switch가 On되지 않도록 함
조명 메뉴
1
2
3
1
4
2
3
4 22
조명 메뉴 – 세부 화면
• 조명 메뉴에서 낮잠 모드를 제외한 3개의 메뉴는 색을 조정할 수 있는 세부 화면이 있음
• 등록시 했던 테스트의 결과에 따라 유형에 맞는 추천 색깔이 나타나게 됨
• ColorPicker를 구현하여 자유롭게 색상 선택 가능
• 세부 화면에서 선택한 색깔들은 SharedPreference에 저장되어 이전에 사용했던 색깔들이 우선적으로 보여지고, 상위 메뉴에서
도 미리 볼 수 있음
1 2
1
2
23
• 스마트 램프의 센서를 통한 실시간 수면환경 체크 및 수면기록들을 차트로 볼 수 있는 메뉴
• 수면환경 아래의 차트 화면들은 SlidingTab, ViewPager로 구성
• 램프와 연결이 된 상태라면 onResume에서 블루투스 통신을 통해 센서 값이 화면에 표시 됨
• 수면시간은 막대 그래프, 취침과 기상시각은 변화를 알 수 있도록 꺾은 선 그래프로 표현
• 하루가 24시간이기 때문에 수면 시간에 따라 그래프가 급격히 보일 수 있으므로 Y축의 최소 최대 값을 차트의 표현되는 데이터의
max,min 값에 +- 2시간으로 하여 데이터 표현을 완만하게 그려냈음
• 사용자가 직접 수면을 기록한 날만 차트에 표현되며, 그 이외의 날은 공란으로 표기되도록 함
모니터링 메뉴
1
2
1
2
24
• 내 정보 메뉴로써 앱에 등록했던 정보들을 보거나 수정하는 것이 가능, 총 4개의 카테고리가 있음
• 계정 정보를 확인 가능
• 이용자의 지역정보를 다시 한번 확인하는 것으로, 등록 시 사용하는 지역정보 찾기와 동일
• 등록 전 했던 테스트를 다시 하거나 결과를 볼 수 있는 메뉴로, ViewPager, SlidingTab으로 화면이 구성되어 있음
내 정보 메뉴
1 3
1
2
1
2
3
3
25
• 등록 시 기입했던 정보 중 앱 사용에 영향을 주는 항목 일부가 모여있는 메뉴로 수정이 가능
• ViewPager와 SlidingTab으로 구성
• 수정하기 버튼을 누를 경우 수정을 할 수 있도록 UI가 구성되며, 화살표를 터치하면 다이얼로그가 나와 수정을 할 수 있게 됨
• 입력한 정보에 따라 체크박스가 미리 체크되어 나오며, onChecked 이벤트가 발생할 때 마다 SharedPreference에 내용이 수정
되어 저장됨
내 정보 메뉴 - 수면정보
1
3
2
1
2
3
2
1
26
• 앱의 설정을 바꾸는 메뉴로, 노티피케이션의 On/Off 여부와 기상 알람의 설정을 할 수 있음
• onCheckedChange 리스너를 통해 스위치 Off를 알고 앱 컨셉에 따라 그림과 같이 다이어로그가 나타남
설정
27
PendingIntent를 사용하는 기능의 구조
• 본 앱에서는 PendingIntent와 AlarmManager를 사용하여 다음과 같은 컴포넌트들로 노티피케이션과 알람 기능을 예약함
• Reservation Service : 알람 기능과 노티피케이션 기능을 예약하는 서비스
• Alarm Activity : 사용자에게 기상 알람을 하는 역할
• Notification Service : 사용자에게 노티피케이션을 띄우는 서비스
• 앱 최초 실행 이후 Reservation Service가 자기 자신을 예약하기 때문에 노티피케이션과 알람 타이밍을 놓치지 않음
BroadCa
st
Receiver
Alarm
Activity
Notificatio
n
Service
Reservatio
n
Service
Boot, 최초실행
Run!
하루에 한 번 자기 자신을 예약
Key값
28
• 현재 취침시각까지 남은 시각에 따라 매 시간마다 수면에 관한 조언을 노티피케이션 함
• 설정메뉴에서 설정한 노티피케이션 On/Off 여부에 따름
• 서비스가 시작될 때 인텐트에 포함된 키 값에 따라 어떤 노티피케이션을 보여줄지 분류함
노티피케이션 서비스
29
• 사용자가 설정한 기상시각에 맞춰 날씨와 함께 위와 같은 기상 알람 화면이 표시 됨
• 알람 화면은 일정한 간격의 진동과 노래와 함께 표시되며, 사용자 설정에 따라 On/Off 여부가 결정 됨
• 날씨 정보는 사용자가 등록 시 설정된 지역의 현재 날씨를 보여주며, OpenWhetherMap.org의 API를 사용하였음
• 날씨 정보는 Json을 파싱한 것이고, 기상시각 5분 전 AsyncTask를 상속한 클래스에 의해 파싱이 이루어짐
• 파싱한 정보는 SharedPreference에 입력되어 저장 된 다음 알람 화면이 표시 될 때 Preference에서 가져와 날씨 정보를 표시
함
기상 알람과 날씨 알림
30
• 정상작동을 확인하는 명령어를 넣지 않음
• 램프의 현재 모드, 총 실행 시간 등을 알리는 명령어를 넣지 않음
미흡한 점
스마트 램프
• 사용자가 기상시각, 취침시각을 변경하였을 때 알람, 노티 예정 시각을 바로 재설정 하지 않음
• SharedPreferece의 키 값을 얻어오기 위해 상수를 사용하는 것으로 초기 설계를 함(Enum을 사용했어야 했음)
• 램프로부터 센서 값을 가져온 후 센서 값이 제대로 받아졌는지 확인하지 않고 바로 사용함
• View에 애니메이션을 사용하지 않아 사용성이 떨어지는 부분이 있음
어플리케이션
31
감사합니다
32

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

IoT 및 안드로이드 포트폴리오 - 한수빈

  • 1. 한수빈 안드로이드, IoT 포트폴리오 스마트 램프와 수면관리 Application tearightss@gmail.co m 1
  • 2. 목차 2 • 프로젝트 개요 프로젝트 3 • 프로젝트 주요기능 5 • 프로젝트 구성도 6 • 기기간 통신 구성 7 스마트 램프 • 스마트 램프 내부 8 • 스마트 램프 코드 블록 9 • 스마트 램프 메인 루프 10 • 스마트 램프 LED 명령처리 방식 11 어플리케이션 • 어플리케이션 최초 시작 12 • 사용자 테스트 13 • 회원 등록 14 • 스피너 사용 15 • 위치 찾기 16 • MainActivity 17 • App에서의 블루투스 통신 19 • Bluetooth 메뉴 20 • 홈 메뉴 21 • 조명 메뉴 22 • 조명 메뉴 - 세부화면 23 • 모니터링 메뉴 24 • 내 정보 메뉴 25 • 내 정보 메뉴 - 수면정보 26 • 설정 27 • PendingIntent를 사용하는 기능의 구조 28 • 노티피케이션 서비스 29 • 기상 알람과 날씨 알림 30 • 미흡한 점 31
  • 3. • 프로젝트명 : SleepKit • 프로젝트 목표 : 스마트 램프를 통한 컬러 테라피와 앱을 활용한 램프 제어 및 수면 관리에 도움 • 담당파트 : 기획, 하드웨어 프로그램 및 앱 개발(1인 개발) • 사용언어 : Java(Android), C(Arduino) • 안드로이드 사용 라이브러리 : android support lib(v7:22.2.0), simplebluetoothlibrary, material-dialogs, MPAndroidChart • 개발기간 : 6개월(하드웨어, App) 프로젝트 개요 3
  • 4. • 먼지, 온습도 센서가 부착되어 있는 스마트 램프와 안드로이드 Application으로 구성되어 있음 • 스마트 램프는 Arduino와 주변 센서들을 이용해서 만들어졌고, App과의 블루투스 연동을 통해 제 어됨 스마트 램프 SleepKit App 프로젝트 개요 4
  • 5. App • 블루투스 연동을 통하여 스마트램프 제어 • 기상 직후 설문을 통한 수면 자가진단 • 노티피케이션을 이용한 수면 조언 • 수면기록을 토대로 차트 표현 • 기상 시 알람과 함께 날씨 알림 스마트 램프 • Led Dimming(끄기, 켜기, 점점 어두워지기, 밝아지기, 주기적인 색상변환 등) • Led를 이용한 알람 기능 • 센서를 통한 수면환경 측정(먼지농도, 온습도) 프로젝트 주요기능 5
  • 6. Product MCU LED Light Sensor 온습도 미세먼지 Bluetooth Module SEND RECEIVE sensor data control command schedule (alarm) 앱 프로젝트 구성도 6
  • 7. 기기간 통신 구성 • 기기간 통신은 블루투스 페어링을 사용 • 메시지 문법을 정의하여 문법대로 통신 7
  • 8. • Arduino(With Bluetooth) • Grove Temp, Humi Sensor • Dust Sensor • Led Strip 스마트 램프 내부 8
  • 9. Setup 센서, LED 초기화 EEPROM에서 이전 설정 불러오기 타임 인터럽트 설정 출력버퍼 비우기 Loop 블루투스 명령어 받기 (LED 모드 변경, 센서 값 출력) 센서 값 읽기 요청 받은 명령 처리 (LED 모드 변경, 센서 값 출력) Time Interrupt LED Dimming 스케줄에 따른 Led 제어 기기 전원 On시 실행 프로그램 메인 루프 루프도중 주기적으로 실행 스마트 램프 코드 블록 9
  • 10. 스마트 램프 메인 루프 요청 목록(배열) 명령어 해 석 센서 값 읽기명령 처리 저장불러오기 • 명령어 해석 단계에서 블루투스 읽기버퍼가 빌 때 까지 명령어 해석 후 해석마다 배열에 해석된 명령어 저장 • 센서 값 읽기 단계에서 센서 값을 읽은 후 센서 값 배열에 저장 • 배열에 존재하는 해석된 명령어들을 인덱스 순서대로 처리 10
  • 11. 스마트 램프 LED 명령처리 방식 명령 처 리 현재 스케줄에 따른 변수처리 (RGB 변수[] 등) LED 작동(RGB 변수[]) 조건 분기에 따른 스케줄 인덱스 증가 Time Interrupt 끄기 색1 설정 루프색2 설정 색2로 변화색1 시작 LED 스케줄 배열 EX ) LED 모드, 색1, 색2, 시간 등 전달 LED 스케줄 배열에 스케줄 배정, 매개변수 저장 11
  • 12. • Shared Preference를 통해 앱의 첫 구동을 확인, 사용자 가입을 하도록 유도 어플리케이션 최초 시작 12
  • 13. • 3지선다의 성격유형 테스트와 2지선다의 수면유형 테스트를 진행 • 수면타입 지도를 배열의 형태로 짜서 yes, no에 따라 정해진 답으로 가도록 유도 사용자 테스트 13
  • 14. • 회원등록 화면은 Activity 한 개와 9개의 정보입력 Fragment로 구성, 각각의 Fragment는 JoinFragment라는 추상클래스를 상속받으며, JoinFragment에는 회원정보를 Activity로 전달하기 위한 Listener와 다음 목 적지 Fragment를 set, 그 이외에 필요한 과정은 인터페이스를 사용하여 획일화 하고 공통되는 과정은 Override함 회원 등록 14
  • 15. • 회원등록 절차에 스피너가 많아 스피너를 생성하는 클래스를 구현하여 스피너 사용 • 스피너 내용을 입력하는 메소드와 아이템이 선택되었을 때 이벤트 메소드를 인터페이스화 하여 사용 //스피너에 사용되는 Item List를 작성하여 반환 //스피너의 아이템이 선택되었을 때 호출 됨 스피너 사용 15
  • 16. • Material Dialog 라이브러리를 사용하여 Material 형태의 다이얼로그 사용 • GPS가 켜져있지 않으면 GPS를 키도록 함 • 구글 API, GeoCoder 클래스를 이용하여 현 위치의 좌표를 얻고 ~시 ~구 까지 지역 이름 을 알 수 있음 위치 찾기 16
  • 17. App 설명 • 가입 이후 MainActivity로 이동하게 됨. MainActivity는 위와 같은 구조로 구성되어 있음 • 메뉴 이동을 위한 Navigation Drawer 구성과 Toolbar가 화면에 적용되어 있음 • Toolbar, NavDrawer는 Activity단에서 제어함 Fragment Toolbar Navigation Drawer MainActivity 17
  • 18. • MainActivity는 그림과 같은 기능을 담당 • 회원가입 이후 모든 화면은 MainActivity에 BluetoothFragment가 Attach 되어 보여짐 Toolbar Option Menu Bluetooth 객체 Navigation Drawer Fragment와의 메시 지 교환을 위한 Listener Fragment 관리 MainActivity MainActivity 역 할 Bluetoot h Fragmen t extends BaseFragment BaseFragm ent Backstack 관리 Fragment Manager 의 함수 사용 extends Fragment Attach 18
  • 19. • 블루투스 통신 자체는 오픈소스 라이브러리를 활용하였고, 블루투스 객체는 MainActivity에서 관리된다. • 메시지 Send는 MainActivity의 sendMessage 메소드를 활용, 메시지 Receive는 Activity에 Listener를 등록하여 이벤트가 일어났을 때 Listener로 Callback 하도록 하였다. • BluetoothFragment를 상속하는 Fragment는 Attach시 자동으로 activity에 Listener를 생성하여 등록 을 하며, App에서의 블루투스 통신 BluetoothFragment protected abstract MainActivity.BluetoothLister createListener(); public void onAttach(… …) { MainActivity.BluetoothListener = return createListener(); } MainActivity void onBluetoothReceive(String s) { if(bt != null) bt.call(s); } private BluetoothListener bt; public void sendMessage(String s) { … } 19
  • 20. • Toolbar의 Bluetooth메뉴는 어떤 메뉴에서든 실행할 수 있음 • 블루투스가 켜져 있지 않을 시 그림과 같이 확인 메시지가 뜸 • 페어링 목록에 있지않은 기기는 Scan을 하여 목록에 추가 가능 Bluetooth 메뉴 20
  • 21. • 등록 시 기입했던 정보를 보여줌 • 앱 이용시 취침, 기상버튼을 통해 기록한 정보가 sqlite에 저장되어 최근 수면을 잘 했는지 분석하여 3가지 상태로 표현 • 현재 시간과 취침시간을 비교하여 현재까지의 수면조언을 보여줌, Layout에 addView 되는 형식으로 차곡차곡 조언이 누적된다. • 취침, 기상버튼으로 취침, 기상시각을 sqlite에 저장하고, 만약 램프와 페어링되어 있다면 램프를 수면모드로 바꾸거나 해제한다 • 예상수면시간과 기상시간은 램프에 입력되어 수면시각 이후 일정 시간동안 수면모드, 기상 전 일정시간 전부터 기상모드로 불빛이 변화한 홈 메뉴 1 2 3 1 4 2 5 5 3 4 5 21
  • 22. • 조명메뉴는 램프의 조명 메뉴 중 4가지를 제어 할 수 있도록 만들어졌으며, 화면은 listView로 만들어져 있고 listView는 viewHolder를 사용하여 view를 중복으로 불러오지 않도록 하였음 • 각 메뉴의 오른쪽에는 메뉴를 통해 램프를 키면 어떤 색이 나올 지 보여주고 있음, SharedPreference를 이용하여 구현 • 램프 특성상 조명모드는 한번에 한 개 밖에 되지 않으므로 여러 개의 Switch가 On되지 않도록 하였음, listView에 set되는 Adapter에 Switch들을 Collection 안에 모아 넣고, 각 스위치 별로 ON, OFF의 상태를 확인하도록 구현함 • 블루투스 연결이 되지 않았을 때 Switch가 On되지 않도록 함 조명 메뉴 1 2 3 1 4 2 3 4 22
  • 23. 조명 메뉴 – 세부 화면 • 조명 메뉴에서 낮잠 모드를 제외한 3개의 메뉴는 색을 조정할 수 있는 세부 화면이 있음 • 등록시 했던 테스트의 결과에 따라 유형에 맞는 추천 색깔이 나타나게 됨 • ColorPicker를 구현하여 자유롭게 색상 선택 가능 • 세부 화면에서 선택한 색깔들은 SharedPreference에 저장되어 이전에 사용했던 색깔들이 우선적으로 보여지고, 상위 메뉴에서 도 미리 볼 수 있음 1 2 1 2 23
  • 24. • 스마트 램프의 센서를 통한 실시간 수면환경 체크 및 수면기록들을 차트로 볼 수 있는 메뉴 • 수면환경 아래의 차트 화면들은 SlidingTab, ViewPager로 구성 • 램프와 연결이 된 상태라면 onResume에서 블루투스 통신을 통해 센서 값이 화면에 표시 됨 • 수면시간은 막대 그래프, 취침과 기상시각은 변화를 알 수 있도록 꺾은 선 그래프로 표현 • 하루가 24시간이기 때문에 수면 시간에 따라 그래프가 급격히 보일 수 있으므로 Y축의 최소 최대 값을 차트의 표현되는 데이터의 max,min 값에 +- 2시간으로 하여 데이터 표현을 완만하게 그려냈음 • 사용자가 직접 수면을 기록한 날만 차트에 표현되며, 그 이외의 날은 공란으로 표기되도록 함 모니터링 메뉴 1 2 1 2 24
  • 25. • 내 정보 메뉴로써 앱에 등록했던 정보들을 보거나 수정하는 것이 가능, 총 4개의 카테고리가 있음 • 계정 정보를 확인 가능 • 이용자의 지역정보를 다시 한번 확인하는 것으로, 등록 시 사용하는 지역정보 찾기와 동일 • 등록 전 했던 테스트를 다시 하거나 결과를 볼 수 있는 메뉴로, ViewPager, SlidingTab으로 화면이 구성되어 있음 내 정보 메뉴 1 3 1 2 1 2 3 3 25
  • 26. • 등록 시 기입했던 정보 중 앱 사용에 영향을 주는 항목 일부가 모여있는 메뉴로 수정이 가능 • ViewPager와 SlidingTab으로 구성 • 수정하기 버튼을 누를 경우 수정을 할 수 있도록 UI가 구성되며, 화살표를 터치하면 다이얼로그가 나와 수정을 할 수 있게 됨 • 입력한 정보에 따라 체크박스가 미리 체크되어 나오며, onChecked 이벤트가 발생할 때 마다 SharedPreference에 내용이 수정 되어 저장됨 내 정보 메뉴 - 수면정보 1 3 2 1 2 3 2 1 26
  • 27. • 앱의 설정을 바꾸는 메뉴로, 노티피케이션의 On/Off 여부와 기상 알람의 설정을 할 수 있음 • onCheckedChange 리스너를 통해 스위치 Off를 알고 앱 컨셉에 따라 그림과 같이 다이어로그가 나타남 설정 27
  • 28. PendingIntent를 사용하는 기능의 구조 • 본 앱에서는 PendingIntent와 AlarmManager를 사용하여 다음과 같은 컴포넌트들로 노티피케이션과 알람 기능을 예약함 • Reservation Service : 알람 기능과 노티피케이션 기능을 예약하는 서비스 • Alarm Activity : 사용자에게 기상 알람을 하는 역할 • Notification Service : 사용자에게 노티피케이션을 띄우는 서비스 • 앱 최초 실행 이후 Reservation Service가 자기 자신을 예약하기 때문에 노티피케이션과 알람 타이밍을 놓치지 않음 BroadCa st Receiver Alarm Activity Notificatio n Service Reservatio n Service Boot, 최초실행 Run! 하루에 한 번 자기 자신을 예약 Key값 28
  • 29. • 현재 취침시각까지 남은 시각에 따라 매 시간마다 수면에 관한 조언을 노티피케이션 함 • 설정메뉴에서 설정한 노티피케이션 On/Off 여부에 따름 • 서비스가 시작될 때 인텐트에 포함된 키 값에 따라 어떤 노티피케이션을 보여줄지 분류함 노티피케이션 서비스 29
  • 30. • 사용자가 설정한 기상시각에 맞춰 날씨와 함께 위와 같은 기상 알람 화면이 표시 됨 • 알람 화면은 일정한 간격의 진동과 노래와 함께 표시되며, 사용자 설정에 따라 On/Off 여부가 결정 됨 • 날씨 정보는 사용자가 등록 시 설정된 지역의 현재 날씨를 보여주며, OpenWhetherMap.org의 API를 사용하였음 • 날씨 정보는 Json을 파싱한 것이고, 기상시각 5분 전 AsyncTask를 상속한 클래스에 의해 파싱이 이루어짐 • 파싱한 정보는 SharedPreference에 입력되어 저장 된 다음 알람 화면이 표시 될 때 Preference에서 가져와 날씨 정보를 표시 함 기상 알람과 날씨 알림 30
  • 31. • 정상작동을 확인하는 명령어를 넣지 않음 • 램프의 현재 모드, 총 실행 시간 등을 알리는 명령어를 넣지 않음 미흡한 점 스마트 램프 • 사용자가 기상시각, 취침시각을 변경하였을 때 알람, 노티 예정 시각을 바로 재설정 하지 않음 • SharedPreferece의 키 값을 얻어오기 위해 상수를 사용하는 것으로 초기 설계를 함(Enum을 사용했어야 했음) • 램프로부터 센서 값을 가져온 후 센서 값이 제대로 받아졌는지 확인하지 않고 바로 사용함 • View에 애니메이션을 사용하지 않아 사용성이 떨어지는 부분이 있음 어플리케이션 31