본문 바로가기
정신 건강

실전 EMDR 치료기기 직접 만들기 – 공황장애, 사회불안장애, PTSD, 범불안장애 등 직접 치료

by 키티의 정보 창고 2022. 7. 31.
반응형

지난 글에서는 EMDR 기기를 직접 만들기 전에 EMDR은 어떤 것이고, 아두이노는 어떤 것이며, 준비 사항에는 어떤 것 들이 필요한지 기술해 보았습니다. 이번에는 준비된 사항들로 직접 만들어보는 시간을 가져보고자 합니다. 이 글을 읽는 자체만으로 기기가 뚝딱 만들어지는 것은 아니지만 이 글을 읽고 필요 재반 사항을 따로 습득한다면 충분히 스스로 만들 것이라고 생각이 됩니다.

 

1.렘수면과 EMDR

 

수면을 크게 둘로 나누면 자면서 눈동자가 움직이는 렘수면(rapid eye movement sleep)과 자면서 눈동자가 움직이지 않는 비렘수면(non rapid eye movement sleep)으로 나눌 수 있습니다. 렘수면의 가장 큰 특징은 입니다. 즉 꿈을 꾸는 동안에는 눈동자가 깨어있을 때처럼 자꾸 움직이게 되면서 이름이 지어진 수면 상태라고 할 수 있는데 실제 수면 중 눈을 감고 있는데 마치 눈 앞에 무언가 보이는 것처럼 눈을 이리저리 움직이는 것은 우리가 뇌 속에서 꿈이라는 영상 또는 이미지를 실제의 그 것과 같이 느끼기 때문일 것입니다. 이 렘 수면에 관해서는 다양한 가설이 있지만 기역과 관련해서 상관한 연관이 있는 것은 알려진 사실입니다. 렘 수면에서는 기억과 관련한 일련의 과정이 일어나는데 기억을 효과적으로 처리하는 과정을 거치는 것으로 알려져 있습니다. 꿈은 우리가 마음대로 꿀 수는 없지만 EMDR을 이용하면 깨어 있는 상태에서 차단되어 있거나 제대로 기능하지 못하는 기억 처리 과정이 EMDR을 통해 재개될 수 있게 되므로 환자의 기억을 효과적으로 처리 할 수 있게 됩니다. 복잡한 과정은 잠시 미루어 두더라도 분명한 것은 EMDR은 오랜 시간 동안 많은 환자들에게 도움이 되었고 효과가 분명히 있다는 것입니다.

아두이노 스케치
아두이노 스케치

2.아두이노 준비 과정

 

초등학교 과학시간에 건전지, 스위치, 전구 등을 이용하여 간단한 전기 실험을 한 적이 있을 것입니다. 건전지, 스위치, 전구를 직렬로 연결하여 사람이 손으로 스위치를 누르면 건전지의 전류가 전구로 흘러들어가 불을 밝히는 것과 지금 하려는 LED 스트립을 순서대로 켜는 것과 이치가 동일합니다. 단지 차이는 만약 20개의 전구에 불을 순서대로 밝혀야 된다면 사람이 일정한 속도로 순서대로 지속적으로 스위치를 눌렀다 때었다하는 과정을 수없이 반복하면 됩니다. 그러나 아두이노를 이용하면 사람이 손으로 수행하여야 할 동작을 아두이노가 대신하여 지속적으로 대신 수행 하게 될 것입니다.

 

아두이노는 사람이 아니기에 우리가 프로그래밍한 코드를 주입하여 주어야 합니다. 우리가 USB에 담은 사진을 티비를 통해서 화면에 띄우듯 아두이노 또한 담긴 프로그램에 따라 역할을 수행 할 것입니다. 아두이노에 들어갈 프로그램을 작성하려면 스케치라는 프로그램이 필요합니다. 스켓치의 다운로드 파일과 사용법은 검색을 통해 쉽고 빠르게 습득할 수 있으므로 가장 기본 적인 부분만 습득하면 충분히 이 프로그램을 만들고 사용할 수 있을 것입니다.

 

3.아두이노에 들어갈 프로그래밍

우리가 아두이노에 넣을 프로그래밍의 내용을 기본적으로 생각하고 프로그래밍 합니다. LED 스트립에 어떤 색을 어떤 속도로 어떤 동작을 할 것인지 생각을 해 보아야 됩니다. 이 글에서는 흰 색 불을 적당한 속도로 한 칸씩 이동시키는데 1번 불을 켠 다음 2번 불이 켜지고 그 이전 불인 1번 불이 꺼지게 만들어 흰 색 불이 한 칸씩 다음 칸으로 이동을 하였다 제일 마지막 불이 켜지면 다시 거꾸로 한 칸씩 이동하는 동작을 무한 반복시킬 것입니다. 아두이노에 전원이 공급되는 동안 이 작업은 지속 될 것이며 멈추고 싶다면 아두이노의 전원 공급을 차단하면 될 것입니다.

빛의 3원색
빛의 3원색

(1) 흰색 불 만들기

 

아두이노는 사람이 아니기에 프로그램에 흰색 또는 WHITE라고 입력한다고 아두이노가 반응할 리가 없습니다. 그러므로 아두이노가 색상을 인식할 수 있도록 입력을 하여야 합니다. 학교 미술 시간에 빛의 3원색에 관하여 들어봤을 것입니다. RGB(RED, GREEN, BLUE)3가지 색깔로 대부분의 색이 표현 가능합니다. OLED 티비에 대해서 들어 보셨을 것입니다. OLED 티비의 가장 큰 장점은 백라이트를 사용하지 않는 자발광을 사용하기 때문에 화면에 어떠한 색(RED, GREEN, BLUE)도 입력하지 않는 다면 완전한 블랙의 색상을 표현 할 수 있을 것입니다. 또 역으로 모든 색(RED, GREEN, BLUE)을 입력하게 되면 완전한 블랙의 반대인 화이트가 될 것입니다.

 

사람은 일반적으로 10진수를 사용하지만 아두이노에서는 16진수를 사용합니다. 0~255256가지 숫자로 색을 입력 할 것입니다. (RED, GREEN, BLUE)3칸에 각각 0을 입력하여 (0, 0, 0)을 입력하면 아무런 색도 입력 하지 않은 것이므로 블랙의 색상을 표현 즉 꺼져있는 불을 표현합니다. 역으로 (RED, GREEN, BLUE)3칸에 각각 255를 입력하여 (255, 255, 255)를 입력하게 되면 흰색의 불을 밝히게 될 것입니다. 0~255 사이의 숫자를 적절히 사용하여 원하는 색상을 구현할 수 있습니다. 256 컬러표를 검색하여 원하는 색상에 대한 16진수 값을 알아낼 수 있을 것입니다.

간단한 전구 켜기
간단한 전구 켜기

(2) 동작 만들기

스켓치 프로그램 사진을 보면 void setup() { } 이라는 글자가 보일 것입니다. { }의 괄호 사이에 적절한 코드를 넣어 초기화를 시킵니다.

 

strip.begin();

strip.show();

// Initialize all pixels to 'off'

 

Initialize all pixels to 'off'에서 알 수 있듯이 처음 시작은 모든 LED 스트립의 불이 꺼져있게 만든 다음 시작을 해야 합니다. 이 과정을 거치지 않으면 매번 아두이노에 전원을 입력할떄 마다 동일한 과정을 수행하지 않고 이전 전원이 입력되었을 때의 값이 남아서 LED 스트립의 불이 뒤죽박죽으로 켜질 것입니다.

 

처음 불을 모두 끄고 시작한다는 것에서 출발을 하여 이제는 어떤 동작을 무한히 반복을 할 것인지 입력해야 됩니다.

 

void loop() { }에서 { }의 괄호 사이에 어떤 동작을 할 것인지 입력해야 됩니다. 먼저 1LED부터 하나씩 순서대로 켜지게 만들어서 마지막 LED까지 도달하는 코드를 입력합니다.

 

void color(uint32_t a, uint8_t b) {

for(uint16_t i=0; i<strip.numPixels(); i++) {

strip.setPixelColor(i, a);

strip.setPixelColor(i-1, strip.Color(0, 0, 0));

strip.show();

delay(b);

}

 

colorWipe(uint32_t a, uint8_t b)는 두가지 구성 요소로 이루어집니다. uint32_t auint8_t b의 두가지 구성요소의 이름은 프로그래밍하기 편하게 아무 이름이나 붙인 것으로 그리 큰 의미를 가질 필요는 없습니다. uint32_t a 자리에는 원하는 색을 uint8_t b에는 지연시간을 입력하여 원하는 색을 원하는 속도로 조절할 수 있습니다.

colo 함수에서는 i++를 사용하여 하나씩 늘려나가는 느낌으로 이동합니다.

 

그 다음 마지막 LED에서 역으로 하나씩 순서대로 움직여 첫 번째 LED까지 도달하게 만들 것입니다.

 

void REVERSEcolor(uint32_t a, uint8_t b) {

for(uint16_t i=strip.numPixels(); i>0; i--) {

strip.setPixelColor(i, a);

strip.setPixelColor(i+1, strip.Color(0, 0, 0));

strip.show();

delay(b);

}

 

REVERSEcolor(uint32_t a, uint8_t b)도 두 가지 구성 요소로 이루어집니다. int32_t cuint8_t wait의 두 가지 구성요소는 앞서 colorWipe(uint32_t c, uint8_t wait)와 같은 값을 입력 하는 것이 좋습니다. 그렇지 않으면 흰색의 램프가 마지막 LED까지 이동한 다음 거꾸로 돌아올 때는 흰색이 아닌 다른 색으로 처음 이동할떄와는 다른 속도로 이돌 할 것 이기 때문입니다. 우리는 나이트클럽처럼 요란한 LED 스트립 효과를 원하는 것이 아닌 치료 목적의 EMDR 기기를 만드는데 목적을 두고 있습니다. 최대한 눈에 거슬리지 않게 색을 선택하여야 되고, 눈을 좌우로 편안히 움직이는데 적절한 속도를 입력하여야 할 것입니다.

 

지금 까지 한 것은 colorWipe함수의 내용과 REVERSEcolor의 함수 내용을 정의한 것입니다. 이제 남은 것은 첫 번째 LED에서 마지막LED까지 이동하는 함수 colorWipe와 역으로 마지막 LED에서 첫 번째 LED 까지 이동하는 함수 REVERSEcolor에 원하는 색과 원하는 지연속도를 입력하여 무한 반복시키는 일만 남았습니다.

 

colorWipe(strip.Color(255, 255, 255), 50);

REVERSEcolorWipe(strip.Color(255, 255, 255), 50);

 

strip.Color(A, B, C)에서 256 컬러함수표를 참조하여 원하는 색을 입력하면 됩니다. A,B,C 모두를 255로 한 것은 흰색을 의미합니다. 예를 들어 녹색을 좋아하는 사람은 (0, 255, 0)을 입력하면 될 것이고, 파란색을 좋아하는 사람은 (0, 0, 255)의 값을 입력하면 될 것입니다. 50의 값은 하나의 LED를 밝히고 다음 LED로 넘어가는데 걸리는 시간을 나타낸 것입니다. 50을 기준으로 조금 더 빠른 속도를 원한다면 50 이하의 숫자를 넣으면 되고, 느린 속도를 원한다면 50 이상의 숫자를 입력하면 될 것입니다. LED 의 불 켜지는 속도가 너무 빨라 LED를 눈으로 쫓아가는데 온 정신을 쏟아야 할 정도로 빠르게 하거나 LED 이동속도가 느리면 지루할 수도 있으므로 본인에 맞게 적절한 값을 여러 번 입력 해보면서 직접 값을 찾아 보는 것을 추천드립니다.

 

5. 결론

EMDR 기기를 직접 만들어보면서 여러 가지 사항을 공부할 수 있었으며 무엇보다 좋은 점은 나만의 커스터마이징 EMDR 기기를 반영구적으로 얻었다는 것입니다. 매 회기 전문 의료기관에 예약하여 지정된 시간에 어느 정도 고가의 비용을 지불하고 받는 것은 치료 측면에서는 가장 좋은 방법이 될 것입니다. 하지만 직접 만든 기기도 그에 못지않은 치료효과를 낼 수 있을 것이라고 확신하기에 직접 만들어보는 시간을 가져 보았습니다. 많은 분들에게 도움이 되었으면 좋겠습니다.

 
반응형

댓글