[29호] 9축센서 블루투스 모듈 UMotion.M을 소개합니다
9축센서 블루투스 모듈 UMotion.M을 소개합니다.
(주)앱스톤에서 개발한 9축 센서 블루투스 모듈을 소개하고 관련 정보에 대해 이야기 한다.
글 | (주)앱스톤
9축센서
자유 공간에서 동작들을 감지할 수 있는 센서 중 가장 대중화된 센서이다. 9축이라 함은 가속도 3축, 관성 3축, 지자기 3축으로 총 9축의 값이 측정되기 때문에 9축 센서라고 불린다.
가속도센서
가속도를 측정하는 센서이다. 중력가속도(g=9.8㎨) 가 포함된 정보를 나타낸다. 가속도 센서가 3축이라 함은 센서가 3차원에서 움직일 때 x축, y축, z축 방향의 가속도를 측정할 수 있다는 의미이다.
관성센서
자이로센서는 가속도를 측정하는 가속도 센서와 달리 각속도를 측정한다. 각속도는 시간당 회전하는 각도를 의미한다.
지자기센서
지자기 센서는 지자계를 이용하여 절대적인 방향을 측정하기 위해 사용된다. 지자계의 세기가 작기 때문에 센서 데이터는 주위의 다른 자기 성분에 쉽게 영향을 받게 된다. 이러한 이유로 인해 정확성을 유지하기 위해 지자기센서는 잦은 보정을 필요로 한다.
9축센서 활용도
세가지 센서가 융합된 만큼 활용도가 크다. 기본적으로 가속도, 관성, 지자기의 정보를 쉽게 얻을 수 있으며 이 정보들을 이용하여 자세측정(AHRS)을 할 수 있다. 자세측정을 하는 방법을 간단하게 설명하면 자이로 센서와 관성센서의 데이터의 융합으로 인해 회전데이터를 만들어 낸다. 지자기센서로 지자계에 대한 보정작업이 이루어지며 이 회전데이터를 이용하여 현실공간(3D 공간)에서 물체 회전을 알아낼 수 있다. 회전 데이터는 일반적으로 Quaternion, Euler, Matrix 로 표현한다. 활용한 예를 들면 비행기, 배, 네비게이션 그리고 최근에는 스마트 핸드폰, 태블릿, 스마트 리모컨, 게임 컨트롤러, 재활치료, 스포츠 코칭시스템, 댄스 코칭시스템, 애니메이션, 모션캡쳐 등으로 쓰이고 있다.
9축센서로 구현된 어플 예
앱스톤에서 개발한 두가지 어플 사례를 담는다.
JAVAYO
잘못된 자세로 앉아 있는 것을 막기 위한 어플이다. 센서를 가슴부위에 착용한다. 올바른 자세로 앉은 후 켈리브레이션을 하면 자세를 체크하여 잘못된 자세일 경우 알람 및 진동으로 잘못된 자세임을 알려준다.
Motion Counter
반복된 운동(푸쉬업, 스쿼트, 아령운동 등)을 자동으로 카운터하는 어플이다. 센서를 운동하는 부위에 착용한다. 예를 들면 푸쉬업할 때는 아래 팔(low arm)에 스쿼트를 할때는 허벅지에 착용하는 식이다. 센서 착용 후 운동을 시작하는 자세에서 켈리브레이션을 한다. 반복운동을 하면 자동으로 움직임에 따라 카운트를 한다.
UMotion.M 제품의 장점
가장 큰 장점은 스마트 기기와 바로 연동이 가능한 점이다. 스마트폰, 태블릿, 노트북 등은 기본적으로 블루투스 통신 모듈이 탑재되어 있어 별도의 수신기 없이 연결이 가능하다. 기본적인 데모어플에서 그래프를 통한 값의 변동을 쉽게 볼 수 있다. 가속도, 관성, 지자기의 값을 그래프를 통해 확인할 수 있어서 추후 어플 구현 시 디버깅하기가 용이하다. JTAG 포트를 통해 펌웨어 구현도 가능하다. 사용자가 요구할 경우 펌웨어 구현이 가능한 base code를 제공하기 때문에 어플리케이션 뿐만 아니라 펌웨어 또한 구현 가능하다.
배터리 지속시간이 우수하다. 한번 충전 시 최대 8시간 운용이 가능하다. 어플리케이션 구현에 용이하도록 기본적인 샘플 코드 예제를 제공한다. 아래는 메뉴얼에 나온 내용을 일부 발췌한 내용이다. 이외에도 데이터를 읽고 어떻게 연산하면 되는지에 대해 자세하게 설명되어 있다.
시리얼 포트 연결 시 PC 프로그래밍 일부 예제 (C# 기준)
public System.IO.Ports.SerialPort _SerialPort = null;
// System.IO.Ports.SerialPort 라이브러리를 이용한다. void SerialSetting()
{
if (_SerialPort != null)
if (_SerialPort.IsOpen) // 시리얼 포트가 열려있는지 확인하고 조치를 취한다.
_SerialPort.Close();
try
{
/* 아래는 시리얼 포트 세팅에 관한 부분이다. 소스가 약간 복잡해진 이유는 COMPORT 넘버가 10 이상일 경우 오픈이 안되는 현상을 해결하기 위한 코드가 들어가서이다. 나머진 기본적인 BaudRate, DataBits, StopBit 등의 설정을 하는 부분이다. */
string []test = {“COM”};
string []temp = _strPort.Split(test, StringSplitOptions.RemoveEmptyEntries);
if(Convert.ToInt32(temp[0]) >= 10)
{
_SerialPort = new System.IO.Ports.SerialPort(“\\\\.\\”
+_strPort, 0, System.IO.Ports.Parity.None, 0, System.IO.Ports.
StopBits.One);
}
else
{
_SerialPort = new System.IO.Ports.SerialPort(_strPort, 0,
System.IO.Ports.Parity.None, 0, System.IO.Ports.StopBits.One);
}
_SerialPort.BaudRate = Convert.ToInt32(_strBaudRate);
_SerialPort.DataBits = 8;
_SerialPort.StopBits = StopBits.One;
_SerialPort.Parity = Parity.None;
_SerialPort.ReadBufferSize = 4096;
}
catch(Exception) { }
try
{
_SerialPort.Open(); // 위에서 설정한 데로 시리얼포트를 오픈한다.
_SerialPort.ReadTimeout = 400;
}
catch (Exception){ }
}
안드로이드의 경우
안드로이드 Bluetooth Sample 예제를 활용하여 쉽게 데이터를 취득할 수 있다.
옆에는 Bluetooth Chat을 실행하여 StonCap과 연결한 모습 (출력이 프로토콜 모드 상태여서 아래와 같은 상태로 출력되어 있다. ASCII 모드로 출력을 변경하면 값을 직접 확인할 수 있다.)
드리프트 완화 알고리즘이 채용 됐으며 신뢰성있는 데이터를 출력한다. 센서 스펙은 아래와 같다.
Gyro Full Scale Range (°/sec) : ±250 , ±500, ±1000, ±2000
Gyro Rate Noise (dps/√Hz) : 0.005
Acceleration Full Scale Range (g) : ±2, ±4, ±8, ±16
Compass Full Scale Range (μT) : ±1200
[29호]측정/센서 필수 길라잡이 3.진동
한국NI에서 알려주는 측정/센서 필수 길라잡이
글 | 한국 NI, SW 및 측정 담당 이지석
3. 진동
움직이는 대부분의 물체들은 내부에 회전체를 지니고 있습니다. 쉬운 예로, 우리가 거의 매일 사용하는 자동차도 실린더의 수직운동을 회전운동으로 변경하여 차축으로 전달하고 있습니다. 이러한 회전운동들은 물체에 지속적인 진동을 유발하며 때로는 이러한 진동 때문에 구조적인 문제가 발생하기도 합니다. 이번 호에서는 이러한 진동의 기본과 진동을 측정할 때 사용하는 센서에 대해 알아보겠습니다.
우선, 진동을 측정해야 하는 이유를 조금 더 살펴보겠습니다. 상태 모니터링 분야에서는 장비의 상태를 측정하기 위해 진동을 사용할 수 있습니다. 시간에 따른 다른 진동 특징들을 분석하면 장비가 어느 정도 후에 고장이 날 지 예측할 수 있고 안전성과 비용 절감을 위해 적절히 유지관리를 스케쥴링 할 수 있습니다. 대량 생산 시스템에서는 급작스런 생산라인의 정지가 시간당 큰 손실로 이어지기 때문에 이러한 예측 진단이 큰 도움을 줄 수 있습니다.
또는 설계 또는 생산 중 제품의 진동을 측정하여 수용 가능한 설계 허용 공차인지 확인할 수도 있습니다.
이러한 진동을 측정하기 위해 가장 많이 사용되는 센서가 바로 가속도계(Accelerometer)입니다.
가속도계의 기본 목적은 테스트 중인 시스템의 특정 지점에서 가속 레벨을 측정하는 것입니다. 하지만 이 신호가 적절히 연산될 수 있다면 적분을 통해 속도와 변위의 동시 측정도 가능합니다.
진동값은 보통 미터법 단위 (m/s2)로 측정됩니다. 중력 상수 “g”는 보통 가속에 사용되지만, 표준 측정 미터법 단위는 아닙니다. “g”값은 1.0g = 9.81 m/s2 의 수식을 통해 2% 에러만으로 신속하게 환산될 수 있습니다.
간단한 (1D) 가속도계는 가속의 컴포넌트를 하나의 특정 방향으로 측정합니다. 이런 가속도계 세 개가 하나의 센서(3D 가속도계)에 결합되면, 가속도는 세 개의 직각 방향으로 동시에 측정될 수 있습니다. 그렇다면 가속도계는 어떤 방식으로 물리 현상인 중력을 데이터 수집 디바이스가 읽을 수 있는 전기 신호로 변환할 수 있을까요?
석영 등, 몇 가지 물질에는 힘을 전압으로 변환하는 매커니즘을 제공합니다.
힘을 받으면, 전하는 압전효과로 인해 석영의 표면 반대편에 축적되며 축적된 전하 양은 석영에 가해진 힘에 비례하고 석영 위의 전하차는 전압차로 측정됩니다.
진동에 노출되면, 가속도계는 아날로그 출력 전압 신호를 생성하고, 이 신호는 가해진 진동의 가속에 비례합니다. 위의 그림은 가속도계 내부를 나타내는 기본 구조를 나타냅니다. 질량의 움직임으로 인해 압전체에 힘이 가해지고 측정 가능한 전기 신호를 생성합니다.
가속도계는 여러 타입으로 제작될 수 있으며, 각각의 방식에는 어플리케이션에 따른 장단점을 가지고 있습니다. 가속도계 제조업체가 다양한 유형을 제공하므로, 만약 가속도계의 선택을 확신할 수 없다면, 센서 업체에 문의하여 어플리케이션에 가장 좋은 가속도계를 파악하는 것이 최선의 방법입니다. 제조업체가 제공하는 정보가 큰 도움이 될 수 있고 올바른 선택을 하는데 도움을 줄 것입니다.
Compression 타입의 가속도계는 질량과 가속도계 하우징 사이의 석영을 양쪽에서 감쌉니다. 이 방식은 부품이 소량이라는 장점이 있으며 높은 강성을 제공하므로 높은 진동 주파수 범위를 얻을 수 있습니다. 하지만 석영이 하우징의 기반에 닿고 있기 때문에 온도의 변화에 취약합니다.
Flexual 타입의 센서는 빔 모양의 석영으로 제작되어 있으며 구조적으로 중앙에서 지지를 받습니다. 이런 방식에서는 석영이 높은 가중 레벨에 놓여있기 때문에 상대적으로 높은 전압 출력 신호를 출력할 수 있습니다. 하지만 그 대신 제한된 주파수 범위만 측정할 수 있고 석영의 작은 부분에 많은 힘을 받게 되므로 제동에 더욱 취약합니다.
Shear타입의 가속도계는 중앙 기둥과 질량 사이에 석영이 있습니다. 전반적으로 이 방식은 가속도계에 최적의 성능을 제공합니다. 이 구조는 휘지 않기 때문에 측정 가능한 높은 진동 주파수 범위를 얻을 수 있고 석영이 하우징의 기반과 접촉하지 않으므로 열 과도 현상에도 더욱 뛰어난 면역을 가지고 있습니다.
전하 모드 가속도계는 기본적으로 제트 엔진과 같은 고온 환경에서의 측정을 위해 사용되며, 가변 감도도 제공합니다. 하지만 이 가속도계는 고온 환경에서 사용하기 위해 신호 컨디셔닝이 내장되어 있지 않아 전하를 전압으로 변환하기 위한 별도의 컨디셔닝이 필요합니다. 이로 인해 이 타입의 가속도계는 낮은 노이즈의 케이블 연결이 필요하며 환경의 영향에도 민감합니다.
IEPE 가속도계는 내부에 전하 컨버터가 있어 외부 신호 컨디셔닝이 별도로 필요 없습니다. 이 가속도계는 별도의 전력이 필요하며, IEPE 신호 컨디셔닝을 지원하는 데이터 수집 모듈이 해당 전력을 제공할 수 있습니다. IEPE 가속도계의 주 장점은 내부에 마이크로 일렉트로닉스와 간단한 컨디셔너가 존재하기 때문에 간단하고 사용이 쉽다는 것입니다. 단점은 온도 범위(일반적으로는 섭씨 120도이나 상회하는 경우도 있음)가 제한되어 있으며 민감도도 고정되어 있다는 것입니다.
가속도계에서 더욱 일반화되고 있는 다른 기능으로는 TEDS (Transducer Electronic Data Sheet)가 있습니다. TEDS는 센서 및 교정 정보가 센서 자체의 EEPROM에 저장됩니다. 이 정보는 TEDS를 지원하는 데이터 수집 모듈인 NI 9234로 센서에서 읽을 수 있습니다. 이 방식을 통해 측정 시 채널 설정을 자동화하여 초기 설정에 필요한 불필요한 시간을 절감할 수 있습니다.
진동 측정 시스템에서 고려해야 할 다른 사항으로는 가속도계를 타겟 표면에 어떻게 장착할 것인가 입니다. 장착 방식은 일반적으로 핸드헬드, 자성, 접착, 밀랍, 스터드 마운트 5가지가 있습니다.
스터드는 타겟의 물질 속으로 구멍을 뚫고 그 위에 나사로 가속도계를 부착합니다.
다양한 부착 방식들은 가속도계의 측정 가능한 주파수에 영향을 미칩니다. 일반적으로, 연결이 헐거워지면 측정 주파수의 한계도 낮아집니다. 각 가속도계는 다양한 장착 방식을 위한 저마다 고유의 주파수 측정 제한이 있으며 가속도계에 맞는 사양에서 호출되어야 합니다. 위의 표를 보면 100 mV/g 가속도계의 일반적인 주파수 제한을 확인할 수 있습니다. 스터드 마운팅은 가장 좋은 장착 기법이지만 타겟 물질에 구멍을 뚫어야 합니다. 따라서 임시 장착을 위한 다른 방식과는 달리 영구적인 센서 설치를 위해 사용됩니다.
센서에 대한 선정 및 설치가 완료되었다면 실제적인 가속도계의 신호를 받기 위한 하드웨어를 구성해야 합니다.
가속도계에 따른 어플리케이션은 매우 다양합니다. 따라서 National Instruments에서는 이동이 용이한 저가형 단일 USB 측정 제품부터 수백개의 채널을 동기화하여 측정 할 수 있는 시스템까지 모든 플랫폼을 제공하고 있습니다. 이러한 하드웨어의 선정은 일반적인 전문가가 아니라면 해당 업체의 컨설팅 엔지니어에게 채널, 취급 주파수 등 필요한 내용들에 대해 설명한 뒤 추천받는 것이 좋습니다.
지금까지 산업 현장에서 필수적인 센서 중 하나인 진동 센서에 대해 알아보았습니다. 대부분의 시스템은 기본적인 구동 원리로 인해 진동의 발생이 필연적이며 이러한 진동은 시스템에 원하지 않는 영향을 주게 됩니다. National Instruments에서는 진동 측정 및 분석에 대한 경험이 많지 않은 엔지니어들이 빠르고 쉽게 원하는 측정을 할 수 있도록 다양한 HW와 SW를 제공하고 있습니다. 진동측정 어플리케이션 구성이 필요한 경우 ni.com/daq 페이지에서 본인의 어플리케이션에 최적화된 시스템에 대한 자세한 정보를 얻을 수 있습니다. 다음 시간에는 물체의 늘어남과 줄어듦을 나타내는 변형률에 대해 알아보도록 하겠습니다.
[29호] 하지 장애인을 위한 스마트 음성인식 휠체어
2014 ICT 융합 프로젝트 공모전 우수상
하지 장애인을 위한 스마트 음성인식 휠체어
글 | 대구가톨릭대학교 의공학과 장익제
심 사 평
싱크웍스 핵심적인 기술은 음성인식인 것으로 보인다. 음성인식의 경우 오래된 주제이고 구동되는 액추애이터들이 특별한 것은 없는 것 같다. 따라서 창의성 점수를 높게 줄 수 없었다.
JK전자 홈오토메이션, 사물인터넷 등이 활성화되어 기반 인프라가 조성이 되면 이 작품이 제대로 빛을 발휘할 수 있을 것이라고 예상된다. 작품의 기술적인 면에서는 Labview 소프트웨어를 활용하여 음성 인식을 하는데 상용소프트웨어를 활용하는 것보다는 직접 알고리즘 설계에 도전해 보았으면 하는 생각이다. 제품을 상용화하는 경우에도 외부 소프트웨어 활용은 제품의 비용 측면에서 상당한 부분을 차지하게 될 것이다.
뉴티씨 사회적 약자를 위한 기술은 언제나 필요한 기술이며, 내가 사회적 약자가 될 수 있다는 각도에서 고려되어야 한다. 또한, 그러한 기술의 개발은 이 사회의 책임이기도 하며, 동시에 의무이다. 하지만, 사회적 약자들은 힘과 자본이 없어서, 그러한 기술들의 필요성이 상대적으로 크지만, 잘 드러나지 않는 것이 특징이다. 이에 이러한 프로젝트의 시도는 매우 의미가 있다고 하겠다. 스마트 패드 등에 설치하여, 안드로이드 환경에서 구현하였다면 더욱 좋았을 것으로 생각되며, 당장 실용 가능할 것으로 생각된다. 또한, 문을 닫거나, 불을 끄거나 하기 위한 주변 하드웨어도 함께 개발이 된다면 더욱 실용성이 높을 것으로 생각된다.
1. 작품 개요
1.1. 기구 개요
현대 사회의 의료기술이 발전함에 따라 장애인들에 대한 높은 복지 수준도 요구되고 있다. 이러한 요구에 맞춰 스마트 기기의 성능과 편리함의 장점을 이용하여, 하지 장애인들이 겪고 있는 집 안에서의 활동 제한과 불편함을 개선하고자 ‘스마트 음성인식 휠체어’를 개발하게 되었다.
휠체어의 상당수가 노인층에 속하며, 스마트기기에 익숙하지 않은 세대들이기 때문에 굉장히 쉽고 직관적인 방법이 필요하다. 따라서 음성인식은 이러한 세대를 위한 최적의 기술이면서 굉장히 도전적인 방법이라고 판단된다.
그림1. 스마트 음식인식 휠체어 |
보편적으로 사용되고 있는 수동 휠체어를 모델로 하고 모니터를 설치하여 실시간으로 집 안의 각종기기와 상태를 파악하고 조작 가능하도록 하였다. ‘스마트 음성인식 휠체어’의 작동은 모두 음성을 통한 명령어로 동작 가능하도록 개발되었다.
‘스마트 음성인식 휠체어’를 사용함으로써 실내 이동과정에서 발생할 수 있는 사고를 미연에 방지할 수 있으며 장애인의 자립생활이 가능하도록 함으로서 가족들이 느끼는 시간적 부담을 줄여, 궁극적으로는 ‘언제나 도움을 받아야 하는 존재’에서 벗어나 ‘도움을 줄 수 있는 존재’로 삶의 수준을 한 단계 높여 줄 것이다.
1.2. 주 사용대상 및 문제점
· 휠체어를 사용해야 하는 하지 장애인들
· 보행보조기를 사용하는 고령자
· 휠체어나 보행보조기를 타고 집안을 이동하는 것은 상당히 불편(문턱, 공간 etc)하고 힘들다.
· 일상 생활에서의 간단한 행동(문 개폐, 스위치 on/off)도 하지 장애인들에게는 어려움이 많다.
1.3. 사용자 예상 규모
2011년 한국통계청에 따르면 전국 등록 장애인수는 성별에 구분 없이 약 250만명으로 추정된다. 이 중 하지마비, 척수마비 등의 지체장애환자들은 대부분 휠체어의 사용을 필요로 한다. 또한 뇌병변장애인들도 휠체어를 필요로 하는 수가 대부분이다. 지체 및 뇌병변 장애의 인구, 그리고 고령자들을 고려할 때 약 100만명 이상의 사용대상자가 있을 것으로 판단된다.
그림2. 전국장애인유형별등록인수 |
2. 작품 설명
2.1. 주요 동작 및 특징
· 이동이 불편하고 제한된 하지장애인과 고령자들이 휠체어에 앉은 채로 집안의 전자기기나 문 개폐, 조명과 같은 다양한 활동을 목소리로 제어하는 기구이다.
· 사용자 특유의 억양과 음색을 데이터베이스화하여 인식하기 때문에 최적화된 시스템을 제공해 줄 수 있다.
· 집안의 다양한 기기들과 연결하여 사용자의 삶의 질을 향상시키는 기구이다.
· 장애인을 돌보는 가족들의 번거로움을 덜 수 있고 각자의 일에 충실할 수 있다.
· 휠체어의 좌측 팔걸이에 부착된 모니터를 통해 기기들의 실시간 상태와 컨트롤이 가능하다.
· 인터페이스가 매우 단순하고 쉽게 이해할 수 있도록 디자인 되었다.
· 기존 수동휠체어에 음성 인식부분만 추가적으로 결합하는 방식이 가능하기 때문에 비용 면에서도 경쟁력을 가지고 있다.
2.2. 전체 시스템 구성
‘스마트 음성인식 휠체어’의 시스템은 세부분(input, signal processing, output)으로 나뉘어진다. input은 명령어를 수집하여 컴퓨터로 전송하는 부분으로서, 마이크를 통해 명령어가 입력되면 DAQ(myDAQ, NI, USA)가 A/D변환을 하고 컴퓨터로 명령어가 전송된다. signal processing은 수집된 명령어의 고유주파수를 분석하여 어떤 명령어인지 판단한다. 어떤 명령어인지 확인되면 모니터상의 상태가 변하게 되고 output으로 명령어에 맞는 활동신호를 보내게 된다. 본 시스템알고리즘은 LabVIEW(NI, USA)를 통해 개발하였다. output은 명령어에 맞는 활동을 제어하는 부분으로서 MCU인 Arduino를 사용하였다. 본 시스템에서는 명령어를 통해 LED의 점등과 소등, Servo모터의 작동, DC모터의 작동을 구현하였다.
그림3. 전체 시스템 도식 |
2.3. 개발 환경
본 기구는 다양한 기술의 복합체로서 LabVIEW(ver.2012, NI, USA), Arduino(UnoR3-ATmega328P, Arduino, Italy) Rhino3D(ver.5, Mcneel, USA)를 사용하여 3부분으로 나뉘어져 S/W와 출력, 휠체어 디자인을 제작하였다. LabVIEW는 그래픽 기반의 프로그래밍으로서 C언어와는 달리 쉽고 간편하게 코드를 작성할 수 있다, LabVIEW를 활용하여 시스템 알고리즘(음성인식)과 모니터의 인터페이스를 만들었다. Arduino는 오픈소스 기반으로 된 강력한 MCU로서, 본 기구에서는 LabVIEW를 통해 아두이노를 사용하는 LIFA(labview interface for arduino)으로 아두이노를 컨트롤하였다. Rhino3D는 3D모델링 소프트웨어로서, 본 기구의 프로토타입을 디자인하였다.
그림4. 사용된 프로그램 |
3. 단계별 제작 과정
3.1. 단계별 제작 과정
본 기구는 소프트웨어 제작과 하드웨어 제작으로 나눠서 개발되었다.
· 소프트웨어 : 시스템 알고리즘, 인터페이스
· 하드웨어 : 아두이노 출력물 동작(output), 프로토타입 디자인
시스템 알고리즘 및 인터페이스:
· DAQ어시스턴트는 마이크로부터 들어온 목소리를 데이터로 불러준다.
· 목소리 데이터는 FFT를 통해 모든 주파수영역으로 분해된다.
· 배열창을 통해 모든 주파수값들은 순서대로 배열상태로 정리시킨 후, 최대값을 찾는다.
· 최대값의 파장대를 찾는다. 이 때, 최대값의 파장대가 명령어의 고유 주파수값이 된다.
· 노트북에 DAQ(myDAQ, NI, USA)를 연결하여 신호를 받을 수 있도록 하였다. DAQ에 마이크를 연결하고 명령어를 반복적으로 말하여 주파수를 획득하였다. 8가지 명령어(열어/닫어/덥다/춥다/온도올려/온도내려/점등/소등)를 모두 수행하여 데이터베이스화 하였다.
그림5. 데이터 입력 및 출력 |
그림6. 마이크와 DAQ 연결모습 |
음성인식의 알고리즘:
· 음성인식의 알고리즘은 크게 데이터베이스, 명령어마다의 고유주파수 검출, 명령어 분석으로 나뉘어진다.
· 음성인식을 하기 위해서는 명령어와의 비교를 통해 인식을 해야 될 레퍼런스, 즉 데이터베이스가 필요하다. 따라서 사용자가 활용할 명령어를 10번 반복하여 마이크에 녹음한다.
· 10번 반복된 단어(명령어)를 FFT하여 각종 노이즈를 제거하고, 고유 발음에 의한 주파수를 찾는다.
· 위와 같은 방법으로 사용할 모든 단어들(명령어)을 녹음하여 고유 주파수를 찾고, 데이터베이스를 완성시킨다.
· 마이크를 통해 단어를 입력하면 주파수분해를 통해 데이터베이스에 있는 명령어들과 비교를 하게 된다. 비교하여 동일한 주파수가 잡히면 아두이노로 출력신호를 보내게 되고, 그렇지 않으면 작동을 하지 않게 된다.
· 고유 주파수를 알고리즘에 설정하고, 8가지의 명령어를 구별하여 인터페이스에 나타날 수 있도록 하였다. ‘온도올려’와 ‘온도내려’는 에어컨이 켜져 있을 때만 명령어가 인식하도록 하였다. 그 외의 명령어들은 동시 실행이 가능하도록 하였다.
· 명령어를 인식하면 글씨의 색이 바뀌고 동작변화를 인식할 수 있도록 아이콘과 그래프를 디자인하였다.
그림7. 음성인식 알고리즘 |
그림8. 명령어마다의 고유 주파수 설정 |
그림9. 명령어 인터페이스 |
아두이노 출력물동작(output):
· 집안에서 가장 보편적인 작업 및 행동을 표현하기 위해서 MCU인 Arduino를 사용하였으며, 출력은 DC형 servo motor(SEDS 350)와 DC motor 그리고 LED를 이용하여 동작형태를 나타내었다.
· DC형 servo motor와 DC motor의 전류를 맞춰 주기 위하여 트랜지스터(2N4401)와 저항(220Ω, 100Ω)으로 공통 콜렉터 증폭기를 구성하였다.
· 거실조명을 표현한 LED는 turn on/off의 동작이 되도록 하였고, 에어컨(선풍기)을 표현한 DC motor는 PWM(Pulse Width Modulation)출력을 이용하여 펄스 폭을 제어하였다. 펄스 폭을 제어함으로써 온도조절에 따른 모터의 회전속도를 컨트롤 하였다. 현관문을 표현한 DC형 servo motor를 통해 경첩과 같은 움직임을 컨트롤 할 수 있도록 하였다.
그림10. 아두이노와 연결된 출력물 |
그림11. 아두이노의 파워제어 모니터링 |
· 기존의 아두이노는 C언어 기반의 작동을 하도록 되어있다. 하지만 LIFA(LabVIEW interface for Arduino)를 이용하여 C언어가 아닌 랩뷰로 아두이노를 구동함으로써, 손쉽게 제어하고 프로그램 연동이 쉽도록 하였다.
· 각 명령어에 나타나는 알고리즘의 값들(참, 거짓)을 로컬변수를 통해 아두이노의 출력부분과 결합하여 함께 인식하도록 하였다. 같은 값을 공유함으로써 인터페이스의 현재상태와 아두이노의 동작이 동시에 나타나게 된다.
그림12. 아두이노의 입력과 출력제어 |
그림13. 아두이노 동작 유무제어 |
프로토타입(Prototype)제작:
그림14. 라이노3D로 디자인한 기구 |
· ‘스마트 음성인식 휠체어’의 디자인은 라이노3D를 이용하여 모델링 하였다.
· 휠체어는 가장 많이 쓰이는 수동휠체어의 형태를 선택 하였으며, 좌측 팔걸이에 마이크가 내장된 모니터를 설치하였다. 모니터를 통해서 명령어에 의한 작동과 시스템 모니터링이 가능하다.
· 디자인한 모델링을 토대로 Prototype를 제작하였다. 거치대를 제작하여 휠체어의 좌측 팔걸이에 설치하였으며 태블릿PC(Ativ, Samsung, KOREA)를 결합하였다. 휠체어를 움직여 안정도를 테스트하였다.
· DAQ와 아두이노를 연결하고 명령어에 따라 인터페이스와 기계동작이 올바르게 작동하는지 테스트하였다.
그림15. 프로토타입 제작과정 |
기구의 구성과 User interface:
· 주파수(스펙트럼): 목소리(명령어)의 주파수 값을 그래프화 한다.
· 목소리(음파): 목소리(명령어)의 진폭 값을 그래프화 한다.
· 인터페이스: 명령어에 따른 동작의 변화를 보여준다
-에어컨: on/off , 설정온도 조절
-현관문: OPEN/CLOSE
-형광등: 현재상태의 LED 점등
· 명령어: 목소리(명령어)에 따라 글씨의 색이 변한다 (검정 ⇨ 노랑)
그림16. 완성된 인터페이스 |
특이사항:
· 오른손잡이를 기준으로 디자인된 휠체어로서 좌측 팔걸이에 모니터를 설치하여 활동에 불편함이 없도록 하였다.
· Prototype 개발시, 주위의 소음을 최대한 줄인 채 명령어를 획득하였다.
장점:
· 휠체어를 이용하는 장애인이 음성인식을 사용함으로써 움직이지 않고 여러가지 컨트롤이 가능하다.
· 장애인을 돌보는 가족들의 번거로움을 덜 수 있고 각자의 일에 충실할 수 있다.
· 사용자 특유의 억양과 음색을 데이터베이스화하여 인식하기 때문에 최적화된 시스템을 제공해 줄 수 있다.
· 인터페이스가 매우 단순하고 쉽게 이해할 수 있도록 디자인 되었다.
· 간단한 인터넷 서핑이나 TV와 같은 다양한 기능들을 결합 가능하다.
· 기존 수동휠체어에 추가적으로 결합하는 방식이 가능하기 때문에 비용면에서도 경쟁력을 가지고 있다.
단점:
· 데이터베이스를 만들어 고유 주파수를 획득하고 나서 사용이 가능하다.
· Prototype의 경우 동일인이 다른 억양과 음색으로 말을 할 경우 작동에 오류가 생길 수 있다.
· 외부 노이즈(소음)에 의한 오작동의 위험성이 존재한다.
개선방향:
· Prototype은 유선방식의 동작테스트를 하였다, ‘스마트 음성인식 휠체어’에 bluetooth를 결합하여 홈 네트워크의 무선화를 구현하여야 할 것이다.
· 고유 주파수 획득을 자동화하여 사용자 스스로 수정하고 인터페이스의 조정이 가능하도록 할 것이다.
· 외부 노이즈 제거 기술을 향상시킴으로서 오작동을 줄이도록 개선 할 것이다.
· 배터리 부분을 고려하여 장시간 사용이 가능하도록 개선할 것이다.
기대효과:
① 개인(기구 사용자) 및 사회적 기대 효과
· 하지 장애인을 위한, 더 나아가 스스로의 활동이 어려운 고령자들을 위하여 집 안에서 혹은 직장에서 장애인들이 의지해야만 하는 휠체어나 보행 보조기에 스마트 음성 인식장치를 부착함으로써 장애인 및 고령자들이 외부의 도움을 받지 않고 그들 스스로가 일을 해낼 수 있도록 한다. 따라서 ‘스마트 음성인식 휠체어’가 보편화됨으로서 장애인 및 고령자들의 삶의 질을 높이고 움직임에 의한 낙상사고와 같은 위험을 줄일 수 있다.
· 장애인 및 고령자들은 ‘언제나 도움 받아야만 하는 존재’ 라는 사회적 인식이 개선될 것이라 확신한다.
② 경제적 기대 효과(상품으로써의 가치 창출 및 시장성 분석)
· ‘가구설치 및 인테리어팀과 복합적인 기술을 요구한다. 때문에 이 시스템의 장점을 잘 살려 고부가가치 상품화가 가능할 수 있을 것이다.
· 독창적인 보조기기로써 U-health와 더불어 새로운 시장성을 만들어 줄 것이다.
· 기존 수동 및 전동 휠체어보다 한 단계 발전된 새로운 기능의 휠체어로서 휠체어의 새 시장을 구축할 것이다.
4. 기타
모델링 :
우수상을 타신 대구카톨릭대학교 장익제님께는 적립금 30만원이 지급되었습니다.
다음호에는 우수상을 수상한 6족 보행로봇 ‘벅벅이’가 소개될 예정입니다.
[29호]지니어스키트, 코코아팹 출시
지니어스키트, 코코아팹 출시
㈜네패스는 Main반도체 사업을 중심으로 디스플레이 터치스크린 패널, 반도체 기술을 응용한 전자재료사업, LED, Building Material의 에너지사업을 진행하고 있는 중견기업이다. 이 (주)네패스에서 출범한 SOLVR 사업부에서 지니어스키트를 출시했다. 간략하게 설명하면 지니어스키트(Genius Kit)는 네패스 SOLVR 사업부에서 출시한 소프트웨어(프로그래밍)와 하드웨어가 결합된 테크 D.I.Y 도구다. 초등학생에서 일반인까지, 남녀노소를 불문하고 평소 자신이 갖고 있던 아이디어를 실현해 볼 수 있는 키트인 것이다.
사용자에 따라 용도 또한 달라진다. 초·중등학생들에게는 창의력을 키워줄 수 있는 교구로 활용될 수 있고, 대학생이나 예비 창업자들은 본인이 구상한 제품을 거의 비용을 들이지 않고 시범제작(프로토타이핑)할 수 있다. 또한 R&D 연구원들에게는 새로운 아이디어 발굴을 위한 도구로 활용될 수 있다.
이미 해외에서는 지니어스키트와 유사한 제품(이태리의 아두이노)이 수 년 동안 각광받아왔고, 국내에서도 많은 이들이 사용하고 있다. 그러나 구입 방법(해외구매)이나 언어적 장벽으로 인해 그 사용자는 공학전공자, 관련업계 종사자, 일부 마니아 층에 국한되어 있었다. 그래서 (주)네패스 SOLVR 사업부는 과거 해외제품이 갖고 있던 기술적 문제점과 환경적 제약요인을 대폭 개선한 제품(오렌지보드)를 출시하였고, 누구나 쉽게 응용·실습해볼 수 있도록 연결부품들과 함께 세트로 구성한 키트(지니어스키트)를 연이어 출시했다. 그 동안의 해외제품들이 소위 ‘아는 사람들’ 만을 위한 것이었다면, 지니어스키트는 누구나 쉽게 사용할 수 있는 제품이다.
지니어스 키트의 특징
· 아두이노 우노와 100% 호환되는 한국형 아두이노 제품
· 다양한 부품구성 패키지
· 22종의 부품 구성으로 다양한 프로젝트 및 예제 실행 가능
· 초보자도 금방할 수 있는 한글화된 학습 가이드를 제공
· 입문부터 응용까지, 한글 학습가이드로 쉽게!
· 국내 Maker들의 커뮤니티를 운영하여 다양한 프로젝트 제공 및 Maker들간의 커뮤니티 지원
지니어스 키트 상세 스펙
부품명 | 제품사양 | 부품수 | |
1 | Orange Board | Arduino | 1 |
2 | LCD | GDM1602K | 1 |
3 | DC Motor | 3V | 1 |
4 | Servo Motor | SG90 | 1 |
5 | Soil Moisture Sensor | HL-69(3.35V) | 1 |
6 | Ultra sonic sensor | HC-SR04 | 1 |
7 | Humidity & Temperature sensor | DHT-11 | 1 |
8 | Temp.sensor | TMP36 | 1 |
9 | Photo Resistor | PGM5537 | 1 |
10 | 7Segment | Anode | 1 |
11 | LED | 5mm | Y:20 | R:20 | G:20 |
RGB 5mm | 2 | ||
12 | Piezo Element | KPX1203S | 1 |
13 | Relay | 5V DC | 1 |
14 | Potentiometer | 10㏀ | 1 |
15 | IC | 74HC595 | 1 |
16 | Diode | 1N4148 | 2 |
17 | Transistor | P2N2222AG | 2 |
18 | Push Button | 6x6x5 | 2 |
19 | Resistor | 1/4WJ 330Ω | 10 |
1/8WJ10㏀ | 10 | ||
20 | Breadboard | 30×14 | 1 |
21 | Jumper wire | Various Colors | 20 |
22 | USB cable | 5Pin Micro USB | 1 |
23 | acrylic panel | 160×108 | 1 |
kocoafab(코코아팹)
또한 지니어스키트와 더불어 국내 IoT 시장에서 수많은 전문가들이 모여 서로 소통하고 새로운 아이디어를 발굴하는 생태계를 열어갈 전문 커뮤니티의 필요성을 느낀 (주)네패스는 커뮤니티 사이트를 제작했다.
이것이 kocoafab(코코아팹)이다. Kocoafab(코코아팹)은 개설 취지에 맞게 제품 설계도면과 한글 매뉴얼을 사이트에 공개하는 한편, 매일 새로운 응용 컨텐츠가 업데이트하여 사용자들의 자발적인 참여를 유도하고 있다. 개설 이후 특별한 홍보 없이도 월 평균 2만 명에 달하는 방문자가 kocoafab(코코아팹)을 통해 실제로 정보를 얻고(튜토리얼), 만들고(메이커스), 나누며(커뮤니티) 국내 오픈소스하드웨어 및 사물인터넷 시장의 다양한 가능성을 보여주고 있다. 지니어스키트의 사용자는 kocoafab(코코아팹)에서 제공하는 지니어스키트 메뉴얼을 적극 활용하는 것을 추천한다.
TEL. 02-3470-2829
http://kocoafab.cc
[29호] Intel Edison Review
바야흐로 IOT(Internet of Things : 사물인터넷)시대가 막 개화하려하고 있는 이 시대 우연한 기회에 에디슨 보드라는 것을 알게 되었습니다. 모든 사물이 인터넷에 연결되어 정보를 공유할 수 있는 체계를 통칭하여 IOT라 한다고 하지만 선뜻 와 닿지는 않는 것 같습니다. 이렇게 사물을 인터넷과 연결시켜주는 다리와도 같은 역할을 인텔 에디슨 보드가 충실히 해낼 수 있을까요?
저는 라즈베리파이보드와 스마트폰을 연동하여 Wi-Fi 기반에서 RC CAR를 제어해 본 경험이 있었기에 모듈형 초소형 컴퓨터에 대해서는 그리 낯설지 않은 것 같습니다. 맨 처음 라즈베리파이보드를 접했을 때의 문화적 충격보다도 갑절은 더 할 에디슨 보드의 리뷰를 시작해보려 하며 Breakout보드를 사용하여 리눅스, 아두이노 등을 테스트 해보고자 합니다. 궁극적으로는 에디슨보드를 인터넷에 물려서 동작시켜보려 합니다.
본 리뷰는 디바이스마트 ((주)엔티렉스)의 지원을 받아 작성하게 되었습니다. 아직 시장에 출시된 지 얼마 되지 않은 관계로 한글로 된 정보가 거의 없다보니 인텔 홈페이지와 해외 웹사이트 등을 참고해 가며 본 리뷰 보고서를 작성하였습니다.
[1] 에디슨 보드 제품 외관 및 사양
1. 에디슨 보드 개봉
작은 스마트폰 케이스만한 상자에 에디슨보드와 에디슨 Breakout보드가 각각 1매씩 들어 있었습니다. 에디슨 Breakout보드는 별매품이지만 에디슨보드를 사용하려면 적어도 이 보드 정도는 갖춰야 하기에 주최 측에서 배려를 해주셨습니다. 먼저 사이즈가 어느 정도 되는지 이해하기 쉽도록 자를 대고 촬영해 보았습니다.
Intel® Edison(상품코드:1160265)와 Intel® Edison Breakout Board(상품코드:1160267)
2. 에디슨 보드 간략 살펴보기
인텔사의 홍보성 글에 ®에디슨컴퓨팅모듈은 “IoT 프로토타입” 및 “웨어러블 컴퓨팅” 제품 생산에 대한 진입 장벽을 낮출 수 있도록 많은 고려가 있었다고 합니다.
70핀 커넥터를 통해 외부와 전기적으로 연결되며 와이파이/블루투스를 포함하고 있습니다만 비디오 입출력(LCD등 디스플레이장치, 디스플레이 커넥터) 등은 미포함입니다.
항 목 | 내 역 |
프로세서 | Dual Core IA-32 @ 500 MHz, 32-bit Intel® Atom™ Processor Z34xx Series @ 100 MHz |
RAM | 1 GB LPDDR3 POP memory (2 channel 32 bits @ 800 MT/sec) |
내장 스토리지 | 4 GB eMMC (v4.51 spec) |
전력관리 | TI SNB9024 power management IC |
무선 | Dual-band (2.4 and 5 GHz) IEEE 802.11a/b/g/n |
블루투스 | BT 4.0 + 2.1 EDR |
안테나 | Dual-band onboard chip antenna or u.FL for external antenna |
컨넥터 | 70-pin Hirose DF40 Series (1.5, 2.0, or 3.0 mm stack height) |
사이즈 | 35.5 × 25.0 × 3.9 mm maximum |
전원공급 | 3.15 to 4.5 V |
I/O | 40 general purpose GPIO which can be configured as: • SD card: 1 interface • UART: 2 controllers (one full flow control, one Rx/Tx) • I2C: 2 controllers • SPI: 1 controller with 2 chip selects • I2S: 1 controller • GPIO: Additional 14 (with 4 capable of PWM) |
USB2.0 | 1 OTG controller |
Clock | 19.2MHz, 32kHz |
표1 : 하드웨어 기능
프로세서는 500MHz로 돌아가는 32비트 듀얼코어 프로세서와 100MHz로 돌아가는 아톰프로세서로 구성된 것이 눈에 띄며 1GB램과 4GB eMMC는 어지간한 프로그램 구동환경에는 문제가 없을 정도로 넉넉해 보입니다. 또한 고속 SD CARD를 처리하기 위한 SDIO가 붙어 있어 SD메모리카드 연결도 충분히 고려되어 있음을 알 수 있습니다.
2.1. 에디슨보드 블록도
2.2. 내부 모듈 사진
3. 각 부분별 세부 사항
3.1. Intel® Atom™ processor Z34XX
인텔의 Z34XX 아톰프로세서는 스마트폰 시장을 타겟으로 22nm 공정으로 만들어진 SoC라고 합니다. 앞서 설명 드린 바와 같이 내부에는 IA-32 기반의 500MHz급 듀얼코어를 포함하고 있습니다. 64비트 명령어 디코드나 비순차적실행 등을 위해 두 CPU 코어 간에는 1MB 공유 캐쉬메모리를 설치해 놓고 있습니다.
3.2. 와이파이/블루투스 모듈
와이파이/ 블루투스 모듈은 브로드컴의 BCM43340을 기반으로 만들어져 있습니다. 이 BCM43340의 특징을 살펴보면
■ 2.4GHz/5GHz IEEE802.11 a/b/g/n 듀얼밴드 제공
■ 802.11n 모드에서 통상적으로 90Mbps의 스루풋과 최대 150Mbps까지의 속도 제공
■ SDIO v2.0과 gSPI(40MHz) 호스트 인터페이스 제공
■ 블루투스 4.0 지원, 블루투스 전송규격 Class1, Class2
■ 보안기능
□ WPA, WPA2 지원
□ IEEE802.11i 규격을 따르는 고속 데이터 암호화 지원(AES)
□ W-Fi Protected setup(WPS) 지원
3.3. NAND(eMMC) Flash 메모리 관리
에디슨보드는 4GB의 NAND Flash메모리를 가지고 있으며 파일시스템과 유저데이터를 저장하는 공간으로 사용할 수 있습니다.
■ 버스 모드
□ 데이터버스폭: 1bit, 4bit, 8bit
□ 데이터 전송률 : 최대 200MBps
□ MMC I/F 클럭주파수 : 0~200MHz
□ MMC I/F 부트주파수 : 0~52MHz
3.4. DDR SRAM
에디슨 보드는 1GB LPDDR3 메모리를 최대 1033MT/s까지 지원합니다.
■ 8개의 뱅크를 가지고 있음
■ Row 어드레스 : R0~R13
■ Column 어드레스 : C0~C9
■ Dual-채널 32bit
■ 최대 400Mhz 클록인가(800 MT/s)
3.5. 전력관리장치(PMIC : Power Management IC)
에디슨 보드는 TI의 SNB9024 전력관리칩을 장착하고 있습니다. 이 칩을 통해 입출력되는 신호의 크기 등을 통제할 수가 있습니다.
■ 4개의 고효율 Buck컨버터(강압형 레귤레이터)를 내장 하고 있음
□ Two dual-phase 0.55 to 1.2 V @ 4.8 A with DVS
□ One dual-phase 1.24 V @ 2.5 A
□ One single-phase 1.8 V @ 1.1 A
■ 1개의 5V 1.2A 부스트(승압형) 컨버터 내장
■ 1개의 3.3V/3.4V 1.4A Buck-Boost 컨버터 내장
■ 5개의 LDO 레귤레이터 내장
□ 3개의 프로그래머블 레귤레이터(1.05~2.85V@100~300mA)
□ 1개의 고정밀도 1V@ 2mA
□ DVS(Dynamic Voltage Scaling : 동적전압제어)0.75~0.95V@220mA
■ 2개의 부하 절체기
■ USB-AC/DC 어댑터전원 탐지 및 외부 충전회로 제어(충전 전류제어기능)
■ I2C Interface and dedicated SVI
■ PMIC 용 인터럽트 제어
■ 7개의 범용 1.8V I/O와 최대 3.3V를 지원하는 2개의 I/O
■ 백업시간을 위한 32.768kHz RTC
■ 알람타이머 인터럽트
■ 슬립 클록 출력 : 32.768kHz
3.6. USB2.0 트랜시버 ULPI(High speed USB 2.0 표준) 인터페이스
ULPI인터페이스는 TUSB1211 USB2.0 트랜시버 칩을 통해 USB 컨트롤러와 연결되어 있습니다. 이 칩은 모든 USB2.0 데이터 전송속도를 수용합니다. (High speed : 480Mbps, Full speed 12Mbps, Low speed 1.5Mbps) TUSB1211은 또한 USB배터리 충전규격 v1.1을 지원합니다.
3.7. 통합형 칩안테나와 외장형안테나를 위한 u.FL 컨넥터
에디슨모듈은 Wi-Fi통신용 2.4Ghz와 5Ghz의 이중밴드 안테나를 보드에 내장하고 있습니다. 내장안테나는 플라스틱케이스에 들어가는 소형폼팩터에 주로 사용되어 질 수 있고 더 큰 장치나 금속 엔클로져에 들어갈 때는 외장형 안테나를 u.FL컨넥터에 끼워 사용 할 수 있습니다.
3.8. 70핀 인터페이스 컨넥터
이 컨넥터는 히로세 70핀 DF40시리즈의 헤더 타입으로 구성되어 있습니다. 히로세 컨넥터 파트넘버는 DF40C-70DP-0.4V(51)입니다.
핀 | 신호명 | 보조기능 | 내용 |
2,4,6 | VSYS | 시스템 입력전원 (에디슨보드 동작 전원) (3.3 to 4.5 V) | |
8,10 | 3.3 V | 3.3 V 출력단자 | |
12 | 1.8 V | 1.8 V 출력단자 (디지털 I/O핀 전압레벨과 동일) |
|
14 | DCIN | DC 아답터로부터 전원공급 단자 (만일 배터리로부터 전원을 공급 받는 경우 미 연결) | |
1,5,9, 11,13,15 |
GND | 접지 | |
7 | MSIC_SLP_ CLK3 |
32 kHz sleep 클록 출력 | |
3 | USB_ID | USB OTG ID pin | |
16 | USB_DP | USB D+ | |
18 | USB_DN | USB D- | |
20 | USB_VBUS | USB VBUS input (does not power system) |
|
17 | PWRBTN# | Power/sleep 입력버튼 (엑티브 low) |
|
19 | FAULT | USB power fault input (from external USB current limit switch) | |
21 | PSW | USB power output enable (to external USB current limit switch) | |
23 | V_VBAT_BKUP | 리얼타임클록 배터리 입력핀(RTC) | |
36 | RESET_OUT# | 시스템 리셋출력 (active low) | |
24 | GP44 | GPIO | |
25 | GP165 | GPIO | |
26 | GP45 | GPIO | |
28 | GP46 | GPIO | |
30 | GP47 | GPIO | |
32 | GP48 | GPIO | |
34 | GP49 | GPIO | |
42 | GP15 | GPIO | |
48 | GP14 | GPIO | |
35 | GP12_PWM0 | PWM_0 | GPIO, capable of PWM output |
33 | GP13_PWM1 | PWM_1 | GPIO, capable of PWM output |
37 | GP182_PWM2 | PWM_2 | GPIO, capable of PWM output |
39 | GP183_PWM3 | PWM_3 | GPIO, capable of PWM output |
41 | GP19 | I2C_1_SCL | GPIO, I2C1 clock (open collector when configured for I2C) |
43 | GP20 | I2C_1_SDA | GPIO, I2C1 data (open collector when configured for I2C) |
45 | GP27 | I2C_6_SCL | GPIO, I2C6 clock (open collector when configured for I2C) |
47 | GP28 | I2C_6_SDA | GPIO, I2C6 data (open collector when configured for I2C) |
50 | GP42 | I2S_2_RXD | GPIO, I2S2 receive data (input) |
52 | GP40 | I2S_2_CLK | GPIO, I2S2 clock (output) |
54 | GP41 | I2S_2_FS | GPIO, I2S2 frame sync (output) |
56 | GP43 | I2S_2_TXD | GPIO, I2S2 transmit data (output) |
22 | GP134 | UART_2_RX | GPIO, UART2 receive (input) |
27 | GP135 | UART_2_TX | GPIO, UART2 transmit (output) |
51 | GP111 | SPI_2_FS1 | GPIO, SPI2 chip select 1 (output) |
53 | GP110 | SPI_2_FS0 | GPIO, SPI2 chip select 0 (output) |
55 | GP109 | SPI_2_CLK | GPIO, SPI2 clock output |
57 | GP115 | SPI_2_TXD | GPIO, SPI2 transmit data (output) |
59 | GP114 | SPI_2_RXD | GPIO, SPI2 receive data (input) |
46 | GP131 | UART_1_TX | GPIO, UART1 transmit (output) |
61 | GP130 | UART_1_RX | GPIO, UART1 receive data (input) |
63 | GP129 | UART_1_RTS | GPIO, UART1 ready to send (output) |
65 | GP128 | UART_1_CTS | GPIO, UART1 clear to send (input) |
44 | GP84 | SD_0_CLK_FB | GPIO, SD clock feedback |
58 | GP78 | SD_0_CLK | GPIO, SD clock output |
60 | GP77 | SD_0_CD# | GPIO, SD card detect input (active low) |
62 | GP79 | SD_0_CMD | GPIO, SD command |
66 | GP80 | SD_0_DAT0 | GPIO, SD data 0 |
70 | GP81 | SD_0_DAT1 | GPIO, SD data 1 |
64 | GP82 | SD_0_DAT2 | GPIO, SD data 2 |
68 | GP83 | SD_0_DAT3 | GPIO, SD data |
67 | OSC_CLK_OUT_ | 19.2 MHz high speed clock output | |
31 | RCVR_MODE | 펌웨어 리커버리 모드 | |
69 | FW_RCVR | 펌웨어 리커버리 (active high on boot) |
|
29,38, 40,49 |
Unused. |
표2 : 에디슨보드 컨넥터 핀과 시그널 리스트
4.1. I2C 인터페이스
에디슨보드는 2개의 I2C 채널이 있으며 I2C1은 pin41, 34에 연결되고, I2C6는 pin45, 47에 연결되어 있으며 기본적인 모드는 다음과 같습니다.
■ 표준모드(전송 속도는 최대 100kbps)
■ 고속모드(전송 속도는 최대 400kbps)
■ 하이스피드모드(전송속도는 최대 3.4Mbps)
■ 항상 I2C마스터 모드로 동작
■ 7bit, 10bit 어드레싱 모드 지원
4.2. SD CARD 인터페이스
SD3.0 규격을 준수하며 핀 44, 58, 60, 62, 64, 66, 68, 70을 사용
■ 호스트 클록은 최대 50MHz까지 출력
■ 카드삽입과 방출을 검지할 수 있음
■ SD 호스트컨트롤러는 표준 SD3.0을 지원함
■ SD메모리 전용
■ 2.85V 디바이스 지원을 위해 레벨 변환을 필요로 함
4.3. UART 인터페이스
UART는 2개가 지원되며 UART1은 H/W 흐름제어가 제공되나 UART2는 그렇지 않다. UART1은 핀 46, 63, 61, 54에 연결되어 있으며 UART2는 핀 22, 27에 연결한다.
■ 16550 칩과 동등
■ 64바이트 버퍼
■ 보레이트는 300bps ~ 3.686Mbps까지를 지원
UART2 포트는 Linux 디버그용 포트로 사용된다.
4.4. SPI 인터페이스
SPI 채널은 핀 51, 53, 55, 57, 59에 연결되어 있으며 2개의 chip select신호를 사용할 수 있습니다.
■ 단일 프레임전송을 할 때는 클럭의 위상에 따라 4가지 모드를 지원
■ 멀티프레임 전송모드에서는 SPH = 1, SPO = 0 또는 1로 설정됨
■ 마스터모드에서 최대 25Mhz, 슬레이브 모드에서 16.67MHz를 지원
4.5. I2S 인터페이스
I2S인터페이스는 핀 50, 52, 54, 56에 연결되어 있습니다. 에디슨보드에서 가능한 포맷은 에디슨보드 하드웨어 구조 설명서 (edison-module_ HG_331189-002.pdf)상 Table6를 참조
4.6. PWM
PWM출력을 위해 4개의 GPIO가 사용될 수 있으며 핀 33, 35, 37, 39가 할당되어 있습니다. PWM 각 채널은 8비트 분해능을 가집니다.
PWM 출력주파수 및 주기는 아래와 같이 구합니다.
- Target frequency ~= 19.2 MHz * Base_unit value/256
- Target PWM duty cycle ~= PWM_on_time_divisor / 256
4.7. GPIO
GPIO 포트는 외부와 인터페이스용 I/O로 사용될 수 있습니다. 핀 24, 25, 26, 28, 30, 32, 34, 42, 48 등 9개가 사용될 수 있으며 I2C, I2S, UART 등이 사용되지 않는다면 해당 포트도 GPIO로 사용될 수 있습니다. 각 핀은 풀업이나 풀다운 저항을 소프트웨어적으로 설정할 수 있으며 2k, 20k, 50kohm 등을 선택할 수 있습니다. 특히 I2C핀은 910옴의 저항으로 연결되어 있음에 유의해야 합니다. GPIO 포트는 기본적으로 edge status를 읽어들이기 전에 글리치 제거가 이뤄져 신뢰성을 높이는 구조로 되어 있습니다. 참고로 출력전류 공급능력은 ±3mA로 다소 약한 편입니다.
4.8. USB
에디슨 보드는 단일 USB2.0포트를 갖고 있으며 코드의 다운로드용으로 사용됩니다. 핀 3, 16, 18, 20이 포트와 연결됩니다.
에디슨 모듈은 디바이스측으로 전력을 공급하지 않는 구조이고 OTG기능이 또한 설치되어 있으며 이 기능은 3번 핀의 ID시그널에 의존하여 동작됩니다. OTG모드에서 전력공급은 외부 보드에서 수행하여야 합니다. PSW(핀21), FAULT(핀19)는 VBUS상에서 과전류가 흐르는지 탐지하며 이는 ULPI가 담당합니다.
4.9. Clock
에디슨보드는 2개의 클럭 출력포트를 갖고 있습니다. 7번 핀은 32KHz 슬립클럭과 연결되어 있고 67번 핀은 19.2MHz 출력핀과 연동됩니다. 슬립모드에서도 ±3mA의 출력 전류를 흘릴 수 있습니다. 19.2Mhz 클록은 TBD mA의 높은 전류를 공급할 수 있는 능력이 있습니다.
4.10. 시스템리셋
에디슨보드는 PWRBTN#(pin17)과 RESET_OUT@(pin36) 등 2개의 리셋 시그널용 핀이 있으며 PWRRTN#는 엑티브 LOW에서 동작되고 sleep, power off등의 이유에 의해 변합니다. RESET_OUT핀은 오픈드레인으로 되어 있으며 시스템 리셋에 의해 발생됩니다.
4.11. 스페셜 소프트웨어 리커버리
에디슨보드는 부팅하는 동안 2개의 신호선이 사용됩니다. 이 기능을 위해 69번핀 FW_RCVR, 31번핀은 RCVR_MODE로 사용됩니다. FW_RCVR은 RESET_OUT 부팅이 이뤄지는 동안 LOW 상태로 유지가 되어야 합니다.
4.12. 전원 입출력
VSYSY : 3.15V~4.5V를 인가할 수 있습니다. USB_VBUS : 표준 USB VBUS신호인 4.75V ~ 5.25V를 인가할 수 있습니다. 에디슨 보드에서 출력되는 3.3V, 1.8V는 최대 250mA 까지 흘려줄 수 있습니다.(TBV) 와이파이와 블루투스가 정상적으로 동작되기 위해서는 최소한 3.15V가 필요합니다.
4.13. V_VBAT_BKUP
PMIC는 코인배터리나, 수퍼캡을 충전시킬 수 있는 능력이 있습니다. 외장 배터리는 핀23 V_VBAT_BKUP에 연결할 수 있으며 PMIC는 프로그램에 의해 2.5, 3.0, 3.15, 3.3v로 선택될 수 있습니다. 충전전류 역시 프로그램에 의해 10, 50, 100, 500uA로 선택되어 질 수 있습니다.
5. 전원
에디슨보드는 배터리나 AC벽전원에 의해 동작 시킬 수가 있으며 전원공급을 하는 방법이나 충전을 하는 회로는 외부에서 디자인 되어야 합니다.
5.1. VSYS에 메인전력 공급하기
에디슨보드는 VSYS(핀 2,4,6)에 전원을 인가하며 이 핀은 내부적으로는 VBAT에까지 연결되어 있습니다. 이 VSYS는 최소 3.15V에서 최대 4.5V를 넘지 말아야 합니다.
5.2. 사례 1 – 리튬폴리머 배터리를 직결하는 방식
배터리 전원을 단순하게 연결하는 방법은 배터리를 VSYS에 직접 연결하는 것입니다. 그러나 이러한 연결은 추천하지 않습니다. 왜냐하면 충전시스템에서 사용되는 전력이 배터리와 VSYS에 양분되어 공급되기 때문입니다.
5.3. 사례 2 – 다이오드와 FET절연을 통한 리튬 폴리머 배터리 연결하는 방식
- 이러한 구성은 동작 시 다이오드에 의한 전압강하가 발생됨
- 이러한 구성은 부팅시에 배터리를 떼어 놓을 수 있음
- 다이오드를 P-FET로 변경하면 전압강하를 최소화 시킬 수 있음
- 이러한 기능 통제를 하는 유사한 칩이 BQ24073이다.
5.4. 사례 3 – USB VBUS로 연결 하는 방식
USB 전원공급장치에서 직접 에디슨을 실행할 수는 없습니다. VSYS로 인가되는 최대 전압은 4.5V이기 때문에 그렇습니다. 즉 USB 전원사양(4.75V -5.25V)은 에디슨의 안전 동작범위를 초과합니다. 따라서 USB 전원은 BQ24074와 같은 벅다운 컨버터로 변환해서 공급해야 합니다.
이상은 인텔사에서 공개한 하드웨어 가이드를 토대로 작성해 본 자료입니다. 무턱대고 접근해 들어가기보다는 해당 보드의 스펙이 어떠한지를 면밀히 따져보고 접근해 들어가는 것이 학습 효과를 높이는데 도움이 되지 않을까 생각됩니다. 다음은 Breakout 보드에 대해서 살펴보도록 하겠습니다.
[2] 브레이크아웃 보드 살펴보기
1. 개요
Intel® Edison breakout board는 인텔에디슨 모듈로부터 1.8V로 입출력 되도록 설계가 되어 있습니다. 이 보드는 전원공급기, 배터리충전회로, USB OTG, USART to USB 브릿지, I/O 헤더 등으로 구성되어 있습니다.
2. Breakout 보드 상 점퍼의 구성
■ J2 : 배터리와 연결용 컨넥터로 왼편이 +V, 오른편이 GND이 컨넥터에 리튬이온 전지를 연결하면 자동으로 충전이 이뤄지며 J21, J22, J3 등으로부터 전력을 공급 받게 된다.
■ J1 : 써미스터가 내장된 배터리를 연결한 경우에는 open 한다.
■ J3 : 마이크로 USB FTDI로 USB to Serial 포트를 제공. 이 포트를 통해서 리눅스 콘솔로 사용할 수 있음
■ J16 : 마이크로 USB AB 컨넥터로 OTG 기능을 수행이 포트를 통해 PC와 연결되면 에디슨모듈을 스토리지(USB 메모리)로 PC가 인식
■ J17~J20 : 그림의 왼편부터 1번 핀
■ J21 : 메인 전원공급핀으로 DC 7~15를 인가할 수 있음
■ J22 : 보드 아랫편에 패턴이 준비되어 있으나 실제로는 부품이 없음
그림2 : Top Wiew
2.1. USB 인터페이스
에디슨 보드는 단일 USB2.0 인터페이스를 갖고 있습니다. 이 인터페이스의 주된 용도는 프로그램의 다운로드입니다. 또한 ID신호라인과 함께 USB OTG기능을 제공토록 설계 되어 있습니다. 만일 마이크로B USB케이블이 연결되면 에디슨보드는 USB디바이스가 되며 USB케이블로부터 전원을 공급받게 됩니다. 또한 마이크로A USB케이블이 연결되면 에디슨 보드는 호스트로서의 기능을 수행하며 J21, J22를 통해 전력을 공급해주어야 합니다. 이 경우 Breakout 보드는 USB 컨넥터로 5V를 출력하게 될 것입니다.
2.2 Breakout 보드 확장헤더 핀 구성
GPIO 핀은 Input, Output로 프로그램 될 수 있으며 입력모드로 프로그램 된다면 인터럽트나 웨이크업 소스로 사용될 수 있습니다. 입력 핀은 풀업이나 풀다운으로 프로그램 될 수 있는데 2KΩ, 20KΩ, 50KΩ 등이 가능합니다. I2C핀은 추가적으로 910Ω이 걸리게 됩니다.
입력핀으로 사용되는 핀은 기본적으로 그리치 제거 동작이 일어납니다.
• 100 ns for a 50 MHz clock when SoC is in S0 state.
• 260 ns for 19.2 MHz clock when SoC is in S0i1 or S0i2 State.
• 155.5 μs for 32 kHz clock (RTC) when SoC is in S0i3 State.
포트당 출력전류는 최대 ±3mA입니다.
2.3. Breakout 보드 핀헤더와 아두이노 표준핀간 연계
■ J17 컨넥터 라인
Breakout 보드핀 |
SoC | 용도 | 기능설명 | 아두이노 표준핀 |
J17 – pin 1 | GP182_PWM2 | GPIO capable of PWM output. | DIG6 | |
J17 – pin 2 | NC | No connect. | ||
J17 – pin 3 | NC | No connect. | ||
J17 – pin 4 | VIN | 7 to 15 V. | 5V Out Pin | |
J17 – pin 5 | GP135 | UART2_TX | GPIO, UART2 transmit output. | |
J17 – pin 6 | RCVR_MODE | Firmware recovery mode. | ||
J17 – pin 7 | GP27 | I2C6_SCL | GPIO,IC26 SCL output open collector. |
` |
J17 – pin 8 | GP20 | I2C1_SDA | GPIO, I2C1 data open collector. | |
J17 – pin 9 | GP28 | I2C6_SDA | GPIO, I2C6 data open collector. | |
J17 – pin 10 | GP111 | SSP5_FS1 | GPIO, SSP2 chip select 2 output. | |
J17 – pin 11 | GP109 | SSP5_CLK | GPIO, SSP5 clock output. | |
J17 – pin 12 | GP115 | SSP5_TXD | GPIO, SSP5 transmit data output. | |
J17 – pin 13 | OSC_CLK_OUT_0 | High speed clock output. | ||
J17 – pin 14 | GP128 | UART1_CTS | GPIO, UART1 clear to send input. | DIG2 |
■ J18 컨넥터 라인
Breakout 보드핀 |
SoC | 용도 | 기능설명 | 아두이노 표준핀 |
GP182_PWM2 | GPIO capable of PWM output. | DIG6 | ||
J18 – pin 1 | GP13_PWM1 | GPIO capable of PWM output. | DIG5 | |
J18 – pin 2 | GP165 | GPIO | A5 | |
J18 – pin 3 | GPI_PWRBTN_N | Power button input. | ||
J18 – pin 4 | MSIC_SLP_CLK2 | 32 kHz sleep clock. | ||
J18 – pin 5 | V_VBAT_BKUP | RTC backup battery input. | ||
J18 – pin 6 | GP19 | I2C1_SCL | GPIO,IC21 SCL output open collector. | |
J18 – pin 7 | GP12_PWM0 | GPIO capable of PWM output. | DIG3 | |
J18 – pin 8 | GP183_PWM3 | GPIO capable of PWM output. | DIG9 | |
J18 – pin 9 | NC | No connect. | ||
J18 – pin 10 | GP110 | SSP5_FS0 | GPIO, SSP1 chip select 2 output. | |
J18 – pin 11 | GP114 | SSP5_RX | GPIO, SSP5 receive data input. | |
J18 – pin 12 | GP129 | UART1_RTS | GPIO, UART1 ready to send output. | DIG4 |
J18 – pin 13 | GP130 | UART1_RX | GPIO, UART1 receive data input. | DIG0 |
J18 – pin 14 | FW_RCVR | Firmware recovery, active high on boot. |
■ J19 컨넥터 라인
Breakout 보드핀 |
SoC | 용도 | 기능설명 | 아두이노 표준핀 |
J19 – pin 1 | NC | No connect. | ||
J19 – pin 2 | V_V1P80 | System 1.8 V I/O output power. | 1.8V | |
J19 – pin 3 | GND | Ground. | GND | |
J19 – pin 4 | GP44 | ALS_INT_N | GPIO, ALS interrupt input. | A0 |
J19 – pin 5 | GP46 | ACCELEROMETER_INT_1 | GPIO, accelerometer interrupt input. | A2 |
J19 – pin 6 | GP48 | GYRO_DRDY | GPIO, gyro data ready input. | DIG7 |
J19 – pin 7 | RESET_OUT# | System reset out low. | RESET | |
J19 – pin 8 | GP131 | UART1_TX | GPIO, UART 1 Tx output. | DIG1 |
J19 – pin 9 | GP14 | AUDIO_CODEC_INT | GPIO, audio codec interrupt input. | A4 |
J19 – pin 10 | GP40 | SSP2_CLK | GPIO, SSP2 clock output. | DIG13(GP40) |
J19 – pin 11 | GP43 | SSP2_TXD | GPIO, SSP2 transmit data output. | DIG11(GP115) |
J19 – pin 12 | GP77 | SD_CDN | GPIO, SD card detect low input. | |
J19 – pin 13 | GP82 | SD_DAT2 | GPIO, SD data 2 | |
J19 – pin 14 | GP83 | SD_DAT3 | GPIO, SD data 3 |
■ J20 컨넥터 라인
Breakout 보드핀 |
SoC | 용도 | 기능설명 | 아두이노 표준핀 |
J20 – pin 1 | V_VSYS | System input power. | ||
J20 – pin 2 | V_V3P30 | System 3.3 V output. | 3.3V | |
J20 – pin 3 | GP134 | UART2_RX | UART2 Rx (input). | |
J20 – pin 4 | GP45 | COMPASS_DRDY | GPIO, compass data ready input. | A1 |
J20 – pin 5 | GP47 | ACCELEROMETER_INT_2 | GPIO, accelerometer interrupt input 2. | A3 |
J20 – pin 6 | GP49 | GYRO_INT | GPIO, gyro interrupt input. | DIG8 |
J20 – pin 7 | GP15 | GPIO. | ||
J20 – pin 8 | GP84 | SD_CLK_FB | GPIO, SD clock feedback input. | |
J20 – pin 9 | GP42 | SSP2_RXD | GPIO, SSP2 Rx data input. | DIG12(GP42) |
J20 – pin 10 | GP41 | SSP2_FS | GPIO, SSP2 frame sync output. | DIG10(GP41) |
J20 – pin 11 | GP78 | SD_CLK | GPIO, SD clock output. | |
J20 – pin 12 | GP79 | SD_CMD | GPIO, SD command. | |
J20 – pin 13 | GP80 | SD_DAT0 | GPIO, SD data 0. | |
J20 – pin 14 | GP81 | SD_DAT1 | GP81 SD data 1. |
■ 아두이노핀과 직접적으로 관련된 핀
Breakout 보드핀 |
SoC | 용도 | 기능설명 | 아두이노 표준핀 |
J19 – pin 4 | GP44 | ALS_INT_N | GPIO, ALS interrupt input. | A0 |
J20 – pin 4 | GP45 | COMPASS_DRDY | GPIO, compass data ready input. | A1 |
J19 – pin 5 | GP46 | ACCELEROMETER_INT_1 | GPIO, accelerometer interrupt input. | A2 |
J20 – pin 5 | GP47 | ACCELEROMETER_INT_2 | GPIO, accelerometer interrupt input 2. | A3 |
J19 – pin 9 | GP14 | AUDIO_CODEC_INT | GPIO, audio codec interrupt input. | A4 |
J18 – pin 2 | GP165 | GPIO | A5 | |
J18 – pin 13 | GP130 | UART1_RX | GPIO, UART1 receive data input. | DIG0 |
J19 – pin 8 | GP131 | UART1_TX | GPIO, UART 1 Tx output. | DIG1 |
J17 – pin 14 | GP128 | UART1_CTS | GPIO, UART1 clear to send input. | DIG2 |
J18 – pin 7 | GP12_PWM0 | GPIO capable of PWM output. | DIG3 | |
J18 – pin 12 | GP129 | UART1_RTS | GPIO, UART1 ready to send output. | DIG4 |
J18 – pin 1 | GP13_PWM1 | GPIO capable of PWM output. | DIG5 | |
J17 – pin 1 | GP182_PWM2 | GPIO capable of PWM output. | DIG6 | |
J19 – pin 6 | GP48 | GYRO_DRDY | GPIO, gyro data ready input. | DIG7 |
J20 – pin 6 | GP49 | GYRO_INT | GPIO, gyro interrupt input. | DIG8 |
J18 – pin 8 | GP183_PWM3 | GPIO capable of PWM output. | DIG9 | |
J17 – pin 10 | GP111 | SSP5_FS1 | GPIO, SSP2 chip select 2 output. | |
J20 – pin 10 | GP41 | SSP2_FS | GPIO, SSP2 frame sync output. | DIG10(GP41) |
J17 – pin 12 | GP115 | SSP5_TXD | GPIO, SSP5 transmit data output. | |
J19 – pin 11 | GP43 | SSP2_TXD | GPIO, SSP2 transmit data output. | DIG11(GP115) |
J18 – pin 11 | GP114 | SSP5_RX | GPIO, SSP5 receive data input. | |
J20 – pin 9 | GP42 | SSP2_RXD | GPIO, SSP2 Rx data input. | DIG12(GP42) |
J17 – pin 11 | GP109 | SSP5_CLK | GPIO, SSP5 clock output. | |
J19 – pin 10 | GP40 | SSP2_CLK | GPIO, SSP2 clock output. | DIG13(GP40) |
J19 – pin 7 | RESET_OUT# | System reset out low. | RESET Pin | |
J20 – pin 2 | V_V3P30 | System 3.3 V output | 3.3V Out Pin | |
J17 – pin 4 | VIN | 7 to 15 V. | 5V Out Pin | |
J19 – pin 2 | V_V1P80 | System 1.8 V I/O output power. | Voltage In | |
J19 – pin 3 | GND | Ground | GND |
주의) A0~A5핀은 별매인 아두이노Breakout Board에서만 지원함
2.4. 전원공급계통
에디슨보드는 저전력 장치로 평상시 부하전류가 200mA를 넘지 않으며 Wi-Fi 송신 시 짧게 600mA 정도가 흐릅니다. 외부로부터 7~15V 전원을 받게 되면 내부적으로 DC-DC컨버터에 의해 5V로 변환됩니다. 배터리 충전회로는 최대 4.4V로 제한되어 있습니다. 이 전압은 에디슨보드의 VSYS의 안전권인 5.15V~4.5V에서 동작되어야 하기 때문이기도 합니다.
내장된 충전기는 표준형 리튬배터리를 최대 4.2V선까지 충전시키며 충전전류는 190mA로 제한되도록 프로그램 되어 있습니다. 안전을 위해 충전중인 배터리가 과열되지 않도록 과열에 대한 대책이 필요합니다.
요약 정리를 해보자면
1. USB 호스트 모드에서는 항상 외부 전원 연결을 요구함
2. 배터리는 과열방지대책이 되어 있는 것을 사용함이 바람직하며 과열 시 차단되도록 설계할 것
★ 별첨 : 아두이노 연계 포트 사용
|
||
1. 아두이노 Digital pin7에서 토글 데이터를 내보내는 예 | ||
구 분 | 명 령 어 | 비고 |
GPIO 설정대상 선택 | echo -n “223″ > /sys/class/gpio/export echo -n “255″ > /sys/class/gpio/export echo -n “48″ > /sys/class/gpio/export |
|
풀업/풀다운 레지스터 정지 |
echo -n “in” > /sys/class/gpio/gpio223/direction | |
논리레벨 시프터 설정 | echo -n “out” > /sys/class/gpio/gpio255/direction echo -n “1″ > /sys/class/gpio/gpio255/value |
|
GPIO로 출력 내보내기 | echo -n “out” > /sys/class/gpio/gpio48/direction echo -n “1″ > /sys/class/gpio/gpio48/value echo -n “0″ > /sys/class/gpio/gpio48/value echo -n “1″ > /sys/class/gpio/gpio48/value |
1->0->1 반복됨 |
2. 아두이노 Digital pin7에서 데이터를 읽어오는 예 | ||
구 분 | 명 령 어 | 비고 |
GPIO 설정대상 선택 | echo -n “223″ > /sys/class/gpio/export echo -n “255″ > /sys/class/gpio/export echo -n “48″ > /sys/class/gpio/export |
|
풀업 레지스터 설정 | echo -n “out” > /sys/class/gpio/gpio223/direction echo -n “1″ > /sys/class/gpio/gpio223/value |
|
논리레벨 시프터 설정 | echo -n “out” > /sys/class/gpio/gpio255/direction echo -n “0″ > /sys/class/gpio/gpio255/value |
|
GPIO에서 읽기 | echo -n “in” > /sys/class/gpio/gpio48/direction cat /sys/class/gpio/gpio48/value |
1이 읽혀짐 |
GPIO에서 읽기 | echo -n “0″ > /sys/class/gpio/gpio223/value cat /sys/class/gpio/gpio48/value |
0이 읽혀짐 |
[3] 에디슨 보드로 Hello World에 도전하기
이번에는 에디슨 보드로 LED점멸 동작시켜봄으로써 위대한(?) 첫걸음을 디뎌보려 합니다. 저는 H/W에서 “Hello World!” 격에 해당하는 것이 LED점멸이라고 생각합니다. 우선 LED점멸 기능을 위해 기본적으로 필요한 일들을 준비해 보도록 하겠습니다.
1. 준비물
■ Intel Edison Breakout board – 핀 헤더를 기판 아래에 납땜하여 붙일 것
■ Arduino-Intel IDE – 아두이노 개발환경
■ 브레드보드
■ LED, 330Ω, 1kΩ 저항 각 1개
■ 2SC1815 NPN Transistor
■ Male to Female 점퍼와이어 3개
■ Male to Male 점퍼와이어 약간
■ 1N4007 Diode
2. 브레이크 아웃보드 정비
제일 먼저 DC전원잭을 아래 사진과 같이 연결해 줍니다.
이 커넥터로 DC를 공급해주면 스스로 동작되는 무언가를 만들 수 있게 됩니다.
다음으로 14핀 헤더를 4개 준비하여 아래 사진과 같이 납땜합니다. 납땜시 중앙 8번핀들을 우선 납땜하고 정렬에 문제가 없는지 확인하고 나머지 핀들을 조심스럽게 납땜합니다.
3. 에디슨 보드를위한 소프트웨어와 드라이버 파일 확보
■ FTDI Driver : http://www.ftdichip.com/Drivers/CDM/CDM%20v2.10.00%20WHQL%20Certified.exe 이 드라이버파일은 J3포트를 Serial 포트로 인식하게 만드는데 사용됨
■ 에디슨보드 드라이버 : http://downloadmirror.intel.com/24271/eng/IntelEdisonDriverSetup1.0.0.exe
■ PuTTY 터미널에뮬레이터
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
4. 에디슨보드에 최신 리눅스이미지 설치하기
4.1. 최신 이미지 다운로드
https://communities.intel.com/docs/DOC-23242
필자가 다운로드한 이미지는 edison-image-rel1-maint-rel1-ww42-14.zip입니다. 이 이미지를 내 로컬 디스크의 적당한 영역에 풉니다.
4.2. 위 파일들을 에디슨보드에 복사하여 넣습니다.
이 작업은 J16 커넥터에 마이크로USB케이블이 연결되면 에디슨보드가 마치 대용량 USB메모리처럼 보이므로 이곳에다 복사하여 넣으면 됩니다.
5. 에디슨보드에 Yocto Linux 플래시디스크 굽기
J3에 마이크로 USB케이블이 연결된 상태에서 PuTTY등을 써서 Telnet으로 에디슨 보드에 접근 합니다. 아래는 Yocto Linux를 설치하고 설정하는 예입니다. 에디슨 보드를 사용하다보면 플래시OS가 깨져 다운로드가 잘 안 되는 등 이상한 짓을 하는 경우가 있는데 이때도 아래와 같은 방법으로 시스템을 초기화 할 수 있습니다.
① 제일 먼저 마이크로USB 케이블(스마트폰과 PC 연결용)을 J3 포트에 연결합니다.
② 전원을 공급하기 위해 2번째 USB포트도 연결합니다.
③ 장치관리자를 실행합니다.
④ 장치관리자의 포트섹션에서 포트번호가 떠오르는지 확인합니다.
⑤ PuTTY 등 터미널에뮬레이터를 실행합니다.
- Connection Type : Serial
- Serial line : ComXX
- Speed : 115200
⑥ Open을 클릭합니다.
첫 번째 바이트를 까먹는 경우가 생기는데 이는 에디슨이 슬립모드에 있을 때는 Tx, Rx라인을 놓고 있다가 데이터가 들어가면 그때서야 깨어나기 때문이며 이때 1바이트가 달아납니다. 한번 키를 누른 후 20초 이내에 계속 눌러주면 데이터를 잃지 않습니다.
⑦ 빈 화면이 나타나면 엔터를 두 번 쳐봅니다.
⑧ “root”를 입력하면 암호를 물어보지 않고 그냥 넘어갑니다.
⑨ “reboot ota”를 입력한 후 엔터를 누릅니다. 에디슨이 리부팅 되면서 플래시에 굽기를 시작합니다. 약 10분이 소요됩니다.
⑩ 에디슨 보드 기본 설정하기
다음번 프롬프트가 뜨면 “configure_edison”이라고 치면 환경 설정작업을 할 수 있습니다. 부득이한 사정이 없는 한 configure_edison으로 환경을 바꾸는 작업을 권하지 않습니다. 에디슨을 끌 때는 “systemctl poweroff”라고 치며 라즈베리파이에서 사용되는 리눅스 명령어가 대부분 먹혀듭니다.
※ 자주 쓰는 명령어 ※
ls : 디렉터리 리스트
cd : 디렉터리 이동
cat : 파일의 내용을 봄
vi : 파일을 편집
[tab] : 디렉터리에 유사명칭의 파일이 존재할 때 타이핑을 도와줌
find : 파일이나 디렉터리를 찾기
6. 에디슨보드에 전원을 공급해보기
우선 마이크로USB 케이블을 2개 준비하여 J3과 J16에 꽂은 후 PC와 연결합니다. 아두이노 IDE의 com port는 장치관리자에서 확인된 포트번호로 설정해줍니다. 에디슨보드의 GPIO는 1.8V로 입출력이 이뤄지므로 본 LED 점멸테스트를 위해서는 전류 증폭회로가 필요하게 됩니다.
필자는 일반적으로 디지털스위칭 용도로 많이 사용되는 2SC1815 NPN 트랜지스터를 사용하였습니다. 연결 회로도는 아래와 같습니다.
구분 | Breakout Board 핀번호 | 용 도 |
Power 3.3V | J20-P02 | 타겟(브레드)보드로 3.3V 공급 |
GND | J19-P03 | 접지 |
OUTPUT | J18-P13 | - LED를 점멸하기 위한 1.8V레벨의 신호선 1KΩ을 거쳐서 2SC1815 NPN TR의 BASE로 연결됨 ※ 아두이노의 Digital port D0에 해당됨 |
7. 아두이노IDE 환경에서 프로그램 하기
우선 에디슨보드만을 위한 전용 아두이노 IDE 프로그램 설치가 필요하며 아래 주소에서 다운로드를 합니다. 이 프로그램은 인텔사에서 공급합니다. (https://www-ssl.intel.com/content/www/us/en/do-it-yourself/downloads-and-documentation.html)
위 페이지에는 에디슨보드를 운영하는데 필요한 프로그램, 문서자료 등이 가득 들어 있으므로 자주 방문해 보는 것이 좋겠습니다.
아두이노 IDE에서 아래와 같은 간단한 소스를 입력해봅니다.
void setup() { // Digital Pin 0 in Arduino IDE is mapped to J18-P13 on the Edison breakout board pinMode(0, OUTPUT); }
void loop() { //Tun on the LED digitalWrite(0,HIGH); delay(1000);
//Turn off the LED digitalWrite(0,LOW); delay(1000); } |
컴파일이 끝나고 에디슨보드로 전송이 완료되면 아래와 같은 화면을 볼 수 있습니다.
파일 > 예제에는 아두이노 IDE에 담겨있는 인텔 에디슨보드용 예제파일이 모여 있는 곳입니다. 이곳에 있는 예제들을 살펴보는 것 만으로도 상당한 발전을 이룰 수 있다고 봅니다.
※ 도움말 경로 : C:\arduino-windows-1.0.4\arduino-1.5.3-Intel.1.0.4\reference\index.html
※ 라이브러리 경로 : C:\arduino-windows-1.0.4\arduino-1.5.3-Intel.1.0.4\hardware\arduino\edison\libraries
브레드보드 상에서 동작중인 사진입니다. 사실 보기에는 단출해 보이지만 작가의 의도대로 동작이 이뤄지고 있음을 보여주는 의미심장한 사진임이 틀림없습니다.
이번 차에는 에디슨보드에 핀 헤더를 부착하여 외부와 전기적으로 소통하는 채널을 형성하였고 이 핀에 LED를 연결하여 점멸하는 예제를 실행하여 봤습니다. 에디슨보드가 Break out보드와 결합되기만 하여도 얼마든지 외부와 소통할 수 있다는 것을 확인한 것이 이번 도전에서 가장 큰 의미가 아닐까 합니다.
아쉬운 점이라면 에디슨보드에는 자체적인 A/D컨버터가 탑재되어 있지 않다는 점이며 아날로그량을 다루려면 반드시 추가 H/W구성이 반드시 필요하다는 것입니다. 이제 에디슨 보드로 무엇을 만들어 볼 수 있을까요? 진가를 발휘하고 싶다면 와이파이, 블루투스, SDIO, I2S를 활용하는 것이 어떨까요? 에디슨 보드가 인터넷과 한 몸이 되어 홈오토메이션, 헬스케어용 도구로 마구마구 활용될 수 있을 것으로 봅니다.
다음 장에서는 와이파이나 블루투스 등을 응용한 예제를 진행하고자 합니다.
[4] Wi-Fi로 인터넷과 소통하기
이번에는 에디슨보드의 최대 강점인 외부와 소통하는 채널을 활용하는 방법을 다뤄보고자 합니다. 이 부분은 공개된 자료가 거의 없는 것이 현실인지라 Intel 커뮤니티, 유튜브, 구글검색 및 직접 실험을 통해 얻은 정보를 바탕으로 작성되었습니다. 기본적인 무선랜 환경을 만든 다음 웹브라우저를 통해 에디슨보드와 네트웍으로 소통하기까지를 쭉~ 진행해 보도록 하겠습니다.
※ 유의사항 : 만일 실습해 보기를 원할 경우 먼저 본 글을 한번 흝어 전체적인 흐름을 파악하고 따라 하시기를 권합니다.
1. 실험환경 구성
1.1. 인텔에디슨 브레이크아웃보드 운영환경 분석
본 리뷰를 위해 지급받은 인텔 에디슨보드와 인텔 에디슨 브레이크아웃 보드를 활용하여 입출력을 하기에는 여러모로 불편한 점이 많습니다.
■ 브레이크아웃보드 핀 배열 문제 : 14핀*4열로 구성된 핀으로는 브레드보드판에 연결하기도 불편하고 신호선을 외부로 인출하기도 몹시 불편함
■ 신호레벨문제 : 에디슨보드는 기본적으로 1.8V로 디지털입출력이 이뤄지기에 일반적으로 사용되는 3.3V 내지는 5.0V 주변장치들과 통신에 제약이 있음
위 문제를 극복하기 위해 필자는 다음과 같이 접근하였습니다.
1.2. 나만의 브레이크 아웃보드 제작
아래 사진과 같이 인텔 에디슨 브레이크아웃보드 핀 맵상 아두이노와 연계된 핀들을 활용하여 아래와 같이 만능기판에 베이스 보드를 만들게 되었습니다. 핀 배열은 기본적으로 아두이노 우노보드와 동일하게 구성하였습니다. 다만 에디슨 보드는 아날로그 입력 기능이 없는 관계로 DIG0~DIG13만 사용이 가능합니다.
※ 인텔에디슨용 아두이노보드는 당연히 Analog 입력이 가능하며 이를 위해 별도의 A/D컨버터칩을 사용하였으며 SPI로 에디슨보드와 통신합니다.
1.3. 1.8v 레벨 컨버터
아래 사진과 같이 MOSFET를 사용하여 1.8v와 3.3v를 이어주는 변환기를 만들었습니다. SMD 디바이스와 에나멜동선을 사용하면 20핀 DIP타입으로 크게 어렵지 않게 제작이 가능합니다.
2. 에디슨보드 무선랜 접속환경 구성하기
2.1. 제 1단계 – Simple Web Server WiFi.ino 실행
■ 아두이노실행 ▶ 파일 ▶ 예제 ▶ Wi-Fi ▶ Simple Web Server WiFi ▶ 컴파일/다운로드
- 소스상 ssid 수정: 접속하고자 하는 무선랜 공유기의 SSID
- 소스상 pass 수정: 공유기의 무선랜 암호
■ 아두이노 터미널 창을 열면 아래와 같은 내용을 볼 수 있음
이 창을 통해 방금 에디슨보드가 부여 받은 사설 IP주소를 확인
2.2. 제 2단계 – 웹브라우져로 에디슨보드에 접속하기
■ Set Device Password 섹션 : 에디슨보드가 AP모드로 사용될 때 사용할 비번과 root 비번이 설정된다. 즉, 여기에 등록되는 비번이 무선랜과 root 두 군데에 동시에 사용된다.
■ Change Device 섹션 : 에디슨보드가 AP모드로 사용될 때 쓰일 SSID와 mDNS에서 식별될 이름을 부여 한다. 즉, Host name이 된다.
■ Connect a WiFi network 섹션 : 이미 설치된 무선랜으로 접속하기 위해 사용될 SSID와 네트웍프로토콜, 암호를 등록한다.
■ 위 화면에서 “Submit”을 누르고 잠시 기다리면 아래와 같이 셋업이 정상적으로 종료되었다는 메시지를 볼 수 있습니다.
3. 에디슨보드를 웹서버로 만들기
3.1. 제 3단계 – Test_WiFiWebserver.ino 소스 컴파일하고 다운로드
/* WiFi Web Server A simple web server that shows the value of the digital input pins. using a Edison Board Wi-Fi channel.
This example is written for a network using WPA encryption. For WEP or WPA, change the Wifi.begin() call accordingly.
Circuit: * WiFi shield attached * Analog inputs attached to pins A0 through A5 (optional)
1.created 13 July 2010 by dlf (Metodo2 srl) 2.modified 31 May 2012 by Tom Igoe 3.modified 2015.02.10 by Dae-Hwan, Kim - Changed digital port reading process. */ #include <SPI.h> #include <WiFi.h> char ssid[] = “myLivingRoom”; // your network SSID (name) char pass[] = “??????????”; // your network password int keyIndex = 0; // your network key Index number (needed only for WEP) int status = WL_IDLE_STATUS;
WiFiServer server(8080); // by Dae-Hwan, Kim Modify void setup() {
// initialize the digital pin as an input. pinMode(0, INPUT); pinMode(1, INPUT); pinMode(2, INPUT); pinMode(3, INPUT); pinMode(4, INPUT); pinMode(5, INPUT);
//Initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only }
// check for the presence of the shield: if (WiFi.status() == WL_NO_SHIELD) { Serial.println(“WiFi shield not present”); // don’t continue: while(true); }
String fv = WiFi.firmwareVersion(); if( fv != “1.1.0” ) Serial.println(“Please upgrade the firmware”); // attempt to connect to Wifi network: while ( status != WL_CONNECTED) { Serial.print(“Attempting to connect to SSID: “); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } server.begin(); // you’re connected now, so print out the status: printWifiStatus(); } void loop() { // listen for incoming clients WiFiClient client = server.available(); if (client) { Serial.println(“new client”); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // if you’ve gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == ‘\n’ && currentLineIsBlank) { // send a standard http response header client.println(“HTTP/1.1 200 OK”); client.println(“Content-Type: text/html”); client.println(“Connection: close”); // the connection will be closed after completion of the response client.println(“Refresh: 5”); // refresh the page automatically every 5 sec client.println(); client.println(“<!DOCTYPE HTML>”); client.println(“<html>”);
// output the value of each analog input pin for (int digitalChannel = 0; digitalChannel < 6; digitalChannel++) { int sensorReading = digitalRead(digitalChannel); client.print(“Digital input [“); client.print(digitalChannel); client.print(“] is “); client.print(sensorReading); client.println(“<br />”); } client.println(“</html>”); break; } if (c == ‘\n’) { // you’re starting a new line currentLineIsBlank = true; } else if (c != ‘\r’) { // you’ve gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1);
// close the connection: client.stop(); Serial.println(“client disonnected”); } } void printWifiStatus() { // print the SSID of the network you’re attached to: Serial.print(“SSID: “); Serial.println(WiFi.SSID());
// print your WiFi shield’s IP address: IPAddress ip = WiFi.localIP(); Serial.print(“IP Address: “); Serial.println(ip);
// print the received signal strength: long rssi = WiFi.RSSI(); Serial.print(“signal strength (RSSI):”); Serial.print(rssi); Serial.println(“ dBm”); } |
3.2. 제 4단계 – 아두이노 IDE의 시리얼모니터 실행
에디슨보드로 다운로드를 실행한 후 곧장 시리얼 모니터를 실행하면 아래와 같은 화면을 볼 수 있습니다. 물론 SSID와 IP주소는 필자와 다르게 보일 것입니다. 여기 보이는 주소가 “에디슨웹서버” 주소가 됩니다.
3.3. 제 5단계 – 웹브라우져를 띄워 웹서버(에디슨보드)로 접속
■ 접속주소 : http://192.168.123.108:8080/ 등으로 접속한다. IP주소는 위 시리얼모니터창의 값을 사용하고 포트번호 8080은 다른 값을 사용하면 안 됩니다. 이 값은 에디슨보드에 8080을 사용하겠다고 위 소스코드에서 선언이 되어있기 때문입니다.
■ 아래는 센서 상태를 원격으로 읽어 웹브라우져 상에 표시를 하고 있는 것입니다.
■ 또한 시리얼모니터를 띄워 놓으면 아래와 같이 클라이언트(웹브라우저)가 접속해와 자료를 가져가고 있는 모습을 실시간으로 모니터링 할 수 있습니다.
4. 마무리하기
지난 두어 달 간 에디슨보드를 친구삼아 행복한 시간을 보냈습니다. 에디슨보드는 한마디로 초소형 리눅스컴퓨터이며 블루투스와 와이파이를 통해 외부 세계와 소통할 수 있고 자신은 SPI, I2C, USART 등으로 외연을 확대할 수 있는 제품임에 틀림이 없습니다. 에디슨보드가 현장에서 사용될 때는 아마도 STM32F4시리즈나 라즈베리파이2 보드 등과 접전이 불가피해 보입니다. 에디슨보드가 가격에 있어서 특별히 크게 메리트 있어 보이지는 않으나 간단한 센싱과 인터넷에 연결되어 작동하는 상황을 가정해 본다면 이러한 조건에서는 다소간의 경쟁력은 있어 보입니다. 에디슨보드의 컴퓨팅파워를 적극 활용해 웹을 기반으로 동작되는 어플리케이션을 구성한다면 나름 상당히 유용하겠다는 생각이 듭니다. 에디슨보드를 웹상에서 구동하려 한다면 다소간의 지식들은 필요해 보입니다.
웹서버 개념 | 3-Tier 아키텍쳐 등 Http서비스가 이뤄지는 기본 원리 |
TCP/IP개념 | 클라이언트(PC 웹브라우져)와 서버(에디슨보드)간 통신체계 |
Html/css/java script | html로 웹페이지를 구성하고 서비스가 이뤄지는 원리 |
Linux | 에디슨 보드의 동작상태 모니터링 및 문제 해결 |
아두이노 우노 | IDE기반에서 아두이노 프로그래밍, C언어 핸들링 등 |
기타 | 아나로그/디지털로직, SPI, I2C, SD CARD, Power, USB, Serial 등 이해 |
이상으로 부족하나마 에디슨 보드에 대한 리뷰를 마칩니다.
감사합니다.
5. 참고
· https://www-ssl.intel.com/content/www/us/en/do-it-yourself/downloads-and-documentation.html
· https://communities.intel.com/message/264386#264386
· https://communities.intel.com/docs/DOC-23192
· https://communities.intel.com/community/makers/edison/getting-started
· https://communities.intel.com/message/264386#264386
· http://blog.microcasts.tv/2014/10/16/edison-mini-breakout-the-rea l-getting-started-guide
· 아두이노 우노 스펙 : http://arduino.cc/en/Main/ArduinoBoardUno
· 아날로그 입력핀 : https://communities.intel.com/thread/57506
· 1.8v To 3.3v 레벨 변환기 제작
– https://learn.sparkfun.com/tutorials/bi-directional-logic-level -converter-hookup-guide
– http://dlnmh9ip6v2uc.cloudfront.net/tutorialimages/BD-LogicLevelConverter/an97055.pdf
· https://communities.intel.com/message/250732#250732
저자소개 | |
제작, 사진, 글 : 금강초롱 객원기자
한국 마사회 정보기술처 근무 네이버 블로그 blog.naver.com/crucian2k3 운영 중 |
[기획상품] Intel® Edison Kit for Arduino + Wooden Case