일반적으로 소프트웨어 개발의 이슈는 다음과 같습니다.
- 사용자 인터페이스(UI)의 구현
- 기능에 대한 처리
- 통신 프로토콜 구현
- 데이터 구조화
이 중에서 제어(Control)는 기능에 대한 처리에서 많이 고민하는 문제입니다.
기능은 시스템이 해야할 역할을 의미하는데, 처음에 프로젝트를 기획할 당시 가장 먼저 생각하게 됩니다.
많은 개발 초보자들이 어려워하는 문제는 바로 구상한 기능을 어떤 방법으로 구현할 것이냐 입니다.
개발의 최종 결과물은 프로그램 코드입니다.
프로그램 코드는 C/C++, Java, Python, C# 등 다양한 프로그래밍 언어로 표현될 수 있습니다.
하지만, 생각한 기능은 주로 글이나 그림 등으로 표현됩니다.
운동화 기능에 대한 컨셉 예 |
바로 유능한 개발자는 이와같이 글이나 그림으로 표현된 기능을 프로그래밍 언어로 바꿀 수 있는 능력을 가진 사람을 의미합니다.
표현된 글이나 그림은 순차 처리 방식의 Logic으로 바꿔야 하는데, 이것을 Flow Chart라 부릅니다.
Flow Chart 표현 예 |
이것을 위해서는 CPU 혹은 OS등의 Time기반 처리 방식에 대해 잘 알아야 하니 프로그래밍 언어만 배워가지고는 도저히 이것을 해낼 수 없습니다.
설령, 해냈다 하더라도 다음 단계는 알고리즘이라 부르는 수학 식의 표현입니다.
더 정확하게 말하면, 일반 수학이 아닌 수열(Numerical Series)형태의 수학이고, 10진수가 아닌 2진수로 표현되어야 합니다. 즉, 우리가 배웠던 수학이 아닌 컴퓨터 수학을 알아야 합니다.
정리하면, 컴퓨터의 순차 처리 방식과 수열형태의 수학을 해석할 수 있는 지식을 알아야만 프로그래밍 언어로 코딩을 할 수 있다는 것입니다.
만약, 초기에 기획된 그림을 그대로 제어에 사용할 수 있다면 초보 개발자도 소프트웨어를 만들 수 있으니 매우 좋을 것입니다.
이것을 비주얼 프로그래밍(Visual Programming)이라 부르며 오래전부터 많이 연구되고 그 결과물들을 사용할 수 있게 되었습니다.
비주얼 프로그래밍 도구의 예 |
이런 도구들을 사용하면 숙련자가 아니더라도 자신의 생각을 결과로 내는데 많은 도움이 될 수 있습니다.
아두이노 입문자들이 숙련자로 가기 위해 어려워하는 대표적인 문제는 다음과 같습니다.
1. 패턴 제어(Pattern Control)
패턴이란, 정해진 작동 방식을 의미합니다. 예를 들어 Buzzer로 노래를 연주할 때, 노래라는 것이 패턴이 됩니다. 이 패턴을 아두이노 스케치에서 표현하는 일반적인 방법은 배열을 이용하는 것입니다.
악보 등을 보고 이런 배열을 만드는 작업은 매우 고달프고 힘들기 때문에, 사실 좋은 방법이 아닙니다.
2. 센서 데이터 해석(Analysis Sensor Data)
인터넷에 찾아보면 아두이노로 다룰 수 있는 센서가 정말 많은 것을 알 수 있습니다. 이것에 대한 회로도 자세히 나와있고, 변경없이 바로 사용할 수 있는 스케치도 쉽게 구할 수 있습니다.
그러나, 항상 마지막에 작동 테스트를 하는 화면을 보면 아래와 같이 나오는 것을 알 수 있습니다.
이것은 아두이노 IDE에 포함되어있는 시리얼 모니터라 부르는 프로그램인데, 아두이노 스케치에서 Serial Class를 이용해서 이 화면에 여러 정보를 출력할 수 있습니다.
즉, 대부분의 센서 테스트는 이와 같은 방법으로 정상 작동 여부를 확인합니다.
문제는 바로 지금부터입니다.
이것은 그저 센서를 작동시키고 수집된 데이터를 보여줄 뿐이지 어떻게 써야 할 지는 앞으로 해야 할 일이란 것입니다.
아두이노의 Analog 핀을 통해서 수집된 정보는 0 ~ 1023사이의 숫자에 불과합니다.
이것을 빛의 밝기로 사용하려면 Lux란 단위로 변환해야 하고, 측정된 거리로 사용하려면 cm 등으로 바꿔야 합니다.
물론, 이 변환 정보는 센서마다 존재하는 데이터 시트라는 문서에 나와 있습니다.
Sharp사의 거리 센서에 대한 cm단위 데이터 변환 공식 |
만약, 패턴 제어와 센서 데이터 해석을 손쉽게 할 수 있다면, 초보 아두이노 개발자라 하더라도 좋은 아이디어만 있다면 쉽게 결과를 낼 수 있을 것입니다.
이것을 제어 시각화(Control Visualization)이라 부르며 아두니티가 지향하는 목표 중 하나입니다.
아래 동영상을 통해 실제로 이것이 어떻게 이루어지는 지 확인하시기 바랍니다.
혹시 심박센서를 연동할수도 있나요?
답글삭제아두이노에서 가능한 제어는 아두니티에서 모두 가능합니다.
삭제찾아보니 심박센서는 analogRead를 통해 값을 얻고 있더군요.
이런 경우 아두니티의 AnalogInput을 활용하면 데이터를 유니티로 가져올 수 있습니다.
다만, 심박 측정만을 위한 최적화된 기능은 구현된 것이 없어서 연구해야 될 것입니다.
향후, 아두니티에 심박 센서를 위한 기능을 추가해보겠습니다.