수신호 인식 LED 헬멧 [Intel Edison IoT 공모전]

자전거를 타는 사람이 많아지는 요즘, 늦은 밤 라이딩을 즐기는 사람도 많아졌다. 즐거우면서도 안전하게 자전거를 탈 수 있도록 LED 라이딩 헬멧(???)을 만들었다. 자전거의 랜턴처럼 라이더의 위치를 알려주기도 하면서 블루투스로 라이더의 수신호를 입력받아 좌회전, 우회전의 방향전환을 가시적으로 보여줄 수 있는 헬멧이다.

Ideation

기본 구조는 팔찌형 센서로 필요한 정보를 입력받고, 이를 휴대폰으로 분석하여, 헬멧에 부착된 LED 매트릭스에서 필요한 정보를 보여주는 방향으로 접근하였다. 라이딩하면서 자연스럽게 수신호를 보여주면 이를 수신호를 모르는 사람도 자연스럽게 이해할 수 있도록 헬멧에서 LED 로 표현해주는 것이다.

Parts

기본적인 작품 구성도는 다음과 같다. 작품 구성

  1. 팔찌형 센서를 통해 손목의 움직임을 센싱 (LightBlue Bean)
  2. 안드로이드 휴대폰에서 센싱 데이터를 분석 (Android Smartphone)
  3. 헬멧에 부착된 디바이스에서 신호에 해당하는 LED 신호를 발생 (Edison + LED)

LED Control

LightBlue Bean에서 읽어들이는 가속도센서 값을 블루투스를 통해 Edison에서 입력받아 Left, Right, Break 세 가지를 구현하고자 하였다.
또한 모바일 앱을 개발하여 Light blue bean을 소지하고 있지 않더라도 앱의 방향 키를 터치함으로써 방향전환 LED를 나타낼 수 있게 하였다.

모바일 앱과 에디슨을 연동시키는 과정

Edison으로 LED 제어

스마트폰과 Edison, LightBlue Bean과 스마트폰 연동 테스트

Edison 으로 FLEXIBLE 8X32 NEOPIXEL RGB LED MATRIX 을 제어하는 형태로 구성하였으나, Adafruit 에서 개발한 WS2812B 라이브러리는 AVR 기반의 어셈블리 코드로 작성되어 있어 에디슨과 같은 Arduino Emulation Device 에서는 작동하지 않았다. 이걸 이틀 쯤 밤새고 알게되었다 그래서 USB 기반으로 LED를 제어할 수 있는 Fadecandy 를 사용하여 개발하는 방향으로 선회하였다.

게다가 블루투스 관련 API 및 개발 문서가 취미로 개발하는 사람들을 위하여 작성되지 않았기 때문에, 사용하기에 매우 불편하였다. 아래의 코드는 Python 으로 작성된 Service 에서 /tmp/arduinopinout 이라는 문서를 작성하는 부분을 찾아내어 이를 Node.js 서버에서 변화를 인식하는 방법으로 테스트해본 코드이다.

var fs = require('fs');

fs.watchFile('/tmp/', function (event, filename) {  
  if (!filename) return;
  fs.readFile('/tmp/+filename, { encoding: 'utf-8' }, function (err, data) {
    console.log('data:', data);
  });
});

여기서 하나의 문제가 발생하였는데, Fadecandy 는 호스트에서 자체 서버를 띄워 localhost:7890 으로 신호를 보내주는데 이유는 알수 없으나 상기의 Node.js 서버 파일을 실행 할때 높은 빈도로 Edison 이 재부팅 되는 현상이 발생하였다. 매우 불안정하였기 때문에 (1~2번 실행 중 1번 이상의 빈도로 다운) 포기하고 LED를 사용하기로 하였다.

비싸게 산 NeoPixel 8x32 Matrix 안녕..

바느질과 납땜 작업을 하고 있는 팀원

가속도센서로 활용될 LightBlue Bean을 손목에 찰 수 있도록 손뜨개 팔찌로 구현하였다. 팔찌의 형태로 구현한 이유 기준이 되는 자세를 잡고 이를 통해서 움직임을 제스쳐로 인식하기 위함이었다. 다만, LightBlue Bean에는 Gyroscope 센서가 들어있지 않기 때문에 자세 인식을 정확하게 하기 어려운 것이 단점이다.

팔찌는 똑딱 단추를 달아 탈착이 편리하도록 하였다.

베터리는 코인 전지(CR2032)

Code

  1. Android code
    Android app github repository

  2. Gesture detection code
    Gesture detection repository

  3. Helmet LED controller
    Helmet LED controller

3D Model and Print

3D 모델링은 기본이 되는 헬멧을 3D Scanner 로 스캔하여 이를 베이스로 헬멧을 감싸는 형태가 되도록 모델링 하였다. 부풀어 있는 부분은 Edison 과 베터리를 넣기 위한 부분이다.

프린터는 Opencreators 의 Almond 를 사용했는데, 사이즈가 커서 4부분으로 잘라서 개별로 프린트 한 후 접합하였다.

헬멧에 장착된 사진은 다음과 같다.

시연

개발 참여

  • 박영희: Hardware prototype, Arduino side
  • 김석준: Arduino, Edison side coding
  • 김가현: Android appication, Edison Bluetooth API
  • 박선미: 3D scan and model creation.
comments powered by Disqus