March 28, 2024

디바이스마트 미디어:

[66호] 원하는 색상으로 제어가 가능한 아두이노 IoT 스마트 무드등 키트 -

2021-06-25

★2021 ICT 융합 프로젝트 공모전 결과 발표! -

2021-05-12

디바이스마트 국내 온라인 유통사 유일 벨로다인 라이다 공급! -

2021-02-16

★총 상금 500만원 /2021 ICT 융합 프로젝트 공모전★ -

2021-01-18

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

[61호]음성으로 제어하는 간접등 만들기 -

2020-08-26

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

[60호]초소형 레이더 MDR, 어떻게 제어하고 활용하나 -

2020-06-30

[60호]NANO 33 IoT보드를 활용한 블루투스 수평계 만들기 -

2020-06-30

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

[27호]Wearable Smart Watch

Wearable Smart Watch 39

Wearable Smart Watch

글 | 충북대학교 정보통신공학 조동관, 임현수

심 사 평
싱크웍스 GPS 시계 기능이나 칼로리 측정 등의 기능은 스마트폰에서 모두 할 수 있는 것이고, 압력센서 등을 유선이 아닌 무선으로 처리했다면 큰 의미를 가지겠는데 유선으로 연결하고 MCU에서 처리하는 것은 의미가 없어 보인다. 또한, 시험 결과도 없어서 그나마 만든 내용의 완성도를 알 수가 없었다.
jk전자 ATMEGA를 이용해서 다양한 센서의 활용과 펌웨어부터 안드로이드 APP까지 1개의 작품에 폭넓은 분야의 많은 부분들이 녹아 들어가 있다. 다만 작품의 시간을 표시하는 구현 부분에서 GPS에서 수신된 시간으로만 시간을 표시하게 되면 GPS수신율이 떨어지는 건물 내부에서 시계 기능을 제대로 수행하지 못할 위험이 있다. 그렇기 때문에 GPS수신이 되지 않는 지역에서는 RTC를 이용해서 시간 표시는 계속 했으면 조금더 완성도가 높았을 것 같다.
뉴티씨 건강과 관련된 내용 특히, 만보기는 오랜 시간동안 많은 사람들에 의해서 많은 관심을 끌고 있다. 또한, 현재 삼성의 스마트 와치가 많은 사람들의 호기심과 부러움의 대상이 되고있는 것도 사실이다. 하지만, 밧데리 충전의 불편함, 기능상 보조기능으로만 사용되고, 연결을 해줘야 하는 점 등 불편함이 많은 것도 사실이다. 하지만, 이러한 가운데에서도 새로운 시도로 손목에 차는 형태의 입는 시계를 제작하고, 만보계 기능을 실제 데이터에 입각하여 구현했다는 것도 좋은 시도로 보인다.

1. 작품 개요
1-1. 제작 동기

Wearable Smart Watch 01
그림 1. 갤럭시 기어 (출처 : http://blog.naver.com/ulsan78?Redirect=Log&logNo=130186200988)

어떤 과목시간에 기술논문을 썼던 적이 있었다. 처음에 뭐를 할까 생각하다가, 한창 그때는 갤럭시 기어에 대한 광고가 티비에서 많이 나왔다. 조원들 끼리 상의하다가 생소하고, 새로운 것에 대한 기술논문을 쓰고 싶어서 스마트워치에 대한 논문을 쓰기 시작했다. 이렇게 자료를 찾고, 직접 전자제품 매장가서 만져보고 하니까 너무 신기하고 갖고 싶었다. 살 돈은 없었지만, 이때까지 배운 AVR를 이용하여 비슷하게라도 웨어러블형 스마트워치를 만드는 것을 계획하게 되었다. 비록 스마트워치보다 성능은 훨씬 떨어지고, 부피도 클거라는 것을 예상했지만, 애초 목적은 우리 손으로도 구형 스마트 워치를 만들 수 있다는 목표를 가지는 거였다.

1-2. 제작 목적
실생활형 웨어러블 스마트 워치를 제작하여, 일생생활에서도 한번에 여러 가지 기능을 접목시켜 사용할 수 있도록 제작 목적이 있었다. 작품에 사용되었던 여러 가지 센서를 하나로 조합하여, 스마트워치에 접목 시켜 시계 외의 추가 기능을 사용할 수 있게끔 만들었다. 예를 들어, 걸을 때의 발에 걸리는 압력을 측정하여 내가 제대로 걷고 있는지, 오늘 온도는 몇 도 이고, 날씨는 어떤지, 현재 내가 얼마의 속도로 걷고 있고 칼로리 소모는 얼마나 되었는지 등을 추가하여 실생활에서도 사용자가 움직일 때 모든 것을 확인하는 쪽으로 개발 방향을 바꾸었다.

2. 작품 설명
2-1. 주요 동작 및 특징
1)전체 동작 시나리오
16×2 LCD를 사용하여 웨어러블 식으로 몸에 탈 부착하여 사용 할 수 있는 스마트 시계를 제작하였다. 각각의 기능은 팔목에 부착된 다섯 개의 인터럽트 스위치에 의해서 동작한다.
첫 번째 스위치의 기능은 GPS센서로부터 수신된 시간 및 날짜를 나타내준다. 수신된 시간은 영국 표준시로 나타나기 때문에 한국시간에 맞춰서 바꿔줘야 한다.
두 번째 스위치의 기능은 사용자의 걸음걸이 속도 및 분당 칼로리 소모량을 나타낸다. 걸음걸이 속도 또한 GPS센서로 값을 수신 받아 위도 경도에 의해 사용자의 이동거리에 따라 시간을 나누어서 속도를 측정한다. 칼로리 같은 경우는 정의된 수식에 의해 사용자의 몸무게를 프로그램에 입력한 상태에서 측정하여 나타난다.
세 번째 스위치는 현재 온도와 날씨 상태를 나타내준다. 기상청에서 제공하는 현재 온도에 따라 야외활동 수준의 상태를 LED로 적색(위험), 황색(경고), 녹색(안전)으로 사용자가 인식 하기 쉽게 구성도 해놓았다. 날씨 상태 같은 경우도 데이터 분석에 의해 온도에 따라 덥다, 따뜻하다 등의 날씨 상태를 나타낼 수 있게 하였다.
네 번째 스위치는 사용자가 걸을 때의 양발의 압력을 측정하여 사용자의 현재 걸음걸이를 표시한다. 여기에서는 오른발의 압력을 측정하기 위해 MCU를 하나 더 사용하였다. 메인 MCU부분에는 왼발의 압력을 측정하게 해놨고, 추가 MCU부분에서는 오른발의 압력을 측정하여, 블루투스 통신으로 메인 MCU에 값을 전송한다. 현재 두 가지의 경우로 구성해놨는데, 메인 부분의 MCU에 연결된 블루투스 스위치가 ON일 경우는, 양발의 걸음걸이 상태를 LCD창에서 확인할 수 있게 해 놨다. 예를 들어, 양발 앞쪽에 힘이 둘 다 많이 걸릴 경우, “Left : Front Waning!”, “Right : Front waning!” 식으로 0번 줄, 1번 줄에 각각 표시 될 수 있게 구성하였다. 만일, 메인 블루투스 전원 스위치가 OFF일 경우는 오른발의 추가 MCU가 스마트 폰과 연동될 수 있게 구성하였다. 스마트 폰의 앱을 실행했을 경우, 오른발의 위치에 따른 자세한 압력 값과 걸음걸이 상태여부를 파악 할 수 있다.
마지막 다섯 번째 스위치는 사용자가 전원을 킨 순간부터 현재까지의 걸음걸이 수, 즉 만보기 기능을 할 수 있게 제작을 하였다.

2-2. 전체 시스템 구성
1) 시스템 블록 다이어그램

Wearable Smart Watch02
[그림 2.1] 시스템 구성도

2) 시스템 세부 구성

(1) 시계 메인

Wearable Smart Watch04
메인에 표시된 숫자에 맞는 스위치는 누르면 해당 기능이 실행이 된다. 1번 부터 각각의 스위치의 명칭은 Clk(Clock), Cal(Speed & Calolie), Tp(Temperature), Force(Force Sensor), Pace(Pace Counters)를 나타낸다. 시계 메인은 전원on 일 때 한번만 나타나게 해놨으며, 스위치 위에 버튼에 해당되는 기능을 써놔서 사용자가 헷갈리지 않게 제작하였다.

(2) 첫 번째 스위치 – 날짜 및 시간
가. GPS 센서 및 회로 구성

Wearable Smart Watch05
위의 모듈을 사용하여 ATmega128의 RX0, TX0 포트를 이용하여, GPS 위성 값을 수신하였다. 수신한 값은 다음과 같다.

Wearable Smart Watch06 Wearable Smart Watch07

Wearable Smart Watch08
[그림2.2]에서 사용할 GPS 정보는 GPRMC이다. RMC는 Recommended Minimum Specific GNSS Data의 약자이다. 말 뜻 그대로 navigation에 일반적으로 필요한 데이터 항목을 다 가지고 있다. 여기서 우리가 사용할 것은 시간, 날짜 및 이동속도만 사용할 예정이다. 1번 값은 MCU에서 GPRMC를 받기 위해서 반드시 코딩에 문자열이 일치하는지 확인해야하는 함수를 써야한다. $GPRMC를 사용하지 않을 경우, [그림2.2]에서처럼 다른 값이 들어올 수 있으니 주의해야 한다. 2번의 UTC Time은 현재 날짜 및 시간을 나타낸다. 영국 표준시를 사용하여 +9를 해주어야 우리나라 시간에 맞는다. 4, 6번에 담겨진 위도와 경도는 현재 프로그램에서 사용하지 않았다. 그래도 테스트 결과 현재 위치가 정확하게 나오는 것을 확인했다. 만일 사용할 경우 도분초 계산법에 의해 수신 된 값 소수점에 x60을 하여 나타내야지 정확한 위치가 나타난다. 10번의 UTC Date 같은 경우 우리나라의 윤년 계산법에 의해 새로운 계산을 해주어야 한다.

Cap 2015-02-16 11-37-57-328

나. 출력 화면

Wearable Smart Watch09

(3) 두 번째 스위치 – 속도 및 칼로리 소모량
가. 속도 및 칼로리 소모량 계산
8번의 Speed over ground를 이용하여, 사용자의 걷는 속도를 구할 수 있다. 하지만 GPS에 담긴 속도의 단위는 노트(Knots)이다. GPS에서 받은 데이터 값들을 토큰 함수로 나누어 GPS_DCUT배열에 저장해 준다. 이차원 배열로 저장된 값들 중에 속도에 관련된 GPS_DCUT[7][0]값을 받아와서 문자열을 정수형으로 바꿔주는 atoi()함수를 사용하여 speed에 Knots로 된 값을 저장 후, m/s로 환산하기 위해 아래의 함수를 사용하여 값을 처리해주었다.

void GPS_SPEED(void)
{
speed_kmh=speed*1.852;
speed_ms=speed_kmh*10000/3600;

[그림 2.8] m/s로 환산법

void GPS_calolie(void) // 칼로리계산(분당칼로리,소비 칼로리 = METs * 체중 * 시간 * 1.0175 (분 기준))
{ // METs=2.8
float METs=2.8;//보통 걷는 속도
float calolie;
unsigned int weight = 65;
if(sec==59)
{
delay_ms(1000);
Time+=1;
}

[그림 2.9] 칼로리 환산법

칼로리 계산법은 보통 걸을 때 기준으로 공식을 사용하였다.
여기서 sec는 GPS의 시간에서 초를 이용하여 정의하였다. 전원이 on 된 뒤로부터 1분마다의 칼로리 소모량이 Kcal/min 단위로 출력이 된다. 여기서 delay(1000)를 주지 않으면 Time의 값이 sec가 59에서 00으로 될 때까지의 약 1000ms 만큼 증가하여, 수식에서의 시간 값이 증가하기 때문에 결론적으로 칼로리 값이 1분당 상당히 커지게 된다.

나. 출력 화면

Wearable Smart Watch10
3분 동안 보통 걸음으로 걸은 후에 소모된 칼로리 계산이다. 현재 속도는 이동 중이 아니라 정지 중에 있어서 0.0m/s로 표시되었다.

(4) 세 번째 스위치 – 현재 온도 및 날씨 상태
가. 온도 센서(HT-01DV)

Wearable Smart Watch11
Atmega128의 ADC 변환을 이용하여 온도 값을 출력하였다. [그림2.11]를 보면 입력 전압에 따른 온도변환과 출력전압의 관계를 나타내주고 있다. 이 그래프를 분석하여 5V로 입력 전압을 준 후, 출력 전압에 해당되는 온도가 맞는지 테스트를 하면 된다. 오차의 범위는 ±0.5℃로 실제 온도기와 비슷하다고 해도 무방하다. 위의 방정식에 Vin에는 우리가 사용할 5V를 ADC 변환한 값 1023을 넣어주고, Vout에는 ADC 변환 값(0~1023)에 해당되는 값을 변수지정 하여 입력해 준다.

Temp_adc=read_adc(0);
for(i=0;i<64;i++) { sum+=Temp_adc; }
Temp1=sum/64;
Temp=(unsigned int)(Temp1/6.2)-40;//data sheet 방정식 참조.
sprintf(Temp_buf, “Tempature : %dC” ,Temp);

[그림 2.12] 온도 값 환산 및 출력

Temp_adc로 출력 전압이 0~1023의 값으로 바뀐 후, 안정화를 위해 64번 더해준 후 64로 나누어 주었다. 그 값을 Temp1에 넣어서 온도 값을 출력하는 식의 코딩을 하였다. 6.2는 입력전압 1023(5V)를 방정식에 있는 165로 나누어서 나온 값이다. 실제 온도기로 테스트 했을 때도 오차 범위 내에서 정확한 온도가 출력이 되었다. 온도에 대한 날씨는 인터넷의 자료를 종합하여 하나로 종합하였다.

출처 : http://blog.naver.com/okkokko?Redirect=Log&logNo=80186227534
30℃ ~ 40℃ boiling hot 매우 더운
25℃ ~ 35℃ hot 더운
15℃ ~ 25℃ mild / warm 포근한
10℃ ~ 20℃ cool 선선한
5℃ ~ 15℃ chilly 쌀쌀한
5℃~ -10℃ cold 추운
-10℃ ~ -30℃ freezing 얼거 같이 추운
[그림 2.13] 온도에 따른 날씨 표현

물론 여기에도 오차가 발생할 수도 있다. 예를 들어, 날씨가 더운데 구름이 많이 껴서 습한 날 경우 [그림2.13]에서는 hot에 해당되는 날씨 이지만 실제 날씨는 Humidness에 해당된다. 이런 경우의 오차는 제외하고, 데이터를 분석하여 적용하였다. 그리고 온도에 따른 LED의 색깔 변화를 손목에 부착하여 사용자가 보다 편리하게 확인할 수 있게 구성을 하였다.

void LED_Temp_status(unsigned int Temp_LED)
{
if(Temp_LED>33) { LED_GREEN=1; LED_YELLOW=1; LED_RED=0; }
else if(Temp_LED>26) { LED_GREEN=1; LED_YELLOW=0; LED_RED=1; }
else if(Temp_LED>18) { LED_GREEN=0; LED_YELLOW=1; LED_RED=1; }
else if(Temp_LED>15) { LED_GREEN=1; LED_YELLOW=0; LED_RED=1; }
else { LED_GREEN=1; LED_YELLOW=1; LED_RED=0; }

[그림 2.14] 온도에 따른 LED 값 출력

나. 센서 구성

출처 : devicemart.co.kr
Name Pin Function
H-out Humidity voltage output
VSS Ground
T-out Temperature voltage output
VDD DC Power
[그림 2.15] 핀 연결도

원래의 구성은 온습도 센서지만, 현재는 온도 센서만 사용하였다. 습도 센서도 연결해놓긴 하였지만, 프로그램에서 코딩을 하지 않았다. 온도 센서는 PF0(ADC0)에 연결하였고, VDD는 5V, VSS에는 gnd를 연결해 주었다. 전체 입력 전압은 9V이지만 7805 레귤레이터를 사용하여서 5V로 낮춰주어서 공급하였다.

다. 출력 화면

Wearable Smart Watch12
현재 온도 17℃에 해당되는 상태 및 LED를 출력해준다.

(5) 네 번째 스위치 – 걸음 걸이 상태 측정
가. 연동 필요성
자기의 걸음걸이를 인식하고 보행하는 사람은 없다. 무의식에서 굳어버린 자신의 걸음걸이로 인해 몸에 불편함을 느끼는 현대인들이 많다. 이러한 바르지 못한 자신의 걸음걸이를 병원에 가지 않더라도, 신발에 내재되어 있는 압력센서와 이에 따른 분석 데이터를 스마트폰 앱을 통해 보면서 자신의 걸음걸이가 어디가 잘못 되었는지 교정할 수 있는 기술이 필요하다고 생각하였다. 올바르지 않는 걸음걸이로 인해 척추가 휘거나 골반이 틀어지는 사례를 많이 접할 수 있었다. 즉, 자신의 걸음걸이 교정은 자신의 건강을 중요시하는 현대인들에게는 필수적인 요소 중 하나라고 생각된다.

나. 압력센서 및 동작 원리

Wearable Smart Watch13
기본적으로 압력센서의 원리는 압력에 따라 전기저항 값 변화와 압력이 없을 경우 높은 저항 값 출력, 압력이 가해지면 5KΩ 정도까지 저항이 내려가는 식으로 이루어져 있다. 현재 우리가 구성한 압력센서 부분은 압력이 가해지면 ADC 변환 값(0~1023)으로 출력되는 값을 (Vout/5)*1023을 계산하여 0~4.9V 단위로 출력하여 확인하게 편하게 구성하였다. 양발 측정을 위해 추가 MCU를 사용하였다. 왼발의 경우에는 메인 MCU에 연결되어 있지만, 오른발의 경우에는 추가 MCU를 사용하여 블루투스 통신으로 값을 메인 MCU에 전송하는 방식을 사용하였다. 메인 MCU 블루투스 전원 스위치의 ON, OFF를 제어함으로 출력 방법이 달라진다.

①메인 블루투스 스위치 ON

Wearable Smart Watch14
오른발에 부착된 추가 MCU에서 압력 센서에 걸리는 값을 입력받아 배열로 저장하여 블루투스 TX단으로 데이터를 전송한다. 메인 MCU에서는 블루투스 RX단으로 값을 수신하고 토큰함수로 배열 저장된 값을 분리 후 처리하여 LCD에 상태를 출력한다. 메인 MCU에 달려있는 압력센서 값들은 바로 처리해서 출력된다.

②메인 블루투스 스위치 OFF

Wearable Smart Watch15
스위치가 ON에서 OFF로 바뀐 후 몇 초 동안은 페어링 해지를 하고 추가 MCU의 블루투스(Slave mode)는 다른 기기를 찾기 시작한다. 해지되고 몇 초 지나면 메인 MCU 블루투스 부분(Master mode)과 연결되어 통신이 시작된다. 오른발의 부착된 추가 MCU에서 측정된 압력센서 값이 블루투스 TX단을 통해 스마트폰 블루투스 RX단으로 전송된다. 전송 된 값은 각각의 발 위치에 압력정도에 따라 색깔이 변하는 기능을 넣었다. 이에 대한 자세한 설명은 (7)에서 하도록 하겠다. 다음은 발에서 압력 값이 가장 많이 걸리는 부분에 표시를 한 사진이다.

Wearable Smart Watch16
왼쪽부터 1, 2, 3, 4, 5로 변수를 지정하고, 걸음걸이에 따라 걸리는 위치의 압력에 대해 분석한 것을 기준으로 프로그램을 작성하였다. 16×2 LCD에서 출력 시에는 왼발, 오른발의 걸을 때 상태를 간단하게 표시할 수 있도록 해놨다. 걸을 때 주요 압력이 걸리는 부위는 1, 2, 5번의 위치이다. 일반적인 걸음을 걸을 때는 1, 2, 3, 5번에는 3.8 ~ 4.2V정도의 압력이 걸리며, 이럴 경우에 LCD에 “Normality!” 라는 문구가 뜨게 된다. 신발 뒤꿈치 전체가 닳는 사람의 경우도 테스트를 해봤는데, 5번 위치에서 3.0~3.4V 수준의 값이 측정되었다. 기준이 3.5V에 비해 낮은 전압 값이 출력되어 왼발, 오른발에서 “Rear Dan!“ 값이 걸을 때마다 표시 되었다. 필자 같은 경우는 신발 뒤꿈치 끝 쪽 모서리가 자꾸 닳아서 테스트를 한 결과, 5번 센서에 힘이 다른 부분에 비해 많이 걸리는 것을 볼 수 있었다.

Wearable Smart Watch17

다. 회로 구성

Wearable Smart Watch18
사용할 압력센서의 기본적인 회로이다. 들어온 센서 값을 MCP6004 소자를 통과하여 이득을 얻는 형식으로 값을 입력받는다. 하지만, 현재 정해진 소자로 [그림 2.22]과 같은 회로로 구성을 하였더니 원하는 출력 값이 제대로 증폭되어 나오지 않았다. 그래서 [그림2.23]의 회로에서 CDS센서 부분에 압력센서를 대체하여 진행하였다.
33KΩ을 3개 직렬연결 해주어서 약 100KΩ을 만들었다. 그리고 출력 전압 계산은 다음과 같은 식에 의해 구해진다.

Wearable Smart Watch19
압력의 세기에 따라 Rf의 값이 달라지면서 출력 전압도 달라진다. 출력 전압을 ADC 변환을 이용하여 (Vout/5)*1023을 사용하여 0~4.9V의 전압을 출력할 수 있도록 해주었다.

라. 출력 화면

Wearable Smart Watch20

(6) 다섯 번째 스위치 – 만보기 기능
가. 만보기
양발의 다섯 번째 단의 압력센서를 이용하여 만보기 기능을 추가하였다. 구동 원리는 다섯 번째 단의 센서 값에 힘이 동시에 걸릴 경우는 카운터가 증가하지 않고, 딛지 않는 발의 압력은 4.9V를 유지하고, 딛는 발의 경우 4.9V 이하가 될 경우 카운팅 되게 소스를 구현 해놨다. 이 부분도 칼로리 때와 마찬가지로 양발의 딜레이를 주어 코딩을 하였다. 평균적으로 한발을 딛고, 한발이 떨어져 나갈 때 500ms 이내로 동작하게 된다.

나. 출력 화면

Wearable Smart Watch21

(7) 스마트폰 App

Wearable Smart Watch22
스마트폰 APP에서 처리하는 일은 추가 MCU에 연결된 압력 센서를 블루투스 통신을 통해서 실시간으로 압력 값을 전송받고 그 데이터 값을 스트림 모드로 띄워주는 과정을 거친다. 전체적인 과정을 설명하면 Bluetooth Socket으로 추가 MCU에 연결된 블루투스 디바이스에 Connect하고 InputStream으로 read후 획득한 결과를 Android View에 TextView와 ImageView를 통해 표시하는 기능을 가진 앱이다. [그림2.26]의 경우에는 어플을 처음 실행했을 때 인트로 엑티비티를 사용해서 처음 화면을 만들어 주었고 [그림2.27]의 경우에는 어플 실행 후 핸드폰이 블루투스 기능이 실행되어 있지 않을 때 블루투스 권한을 요청하는 기능을 보여주고 있다. [그림2.28]을 참고하면 블루투스 권한을 요청하는 BLUETOOTH와 BLUETOOTH_ADMIN 퍼미션을 알 수 있다. 그 후 [그림2.29]을 보면 블루투스를 활성화하는 액티비티를 호출하는 것을 볼 수 있다.

<uses-permission android:name=”android.permission.BLUETOOTH” />
<uses-permission android:name=”android.permission.BLUETOOTH_ADMIN” />

[그림 2.28] 블루투스 권한 요청

IF (!mBTAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActinityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

[그림 2.29] 액티비티 호출

다음 과정은 블루투스로 연결이 가능한 디바이스를 찾는 과정이 되겠다. 블루투스 어답터를 사용하면 디바이스 또는 페어링 된 디바이스 목록을 퀘리해서 원격으로 디바이스를 찾을 수 있다. 연결이 가능한 추가 MCU에 연결된 블루투스 디바이스를 찾게 되면 블루투스와 통신이 가능하게 된다.

[그림2.30]를 보면 페어링 과정을 통해서 연결할 장치를 검색하는 화면이다. 맨 위에 페어링 된 장치 중 FB155 장치가 추가 MCU에 연결된 블루투스이다. 다음에는 초기 연결 상태를 보여주는 [그림2.31]는 현재 5개의 압력센서 값이 전부 49로 나타내어지고 있는데 이는 압력 센서에 아무런 압력이 주어지지 않을 때이다. 이 상태에서 사용자가 걸음걸이를 걷게 될 때 압력 값이 변하게 되면서 실시간으로 어느 정도의 압력으로 걸음걸이를 걷고 있는지 실시간으로 갱신이 되어 알 수 있다. 여기서 35이상의 힘을 받게 되면 경고가 표시되어지면서 빨강 원이 나타내지게 된다. 이는 [그림2.32]를 참고하면 알 수 있다.

Wearable Smart Watch24
그리고 어플리케이션 소스 중에 있어서 가장 중요했던, 디바이스에서 핸드폰 블루투스로 데이터를 전송하고 어플리케이션이 데이터를 수신할 때 수신한 데이터를 스트림으로 변환시킨 부분이다.

case MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj; // 데이터를 수신할때
//construct a string from the valid bytes in the buffer
String readMessage = new String(readBuf, 0, msg.arg1); // 수신한 데이터를 스트림으로 변환

String[] arrData = readMessage.replace(“$,”,””).replace(“,#”,””).split(“,”);
if(arrData.length !=5) return;

for(int i = o; i < arrData. length; i++){
txtview[i].setText((i+1) + “번 : “ + arrData[i]);

int resource = (arrData[i].compareTo(“35”) > o) ? whiteImg[i] : redImg[i];
imgview[i].setBackgroungResource(resource);
}

[그림 2.33] 데이터 수신


[그림2.33]를 보면 $로 시작되고 #으로 끝난 데이터를 (,)로 5개를 나누어서 1~5번까지 데이터를 나눠주는 과정을 보여주고 있다.

2-3. 개발 환경
하드웨어 – Code vision 프로그램을 사용하여 구현하였다.
App – 이클립스를 사용하여 구현하였다.

3. 단계별 제작 과정
3-1. 메인 MCU 부분 제작과정
1) 기판 구성
(1) 손목부분

Wearable Smart Watch25

Wearable Smart Watch26
72X50mm의 기판을 사용하여 사용자가 움직일 때 불편하지 않는 크기로 구성하였다. 기능을 선택할 5개의 스위치와 온도에 연관된 기능의 3개의 LED를 배치해주고 납땝을 하였다. LCD는 [그림3.1]에서 표시된 부분에 사용자가 원하는 16X2 LCD를 꼽을 수 있게 탈부착 식으로 구성하였다.

(2) MCU 부분

Wearable Smart Watch27
MCU 부분은 팔뚝에 연결하여 긴 리드선을 이용하여 팔목부분의 LCD와 연결하여 동작하고 있다. 85X62mm의 기판과 건전지와 합계 시 무게가 많이 나가지 않아서 동작에 지장은 가지 않는다. 각종 센서 부분이 이 부분에 연결되어 있고, LCD처럼 탈부착식으로 구성하였다. 추가 MCU와 마찬가지로 왼발 압력측정을 할 수 있게 저항을 연결하여 0~49의 값을 읽어드릴 수 있도록 구성하였다.

2) 압력센서 연결부분

Wearable Smart Watch28
왼쪽 발은 오른쪽 발과 달리 직접 연결해주었다. 바깥쪽으로 선을 구성하여 움직이는데 제한을 없게 하였고, 길이를 충분히 길게 하여 사용자의 신장에 따라 길이를 조절할 수 있게 구성하였다.

3) 센서 연동

Wearable Smart Watch29
블루투스단에는 스위치를 달아 ON일 때에는 LED가 점멸하면서 페어링 대기를 하고, 오른발의 추가 MCU와 연동하게 되어있다. OFF시에는 LED의 불이 꺼지면서 블루투스에 전압이 인가되지 않는다. 이 때는 스마트폰과 오른발의 블루투스가 페어링을 하여 값을 주고 받는다.

4) 밴드 부분

Wearable Smart Watch30
팔목과 팔뚝에 고정시키기 위해 찍찍이를 사용하여 사용자의 두께에 따라 편하게 부착할 수 있게 구성하였다.

5) 전체 구성부분

Wearable Smart Watch31

6) 착용 부분

Wearable Smart Watch32

3-2. 추가 MCU 부분 제작과정

1) 틀 제작

Wearable Smart Watch 33
MCU와 블루투스를 연결 하는 핀을 기판에 배치를 하여 전체적인 틀을 잡도록 구성하였다.

2) 저항 배치 및 압력센서 핀 연결

Wearable Smart Watch34
압력센서에 연결된 저항 연결과 블루투스에 공급될 3.3V를 연결해주였다. 현재 사진에서는 다이오드 3개로 3.2V 정도 만들어주었지만 공급이 불안정하여 1117s 3.3V 레귤레이터를 사용하여 3.3V를 연결해 주었다.

3) 전체 부품 배치 및 납땜

Wearable Smart Watch35
현재 9V 건전지로 전압을 인가하였다. 그림에서는 7805 LDO소자가 방열판에 연결하지 않았지만, 방열판을 달아 LDO에서 발생하는 열을 방출해 주게 구성하였다.

4) 완성 부분

Wearable Smart Watch36Wearable Smart Watch37

전체적인 구성 부품을 조립하여 오른발에 부착을 하였다. 기본적인 값은 49로 구성하였고, 압력에 따라 0~49의 값이 메인 MCU로 블루투스를 통해 전송된다.

5) 수정 부분

Wearable Smart Watch 41
[그림3.9]과 [그림3.10]부분에서의 1117s 3.3V LDO로 교체를 하고, 방열판을 달아줘야 부분에 대해 수정한 뒤에 최종 결과물을 완성시켰다.

 

 

Leave A Comment

*