[62호]DIY AIOT를 위한 싱글 보드 컴퓨터 Tinker 보드
[Tinker Board S] [Tinker Edge T]
ASUS
DIY AIOT를 위한 싱글 보드 컴퓨터 Tinker 보드
사물의 특성에 맞게 지능을 개발하고 탑 재하여 활용하는 융합 기술인 AIOT를 개 발자들이 더욱 더 편리하게 DIY 할 수 있 는 Tinker 보드 제품들이 주목받고 있다. 제 품은 ARM 기반 쿼드 프로세서인 ‘Tinker Edge T’와 ‘Tinker Board’,‘Tinker Board S’ 및 알루미늄 케이스로 총 4종이 판매 중이 다. ‘Tinker Edge T’는 쿼드코어 ARM 기반 NXP i.MX 8M 프로세서가 장착되어 그래픽, 머신 비전, 비디오 등 중요한 응용 프로그램 에 필요한 강력한 솔루션을 제공해주는 단 일 보드 컴퓨터이다. 처리 속도를 높이고 전 력 요구량을 낮추면서 연결된 장치 및 지능 형 응용 프로그램을 보다 쉽게 구축할 수 있 는 머신 러닝 가속기인 Google Edge TPU 가 특징이며 1GB LPDDR4 듀얼 채널 메모 리, 4세대 저 전력 DDR DRAM 기술을 갖추 고 있어 시스템 성능과 효율성을 향상시켜주 지만 낮은 전력 소비를 제공한다. ‘Tinker Board’,‘Tinker Board S’는 다양한 빌드 및 프로젝트에 필요한 유연성을 제공하 기 위해 2GB LPDDR3 듀얼 채널 메모리를 갖추고 있으며, 응용 프로그램 및 파일 저 장에 사용되는 확장 가능한 microSD 카드 에 대해 빠른 읽기 및 쓰기 속도를 제공하는 SD 3.0 인터페이스를 지원한다. 가장 큰 장점으로는 제작자 친화적인 IoT 연결성과 우수한 사용자 경험을 제공할 수 있도록 개발에 최적화된 설계이다. GPIO API를 통해 버튼, 스위치, 센서, LED 등의 다양한 입력을 활용할 수 있으며 디스 플레이 및 터치스크린을 위한 DSI MIPI 연결 또한 지원한다. GPIO 헤더는 색상으로 구분 되어 각각의 핀 헤더를 쉽게 인식할 수 있으 며, PCB는 연결 시인성을 높이기 위해 헤더 및 위치 가이드라인이 기판에 그려져 있다. Tinker 보드는 신용카드 크기로 작지만 뛰 어난 효율을 자랑하는 컴퓨터이며, AIOT 분 야에서 DIY 제작자들이 다양한 아이디어 개발을 위해 사용할 수 있을 뿐만 아니라 상업 용 제품으로도 활용될 수 있다.
[62호]지금은 4D시대! 신콘 4D 레이저 레벨기 출시
신콘
지금은 4D시대! 신콘 4D 레이저 레벨기 출시
3D를 넘어 이제는 모든게 4D로 나오는 4D 시대이다. 이러한 시대 변화에 발맞춰 측량 장비 전문 브랜드 신콘에서 4D 레이저 레벨 기를 출시했다. 신콘 4D 레이저 레벨기는 바닥 열선 작업, 프레임 선반 작업, 창틀 혹은 유리 시공, 대 형 액자 걸기, 천장 조명 설치 등 수평 작업 이 필요한 모든 곳에 편리하게 사용된다. 트 렌지스터 다이오드와 일본 샤프 LD 다이오 드를 사용했으며 레드빔보다 가시성이 좋은 그린빔을 채택하여 조명이 많거나 밝은 현장 에서 용이하게 사용 가능하다. 작업범위는 직경 30M로 수광기 사용시에는 100M까지 늘어나며 정밀도는 7m에 1mm이다. 또한 레 이저 라인 높이가 낮고 다각도에서 동시 표 시되어 바닥 몰딩 및 시공 등 DIY 작업이나 셀프 인테리어도 쉽게 할 수 있다. 셀프 레벨링 해제 기능이 있어 레벨기가 자 동 보정 범위 ±3.5˚를 벗어나면 작동되며 레이저 라인이 표시되고 필요에 따라 홀딩도 가능하다. 본체 헤드 부분에 클램프를 장착 하여 철재 구조물에 사용 가능케 하였으며 스틸 플레이트를 사용하여 일반 구조물에도 부착할 수 있다. 그뿐만 아니라 엘리베이션 베이스를 활용 해 최소 2.5cm에서 최대 9cm까지 본체를 위, 아래로 이동할 수 있다. 7.3V 2,600mAh 충전식 리튬 배터리를 사용하여 C타입 케이 블로 충전 가능하며 완전 방전 후 6시간이면 완충이 된다. 이때 장시간 사용하지 않을 시 에는 배터리함의 부식 방지를 위하여 배터리 분리를 권장한다. 방수 등급 IP54로 생활 방수 기능이 있어 먼지가 많고 습도가 높은 환경에서도 문제없 이 사용할 수 있다. 이외에도 더 자세한 사양 과 사용 방법을 디바이스마트에서 확인해보자.
[62호]Mindwave mobile 2를 이용한 뇌파 기반 응급호출 시스템
2020 ICT 융합 프로젝트 공모전 우수상
Mindwave mobile 2를 이용한 뇌파 기반 응급호출 시스템
글 | 숭실대학교 최영림, 최지웅, 이하영, 김수희
1. 심사평
칩센 측정한 뇌파가 유사한 상황에 대하여 모든 사람이 동일한 혹은 비슷하게 출력되는지가 궁금합니다. 만약 그렇다면 시스템 및 DB구축이 충분히 가능할 듯 합니다만, 그렇지 않다면 이미 의사표현과 거동이 불편한 노약자들이 각각의 DB를 구축하기는 쉽지 않을듯 합니다. 의료기기 또는 의료 보조기의 경우 critical한 정보를 해석하거나 판정을 위한 데이터를 제공해야 하므로 신중하게 접근할 필요가 있어 보입니다.
펌테크 아이디어와 창의성을 갖춘 작품이라고 생각이 듭니다. 단 제출된 보고서 내용을 고려하면 작품에 대한 기획의도는 우수하다고 생각되지만 계획에 대비해서 출품작의 일부 진행 과정은 확인이 되나 최종적인 완성도를 구체적으로 확인할 수가 없었습니다.
위드로봇 수집한 데이터 양이 작은 점이 문제이지만 학부생 연구에서는 더 이상을 요구하는 것도 무리라 생각이 듭니다.
2. 서론
SWEEG 팀이 개발한 ‘뇌파 기반 응급호출 시스템’은 의사 표현이 힘든 노약자나 어린아이를 위하여 BCI기술과 machine learning(AI)을 접목해 간병인에게 환자의 상태를(응급/평상시) 알려주는 도구이다.
과학기술이 발전하면서 인간의 평균 수명은 그림1과 같이 높아졌고, 다양한 질병의 규명이 가능해지게 되었으며, 그러한 질병에서 오는 불편함을 해소하고자 하는 개선 욕구 또한 증가하는 추세가 되었다. 시대적 흐름에 맞춰 인간의 삶의 질에 대한 중요성이 점차 높아짐에 따라 특히 바이오산업이 주목을 받게 되었다.
한편, 현재 사람들이 살아가는 시대는 업종별 구분이 무의미해지는 변화의 시기이다. ‘4차 산업혁명’이라고 흔히 부르는 이러한 변화는 AI의 발전을 기반으로 자동차, 가전, 의료기기 등 여러 분야의 구분을 무너뜨리고 모든 것이 연결되는 세상을 만들고 있다.
바이오 산업은 최근 IT 기술과 접목하면서 큰 성장을 이루며 점차 복잡-세분화되고 있다. 그중 인간과 컴퓨터 간의 상호 작용을 연구하는 학문 분야인 HCI(Human-Computer Interface)에 대한 수요가 증가하고 있다. 특히, BCI(Brain-Computer Interface)는 미국 MIT 대학과 세계 경제포럼 등에서 10대 유망기술로 선정되기도 하였다.
BCI 기술이란 사람의 뇌 활동을 측정해 생각, 의도, 감정 등을 분석하고 이러한 정보를 명령으로 변환해 다양한 외부기기를 제어하거나 사용자의 의사, 의도를 외부에 전달하는 기술을 말한다. [1] 오랫동안 수많은 연구자들이 뇌파를 분석해왔고 그 결과 최근 과학자들이 뇌 속 신호체계를 컴퓨터로 표현하는 방법을 개발하게 되면서 BCI기술이 본격적으로 발전할 수 있게 되었다. 지난 수십 년간의 연구에서 인간이 말을 할 때나 뭔가를 생각할 때 인간의 두뇌는 뚜렷한 활동 패턴이 나타나는 것으로 밝혀지고 있다. 또한, 누군가의 말을 들을 때, 혹은 듣는 것을 상상할 때에도 뇌가 인식 가능한 신호 패턴이 나타나는 것으로 밝혀졌다. [2] 이는 BCI를 통해 뇌파를 갖고 실제 의사소통이 가능하다는 것을 보여준다.
본 프로젝트에서는 딥러닝을 이용한 실시간 뇌파 기반 호출 시스템의 모델과 결과물을 제공하고자 한다. 환자들의 의사 혹은 응급 시 호출 상황을 말이나 몸짓이 아닌 뇌파로 표현할 수 있도록 컴퓨터 알고리즘과 인공지능을 이용하여 분석하고 이를 간병인 혹은 의사에게도 적용할 수 있을 것이다.
3. 제품 설명
3.1. BCI 시스템
BCI 시스템은 측정 방법에 따라 침습식 혹은 비침습식 방식이 있다. 침습식은 두개강내뇌파, 국소장전위, 마이크로 전극, 마이크로 전극배열 등을 이용하고 비침습식은 뇌전도, 뇌자도, 양전자 단층촬영, 근적외선분광, 기능적 자기공명영상을 이용한다. 두 방식은 각기 장단점을 가지고 있다. 침습식은 두피를 뚫고 뇌 피질 혹은 뇌 안에서 직접 신호를 측정하기 때문에 센서의 생체적합성 이 중요한 사항이 된다. 이는 신호의 질과 시간/공간 해상도가 뛰어나다는 장점이 있기는 하지만, 센서의 생체적합성 및 장기간 이식되어도 문제가 되지 않는 디자인과 재질 그리고 신경조직을 상하지 않으면서 저 전력과 무선으로 동작할 수 있는 전극에 대한 연구가 요구된다. 이에 반해, 비침습식은 잡음 문제가 있어 신호의 질이 떨어지지만, 인체에 무해하고 준비과정이 복잡하지 않기 때문에 선호되고 있다[3].
BCI 시스템은 기본적으로 학습 과정과 피드백과정으로 구성된다. 학습 과정은 전처리 단계, 특징 정보 추출 단계와 분류 단계로 나뉜다.
· 전처리 단계
뇌파는 측정 시 전극을 부착하는 위치와 방법, 실험 환경, 피험자의 움직임 등에 의하여 잡음이 발생하기 쉬우며, 잡음이 포함된 뇌파는 BCI 시스템에 사용하기 부적절하다. 따라서 효율적인 BCI시스템을 구성하기 위해서는 전처리 과정을 수행하여 신뢰성 있는 뇌파를 수집하여야 한다.
· 특징 정보 추출 단계
특징추출은 주어진 입력자료보다 적은 차원을 가지면서 동시에 자료를 분류하기 위한 특징을 충분히 포함하는 입력신호의 특징을 찾아내는 과정이다. 이러한 특징을 이용하면 분류를 위한 계산량을 감소시킬 수 있을 뿐만 아니라 불필요한 특징을 제거함으로써 분류성능을 향상시킬 수 있다.
· 분류 단계
특징추출을 거친 뇌파 신호는 실질적인 기기 제어 등을 위한 분석 및 분류 과정을 거치게 된다. 다양한 감각 기관을 통하여 전달되는 정보를 처리, 분석, 종합하여 미리 정의된 특정 패턴들 중 어떤 부류에 속하는지 판별하는 기술이다. 생체 인식의 한 분야인 BCI 분야에서 활용되어지는 기법으로는 은닉마르코프모델(HMM: Hidden Markov Models), Kalman Filter Model, 다층신경회로망(Multi Layer Perceptron)등이 있다.
이후 피드백과정은 마우스커서 컨트롤, 휠체어 운전, 로봇팔의 제어 등의 구체적 응용에 적용한다.
3.2. 주요 동작 및 특징
먼저 Mindwave Mobile2(이하 측정기)와 연결된 클라이언트가 실행되면 호출 서버에 대한 Post Request를 통해 해당 기기의 등록 여부를 확인하고 아닐 경우 등록한다. 그 후 측정기와 현재 블루투스 통신을 하고 있는지 확인하고 정상적으로 수행됨을 확인한 후 측정기로부터 사용자의 뇌파 데이터를 수신받는다. 수신받은 뇌파 데이터는 곧바로 미리 학습된 딥러닝 모델에 의해 호출 상황인지 예측하는 작업을 수행한다.
해당 뇌파가 응급 시 호출 상황일 경우 측정기의 MAC address와 함께 서버로 Get Request를 보내 호출 요청을 전송하게 된다.
호출 요청을 받은 서버는 DB의 ‘call’ 테이블을 확인하여 해당 기기와 호출 관계인 피호출자가 존재하는지 확인한다. 존재하는 경우에는 ‘callee’ 테이블로부터 해당 피호출자의 토큰을 읽어오고 이를 기반으로 Firebase의 FCM을 이용하여 피호출자 모바일 어플리케이션에 호출을 요청한 유저의 이름이 담긴 푸시 메시지를 전송하게 된다.
3.3. 전체 시스템 구성도
3.3.1. 순서도
본 작품의 순서도는 다음과 같다.
3.3.2. 시스템 구성도
측정기를 이용한 뇌파 기반 호출 시스템의 구성도는 다음과 같다. 상황에 따라 측정기와 호출 서버 사이에 존재하는 라즈베리파이는 일반 사용자 컴퓨터로 대체할 수 있다.
라즈베리파이와 사용자가 착용한 측정기는 블루투스 통신을 통해 연결되며 연결이 완료되었을 시 측정기는 사용자의 전두엽으로부터 나오는 EEG 신호를 측정하여 연결된 기기로 송신한다. 본 데이터를 수신받은 라즈베리파이 기기는 딥러닝 모델 중 가장 정확도가 높은 MLP 기반으로 학습된 모델에 의해 해당 EEG 신호를 판별(예측)하게 되며 해당 신호가 호출 상황(응급)인 경우 AWS EC2에 올라가 있는 뇌파 호출 서버로 Http Request를 전송한다.
AWS EC2에는 Django Framework 기반 뇌파 호출 서버와 데이터를 관리하는 MySQL로 이루어져 있다. MySQL에는 피호출자 클라이언트(어플리케이션)의 정보와 호출자 클라이언트(측정기)의 정보가 저장된다.
본 서버는 어플리케이션에 푸시 방식의 알람 메시지를 전송하기 위해 Google Firebase 클라우드를 이용한다. 따라서 서버가 호출자의 호출 요청을 수신받았을 때 연결된 Firebase 클라우드로 피호출자의 토큰 값을 전송해 해당 어플리케이션에 푸시 알람을 전송한다.
3.3.3. DB 다이어그램
호출에 필요한 호출자의 정보(기기 MAC address 및 이름)과 피호출자의 정보(토큰, 이름)을 효율적으로 관리하고 관계성을 정의하기 위해 데이터베이스는 MySQL을 사용한다. 각 테이블의 세부 역할은 다음과 같다.
ⅰ) EEG 테이블
호출을 지시할 측정기 기기의 MAC 주소와 사용자의 이름을 등록 및 관리
ⅱ) callee 테이블
피호출자의 어플리케이션 정보 및 FCM 토큰을 저장
ⅲ) call 테이블
EEG 테이블과 callee 테이블 간 호출 관계성을 정의
3.4. 개발 환경
OS : 라즈베리파이3(라즈비안), 우분투(AWS EC2), 윈도우
개발 언어 : python 3.6, java
개발 툴 : jupyter notebook, android studio, pycharm, git, MySQL
오픈소스 : OpenCV, Firebase, Keras, Tensorflow, Django
디바이스 : Neurosky사 Mindwave Mobile2
4. 단계별 제작 과정
4.1. 측정기와 블루투스 통신을 이용한 사용자 뇌파(EEG) 탐지
본 프로젝트의 뇌파(EEG) 탐지 방법은 다음과 같다.
측정기의 데이터 전송방식은 BLE 4.0을 이용하기 때문에, 측정기와 서버를 중계할 Ubuntu와 Python Bluetooth 연결을 시도한다. 측정기의 블루투스가 Advertising(외부에 자신의 존재를 알리는 기능)은 안정적이지만 Connection(두 블루투스 장치 간 연결을 하는 것)은 불안정한 편이라 연결이 성공할 때까지 그림9와 같이 대략 3~4번의 재시도가 발생한다. 성공하면 측정기와 Ubuntu Linux를 페어링(Pairing)하여 측정된 뇌파를 파형의 종류에 따라 분류하는 결과로 나타난다. 뇌파 수신이 안정적이라면 이후부터 응급호출 상황과 평소 상황을 가정하여 각각 데이터를 측정, 수집한다.
4.2. 뇌파 데이터 수집 및 BCI 알고리즘을 이용한 뇌파 분석
· 데이터 수집
두피에 전극을 배치하기 위한 다양한 시스템이 있다. 연구 목적으로 가장 널리 사용되는 시스템은 21개의 전극으로 구성된 10/20 시스템이다. 눈과 코 사이의 영역은 nasion 영역이고, 머리 뒤에서 두개골의 가장 낮은 지점의 영역은 inion 영역이다. Fig. 10은 10/20 시스템에서 전극의 위치를 보여준다[4]. 해당 프로젝트에서 이용한 측정기기는 위에서 언급한 Mindwave Mobile2이다. 해당 기기는 머리에 헤드셋처럼 낀 뒤에 전극이 붙은 날개 부분을 이마 위에 대고, 그 뒤에 걸린 집게를 귀에 집는 형식으로 되어있다. 이는 그림10과 같이 10/20 시스템에 따라 Fp1, A1 위치의 전극을 이용하여 뇌파를 비침습형 방식(non-invasive)으로 측정한다.
데이터의 수집을 위해 23, 24세의 성인 남성 2명이 프로젝트의 실험자로 진행되었다. 실험자들이 실험에 자발적으로 참여했으며 그들 각자의 동의하에 진행되었다. 응급 상황을 위해, 실험자 2명은 약 1분간 여러 번 기록한 영상이나 공포영화를 보거나 응급 상황을 상상하면서 응급 시 호출 뇌파를 측정하였다. 평상시 상황을 위해, 실험자 2명은 약 10분간 여러 번 게임, 수면, 음식물 섭취 등의 위급하지 않은 상황에서 뇌파를 측정하였다. 측정된 응급상황 뇌파와 평상시 뇌파의 수는 기계학습의 정확도를 위하여 만개 이상이 되도록 하였다.
· 전처리 단계
위에서 언급한 비침습형 방식은 간편하지만 수집한 데이터의 정확도가 떨어지는 단점이 있다. 하지만, 이 문제는 측정기 내부의 알고리즘으로 불필요한 신호를 높은 수준으로 걸러낼 수 있게 되었다. 측정기로 뇌파를 측정한 후 더 정확한 데이터의 수집을 위해 해당 프로젝트에서는 유효한 뇌파만 검출하여 데이터 형식을 csv로 가공하였다. 측정기에서 측정된 rawdata는 각 delta, theta, lowAlpha, highAlpha, lowBeta, highBeta, lowGamma, midGamma, meditation, 그리고 Attention 총 10개의 column으로 구분되어 매 초마다 출력된다. 추가적으로 눈 깜박임도 측정되지만, 이를 기록했을 경우 rawdata가 1초가 아닌 3초마다 출력되기 때문에 정확도가 오히려 낮아질 수 있다고 판단되어 측정에 고려하지 않았다. 이때 응급상황일 경우 meditation과 attention이 0일 때를 모두 제거하고 0이 아닌 데이터만 csv로 받아와 train, test data를 생성했다. 측정하고 전처리 된 평상시 데이터와 응급상황 데이터는 다음과 같다.
· 특징정보 추출 단계
특징을 추출하기 위해 몇 가지 통계 도구를 사용했다. 코드에서 이들을 구현하기 위해 scikit-learn, tensorflow 등의 python 라이브러리를 사용하여 분류를 위해 10개의 column으로 이루어진 데이터셋을 가공하였다. 다음 Scaler는 뇌파신호의 통계적 특징을 계산하는 데 사용된다.
RobustScaler
10개의 column을 가진 각각의 데이터들이 같은 scale을 갖게 되지만, 평균과 분산 대신 중앙값(median absolute deviation)과 사분위 값(interquartile range)을 사용한다. 따라서 기존 평균, 표준편차를 이용한 scaler와 달리 측정 에러(이상값)의 영향을 받지 않는다. 즉, 중앙값(MAD)이 0, 사분위 값(IQR)이 1이 되도록 변환한다[5].
i ) Interquartile Range(IQR)
IQR은 은 데이터 세트를 사분위수로 나누는 것을 기반으로 하는 변수 측정 방법이다. 사분위수는 정렬된 데이터셋을 4개의 동일한 부분으로 나눈다. 분리된 분위 값을 각각 1사분위, 2사분위, 3사분위라고 한다. 그것들은 각각 Q1, Q2 및 Q3으로 표시된다. 75 분위수와 25 분위수 사이의 차이 또는 상한과 하한 사이의 차이와 같다. 식은 다음과 같다[6].
IQR = Q3 – Q1
ii ) Median(MAD)
중앙값은 상위 절반을 데이터 샘플의 하위 절반, 모집단 또는 확률 분포와 구분하는 값이다. 즉, 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미한다. 확률 분포에서, 실수 m이 다음 식을 만족할 경우 그 값을 확률분포 P의 중앙값이라고 정의한다. 식은 다음과 같다[7].
· 분류 단계
해당 프로젝트에서는 MLP(DNN), SVM, CNN 세 종류 방식의 머신러닝 알고리즘을 이용하여 뇌파를 훈련했다. 각 머신러닝 알고리즘을 이용한 데이터의 정확도는 다음과 같다. 3가지 머신러닝 알고리즘을 사용한 이유는 더 정확도가 높은 머신러닝 알고리즘을 프로젝트에 적용하기 위함이다.
초기 SVM 알고리즘을 이용한 데이터를 실험했을 때 60%정도로 정확도가 낮았으나 이후 함수에 대한 다양한 변수값의 변화를 줌으로써 80%대까지 끌어올릴 수 있었다. 그러나 더 정확한 테스트를 위해 CNN, MLP 알고리즘을 추가 적용하였다. 그 결과 MLP가 약 95%의 정확도를 선보여 최종적으로 해당 프로젝트에 MLP 알고리즘을 적용할 수 있게 되었다. 추후 응급 상황뿐만이 아닌 다양한 상태의 뇌파를 판단할 때 이외의 알고리즘도 적용할 수 있다는 여지를 남겨두었다.
·피드백 과정
이후 csv로 저장된 뇌파를 훈련한 알고리즘을 h5 형태의 파일로 저장하여 Ubuntu에서 받아오는 뇌파에 즉석으로 적용할 수 있도록 하였다. 훈련된 데이터를 측정한 동일한 실험자에게 먼저 이 알고리즘을 적용한 결과, 정확도 높은 응급호출을 할 수 있었다. 데이터를 측정하지 않은 다른 실험자에게도 알고리즘을 적용해 응급호출상황을 가정해 실험해보았더니 이 또한 높은 정확도로 결과를 도출해낼 수 있었다.
4.3. Django 서버 프레임워크와 MySQL을 이용한 뇌파 호출 (메세징) API 서버 구현
높은 생산성과 머신러닝 라이브러리와의 지원과 같은 이유로 서버는 파이썬 Django 프레임워크를 선택하여 개발하였다. 측정기기의 MAC 주소와 피호출자 어플리케이션의 FCM 토큰값을 저장하기 위한 데이터베이스로는 MySQL을 사용하여 구현하였다.
만약 사용자의 특정 뇌파 패턴(호출 상황)이 감지된 경우 서버에 호출 요청을 하게 되고 서버는 해당 기기의 MAC주소와 연결되어있는 모든 클라이언트에게 FCM(Firebase Clout Message)를 통해 푸시 알람을 보내주게 된다.
4.4. 안드로이드 어플리케이션과 Firebase Cloud Message를 이용한 푸시 알람
사용자 어플리케이션의 효과적인 푸시 알람을 구현하기 위해 구글 Firebase를 이용하였다. 안드로이드 어플리케이션 구동 시 사용자는 Firebase로부터 토큰값을 할당받는다. 해당 토큰값을 뇌파 호출 서버에 등록하기 위해 어플리케이션 첫 실행 시 사용자는 개인의 식별 ID와 함께 토큰값을 서버에 전달하게 된다.
서버가 정상적으로 토큰을 DB에 저장했을 경우 사용자의 어플리케이션 로컬 스토리지(SharedPreference)에 해당 값을 기록하여 토큰이 서버에 저장되어 있음을 명시한다.
안드로이드 서비스 컴포넌트를 이용하여 어플리케이션은 Firebase로 부터 백그라운드 상황에서 푸시 알람을 받을 수 있으며 해당 경우 호출자의 이름과 함께 “호출하였습니다.” 메시지를 출력하게 된다.
5. 기타
5.1. 결론
본 프로젝트를 통해 응급 뇌파 호출을 위한 서버 시스템 및 통신 호출 관계를 정의하고 구축하였으며 뇌파 분석을 위한 알고리즘을 설계하였다. 실험 결과, 응급 상황 시에는 Meditation 및 Attention 수치가 일정 수준의 값을 보이는 것을 확인하였으며 이를 이용하여 정확한 알고리즘을 설계할 수 있었다. 이와 같은 뇌파 분석결과를 이용하여 의료분야뿐 아니라 게임 및 산업체 등 다양한 방면으로 뇌파 분석 시스템을 활용할 수 있다. 향후 연구 방향으로 더욱 다양한 상태의 뇌파 형태를 분석, 가공하여 4차 산업혁명의 시대에 맞는 다양한 뇌파 서비스를 제공하고자 한다.
5.2. 소스코드
https://github.com/Below0/EEG-Communication에서 확인할 수 있다.
5.3. 참고 문헌
[1] 조용환(2019.3.19.). 브레인 Vol.74, 10대 유망기술 BCI, 핵심은 ‘뇌파’. Retrieved from https://www.brainmedia.co.kr/BrainEducation/20968
[2] 김들풀(2019.2.6.). it뉴스, 뇌파를 음성으로 변환…BCI기술 구현. Retrieved from. http://www.itnews.or.kr/?p=29994
[3] 김귀정, 한정수 (2015). 뇌파를 이용한 BCI 게임 동향 고찰, 디지털융복합연구, 13:6, 178-179, 잠재적 사용자 대상 뇌-기계 인터페이스 (Brain-Machine Interface, BMI) 기술 개발을 위한 수요조사 (한국직업재활학회, 2014), 5-25에서 재인용.
[4] Max Roser, Esteban Ortiz-Ospina, Hannah Ritchie (2019). Life Expectancy. Retrieved from https://ourworldindata.org/life-expectancy
[5] Omid Bazgir, Zeynab Mohammadi, Seyed Amir Hassan Habibi (2018). “Emotion Recognition with Machine Learning Using EEG Signals.” 2018 National and 3rd International Iranian Conference on Biomedical Engineering (ICBME). IEEE 25: 1-5. Retrieved from https://arxiv.org/abs/1903.07272.
[6] V. Jurcak, D. Tsuzuki, and I. Dan. (2007) “10/20, 10/10, and 10/5 systems revisited: their validity as relative head-surface-based positioningsystems.”Neuroimage34(4): 1600-1611.
[7] 데이터 사이언스 스쿨(2016). scikit-learn의 전처리 기능. Retrieved from https://datascienceschool.net/view-notebook/f43be7d6515b48c0beb909826993c856/
[8] Wikipedia. Interquartile Range(IQR), Retrieved from, https://en.wikipedia.org/wiki/Interquartile_range
[9] Wikipedia, Median(MAD), Retrieved from, https://en.wikipedia.org/wiki/Median
[10] 한국콘텐츠진흥원(2011.3.). 문화기술(ICT) 심층리포트 12호:BCI 기술동향, Retrieved from https://www.kocca.kr/knowledge/publication/ct/__icsFiles/afieldfile/2011/03/24/HrswSxQXZXsO.pdf
[11] Akbari, H., Khalighinejad, B., Herrero, J.L. et al. Towards reconstructing intelligible speech from the human auditory cortex. Sci Rep 9, 874 (2019). https://doi.org/10.1038/s41598-018-37359-z
[12] “SVM using Scikit-Learn in Python.” learn opencv. n.d. 수정, Retrieved from https://www.learnopencv.com/svm-using-scikit-learn-in-python/.Scikit-learn: Machine Learning in Python, Pedregosa et al., JMLR 12, pp. 2825-2830, 2011.
[62호]180도 방향을 한번에 탐지하여 interaction한 반응형 스마트 지팡이
2020 ICT 융합 프로젝트 공모전 우수상
180도 방향을 한번에 탐지하여interaction한
반응형 스마트 지팡이
글 | 한국과학기술원 김동주
1. 심사평
칩센 손잡이에 모터를 이용한 햅틱 기능을 포함한 것이 매우 인상적입니다. 단순히 장애물의 유무만을 진동을 통해 알려주는 것이 아닌, 거리와 방향 등도 함께 알려준다는 것이 참신한 아이디어로 와닿습니다. 다만 제품으로 생각하였을 때 모터부가 많이 포함됨에 따른 전류 소모와 무게 등이 조금 걱정입니다. 향후 추가 적용 가능한 기능들( TTS, 사우드, 디스플레이등)을 적용하면 더 열악한 요소가 될 소지가 있어 보여, 위의 사용성에 저해가 될만한 부분을 잘 해결해 나가는 것이 관건일듯 합니다.
펌테크 작품의 아이디어와 실용성 창의성이 돋보이는 작품으로 생각됩니다. 6개의 서보모터를 사용해 촉각피드백을 제공하는 내용은 신선했으며 전체척으로 기획 의도에 맞게 시스템을 안정적이고 완성도 높게 구현하였고 제출된 보고서 구성 내용도 명확하고, 충실했다고 생각이 듭니다. 전체적으로 기획의도, 기술 구현도, 완성도 등에서 상당히 우수한 작품으로 생각됩니다.
위드로봇 작품의 완성도는 높습니다만, 화이트케인 프로젝트는 과거에 매우 많은 팀들이 시도했던 전력이 있습니다. 기존 사례 연구를 진행한 뒤 보완점을 찾아 진행했으면 창의성에서 더 높은 점수를 받을 수 있습니다.
2. 작품 개요
작품은 기존의 굉장히 좁은 방향각도(15도)로 물체를 탐지하는 스마트 지팡이의 단점을 개선하고 다양한 햅틱 반응을 통해 사용자가 물체의 위치와 방향을 인식할 수 있도록 하는 시스템을 스마트 지팡이에 구현하고자 한다.
- 장애물 위치, 방향에 따른 햅틱 반응 (점자와 비슷한)
- 거리에 따른 손잡이 진동 반응
- 블루투스 통신을 통한 스마트폰의 음성 안내 및 진동
3. 작품 설명
3.1. 기존 제품의 문제점
일반 보조 지팡이의 경우 보행자의 감각에 의존하여 스스로 위험 수준을 판단하고 대처해야 하는 단점이 있다. 이러한 단점을 개선하고자 많은 사람이 노력해왔고 최근 들어 점점 센서의 가격이 낮아지고 있고 IOT가 넓은 영역에 적용할 수 있게 되자 스마트 지팡이라는 것을 만들게 되었다. 현재 잘 알려진 지팡이로는 we-walk라는 지팡이이다. 이 지팡이는 2015년에 등장하였고 초음파 센서와 진동센서, 스피커, 터치패드가 내장되어 있다. 주요 기능은 전방에 장애물이 있는 것을 진동과 사운드를 통해 경고 해주는 장점이 있다. 하지만 단점으로는 초음파센서의 물체 탐지하는 각도가 최대 15~30도로 굉장히 좁아 지팡이가 향하는 곳만 탐지가 가능하다.
시각장애인이 일반 사람과 달리 거리를 다닐 때 가장 크게 느낄 수 있는 불편한 점은 일반사람은 자신이 가는 길 부분 외에 범위도 볼 수 있어(넓은 화각) 쉽게 장애물 회피가 가능하다. 하지만 시각장애인은 지팡이에 의존하여 자신이 가는 길 좁은 부분에만 장애물의 존재를 알 수가 있다. 그래서 기존의 스마트 지팡이는 이러한 근본적 문제를 해결하지는 못하였다.
이러한 근본적인 문제를 해결하기 위해 새로운 지팡이를 설계하고자 하였고, 현재 자율주행기술에서 보면 자동차 천장상단에 보면 레이더가 360도로 매우 빠르게 도는 것을 볼 수가 있는데 이러한 원리를 지팡이에 도입하여 기존 방식에서 진화하여 사용자의 전방 180도 방향의 물체를 탐지하여 어느 곳에 위치( 거리, 방향에 따라 )가 있는지 알아내어 햅틱이나 진동 소리 등 다양한 감각으로 표현하고자 하였다.
3.2. 주요 동작 및 특징 및 전체 시스템 구성
3.2.1. 초음파 센서 동작
지팡이 하단에 있는 초음파 센서는 서보 모터와 연결되어 있어 150도를 움직일 수 있다. 1.5초의 시간동안 150도를 회전하게 되는데 이는 우리의 눈으로 봤을 때이고 프로그램에서는 사실은 서보모터는 0.15초마다 10도씩 움직이고 멈추고, 멈추었을 때 해당각도에서 초음파를 보내게 되고 반사되는 시간을 측정하여 거리로 환산한다. 이때 해당 각도와 거리에 따라 3*3 Array에 물체가 탐지되었으면 1로, 물체가 탐지되지 않으면 0으로 하여 매 순간 정보를 업데이트 한다. 근데 이때 이미 배열에 1이 저장되어 있는데 순식간에 0으로 탐지 된다고 하면, 0으로 바꾸지 않는다. 즉 한번 전방을 훑는 과정에서 그 위치에 무언가 탐지되어 1로 바뀌면, 그 훑는 과정에서는 계속 1로 저장된다. 그래야 순식간에 지나가는 장애물도 1.5초 동안 인식했다고 하여, 만의 하나의 위험을 막을 수 있게 된다.
이런 방식으로 동작을 하게 되면 1.5초 간격마다는 사용자 앞의 중심으로 150도 각도로 탐지되어 대략 몇 도 방향에 몇 cm 거리에 해당하는 배열을 통해 장애물이 어디에 있는지 정보를 인지 할 수 있게 된다.
초음파 센서를 2개 쓰는 이유는 각 초음파 센서의 위아래 탐지 각도가 15도 이내이므로 2개를 사용함으로써 총 30도이상의 각도가 탐지가 가능하게 하였고 한 센서의 탐지가 잘못되어 일어나지 않는다면 다른 센서가 이를 탐지 할 수 있게 하기 위함이다.
3.2.2. 6개의 서보모터
3.2.1 초음파 센서 동작에서 얻은 초음파센서의 3*3 array 정보 중 가까운 거리의 2*3 array만을 이용하여 6개의 서보모터를 통해서 촉각 피드백을 제공한다.
아래 표와 그림3과 같이 해당 array에 0의 값이 있으면 서보모터의 각도를 1이 있으면 90도로 설정한다. 그렇게 되면 바깥쪽으로 component가 튀어나오게 되어 촉각적인 정보를 제공할 수 있게 된다.
즉 사용자의 입장에서 1.5초 동안 좌측 0~50도 방향에만 15~70cm 거리 부근에 장애물이 탐지되었다면 배열은 다음과 같이 정보를 저장하고, 서보 모터는 그 배열의 정보를 바탕으로 (점자 비슷하게) 1인 부분만 돌아간다.
3.2.3. 블루투스 모듈
서보 모터와 마찬가지로 초음파 센서가 update시킨 3*3 array 0,1 정보를 바탕으로 블루투스 모듈이 해당 거리 정보를 폰으로 송신하여, 스마트폰에서 그 정보를 읽을 수 있도록 해준다.
3.2.4 스마트 기기
블루투스로 수신된 데이터를 바탕으로 스마트폰 디스플레이에 정보를 표시하고 진동 피드백과 Google의 text to speech를 이용하여 청각적인 정보로도 명확히 알 수 있게 한다.
탐지 거리에 따른 앱 인터페이스 속 표시되는 이미지
4. 개발과정 및 기타
4.1. 하드웨어 구성
다음은 회로 구성도이다.
사용된 부품은 a. 7개의 servo motor b. 2개의 초음파 센서(HC-SR04) c. 스위치 d. 블루투스 모듈 (HC-06) e. Servo motor 6개의 제어를 위한 pca9685 chip f. Vibration motor g. AAA 건전지 4개 h. 아두이노 이다.
4.2. 외형도 (모델링 과정 및 햅틱을 위한 부품 제작)
외형은 다음과 같이 AUTOCAD사의 fusion360 프로그램으로 설계하고 SINDOH 3D프린터로 외형을 제작했다.
시각장애인을 촉각을 느끼게 할 수 있는 햅틱을 위한 서보모터에 부착하는 COMPONENT는 illustrator로 제작을 하여 레이저 컷팅기로 아크릴 5T를 잘라 만들었다. 그리고 로고를 MDF 3T를 레이저 컷팅기로 음각을 새겨내 손잡이 전면부 동그란 부분에 끼워 붙였다.
모델을 다 뽑았으면, 아두이노와 서보모터, 기타 센서들을 회로와 같이 만들 모델 케이스 안에 부착한다.
그 후 지름 2cm 길이 90cm의 나무 막대기를 모델하단부에 붙여준다.
4.3. 완성된 모델의 랜더링
랜더링은 keyshot을 이용했다.
4.4. 코딩 작업 #define WINDOW_SIZE 5 SoftwareSerial BTSerial(2,3); //tx rx핀 순서로 설정 //#define SERVOMIN 150 // This is the ‘minimum’ pulse length count (out of 4096) Servo myservo; //서보모터 각도 //전방에 있는 물체 int echoPin1 = 12; //초록색 핀 int vibration = 6; //진동모터 int sw=5; //함수 선언하는 곳 void setup(){ // 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다. delayMicroseconds(2); delayMicroseconds(10); delayMicroseconds(2); delayMicroseconds(10); float distance1 = ((float)(340 * duration1) / 10000) / 2; Serial.print(“filter_dis1: “); if((distance1<=90 && distance1>50) || (distance2<=90 && distance2>50)){ else if((distance1<=70 && distance1>20) || (distance2<=70 && distance2>20)){ else if(search[1][0]==0){ if(55<=angle && angle<110){ else if(search[1][1]==0){ if(110<=angle && angle<165){ else if(search[1][2]==0){ if(110<=angle && angle<165){ if(angle>=180){ }
4.4.1. Arduino coding
#include <Servo.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#include <SoftwareSerial.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
//#define SERVOMAX 600 // This is the ‘maximum’ pulse length count (out of 4096)
#define SERVOMID 400
#define SERVOMIN 130
#define SERVOMAX 633
int opp=0;
int angle=0;
int search[3][3]={0,};
int trigPin1 = 13; //노란색 핀
int echoPin2 = 7; //흰색 핀
int trigPin2 = 8; //
void vibrate(float f_distance1, float f_distance2);
myservo.attach(9); //
Serial.begin(9600);
BTSerial.begin(9600);
pinMode(trigPin1, OUTPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(echoPin2, INPUT);
pinMode(sw, INPUT_PULLUP);
pwm.begin();
pwm.setPWMFreq(60); // Analog servos run at ~50 Hz updates
delay(10);
}
void loop(){
//myservo.attach(9);
if (digitalRead(sw) == LOW) {
Serial.print(“ANGLE:”);
Serial.println(angle);
if(!opp){
angle+=10;
}
else{
angle-=10;
}
myservo.write(angle);
digitalWrite(trigPin1, LOW);
digitalWrite(echoPin1, LOW);
digitalWrite(trigPin1, HIGH);
digitalWrite(trigPin1, LOW);
// echoPin 이 HIGH를 유지한 시간을 저장 한다.
unsigned long duration1 = pulseIn(echoPin1, HIGH);
digitalWrite(trigPin2, LOW);
digitalWrite(echoPin2, LOW);
digitalWrite(trigPin2, HIGH);
digitalWrite(trigPin2, LOW);
unsigned long duration2 = pulseIn(echoPin2, HIGH);
float distance2 = ((float)(340 * duration2) / 10000) / 2;
Serial.println(distance1);
Serial.print(“filter_dis2: “);
Serial.println(distance2);
vibrate(distance1,distance2);
if(0<=angle && angle<55){
search[2][0]=1;
}
else if(search[2][0]==0){
search[2][0]=0;
}
if(55<=angle && angle<110){
search[2][1]=1;
}
else if(search[2][1]==0){
search[2][1]=0;
}
if(110<=angle && angle<165){
search[2][2]=1;
}
else if(search[2][2]==0){
search[2][2]=0;
}
}
if(0<=angle && angle<55){
search[1][0]=1;
}
search[1][0]=0;
}
search[1][1]=1;
}
search[1][1]=0;
}
search[1][2]=1;
}
search[1][2]=0;
}
}
else if((distance1<=20 && distance1>1) || (distance2<=20 && distance2>1)){
if(0<=angle && angle<55){
search[0][0]=1;
}
else if(search[0][0]==0){
search[0][0]=0;
}
if(55<=angle && angle<110){
search[0][1]=1;
}
else if(search[0][1]==0){
search[0][1]=0;
}
search[0][2]=1;
}
else if(search[0][2]==0){
search[0][2]=0;
}
}
int b_send=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
uint8_t servonum = 1+j+i*3;
if(search[i][j]==1){
if(i==0 && b_send==0){
BTSerial.write(“a”);
b_send=1;
}
else if(i==1 && b_send==0){
BTSerial.write(“b”);
b_send=1;
}
else if(i==2 && b_send==0){
BTSerial.write(“c”);
b_send=1;
}
pwm.setPWM(servonum,0,SERVOMID);
}
else{
pwm.setPWM(servonum,0,SERVOMIN);
}
search[i][j]=0;
}
}
b_send=0;
opp=1;
}
if(angle<=0){
int b_send=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
uint8_t servonum = 1+j+i*3;
if(search[i][j]==1){
if(i==0 && b_send==0){
BTSerial.write(“a”);
b_send=1;
}
else if(i==1 && b_send==0){
BTSerial.write(“b”);
b_send=1;
}
else if(i==2 && b_send==0){
BTSerial.write(“c”);
b_send=1;
}
pwm.setPWM(servonum,0,SERVOMID);
}
else{
pwm.setPWM(servonum,0,SERVOMIN);
}
search[i][j]=0;
}
}
b_send=0;
opp=0;
}
delay(100);
//myservo.detach();
}
else{
analogWrite(vibration,0);
}
}
void vibrate(float f_distance1, float f_distance2){
if((f_distance1 <= 100 && f_distance1 > 60) || (f_distance2 <= 100 && f_distance2 > 60)){
analogWrite(vibration, 100);// 진동모터를 200/255의 파워로 작동시킵니다.
}
else if(f_distance1<=70 && f_distance1>15 && f_distance2<=70 && f_distance2>15){
analogWrite(vibration,180);
}
else if((f_distance1<=15 && f_distance1>1) || (f_distance2<=15 && f_distance2>1)){
analogWrite(vibration,240);
else{
analogWrite(vibration,0);
}
}
4.4.2. App inventor coding (안드로이드 앱 구현)
A. 앱 및 인터페이스 디자인
시각장애인 안내견의 이미지를 지팡이로 표현하여 친숙한 이미지를 나타내고자 하였다.
B. 변수 및 함수 선언
C. Screen1에 대한 설정
D. Clock (반복문)에 대한 설정
E. 여러 컴포넌트에 대한 설정
4.5. 테스트 작업
수많은 테스트를 통해, 초음파 센서 최대각도 중 150을 얼만큼의 단위 각도로 나누어서 돌릴지, 그 단위 각도를 몇 초 동안 움직이게 할 것인지, 초음파 센서위치와 각도를 어떻게 하면 수직으로 더 넓은 범위의 물체를 탐지할 수 있는지, 진동모터의 세기는 얼마로 할 것인지, 얼마나 먼 거리의 물체부터 탐지해야 되는지에 대한 값을 구하고자 하였다.
5. 기대효과
매우 좁은 범위의 상황만 인지할 수 있는 시각장애인들의 근본적인 불편한 점을 자율주행자동차의 전방향의 도로 상황을 탐지하는 원리를 이용하여 해결함으로써 시각장애인들이 앞에 놓여진 상황에 대한 다양한 물체 정보과 피드백을 제공할 수 있게 된다. 스마트폰의 블루투스 기능을 연동하여 TTS기능, 사운드, 진동, 디스플레이 등의 더욱 확장성 있는 사용과 시각, 촉각, 청각 등 다양한 피드백 제공이 가능해진다. 처음에만 페어링하면 블루투스 주소를 계속 저장하고 있어 에어팟과 같이 지팡이와 스마트폰의 각각의 블루투스 기능만 켜져 있으면 자동으로 연결하여 매번 연결하는 불편한 점을 해소한다.
6. 추후 연구
초음파 센서가 달린 서보모터의 경우 계속 움직여야 하기 때문에 전력소모가 매우 심하고 소음도 살짝 존재한다. 이러한 문제를 해결하기 위해서 딥러닝의 영상처리능력을 이용하여 전방의 물체와 배경을 잘 구분하여 대략적인 거리를 유추하여 가까이 있다고 판단되면 그 때 서보 모터를 움직여 초음파 센서나 혹은 Tof 센서로 정확한 거리를 측정하게 되면 이러한 전력 문제와 소음 문제도 해결가능 할 것으로 보인다.
현재의 작품의 경우 0~50도, 50~100도, 100~150도 범위0 안의 물체가 있다라는 것을 인지 할 수 있지만 더욱 세분화하여 각도를 나누어 전방의 정보를 완벽히 인식하여 사용자의 앞 상황을 촉각적인 증강현실로 구현함으로써 시각장애인의 보행 중 문제 뿐만 아니라 전반적인 삶의 질 향상에 기여 할 수 있게 될 것 이다.
7. 참고 문헌
가. https://www.youtube.com/watch?v=y8X9X10Tn1k
나. https://learn.adafruit.com/16-channel-pwm-servo-driver/hooking-it-up
다. 함수사용
라. https://blog.naver.com/roboholic84/10186975566
마. https://cafe.naver.com/mechawiki/104
바. https://kocoafab.cc/tutorial/view/704
[62호]헬스케어, 비대면 언택트 시대에 맞게 변신하다.
헬스케어, 비대면 언택트 시대에 맞게 변신하다.
글 | 디바이스마트 박진아, 김흥운
디바이스마트에서는 스페셜 칼럼에 소개된 기술, 트렌드와 관련된 제품 소개를 통해 현재 주목받는 기술과 트렌드를 쉽게 이해해보고 흥미를 느낄 수 있는 시간을 마련해보았습니다.
이번 스페셜 칼럼중 하나인 ‘헬스케어, 비대면 언택트 시대에 맞게 변신하다.’ 에서는 기존 질병의 치료, 예방, 건강관리 과정을 모두 아울러 말하는 헬스케어에 IT기술이 접목된 사례를 확인할 수 있었습니다.
AI 스피커, 웨어러블 디바이스로 노인의 우울증, 치매와 같은 정신질환을 미리 예방하고 케어하는 돌봄 서비스, 비대면 디지털 치료법과 같이 코로나 19 확산 영향으로 ‘비대면’ 문화가 확산함에 따라 의료분야와 개인 건강관리 방법에 새바람이 불고 있습니다.
대면 진료가 어려워짐에 따라 웨어러블 디바이스로 평소 심박수와 몸 상태를 체크하고 관리하는 사람들이 늘어나고 있고, 실제로 세계 각지에서 애플워치의 심전도(ECG) 기능이 심장 이상 징후를 조기에 포착하여 도움이 되었다는 사례를 종종 접할 수 있습니다.
우리 일상에 깊이 들어온 헬스케어와 IT기술의 접목 사례들을 생각해보며 디바이스마트의 어떤 상품이 원격 의료 진료 시스템 또는 헬스케어 디바이스와 관련이 있을지 같이 확인해 보도록 하겠습니다.
근육, 심장의 전기적인 활동을 측정하는근전도 EMG 센서
이번에 소개할 제품은 근전도와 심전도를 확인해볼 수 있는 AD8232 chip을 탑재한 아두이노 근전도 EMG 센서입니다.
먼저 간단하게 AD8232 에 대해 알아보겠습니다.
제조사 : ANALOG DEVICES, 품명 : AD8232, 설명 : 단일 리드, 심박수 모니터 프런트 엔드
FDL :
AD8232 단선 심박수 모니터 보드는 심장의 전기적인 활동을 측정하고자 할때 사용하는 제품으로 심장의 전기적인 활동은 보통 ECG(Electrocardiography) 심전도로 표시합니다.
즉, 심장의 수축에 따른 활동 전류를 감지한 그래프를 심전도(ECG)라 하며 근육이 움직일때 마다 우리 인체에 흐르는 미세 전류를 감지하여 전류의 변화를 기록한 그래프를 근전도(EMG)라합니다.
위 이미지는 정상인의 심전도(ECG)로 나타난 그래프의 구성을 간단하게 설명하자면 P는 심방의 흥분을 나타내고, QRS는 심실의 탈분극(수축), T는 심실의 재근북을 나타냅니다. 실제 심전도는 심장의 상태를 측정하거나 손상 범위 진단 시 사용되나 여기서 소개되는 제품은 실제 의료기기가 아니기 때문에 근전도, 심전도 측정을 교육 및 체험 목적으로만 사용해야 함을 명심하시길 바랍니다.
심전도와 관련하여 의학적으로, 구체적으로 들어가면 너무 어려워지기 때문에 간단하게 아두이노와 AD8232을 이용해서 ECG를 측정해 위와 같은 그래프가 그려지는지 확인해 보도록 하겠습니다.
근전도 EMG 센서 AD8232 사용에 앞서 EMG 모듈로 어떻게 ECG를 측정이 가능한지 의문이 들 수 있겠지만, EMG와 ECG는 근육 수축에 의한 전기적 신호를 감지하는 같은 원리로 측정이 되기 때문에 EMG 모듈로 ECG도 측정이 가능합니다.
간단한 심전도 측정 실습
1.실습에 필요한 제품 소개
2. 하드웨어 구성하기
젤 패드 부착 방법
근전도 EMG 모듈 AD8232 제품에는 젤 패드 및 케이블이 총 3개가 함께 제공되며 이미지에서 빨간색 하트 모양인 심장을 기준으로 각 케이블 색깔에 동일한 원형부위에 맞춰 부착해 보시기 바랍니다.
젤 패드를 교체하고 싶거나, 부착 성능이 높은 패드를 사용하고 싶다면 디바이스마트 상품번호 1280244 또는 [Pololu] Electrodes for MyoWare Muscle Sensors (6-Pack)를 추천드립니다.
3. 아두이노 설치 및 소스코드 업로드하기
아두이노 IDE(Integrated Development Environment)는 아두이노 프로그램을 작성하고 컴파일 할 수 있는 통합 개발 환경으로 아두이노 공식 홈페이지(https://www.arduino.cc)에서 무료로 제공하고 있어서 편리하게 사용이 가능합니다.
공식 홈페이지를 통해 아두이노 통합개발환경(IDE) 설치한 후, 아래 소스코드를 업로드 해보기 바랍니다. 코드마다 이해하기 쉽게 설명을 주석으로 첨부하였습니다.
설치 방법 및 세팅은 디바이스마트 블로그 아두이노 통합개발환경(IDE) 설치 방법 및 세팅글 (https://blog.naver.com/no1_devicemart/221503319351)에 자세히 나와있으니 설치가 어려운 구독자분들은 해당 내용을 확인해 보시기 바랍니다.
소스코드
void setup() {
Serial.begin(9600); // 시리얼 통신의 보드레이트는 9600bps 로 설정
pinMode(10, INPUT); // 아두이노 디지털 10번을 입력핀으로 지정 LO+ 와 연결
pinMode(11, INPUT); // 아두이노 디지털 11번을 입력핀으로 지정 LO- 와 연결
}
void loop() {
if((digitalRead(10) == 1)||(digitalRead(11) == 1)){
// 만약 디지털 10번 핀 또는(OR) 11번 핀에 1이 입력되면
Serial.println(‘!’); // 시리얼포트로 ‘!’를 출력 합니다. > 젤 패드가 잘 붙었는지 확인 하는 원리
}
else{ // 아니라면
Serial.println(analogRead(A0));
// 시리얼포트로 아날로그 A0에 입력되는 값을 출력합니다.
}
delay(1); // 1ms 만큼 지연 시킨다 -> 연속 동작 중 정확한 값구분을 위한 딜레이 주는 겁니다.
}
4. 동작 모니터링 및 패턴 측정
동작 모니터링
아두이노 IDE 상단 메뉴에 툴 -> 시리얼 플로터 선택, 좌측 하단에 9600bps(보드레이트) 선택 후 최대한 움직임을 줄이고 측정 결과를 지켜 보았습니다.
실제 측정한 그래프는 위와 같으며 이론에 나온 정상인의 심전도와 같이 측정됨을 확인 할 수 있었습니다.
이렇게 AD8232 센서와 아두이노를 이용해서 쉽고 간단하게 심전도(ECG)를 측정해 보았는데요. 이번 근전도 EMG 모듈 AD8232 소개와 더불어 기초 실습 과정을 따라 해보며 끊임없이 변화하고 있는 헬스케어 트렌드, 웨어러블 디바이스에 활용되는 이론이나 기술에 한 발짝 다가가 이해해보는 시간이 되었으면 합니다.