January 11, 2025

디바이스마트 미디어:

[66호] 원하는 색상으로 제어가 가능한 아두이노 IoT 스마트 무드등 키트 -

2021-06-25

★2021 ICT 융합 프로젝트 공모전 결과 발표! -

2021-05-12

디바이스마트 국내 온라인 유통사 유일 벨로다인 라이다 공급! -

2021-02-16

★총 상금 500만원 /2021 ICT 융합 프로젝트 공모전★ -

2021-01-18

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

[61호]음성으로 제어하는 간접등 만들기 -

2020-08-26

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

[60호]초소형 레이더 MDR, 어떻게 제어하고 활용하나 -

2020-06-30

[60호]NANO 33 IoT보드를 활용한 블루투스 수평계 만들기 -

2020-06-30

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

[37호]카멜레온 DIY LED 이야기③

37 projects  (7)

Cap 2016-10-20 14-29-25-163

 

카멜레온 DIY LED 이야기 3

카멜레온 DIY LED를 위한 아두이노 라이브러리

글 | 신상석 ssshin@jcnet.co.kr

디바이스마트 매거진 독자 여러분, 안녕하세요. 앞으로 5회에 걸쳐 [카멜레온 DIY LED 이야기]를 진행할 신상석입니다.
이 이야기는 WS2812B라는 컬러 LED를 기반으로 제작된 [카멜레온 DIY LED] 시리즈를 이용하여 생활에 필요한 다양한 형상을 꾸며보고 이것을 다양한 컬러로 디스플레이 해보는 내용입니다. 앞으로 진행할 내용에 대하여 간단히 알아보면 다음과 같습니다. (약간 변경될 수도 있습니다.)
앞으로 즐겁고 유익한 강의가 될 수 있도록 많은 격려와 성원 부탁드립니다.

디바이스마트매거진 독자 여러분, 안녕하세요. 반갑습니다.

[카멜레온 DIY LED 이야기] 세번째 시간이 돌아왔습니다.
지난 시간에는 카멜레온 DIY LED를 구성하고 있는 WS2812B의 동작 원리를 알아보았고 이를 기반으로 JLED-BAR-1(막대 모양 카멜레온 DIY LED 1개 모듈)로 무지개색을 표현해 보았으며, JLED-RING-12(원형의 카멜레온 DIY LED 12개 모듈)을 이용하여 알록달록 동그란 12색상환을 만들어 보았습니다. 기본 개념과 원리를 이해하고 실행해 보았으므로 이제부터는 어떤 모양, 어떤 컬러, 어떤 동작도 조금씩만 응용하면 모두 다 만들 수 있는 기초 능력은 갖추었지만, 그렇다고 해도 내가 원하는 형태로 바로 동작시킬 수 있다는 뜻은 아닙니다. 바둑에 비유하자면, 바둑을 배우는 것은 쉽지만 고수가 되는 것은 매우 많은 공부와 훈련, 실전을 필요로 하기 때문입니다. 지금 현재 상태는 이제 막 18급을 넘어선 상태라고나 할까요?
한편, 지난번에 (기억이 나실 지 모르겠지만…) WS2812B가 인식하는 ‘0’과 ‘1’을 생성하기 위하여 정의한 ‘CODE0’와 ‘CODE1’ 마크로 선언은 개념적으로 실행해 본다는 의미에서 불명확한 타이밍을 기반으로 정의하여 사용하였으므로 이 부분도 오늘은 해결을 하고 넘어가야 하겠습니다.
자, 그럼 천천히 라이브러리 이야기를 시작해 보겠습니다. 출발~

WS2812B를 위한 라이브러리가 있을까?

C 언어를 처음 배울 때, C 언어의 사용법을 아주 간단하면서도 빠르게 이해시키기 위하여 가장 많이 사용하는 방법 중의 하나는 “Hello, World!”와 같은 문장을 C로 프로그램하고 이를 실행시켜 실제로 이 문장이 디스플레이되는 것을 보여주는 것입니다. 복잡한 설명 보다는 일단 아주 간단한 예를 보여주면 이해가 빠르고 흥미가 생기기 때문이지요.
그 때를 회상하며 한 번 다시 보겠습니다.

————————————————
#include <stdio.h>
int main()
{ printf(“Hello, World!\n”); }
————————————————

내용을 보면 메인 프로그램 내부에 “printf”라는 함수만 달랑 한 줄 있는데 이 프로그램을 컴파일하고 실행시키면 터미널 창에 “Hello, World”라는 문장이 바로 디스플레이됩니다. “오우~ 신기하네! 당장 배워보자!” 이런 마음이 훅~ 하고 들어오지요. 이것이 가능한 이유는 누군가(아마도 고수!)가 이미 디스플레이를 가능케하는 printf( )라는 함수 프로그램을 잘 만들어서 이것을 라이브러리로 제공하였기 때문입니다. 이런 환경이 제공된다면 우리는 우리의 프로그램 첫 줄에 단지 “#include <stdio.h>”라는 선언문만 한 줄 넣어주기만 해도 printf( ) 함수 프로그램을 내가 작성한 것과 같은 효과를 얻을 수 있게 되는 것입니다.
그렇다면, 혹시 printf( ) 함수처럼, “WS2812B를 기반으로 하는 컬러 LED의 색상을 누구나 쉽게 지정할 수 있도록 하는 함수를 어떤 고수가 라이브러리로 만들어놓지는 않았을까?” 하는 의문이 들만도 합니다.
과연 그럴까요. 예, 과연 그렇습니다. “YES!”입니다.
우리보다 먼저 이런 형태의 컬러 LED를 접한 선배들이 당연히 만들어 놓았습니다. 이렇게 제공된 라이브러리의 종류는 꽤 되지만 이들 중 우리가 주목할 만한 것은 Adafruit_NeoPixel 과 FastLED입니다.
Adafruit_NeoPixel은 WS2812B를 기반으로 한 NeoPixel 제품(BAR, RING, MATRIX 등)을 생산 판매하고 있는 Adafruit 사에서 제공하는 라이브러리로, 조금은 단순하지만 <LED에 색 지정하기>와 <LED에 데이터 전송하기>의 기본 라이브러리 외에 <한 개씩 색칠하기>, <무지개색 만들기>, <영화관 효과 만들기> 등의 응용 함수를 제공합니다.
FastLED는 Adafruit_NeoPixcel 보다는 조금 더 다양한 라이브러리를 제공하는데, 위에서 언급한 라이브러리나 예제에 더하여, <좌우로 이동하기> <번지는 느낌의 색상 만들기> 등의 기능도 더 제공하며, 적용할 수 있는 컬러LED도 우리가 사용하는 WS2812B 외에 LPD8806, APA102 등 거의 모든 컬러 LED로도 확장되는 장점이 있습니다. FastLED는 또한, 아두이노 외에 ESP9266, Teensy3 등의 플랫폼에서도 사용이 가능하도록 만들어진, 응용 범위가 조금 넓은 전문화된 라이브러리라고 하겠습니다.
오늘 이야기에서는 일단 간단한 라이브러리인 Adafruit_NeoPixel 라이브러리를 이용해보는 것으로 하고 진행해 보겠습니다. (FastLED의 이용은 다음 기회에~)

Adafruits_NeoPixel 라이브러리 설치

위에서도 언급했듯이 라이브러리를 사용하려면 이 라이브러리를 사용할 수 있는 환경을 만들어 주어야 합니다. NeoPixel 라이브러리를 사용하기 위한 설치 방법을 순서대로 나타내면 아래와 같습니다.

1. Github의 Adafruit_NeoPixel 프로젝트를 찾아갑니다. URL은 https://github.com/adafruit/Adafruit_NeoPixel 입니다. 아래의 화면이 나오면 화면 중간 오른쪽의 녹색으로 표시된 [Clones or download]를 클릭하고 새로 나타난 창에서 [Download ZIP]을 선택하여 적당한 디렉토리에 “Adafruit_NeoPixel-master.zip” 파일을 저장합니다.

37 projects  (1)

2. “Adafruit_NeoPixel-master.zip” 파일의 압축을 풉니다. “Adafruit_NeoPixel-master” 디렉토리가 생성됩니다.
3. “Adafruit_NeoPixel-master” 디렉토리를 통째로 아두이노 스케치의 라이브러리인 [\My Doucument \Arduino\library] 디렉토리 아래에 복사합니다. [\My Doucument \Arduino\library\Adafruit_NeoPixel-master] 형태로 보여져야 합니다.
4. 아두이노를 실행합니다. 스케치 화면에서 [파일] ▶ [예제] ▶ {Adafruit_NeoPixel-master} ▶ [simple]를 클릭합니다. 아래와 같이 프로그램이 올라오면 설치가 잘 된 것입니다.

37 projects  (2)

 

Adafruit NeoPixel 라이브러리 기본 함수

이제 설치가 되었으니 Adafruit_NeoPixel 라이브러리를 사용할 수 있는 환경은 갖추어졌습니다. 그렇다면 실제로 어떤 라이브러리가 어떤 형태로 제공되는지만 알면 되겠네요. 그런데 여기서 잠깐! 돌발 퀴즈!
“세부적인 함수를 사용하기 전에 가장 먼저 결정하고 선언해 놓아야 할 변수가 있는데, 이것은 무엇일까요?” “무엇이 결정되어야만 함수가 동작할 수 있을까요?”
1분 동안만 잠시 각자 생각해 보겠습니다.
흐음. 예, 상당수의 분들은 이미 예상하셨겠지만, Adafruit_NeoPixel 라이브러리 입장에서는 반드시 3가지가 미리 결정되어져야만 하는데, 그것은 첫째, 사용할 LED의 개수이고, 둘째, 데이터 입력으로 사용할 제어기(아두이노)의 출력핀 번호, 마지막으로 셋째, 사용할 LED의 타입(WS2811, WS2812)입니다.
이것이 결정되었다면, Adafruit_NeoPixel 라이브러리는 아래 그림과 같이 원하는 크기(3 X LED 개수)의 버퍼를 준비하고 여기에 어떤 한 순간에 보여지기를 원하는 컬러 값으로 R(Red), G(Green), B(Blue) 값을 저장해 놓은 다음 이것을 데이터출력핀을 통하여 순서대로 끊김없이 카멜레온 DIY LED에게 전송하는 방식을 사용하는 것입니다. (주의 : 예전에 잠깐 이야기했듯이, 데이터의 모양은 RGB 형태이지만 실제 전송될 때는 WS2812B 특성에 맞추어 GRB 순으로 전송됨)

Leds[N]

37 projects  (3)
이렇게 하면 어떤 한 순간 전제 LED의 컬러가 결정되어지므로, 이러한 동작을 시간 간격을 두고 반복적으로 실행하면 움직이는 컬러 LED의 형상을 만들 수 있습니다.
개념적인 설명이 되었으므로, 이제 프로그램을 직접 작성해 보면서 Adafruit_NeoPixel의 기본 함수를 살펴 보겠습니다.
JLED-BAR-10(카멜레온 DIY LED 10개 모듈)을 사용하여 모든 LED를 녹색(Green)으로 유지하는 프로그램을 한 번 작성해 보겠습니다. 아두이노 UNO의 6번핀을 출력핀으로 사용하는 경우 프로그램의 앞 부분은 아래와 같이 되겠습니다.

————————————————-
#include <Adafruit_NeoPixel.h> // Adafruit_NeoPixel 라이브러리 include, 필수 선언!!!
#define PIN 6/ // 결정하여야 할 변수 1 → 데이터 출력핀 번호
#define NUMPIXELS 10 // 결정하여야 할 변수 2 → LED 개수
————————————————-

아래는 연결된 모습입니다.
JLED-BAR-10의 입력쪽으로 3개의 신호 GND, DIN, VCC(+5V)가 아두이노와 연결되어 있는 것을 확인할 수 있습니다.

37 projects  (4)

이제 Adafruit_NeoPixel 클래스로 pixels을 아래와 같이 선언합니다.

————————————————-
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// pixels는 Adafrut_NeoPixel 구조체의 형태를 가짐
// LED의 개수는 10(NUMPIXELS)이며,
// WS2812B 타입(NEO_GRB + NEO_KHZ800)임
————————————————-

Adafruit_NeoPixel 클래스는 “Adafruit_NeoPixel.h”에 정의되어 있는데 필요한 부분만 간단히 발췌하여 나타내면 아래와 같습니다.

————————————————-
class Adafruit_NeoPixel {
public:
Adafruit_NeoPixel(uint16_t n, uint8_t p=6, uint8_t t=NEO_GRB + NEO_KHZ800);
// n : LED 개수
// p : 출력핀 번호 = 6
// t : 타입 = NEO_GRB (GRB 순서로 데이터를 전송) + NEO_KHZ800 (800KHZ 타입)
// 결국, WS2812B를 사용한다는 의미
~Adafruit_NeoPixel();
void
begin(void), // 시작 함수
show(void), // 데이터 전송 함수, 따로 설명
setPin(uint8_t p), // 출력핀 셋업 함수
setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b), // n번째 LED를 r, g, b 값으로 설정하는 함수
setPixelColor(uint16_t n, uint32_t c), // n번째 LED를 c 값(32비트)으로 설정하는 함수
setBrightness(uint8_t), // 밝기 세팅 함수
clear(); // LED OFF 함수
uint8_t
*getPixels(void) const,
getBrightness(void) const;
uint16_t
numPixels(void) const; // 선언된 LED 개수를 추출하는 함수
static uint32_t
Color(uint8_t r, uint8_t g, uint8_t b);
uint32_t
getPixelColor(uint16_t n) const;
inline bool
canShow(void) { return (micros() – endTime) >= 50L; }
};
————————————————

pixels 클래스가 생성되었으므로 setup() 프로그램을 통하여 멤버 함수인 begin()을 콜하여 초기화를 실행합니다.

————————————————-
void setup() {
pixels.begin(); // Adafruit_Neopixel 라이브러리 초기화
}
————————————————-

이제 실제로 어떤 컬러를 LED에 표현해 봅시다. 2가지의 동작이 필요합니다. 하나는 데이터를 준비하는 동작이고, 다른 하나는 준비된 데이터를 실제 LED에 전송하는 동작입니다. 여기서 중요한 것은 데이터를 LED에 전송하는 동작인데, 이것은 지난번에 살펴본 것처럼 데이터값에 따라 ‘CODE0’와 ‘CODE1’ 해당되는 신호를 WS2812B의 타이밍 규격에 맞도록 생성하고 이것을 카멜레온 DIY LED에 전송하는 동작입니다. 우리가 지난번에 찜찜하게 생각하였던 부분인데, 다행히(당연하지만…) Adafruit_NeoPixel 라이브러리에서는 show( )라는 멤버 함수를 제공하므로 이 함수를 사용하면 완전한 LED 동작을 보장받을 수 있습니다. show( ) 함수는 어셈블리언어로 매우 정교하게 만들어진 함수로 WS2812B의 타이밍 규격을 완전하게 만족하도록 프로그램되어 있습니다. (좀 더 자세한 내용은 “Adafruit_NeoPixel.h”의 해당 어셈블리 프로그램을 분석해 보시기 바랍니다. 한 번쯤 분석해 볼만한 가치가 있는 프로그램입니다.) 사용 방법은 너무나 간단합니다. 아래와 같이 실행하면 됩니다.

pixels.show( ) // 준비된 데이터를 모두 전송

이제 이를 이용하여 녹색으로 10개 LED를 1초 간격으로 껐다 켰다 깜빡이도록(blink) 프로그램 해보겠습니다.

————————————————-
void loop() {
for(int i=0; i<NUMPIXELS; i++) // 전체 LED에 대하여
pixels.setPixelColor(i, pixels.Color(0,150,0)); // Green 컬러(중간 밝기) 준비.
pixels.show(); // 데이터 전송
delay(1000); // 1초 동안 디스플레이
for(int i=0; i<NUMPIXELS; i++) // 전체 LED에 대하여
pixels.setPixelColor(i, pixels.Color(0,0,0)); // Black 컬러(LED OFF) 준비.
pixels.show(); // 데이터 전송
delay(1000); // 1초 동안 디스플레이
}
————————————————-

조각 조각 설명하였는데 전체 프로그램을 합쳐보면 아래와 같습니다.

————————————————-
#include <Adafruit_NeoPixel.h> // Adafruit_NeoPixel 라이브러리 include, 필수 선언!!!
#define PIN 6 // 결정하여야 할 변수 → 데이터 출력핀 번호
#define NUMPIXELS 10 // 결정하여야 할 변수 → LED 개수

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// pixels 는 Adafrut_NeoPixel 구조체의 형태를 가짐
// LED의 개수는 10(NUMPIXELS)이며,
// WS2812B 타입(NEO_GRB + NEO_KHZ800)임
void setup() {
pixels.begin(); // Adafruit_Neopixel 라이브러리 초기화
}

void loop() {
for(int i=0; i<NUMPIXELS; i++) // 전체 LED에 대하여
pixels.setPixelColor(i, pixels.Color(0,150,0)); // Green 컬러(중간 밝기) 준비.
pixels.show(); // 데이터 전송
delay(1000); // 1초 동안 디스플레이
for(int i=0; i<NUMPIXELS; i++) // 전체 LED에 대하여
pixels.setPixelColor(i, pixels.Color(0,0,0)); // Black 컬러(LED OFF) 준비.
pixels.show(); // 데이터 전송
delay(1000); // 1초 동안 디스플레이
}
————————————————-

이것을 아두이노 스케치를 통하여 업로드하고 제대로 실행되는지 보시지요.

37 projects  (5)

오오~! 성공입니다. 제가 좋아하는 은은한 녹색 LED가 깜빡깜빡 하네요. 기분 UP! 갑자기 히말라야 등정이 생각나는데, 이 정도면 4000m 고지에 베이스캠프 설치는 성공한 정도로 느껴집니다.

JLED-RING-12로 12색상환 표현하기

실력이 얼마나 늘었는지는 예전과 비교해 보면 금방 알 수 있습니다. 지난번 이야기에서 마지막으로 다루었던 작품, JLED-RING-12로 12색상환 표현하기 과제를 라이브러리를 이용하여 한 번 구현해 보겠습니다.
조금 전에 배운 라이브러리를 이용해서 (1) 어레이로 준비한 12가지 색상을, (2) 순서대로 데이터로 세팅한 후, (3) 이것을 JLED-RING-12로 전송하면 되겠습니다. 12가지 색상값은 지난번에 제시한 표와 동일한 값을 사용하겠습니다.

색상 빨강 다홍 주황 귤색 노랑 연두
데이터 0xff0000 0xdc143c 0xff7f00 0xf89b00 0xffd400 0x66cc00
색상 녹색 청록 파랑 남색 보라 자주
데이터 0x00ff00 0×005666 0x0000ff 0x080b54 0xee82ee 0×800080

위에서 언급한 기본 라이브러리를 이용하면 다양한 응용 프로그램을 작성할 수 있는데, 이것에 대한 예제는 Adafruit_NeoPixel의 “strandtest” 프로그램에 잘 나타나 있습니다. 우리가 사용할 수 있는 프로그램을 하나씩 살펴봅시다.

어려울 것이 없어 설명없이 바로 스케치 진행합니다. 라이브러리를 사용하니까 정말 간단하네요.

————————————————-
#include <Adafruit_NeoPixel.h> // Adafruit_NeoPixel 라이브러리 include, 필수 선언!!!
#define PIN 6 // 결정하여야 할 변수 → 데이터 출력핀 번호
#define NUMPIXELS 12 // 결정하여야 할 변수 → LED 개수

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// pixels 는 Adafrut_NeoPixel 구조체의 형태를 가짐
// LED의 개수는 12(NUMPIXELS)이며,
// WS2812B 타입(NEO_GRB + NEO_KHZ800)임
void setup() {
pixels.begin(); // Adafruit_Neopixel 라이브러리 초기화
}

void loop() {
unsigned long data[12] = {0xff0000, 0xdc143c, 0xff7f00, 0xf89b00, 0xffd400, 0x66cc00, 0x00ff00, 0×005666, 0x0000ff, 0x080b54, 0xee82ee, 0×800080}; // 12개 색상 준비
for(int i=0; i<NUMPIXELS; i++) // 전체 LED에 대하여
pixels.setPixelColor(i,data[i]); // 12색상 데이터값 세팅
pixels.show(); // 데이터 전송
}
————————————————-

실행 결과는 아래와 같습니다.

37 projects  (6)

37 projects  (7)

 

다양한 응용 프로그램

위에서 언급한 기본 라이브러리를 이용하면 다양한 응용 프로그램을 작성할 수 있는데, 이것에 대한 예제는 Adafruit_NeoPixel의 “strandtest” 프로그램에 잘 나타나 있습니다. 우리가 사용할 수 있는 프로그램을 하나씩 살펴봅시다.

응용 함수 설명
void colorWipe
(uint32_t c, uint8_t wait)
LED를 하나씩 순서대로 동일한 컬러로 채우는 함수
- c : 채우고자 하는 컬러
- wait : 하나씩 채우는데 걸리는 간격 (ms)
void rainbow(uint8_t wait) 전체 LED의 컬러를 무지개처럼 다양한 컬러로 변화시키는 함수
- wait : 컬러를 바꾸는 간격(ms)
void rainbowCycle
(uint8_t wait)
LED의 컬러를 무지개처럼 다양한 컬러로 서로 다르게 세팅하고 이것을 돌아가면서 변화시키는 함수
- wait : 컬러를 바꾸는 간격(ms)
void theaterChase
(uint32_t c, uint8_t wait)
LED의 컬러를 동일한 컬러로 N개씩 건너서 세팅하되, 이것도 돌아가면서 LED에 할당하게 함으로써 번쩍번쩍하는 사이키 조명의 느낌을 만드는 함수
- c : 채우고자 하는 컬러
- wait : 변화하는 간격 (ms)
void theaterChaseRainbow
(uint8_t wait)
LED의 컬러를 다양한 컬러로 3개씩 건너서 세팅하되, 이것도 돌아가면서 LED에 할당하게 함으로써 번쩍번쩍하는 사이키 조명의 느낌을 만드는 함수
- wait : 변화하는 간격 (ms)
uint32_t Wheel
(byte WheelPos)
0~255까지의 값을 전달하면 R과 G, G와 B, B와 R 값으로만 구성된 4 바이트 컬러값을 리턴하는 함수. 임의의 고르게 분포된 컬러값을 생성하기 위하여 사용
- WheelPos : 0~255 사이의 값

예를 들어 “colorWipe(0x00ff0000, 10)” 이렇게 사용하면 모든 LED의 컬러를 빨강색(Red, 0x00ff0000, (X)(R)(G)(B) 순)으로 세팅하되 처음부터 1개씩 10ms의 간격으로 하나씩 증가하는 방식으로 적용됩니다.

이러한 함수를 모두 사용하여 작성한 strandtest( ) 예제 프로그램 전체를 나타내면 아래와 같습니다.
개별 함수의 동작을 이해하려면 약간의 시간과 노력이 필요하나, 하나씩 차근차근 생각해 보면 이해가 될 수 있는 부분이므로 여러분 모두가 짬을 내서 찬찬히 공부해 보시기 바랍니다. 이용에만 관심있는 분들은 굳이 개별 함수의 내부의 프로그램 동작을 이해하지 않고 그냥 기능적으로만 이해한 다음, 그냥 함수를 불러다 쓰기만 해도 괜찮겠습니다.

—————————————————-
#include <Adafruit_NeoPixel.h>
#define PIN 6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(45, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
strip.begin();
strip.show(); // Initialize all pixels to ‘off’
}

void loop() {
// Some example procedures showing how to display to the pixels:
colorWipe(strip.Color(255, 0, 0), 50); // Red
colorWipe(strip.Color(0, 255, 0), 50); // Green
colorWipe(strip.Color(0, 0, 255), 50); // Blue
// Send a theater pixel chase in…
theaterChase(strip.Color(127, 127, 127), 50); // White
theaterChase(strip.Color(127, 0, 0), 50); // Red
theaterChase(strip.Color( 0, 0, 127), 50); // Blue

rainbow(20);
rainbowCycle(20);
theaterChaseRainbow(50);
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}

void rainbow(uint8_t wait) {
uint16_t i, j;

for(j=0; j<256; j++) {
for(i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i+j) & 255));
}
strip.show();
delay(wait);
}
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
uint16_t i, j;

for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
for(i=0; i< strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
}
strip.show();
delay(wait);
}
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
for (int j=0; j<10; j++) { //do 10 cycles of chasing
for (int q=0; q < 3; q++) {
for (int i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, c); //turn every third pixel on
}
strip.show();

delay(wait);

for (int i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, 0); //turn every third pixel off
}
}
}
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
for (int j=0; j < 256; j++) { // cycle all 256 colors in the wheel
for (int q=0; q < 3; q++) {
for (int i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, Wheel( (i+j) % 255)); //turn every third pixel on
}
strip.show();

delay(wait);

for (int i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, 0); //turn every third pixel off
}
}
}
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r – g – b – back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 – WheelPos;
if(WheelPos < 85) {
return strip.Color(255 – WheelPos * 3, 0, WheelPos * 3);
} else if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 – WheelPos * 3);
} else {
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 – WheelPos * 3, 0);
}
}
—————————————————-

이제 이 프로그램을 아래와 같이 JLED-BAR-10, JLED-STAR-10, JLED-RING-12, JLED-SNOW-13의 4가지 카멜레온 DIY LED를 순서대로 연결한 [3단 아이스크림] 형상(LED 총 45개)에 적용하여 업로드하고 실행하여 보겠습니다.
wheel( ) 함수는 다른 함수를 사용할 때 내부에서 사용되는 함수이므로 이것을 제외하고 나머지 5가지 함수는 눈으로 그 기능을 바로 확인할 수 있습니다. 아래에 결과 사진을 제시하였습니다.

37 projects  (8)

<colorWipe( ) 함수> 실행 결과

37 projects  (9)

<rainbow( ) 함수> 실행 결과

37 projects  (10)

<rainbowCycle( ) 함수> 실행 결과

37 projects  (11)

<theaterChase( ) 함수> 실행 결과

37 projects  (12)

<theaterChaseCycle( ) 함수> 실행 결과

37 projects  (13)

당연한 이야기지만 다행히도(?) 모든 함수가 다 잘 동작하는 것 같죠?굿~입니다. 이제 히말라야 등정에서 6,000m 정도 위치에 제1캠프를 설치한 정도는 되지 않았을라나요? 여기서 더 나아간다면 이제부터는 조금씩은 자신의 루트를 개척하면서 가야하는 경우가 생길 수 있겠습니다. 물론 잘 찾아보면 아직도 많은 선배들이 닦아 놓은 훌륭한 루트가 중간 중간 많이 있긴 하겠습니다.

카멜레온 DIY LED를 위한 아두이노 라이브러리를 설명한다고 하면서 Adafruit_NeoPixcel 라이브러리만 설명하였는데… 사실 카멜레온 DIY LED제품이나 NeoPixel 제품은 형태만 다를뿐 WS2812B를 한 줄로 연결한 동일한 형태를 가지고 있기 때문에 라이브러리는 동일하게 사용 가능합니다. 그래도 카멜레온 DIY LED만을 위한 따로 제공하는 라이브러리가 몇 개는 있어야 한다구요? 예. 그러면 오늘은 일단 이 정도에서 마무리하고, 다음 시간 [다양한 형상의 카멜레온 DIY LED]를 만나보면서 좀 더 다이나믹한 응용 함수도 함께 소개하는 시간을 갖도록 하겠습니다.
다음 회에 환한 얼굴로 또 만나겠습니다. 안녕히 계십시오. 야옹~

 

37 projects  (14)

[37호]기업 탐방 – 고재준 에프티랩 대표

37 interview ftlab (6)

37 interview ftlab (6)

기업 탐방 인터뷰

고재준 에프티랩 대표

 

최근 미국, 체코 등 해외를 비롯해서 국내에서도 ‘침묵의 암살자’라고 불리고 있는 ‘라돈(Rn)’에 대한 관심이 높아지고 있다. 라돈은 1급 발암 물질이며 세계보건기구(WHO)에서는 담배에 이어 폐암을 유발하는 제2의 원인 물질로 규정하고 있을 만큼 인체에 치명적인 것으로 알려져 있다.
현재까지 국내 시사/교양 프로그램에서도 수 회에 걸쳐서 다룰 만큼 라돈에 대한 관심이 높아진 요즘, 에프티랩에서 라돈과 관련된 신제품들을 출시해 눈길을 끌었다. 어느 뜨거운 여름날, 항상 새로운 기술과 독창적인 아이디어를 선보이는 에프티랩을 찾아가 보았다.

취재 | 이용동 책임기자 bluelyd@ntrex.co.kr

 

안녕하세요, 먼저 디바이스마트 매거진 독자들께 인사 한 말씀 부탁드립니다.

저도 디바이스마트의 애용자로서, 이렇게 지면으로 디바이스마트 독자 여러분들께 인사드릴 수 있는 좋은 기회인 것 같아서 감회가 새롭고, 많은 분들과 만나뵙게 되어 반갑습니다.

디바이스마트의 MD 입장에서 본 에프티랩은, 기술의 적용 및 활용에 있어서 아이디어가 뛰어나다는 이미지를 가지고 있습니다. 시장에서 흔하게 찾을 수 있는 제품이 아닌, 항상 뭔가 새로운 형태나 기능의 제품을 출시하는 것 같습니다.

원래 창업 초기에는 주로 고객의 요청에 따른 제품을 개발, 생산했습니다. 그러면서 한 10년 쯤 사업을 지속해 왔었는데, 사업을 10년쯤 하다 보니 어느 정도 시장의 흐름을 파악하는 눈이 생기는 것 같더라구요. 그 때 생각한 게, ‘내가 만들 수 있는 제품을 만들지 말고, 시장이 필요로 하는 것을 만들자’라는 것이었습니다. 항상 내 기술의 범위 내에서, 고객의 요청 내에서만 하던 일들에서 벗어나서, ‘세상에 없는 것을 만들어보자!’고 마음먹고 처음으로 시장에 출시한 제품이 바로 휴대용 방사능측정기인 ‘스마트가이거(상품코드 : 1266186)’였습니다. 아, 얼마 전에는 영국의 한 여성이 잠수함에 있던 물건을 수집하는 취미가 있는데, 남편으로부터 러시아 핵잠수함에 있던 시계를 선물 받았다고 합니다. 그런데 어느 날 친구가 ‘혹시 이 시계에서 방사능 나오는 거 아닐까?’라는 의문을 가졌고, 이 여성분도 혹시나 하는 마음에 인터넷에서 휴대용 방사능 측정기를 구매했다고 합니다. 그래서 시계를 측정해 봤더니 아니나 다를까 방사능이 어마어마하게 나왔다고 하는 내용이 최근 영국의 한 신문에 실렸습니다. 그 때 그 여성분이 사용했던 스마트폰용 방사능 측정기가 저희 ‘스마트가이거’였더라구요. 뭐 물론 기사에 저희 제품에 대한 설명이 자세하게 나온 것은 아니었지만 저도 깜짝 놀랬습니다.(웃음)
어쨌든 그렇게 시장에서 필요로 하며, 세상에는 없는 ‘스마트폰과 활용할 수 있는 센서 모듈’을 하나 둘씩 만들어보기 시작했습니다. 예전의 PC보다도 요즘 스마트폰이 최근에는 더 대단한 역할을 하기 때문에 이제는 제품 자체가 스마트폰을 활용할 수 있어야 하거든요. 센서만 있으면 스마트폰이 데이터 처리, 디스플레이 등 웬만한 역할을 모두 다 해결해주기 때문이죠.

37 interview ftlab (2)
37 interview ftlab (3)
에프티랩의 정성스러운 제품 조립, 포장 과정

일반적으로는 하드웨어 전문 개발 업체, 또는 소프트웨어 전문 개발 업체 등으로 나뉘어져 있는 경우가 많은데, 에프티랩은 하드웨어도 새로운 기술과 새로운 아이디어의 접목으로 개발을 하시면서 소프트웨어에서는 스마트폰에서 사용하기에 아주 편리한 앱을 같이 내놓고 계신 것 같습니다.

 제가 학교에 있을 당시에 제가 하드웨어 분야에는 자신도 있고 흥미도 느꼈지만 소프트웨어 분야는 부족했었거든요. 그런데 마침 저와는 반대로, 하드웨어 보다는 소프트웨어 분야에서 뛰어난 친구와 뜻이 잘 맞았었어요. 그렇게 해서 둘이 서로 영향을 주고 받으면서 함께 창업을 하게 되었습니다. 제가 아날로그적 원형을 만들고, 이 친구가 엔지니어들과 함께 그것을 디지털화 하는 작업을 하면서 날아가고 있습니다. 인터페이스 프로그램, 스마트폰에서 활용할 수 있는 앱과 같이 소프트웨어적인 방면에서 매우 잘해주고 있어서 창업 시부터 지금까지 16년 째, 쭉 동업을 하고 있습니다. 아주 고단위의 프로그램은 아니지만, 사용자가 사용하기 편리하게 만드는 것까지는 가능한거죠.

그만큼 많은 고민을 하고 만드신 제품들은 터치스크린 패널 터치감도 검사 장치나 초소형 방사능 측정기 등, 항상 여러 매체나 소비자들에게 좋은 반응을 얻고 있습니다.
대신 다른 업체들만큼 신제품을 자주 출시하지는 않다 보니 에프티랩의 신제품을 기다리는 시간이 길게 느껴지는데요.

저희는 기본적인 원칙이 있습니다. 그 중 하나가 ‘남들이 한 것은 하지 않는다’ 입니다. 남들이 만든 제품을 조금 개선해서 출시한다던가 하는 것은 저희가 원하는 방향이 아닙니다. 다만 시장의 틈새를 봐서, 그 파이가 크지 않다고 하더라도 조금은 독자적인 시장을 보고 있는 거죠. 어떤 제품이 이런 시장에 알맞겠다 싶으면 관련된 기술을 연구하고 개발해서 출시하게 됩니다. 그래서 보통 많이 쏟아내지는 못하고, 아무래도 2-3년에 한 번 정도의 신상품을 출시하고 있는 것 같습니다.

그렇게 시장 조사와 기술의 개발, 출시에 많은 공을 쏟으시면서 기간이 길어지게 되면, 출시를 준비하고 있는 동안 다른 업체에서 먼저 출시하는 경우는 없는지 궁금합니다.

스마트폰과 연결하거나 PC, 노트북의 USB 단자에 연결해서 사용하는 제품들도 나왔어요. 거기에 저희는 ‘프로브만’ 스마트폰이나 스마트 패드와 ‘무선으로’ 연결해서 사용할 수 있는 제품을 준비하고 있습니다. 오실로스코프와 선으로 연결된 것이 아닌, 정말 단순히 프로브만요. 그렇게 기술 개발을 하고 있고, 상품 출시 준비가 되고 있는데 독일의 한 업체에서 덜컥 무선 프로브를 내놨더라구요. 작년까지만 해도 없었거든요. 그래도 그나마 다행스러운 것은, 그 회사의 제품은 아직 다수의 프로브를 한 번에 구동할 수 있는 기술은 적용되어 있지 않아요.
그런데 저희가 개발하고 있는 무선 프로브의 특장점은 바로 ‘여러 개의(Multi) 프로브를 광으로 통제하는 기술’입니다. 오실로스코프는 트리거(Trigger)가 생명이거든요. 채널이 여러 개 있을 때, 이 채널들의 시간 축이 서로 딱 맞아야 의미가 있는 것이니까요. 그런데 이게 전선으로 연결되어 있으면 전기 신호로 보내면 어렵지 않은데, 따로따로 그것도 무선으로 떨어져 있으면 시간 축을 맞추는 게 쉽지 않거든요. 이 기술에 대해서는 저희가 특허를 가지고 있고, 시장이 크지는 않지만 꼭 필요한 경우가 있다고 보고 있고, 그런 분들에게는 정말 유용한 제품이 될 것이라고 생각합니다. 출시는 아마 내년에 하게 될 것 같습니다.

이번에 출시한 4종의 신제품들은 모두 ‘라돈’이라는 가스 또는 물질과 관련된 제품입니다. 이 라돈은 2010년대 중반부터 공중파 방송사의 다수 교양 프로그램에서 다룰 정도로 이슈가 되고 있는 가스인데요, 제품 소개에 앞서 이 ‘라돈’에 대해서 조금 알려주세요.

최근 비 흡연 여성 인구 중 폐암 환자가 자꾸 늘어나고 있는 문제가 이슈가 되고 있습니다. 시사/교양 프로그램에서 여러 번 다뤄졌는데, 가장 최근에 방영된 ‘생로병사의 비밀’이라는 프로그램에서 이야기한 내용을 기준으로 말씀드려 보겠습니다. 비 흡연 여성 인구의 폐암 발병 원인은 크게 세가지 원인이라고 볼 수 있는데, 그 첫 번째가 초 미세 먼지, 두 번째가 간접흡연, 세 번째가 바로 ‘라돈’입니다. 미국 환경청 EPA 보고서에 따르면 고농도의 라돈 가스를 계속 호흡할 경우 폐의 방사선 피폭으로 인한 폐암 유발 위험이 높아진다고 되어있으며, 한 해 미국 내 음주운전 사망자보다 라돈에 의한 폐암 사망자가 더 많다고 합니다. 그런데 초 미세먼지나 간접흡연은 사람이 어느 정도 감지, 인식을 할 수 있는 반면, 이 라돈이라는 물질은 전혀 인식이 되지 않는다는 게 문제입니다. 무색, 무취, 무미하거든요. 또 어떤 특별한 장소, 특별한 물건에서만 나오는 것이 아니라 우리나라의 경우에는 전국의 모든 토양에서 라돈이 방출된다고 보시면 됩니다. 그런데 실외에서는 라돈 가스가 생성되더라도 공기 중에서 희석될 수 있기 때문에 인체에 영향을 미치지 않습니다. 문제는 집, 사무실과 같이 트여있지 않은 실내에서는 시멘트, 석고보드와 같은 건축 자재들에서도 라돈이 지속적으로 생성되고 있다는 거죠. 그래서 기본적으로는 라돈이 토양에서 올라오는 것이지만 고층 빌딩에서도 라돈의 영향을 받을 수 밖에 없는겁니다. 특히 비닐하우스, 스마트 팜 또는 식물원과 같이 흙이 있고 밀폐되어있는 공간에서는 라돈의 농도가 높을 수 밖에 없습니다. 그런데도 오히려 우리는 식물이 많기 때문에 공기가 좋은 것으로 느끼고 있죠. 이게 바로 라돈의 무서운 점이자 문제점입니다.

37 interview ftlab (4)
37 interview ftlab (5)
생산 및 조립이 완료된 제품들을 표준에 맞게 Calibration 하는 과정

그렇다면 라돈이라는 가스가, 해외보다 국내에서 더 위험하다는 보고는 어떻게 생각하시나요?

이 라돈의 위험성에 대해서 국민들의 인식이 아주 낮다는 점에서 보면 분명 위험한 부분이 되겠고, 지역적인 특성으로도 보면 라돈 위험성에 보면 중상급에 있는 것도 맞습니다. 우리나라에 비해 일본은 라돈의 위험성에 있어서는 꽤나 안전한 곳입니다. 일본의 지질 자체가 라돈이 많이 방출되는 지질이 아니거든요. 라돈이 주로 화강암 기반에서 생성되기 때문에, 현무암과 같은 화산암 기반의 일본은 안전한 편이고, 화강암 기반의 우리나라는 위험하다는 결론을 내리는 것이 전혀 무리가 없는 거죠.

37호 라돈아이
에프티랩에서 최초로 선보인 라돈 센서, 라돈 측정기 ‘라돈 아이’

이런 라돈의 위협에 대해, 에프티랩에서 이번에 내놓은 라돈 관련 신제품들이 어떤 도움이 될 수 있을까요?

지금까지는 라돈 ‘센서’ 제품은 없었습니다. 일반적으로 ‘공기 질 측정’이라고 하면 크게 온/습도, 미세먼지, VOC(휘발성 유기화합물 등), CO2 농도의 네가지를 따집니다. 그런데 앞으로는 ‘라돈’이 추가되어야 하고, 그렇게 될 거라고 보고 있습니다. 왜냐하면 앞의 4가지보다 더 위험한 것이 바로 라돈이기 때문이죠. 그런데도 실내 공기 질 체크에서 빠질 수 밖에 없던 이유 중 하나는 바로 지금까지 센서가 아닌 계측기로만 측정이 가능했기 때문입니다. 이제 그런 계측기가 아닌, 저희가 출시한 센서로도 측정이 가능해졌다는 것에 유의미한 발전이 나타날 수 있는 거죠. 아직은 사이즈가 머그컵이나 텀블러만한데, 이 것을 조금 더 작게 만들면서도 정확도를 유지할 수 있도록 하는 것이 저희의 숙제고, 목표입니다.
또한 기존의 다른 20-30만원 대 보급형 제품들이 유효한 측정 값을 얻는 데 보통 24시간, 48시간이나 소요되던 데 반해, 저희 라돈아이는 약 천 만원 내외의 계측/연구용 제품들과 유사한 뛰어난 감도임에도 측정 소요 시간이 1시간에 불과합니다. 그래서 실시간으로, 시간 별 라돈농도의 변화 그래프를 기록할 수 있는 제품입니다. 개발 초기부터 국내 라돈 측정 최고 전문가 그룹인 연세대 라돈 안전센터, 한국표준과학원(KRISS), 한국산업기술시험원(KTL) 등에 협조를 의뢰, 기술 자문 및 수 회에 걸친 성능 개선 테스트를 진행했던 제품이기 때문에 여러 기관을 통해서 상당한 수준의 완성도를 보이고 있어요.

그렇다면 이러한 기기들을 사용해 라돈 농도가 위험 수준에 달했다는 것을 알게 된 경우, 라돈으로부터의 위협을 최소화할 수 있는, 최선의 방법은 어떤 것이 있을까요?

라돈은 지속적으로 생성되고 있고, 공기가 멈춰있으면 이 라돈이 농축이 되어 점점 나빠지게 됩니다. 실외보다 실내가 위험한 것도 같은 이유입니다. 그래서 라돈의 위험성을 낮추기 위한 가장 중요한 행동이 바로 ‘환기’입니다. 창문을 여는 것과 열지 않은 것의 차이는 상상을 초월합니다. 공기가 흐를 수 있는 길이 조금만 있어도 라돈의 농도가 더 높아지는 것을 방지할 수 있습니다. 그래서 겨울에도 창문을 아주 조금이라도 열어 놓으시는 것을 권장합니다. 미세먼지 때문에 열지 못하시는 분께는 공기청정기를 추천해드립니다. 미세먼지는 공기 청정기로 제거가 가능하지만, 라돈은 환기 외에는 제거할 수 있는 실질적인 방법이 없기 때문입니다. 닫아놓고 가만히 있다가 잠깐 환기를 하는 형태가 아닌, 지속적인 환기가 중요합니다.

37 interview ftlab (7)
37 interview ftlab (1)
벽을 가득 채운 수많은 인증서들을 통해 알 수 있는 에프티랩의 기술력

에프티랩에서 이번에 선보인 신제품들이 기존의 국내/외 제품들과 차별화할 수 있는, 제품 자체로서의 장점과, 제품이 ‘에프티랩’이라는 회사의 제품이라는 장점은 모두 어떤 것들이 있을까요?

 최근에는 스마트폰의 발달로 인해서 내부에 탑재되는 대부분의 고정밀 소자 가격이 많이 떨어졌습니다. 스마트폰을 사용하는 사람들이 워낙 많아졌고, 이에 따라서 그런 칩들이 이제 대량 생산이 가능해졌기 때문이죠. 그런데 그런 칩의 가격이 떨어진 것에 대해서 메리트를 누릴 수 있는 업체는 바로 그 기술을 활용하고 변화하려고 하는 업체에서나 가능한 일입니다. 지금의 내 기술만을 활용하는 업체에서는 사실 그런 변화는 크게 중요하지 않아요. 하지만 저희 에프티랩은 그런 High-Tech의 기술들을 채용하기 위해 변화하고 노력하면서 이런 혜택을 누릴 수 있게 되기 때문에, 기존의 커다란 장비들이 하던 역할을 에프티랩의 작은 장비들로 저렴하게 내놓을 수 있는 거죠. 저희 에프티랩이 어떻게든 가성비를 높이기 위해서 지속적으로 새로운 것을 받아들이려고 하고 있기 때문에 가능한 것이라고 생각합니다.

에프티랩의 앞으로가 더욱 기대됩니다. 마지막으로 하시고 싶으신 말씀은 없으신가요.

저희 회사 모토는 바로 ‘기술로 세상을 이롭게 하자’입니다. 저희는 기술로 세상을 안전하게 만들고 싶습니다. 춥고 더운 것과 같은 것 말고, 우리가 눈으로 볼 수 없는, 보이지 않는 위험들로부터 세상을 안전하게 하는, 안 보이는 것을 볼 수 있게 하고자 합니다. 그래서 이번에 출시한 제품도 라돈-아이(Eye)라는 이름을 붙이게 됐습니다. 그런 눈과 같은 센서 제품들을 지속적으로 만들고 싶습니다. 돈을 버는 것은 먹고 살 수 있는 만큼이면 될 것 같습니다. 계속 모험을 해 나갈겁니다.

인터뷰 감사드립니다.

 

 

[37호]전도성 페인트를 이용한 Electric Menu

2015ict융합 37호 (27)

전도성 페인트를 이용한 Electric Menu

글 | 단국대학교 강영웅, 이주명

심사평

펌테크 일상 생활에 접목된 참신한 아이디어 제품이라고 생각됩니다. 얇고 가볍게 기획한다면 상업성도 충분하다고 생각합니다.
JK전자 낮은 가격에 기존의 값 비싼 패드를 대체하여 사용이 가능하도록 설계한 아이디어는 괜찮다. 전자식 메뉴판에 화면이 없을 경우 주문을 하고나서 바로 취소를 한다던지 하는 비정형적인 상황을 모두 처리하기에는 부족한 면이 있을 수 있을것 같다.
뉴티씨 일상 생활에서 무심코 지나치던 불편함을 여러 기술을 통해 해결한 좋은 모범 솔루션이다. 주변의 식당에 이것이 도입이 안된것이 아쉽다. 다음에는 여러 식당에서 이 솔루션을 많이 채택했으면 하는 작은 소망이 있다.
칩센 사용자 편의성을 고련한 아이디어로 어느 정도 상품성은 있다고 본다. 음식점 이용자의 정확한 메뉴 선정과 인건비 절감이 가장 큰 기대 효과로 보여진다. 하지만 제품 완성도는 휴대성을 고려할 때 배터리 문제, 충전지 사용시 충전 문제 등 운용 관리 부분은 매우 미흡한 점이 보여 아쉽다.
위드로봇 기존 서비스를 제공하는 방식에서 가격을 낮추는 시도는 항상 성공할 수 있는 방식이라고 생각합니다. 특히 전도성 페인트를 이용하여 고가의 스마트 패드를 대치한다는 아이디어는 창의성 측면에서 매우 멋진 아이디어로 생각됩니다. 또한 메뉴판만 제작하는 시도에 더하여 주방에서 이를 처리할 수 있는 부분과 카운터 부분까지 구현한 것은 전체 데모 시나리오를 볼 수 있어 완성도가 높아 보입니다. 반면 스위치 입력 처리하는 부분은 단순 인터럽트 처리 보다는 스캔하는 방식으로 구현하면 MCU 리소스를 많이 줄일 수 있었을 것입니다. 그럼에도 불구하고 전체 시스템을 구현하여 그 동작을 확인했다는 측면에서 높이 평가합니다.

작품개요

오늘날의 음식점 또는 주점의 주문 시스템은 매우 수동적이라는 것을 잘 알고 있을 것이다. 메뉴판을 하나하나씩 넘겨가면서 메뉴를 고른 뒤에 직접 종업원을 불러서 주문하는 방식이다. 이러한 단점들을 보완하여 몇몇 음식점이나 주점 또는 카페에서는 아이패드를 이용한 주문 방식이 도입된 곳이 있다. 그러한 주문 방식은 기존의 주문방식과 전혀 다르다는 것을 알 수 있다. LCD를 보면서 자신들이 원하는 메뉴를 선택하여서 주문하는 방식인데 이 시스템이 좋지만 가장 큰 단점은 가격이 만만치 않다는 것이다. 그것을 보완하고자 이번에 전도성 페인트를 이용하여 Electric Menu board를 개발하게 되었다.
Electric Menu board는 기존의 2가지의 형태로 책자 형식과 패드 형식이 있다. 메뉴판에서 선택한 메뉴를 데이터 형식으로 넘겨서 작은 이동식 PC인 라즈베리파이라는 보드 내의 database에 data들을 차곡차곡 쌓는다. 라즈베리파이는 이동하면서 쓸 수 있다는 큰 장점이 있기 때문에 음식을 만드는 주방이나 계산대에서 LCD를 통해서 실시간으로 바로바로 주문한 내역들을 확인할 수가 있고 이후 상황에 따른 대처를 쉽게 할 수 있을 것이다. 또한 웹서버 구축을 통하여 종업원을 따로 불러서 물어볼 필요없이 핸드폰으로 실시간 주문내역 확인도 가능하다. 이 메뉴판은 기존의 아이패드 방식의 단점을 보완하여 단가를 최대한 낮추면서 주문 시스템을 효율적으로 운영할 수 있다는 큰 장점이 있으므로 더욱더 완벽한 제품으로 개발하여 구현시킬 것이다.

작품설명
작품 특징
· 라즈베리파이를 이용하여 database를 통해서 메뉴판에서 통신으로 오게 되는 data의 효율적인 관리와 웹서버 구축을 통해서 주문내역을 실시간으로 확인 할 수 있다.
· 전도성 페인트를 이용하여 깔끔한 스위칭 형식의 내부 회로 설계와 간결한 디자인을 설계한다.
· 메뉴판을 서로 다른 테이블에서 동시에 사용했을 때 data 전송에 있어서 문제가 없도록 특정 값을 설정해 두어서 필터링 시킨다.
· 구동방법 설계 : 전도성 페인트를 이용하여 스위칭 형식의 내부 회로 설계를 한 후에 메뉴를 골라 선택하게 되면 데이터를 전송하게 되고 그 데이터를 라즈베리파이에서 받아 database에 저장시킨다. 라즈베리파이에는 웹서버가 구축되어 있기 때문에 굳이 카운터 쪽에서 시스템을 구현시켜 놓지 않아도 매장 운영 및 관리를 쉽게 할 수가 있다.
· 주문이 정확하게 잘 되었는지 눈으로 바로 확인하기 위해서 메뉴판 자체에 LED를 사용해서 라즈베리 파이 쪽에 data 송신과 동시에 특정한 값을 수신 받도록 설정해 두어서 확인한다.
· 차후에 웹에서 회원가입 시스템을 도입해서 사전 예약이 가능하고 회원 관리도 할 수 있도록 개발할 계획이다.

보유핵심기술
전도성 페인트를 이용한 간결하면서 효율적인 메뉴판에서 Bluetooth 통신을 이용하여 메뉴 Data를 Raspberrypi(이하 라즈베리파이)라는 이동식 소형 PC쪽으로 정보를 넘기게 되면, 그 정보를 체계적으로 관리할 수 있는 Database와 모바일 웹상으로 실시간으로 정보를 확인할 수 있도록 하는 기술이다.

2015ict융합 37호 (1)

주 연구 내용으로는 흔히 많이 쓰이고 있는 메뉴판의 수동적인 단점과 아이패드를 이용한 전자식 메뉴판의 단가적인 문제의 단점을 개선하였고 전도성 페인트를 이용하여서 아주 간결하게 하나의 메뉴판처럼 제작하였다. 또한 라즈베리파이가 이동식 소형 PC같은 보드이기 때문에 공간 제약 없이 언제 어디서든 쓸 수 있도록 환경을 만들어 놓을 수 있다.
이 외에도 보유 기술로서 LED를 이용하여 충전 및 전압 잔량이나 데이터의 송수신을 나타내는 기술이 있으며 마지막으로 여러 개의 Bluetooth 송수신에 있어서 Data filtering을 통하여 정확한 송수신을 할 수 있는 기술을 보유하고 있다.

2015ict융합 37호 (2)

특허 및 경쟁기술 비교
우리 제품의 강점은 기존에 있던 수동적인 메뉴판과 아이패드를 이용한 메뉴판의 단점들을 보완했다는 점이다. 가장 먼저 현재 시중에서 가장 많이 쓰이는 수동적인 메뉴판은 손님들이 붐비는 음식점이나 주점에서 메뉴를 선택한 후 종업원을 호출하고 주문하기까지 아주 불편한 부분들이 많았다. 이러한 어려움이 있기 때문에 종업원 호출 없이 자유롭게 메뉴를 고를 수 있도록 해두었고 받는 쪽에서도 메뉴 데이터가 날아오게 되면 신속하게 처리할 수 있기 때문에 능률이 훨씬 더 좋아 질 것이다.
그리고 시중에서 쓰긴 하지만 보편화가 그리 많이 되지 않은 아이패드 같은 경우에는 제품의 단가가 매우 비싸기 때문에 넓은 규모의 음식점이나 주점에서 테이블마나 한 개씩 충당하기엔 매우 부담감이 클 것이다. 그러한 점을 보완하여 낮은 단가에 똑같은 주문 방식을 구현함으로써 훨씬 경제적이고 효율적일 것이다. 또한 실시간으로 자신이 앉은 테이블 정보를 핸드폰 웹상으로 눈으로 학인할 수가 있기 때문에 훨씬 더 수월하게 이용할 수 있을 것이다.

Software 구성
Data Transmission
전도성 페인트와 트랜지스터로 만든 터치형 스위치를 누르면 데이터 값이 Bluetooth를 통해서 송신이 된다. 이때 Bluetooth에는 메뉴판의 송신완료 스위치를 누르기 전까지 값이 날아가지 않고 있다가 메뉴를 모두 고른 뒤에 송신완료를 누르게 되면 각각의 메뉴의 데이터 값을 하나의 패킷 형태로 라즈베리파이의 수신담당 Bluetooth로 값을 보내게 된다. 패킷형태로 보내기 때문에 여러 데이터를 좀 더 효율적으로 보낼 수 있다.

2015ict융합 37호 (3)
Data Reception
메뉴판 쪽에서 송신완료의 명령을 주면 패킷의 형태로 데이터 값을 라즈베리파이의 수신 Bluetooth로 송신을 하게 된다. 수신을 담당하는 Bluetooth는 그 패킷 안에 있는 데이터 값을 앞에서부터 차례대로 MYSQL Database(이하 DB)에 저장하게 된다.

2015ict융합 37호 (4)
DB의 구성
DB의 구성은 위와 같다. 먼저 TABLE DB는 매장 안에 있는 Table 정보를 저장 하는 곳이다. 다른 것은 말 그대로 날짜, 테이블번호, 메뉴, 가격, 주문 개수, 주문가격 합, 세일된 주문가격 합 인데 주문 상태와 주문 양 상태는 의미가 있다. 주문 상태는 TABLE DB에 주문이 들어오게 되면 State가 1에서 2로 변하게 된다. 그렇게 함으로써 나중에 웹페이지에서 데이터를 끌어 갈 때 가져갈 수 있는 것이다. 주문 양 상태라는 것은 메뉴판을 이용할 때 소비자들이 단 한번만 시킬 경우는 없을 것이다. 아마 여러 번 시킬 경우도 있을 텐데 그 경우를 대비하여 주문 양 상태라는 것을 count해서 주방용 모니터링 시스템에서 추가 주문이 들어왔을 경우에 추가 주문된 메뉴를 바로 제공해 줄 수 있도록 설계하였다.
두 번째로 총 누적 DB는 매장의 한 달 매출과 연 매출들을 관리하기 위해 설계해 두었다. 매장 운영 시 어느 품목이 가장 잘 팔리고 전체적인 매출관리도 해야 할텐데 그 부분을 고려하여 설계해 두었고 한 달에 한 번씩 새롭게 갱신이 된다. 포스 시스템에서 매출관리 및 품목관리가 가능하다.

Web server
Tomcat을 이용하여 서버를 구축하였고 Java Server Page (이하 JSP)를 써서 각각 포스기 시스템, 주방용 모니터링 시스템, 모바일 시스템을 만들었다. 가장 첫 번째로 포스기 시스템을 설명하자면 흔히 매장에서 볼 수 있는 포스기 시스템과 유사하다. 테이블마다 어떤 메뉴를 시켰고 금액은 얼마 정도가 나왔는지 확인이 가능하며 메뉴를 잘못 시켰을 경우에 선택하여 취소할 수 있는 기능과 한 달에 한번 매장의 매출이 얼마나 나왔는지 확인이 가능하며 한 달이 지났을 경우엔 새로운 DB로 갱신하여 저장한다. 특정 메뉴가 어느 정도 팔렸고 그 가격이 어느 정도인지 확인 할 수 있는 기능도 있고 지금까지 총 판매 누적금액이 어느 정도인지 확인 할 수 있는 기능도 추가해 두었다. 계산 부분에선 총 금액이 어느 정도이며 거스름돈 계산과 동시에 완료를 누르게 되면 Date는 다시 새롭게 갱신된다.
두 번째로 주방 시스템은 주방 자체에 모니터를 통하여 실시간으로 테이블에서 들어오는 메뉴들을 확인한다. 이렇게 함으로써 주방에서 주문을 받는 사람들은 모니터링을 통해 메뉴가 들어오면 즉시 메뉴를 만들어서 밖으로 내기만 하면 되기 때문에 이전의 고전적인 메뉴 주문 방식과 다르게 신속하게 처리가 가능해져 일의 능률이 올라갈 것으로 생각된다. 마지막으로 모바일 시스템은 사용자들이 식사를 하다가 자신들이 어느 정도 이용했고 금액은 어느 정도 책정되었는지 모바일을 통하여 즉시 확인할 수 있는 시스템이다. 이 모바일 시스템은 깔끔한 디자인 형태로 제작되었으며 매장의 정보와 메뉴 정보 등을 알 수 있고 매장 이용시 건의 사항들은 메일로서 모바일에서 바로 보낼 수 있다.

2015ict융합 37호 (6)
전체적인 시스템 흐름

Software 흐름도

블루투스를 통해 데이터 값이 들어오게 되면 라즈베리파이에 올라가 있는 DB에 데이터가 저장이 된다. DB에 저장되어 있는 데이터 값에 따라 웹 페이지에서는 State의 상태에 따라 값들을 뿌린다. 포스기에서 테이블 정보를 전체적으로 확인하면서 계산 및 매장 정보까지 확인할 수 있고 주방용 모니터링 시스템에선 State의 값이 설정해 놓은 조건에 충족될 경우 지속적으로 나오게 됨과 동시에 모바일 웹 페이지에서 사용자들은 테이블 정보를 확인할 수 있다. 모바일 웹 페이지는 소비자들의 디바이스의 크기가 모두 다르기 때문에 반응형 웹의 형태로 제작되었고 포스기에서 계산을 완료하기전 총 누적 DB에 값을 저장시켜 놓는다. 매장 관리자는 이 DB를 통해 품목마다 팔린 수량이 어느 정도 되는지 검색을 통하여 확인함과 동시에 총 누적 금액도 알 수 있다. 나머지 계산 부분에선 원래 가격에서 10% Discount 된 가격으로 책정되며 포스기에서 소비자가 지불한 금액에 대해서 거스름돈도 책정된다. 모든 과정이 끝나고 계산완료 버튼을 누르게 되면 DB는 초기화되고 Table에 올라가 있던 데이터들은 모두 사라진다.

2015ict융합 37호 (6)
라즈베리파이 & 웹 서버 알고리즘

 

Software 기능
소비자들이 메뉴판에서 메뉴를 선택하기 전 DB의 State는 1로 유지된다. 메뉴가 선택이 되는 순간 State는 2로 변하게 되면서 블루투스를 통해 데이터가 패킷의 형태로 순서대로 메뉴의 번호에 따라 순서대로 라즈베리파이의 DB에 차곡차곡 쌓이게 된다. 라즈베리파이에는 Tomcat으로 서버가 구축되어 있는데 서버에는 JSP로 만들어진 포스기 시스템, 모바일 시스템 그리고 주방용 모니터링 시스템이 있다. 각각의 시스템들은 Table마다 State가 2인 메뉴 값들을 모두 뽑아온다. 주방용 모니터링 시스템은 3초에 한 번씩 Refresh되는데 소비자가 메뉴를 주문했을 때 라즈베리파이로 데이터가 오자마자 바로 웹상으로 띄운다. 마지막에 계산을 하기 전까지는 메뉴마다 이 상태는 계속 지속된다. 그런데 소비자가 계산을 하게 되면 State는 1로 초기화 되고 시스템들은 State가 2가 아니기 때문에 목록상에 띄우지 않게 된다. 그 후 테이블에 있던 모든 메뉴들은 초기화가 되고 다음 소비자들이 메뉴를 주문할 때 까지 Date값은 0을 유지한다.

 

2015ict융합 37호 (7)
메뉴판 & 라즈베리파이 알고리즘

전도성 페인트로 만들어 놓은 메뉴판에서 메뉴를 선택하게 되면 데이터 값이 블루투스를 통해 날아가게 된다. 그 데이터는 패킷의 형태로 날아가며 날아감과 동시에 메뉴판에 부착된 LCD에 값이 나오게 된다. 라즈베리파이에서 수신 블루투스는 패킷의 형태로 데이터 값을 받아서 DB에 순서대로 채워 넣게 된다. 그러다가 한 번 더 패킷의 형태로 데이터 값이 날아 왔을 때에는 업데이트 형식으로 기존에 있던 데이터 값에서 추가 되는 형식으로 DB에 저장이 된다.

2015ict융합 37호 (2)
포스기 시스템

프로그램 사용 모습

흔히 매장에서 볼 수 있는 포스기 시스템과 유사하다. 테이블마다 어떤 메뉴를 시켰고 금액은 얼마 정도가 나왔는지 확인이 가능하며 메뉴를 잘못 시켰을 경우에 취소할 수 있는 기능과 한 달에 한 번 매장의 매출이 얼마나 나왔는지 확인이 가능하며 한 달이 지났을 경우엔 새로운 DB로 갱신하여 저장한다. 특정 메뉴가 어느 정도 팔렸고 그 가격이 어느 정도 인지 확인할 수 있는 기능도 있고, 지금까지 총 판매 누적 금액이 어느 정도 인지 확인할 수 있는 기능도 추가해 두었다. 계산 부분에선 총 금액이 어느 정도이며 거스름돈 계산과 동시에 완료를 누르게 되면 DB는 다시 새롭게 갱신된다.

2015ict융합 37호 (8)
주방 모니터링 시스템

주방 모니터링 시스템은 2초마다 Refresh 되도록 설계해 두었다. 지속적인 업데이트를 통하여 소비자가 메뉴를 주문했을 때 즉시즉시 모니터링 해서 해당 메뉴를 만들어 낸다. 리스트 항목에서 상태 부분은 소비자가 메뉴를 주문했을 때 하나의 패킷형태로 날아오기 때문에 이전에 주문했던 수량과 다음에 추가 주문한 수량을 비교하여 몇 개를 주문했는지 Count해서 추가 주문된 수량을 표시해 주는 항목이다.

2015ict융합 37호 (9)
모바일 웹 시스템

반응형 웹을 이용하여 소비자들의 디바이스의 크기에 상관없이 가지각색의 디스플레이에 적용되도록 만들어 두었다. 사용자들이 식사를 하다가 자신들이 어느 정도 이용했고 금액은 어느 정도 책정되었는지 모바일을 통하여 즉시 확인할 수 있다. 모바일 시스템은 깔끔한 디자인 형태로 제작되었고 매장의 정보와 메뉴 정보 등을 알 수 있도록 되어있으며, 매장 이용 시 건의 사항이나 문의 사항들은 메일로서 모바일에서 보낼 수도 있다.

System Architecture (시스템 구성)

2015ict융합 37호 (10)
System Architecture는 크게 메뉴판 부분과 라즈베리파이 부분으로 나눌 수 있다. 메뉴판 부분은 Atmega8 MCU에 입출력 장치인 LCD와 핀 입력을 받는 터치스위치 부분이 있으면 블루투스로 라즈베리파이로 전송을 한다. 라즈베리파이는 기본적으로 라즈비안이라고 하는 리눅스 OS가 올라가 있다. 라즈베리파이는 전송받은 문자열을 검사하고 필터링하여 해당 DB의 테이블 수량을 변경시킨다. 주문 현황이나 가격을 알 수 있는 모바일용, PC용 웹 페이지가 존재하며, 또한 주방에서 실시간으로 주문현황을 할 수 있도록 하는 웹 페이지와 계산을 위한 POS 페이지도 별도 구성되어 있다.

개발 환경

2015ict융합 37호 (11)
· 언어 : C, Java, HTML5+Css3+Javascript, JSP & Servlet
· 툴 & 환경 : Codevision, Eclipse, Gcc, Linux

단계별 제작 과정

2015ict융합 37호 (12)

패드형식의 기본 구성은 Atmega8 2개가 TWI 통신을 하도록 되어있고, 블루투스와 2*22 CLCD가 연결되어 있는 모습이 초기 구성형태이다.
블루투스는 Blue M -G 시리즈를 초기에 사용하였다.

2015ict융합 37호 (13)

2015ict융합 37호 (14)

전도성 페인트를 통해 손으로 제어를 시도하는 경우 신호의 입력을 받도록 처리해야하는데, 사람 손의 저항이 너무 커서 핀입력 제어가 되지 않는 문제점이 생겼다. 그래서 NPN 트랜지스터 2개를 이용해 터치스위치 회로도를 구성하는 방법을 알게되어, 이를 패드형식에 붙일 수 있도록 터치스위치를 구성하였다. LED는 해당 터치스위치가 제대로 동작하는지 확인할 수 있는 역할 겸 다이오드의 역할을 하도록 부착하였다.

2015ict융합 37호 (15)2015ict융합 37호 (16)

NPN 트랜지스터 2개를 이용한 터치스위치 구성의 실험과 전도성 페인트를 같이 이용하여 잘 동작하는를 실험하는 과정이다.
터치스위치의 회로도를 보면 터치 단자의 한쪽은 VCC쪽이고 한쪽은 트랜지스터와 연결되므로 전도성 페인트와 연결되는 부분에 한쪽은 VCC, 나머지 한쪽은 트랜지스터 쪽으로 연결되도록 구성하였다.
터치할 때 전류가 흐르는 부분은 MCU의 핀 부분으로 연결이 되어 있어서, 터치가 이루어질 때마다 핀 입력 제어를 할 수 있도록 구현하였다.

2015ict융합 37호 (17)

패드의 기본 틀은 포맥스를 이용하여 만들었고, 위에서 제작한 각각의 부품들을 종합하여, 틀 안에 배치를 하고 움직이지 않도록 고정을 시켜놓는 과정이다. 상단부는 CLCD가 연결되어 있다.

2015ict융합 37호 (18)

위에서 제작한 패드의 전면부의 모습이고, 그려져 있는 부분은 전도성 페인트로 그려놓은 부분이다. 단자는 임의로 일렬로 그려놨지만, 만약 원하는 위치가 다르다면 마음대로 그려서 사용이 가능하다. 또한 유지보수적인 측면에서도 다시 펜으로 그리면 끝이기 때문에 매우 편리하다.

2015ict융합 37호 (19)

이 사진은 위에서 패드 형식의 메뉴판을 만드는 동안 포맥스를 자르고 점프선을 이용하여 내부 회로들을 구성하고 있는 사진이다.

2015ict융합 37호 (20)

메뉴판에서 블루투스를 통해 라즈베리파이로 수신을 받으면, 라즈베리파이는 정해진 패킷 형태에 따라 해당 테이블의 주문 메뉴의 수량을 올려주게 되고, 라즈베리파이는 가격과 세일된 가격, 수량 등을 업데이트 구문을 통해 바꿔주게 된다. 수량이 1개 이상이면 상태를 2로 바꿔주고, 나중에 상태가 2인 부분들만 가져가서 데이터 처리를 할 수 있도록 구현하였다.

2015ict융합 37호 (21)

책자 형식의 메뉴판을 만들기 위해 기본 틀이 되는 책자를 구하였고, 그곳에 기본 단자들을 그리고 있는 과정이다. 물론 단자는 어떤 위치에 그려도 상관이 없다.

2015ict융합 37호 (22)

책자 형식의 메뉴판에다가 기본 단자의 위치 구성을 하고, MCU와 연결되도록 선들을 펜으로 그리고 있는 과정이다. 펜을 이용하면 선을 그리듯이 사용하면 되기 때문에 작업에 수월함이 있다.

2015ict융합 37호 (23)

책자 형식에선 Atmega128 2개를 이용하여 구성을 하였고, 아래 LED 부분은 터치스위치 회로를 구성해 놓은 부분이다.
TWI 통신을 사용하는 이유는 평소에 주문 수량에 따라 LED가 깜빡거리다가 스위치가 눌리면 바로 수량이 추가가 되는 동작을 해야하는데, 이러기 위해서 인터럽트(interrupt)가 필요하다.

2015ict융합 37호 (24)

그런데 Atmega128의 외부 인터럽트의 수는 단자의 수보다 훨씬 적기 때문에, 일반 핀입력 제어를 하고, TWI 인터럽트를 사용하기로 했다. 다른 방법으로, 포트확장 칩을 사용할 수도 있지만, 추후에 매우 많은 핀이 생길 것이라는 가정 하에 프로세스 부를 2부분으로 나누어 처리하도록 하였다.

2015ict융합 37호 (25)

2015ict융합 37호 (26)

책자 형식의 메뉴판 제작에서는 선처리를 하는 부분에서 많은 어려움들이 있었다. 점프선 말고도 전도성 실이나 전도성 고무줄도 있는 것을 확인하였다. 이 부분을 실로 철한다면 훨씬 처리하기 수월했을 것이라고 생각한다. 이미 구성 부분을 거의 한 상태라 실로 처리하는 것은 추후에 보완을 하여 만들어도 좋을 것이라고 생각한다.

2015ict융합 37호 (27)

MCU까지 부착한 최종 형태. 기존의 패드 형식은 LCD마저 가격이 나가기때문에 책자 형식은 LED를 이용한 카운팅 방식을 이용한다. 그리고 기존의 패드는 터치시 바로 메뉴가 추가됐지만, 책자 형식은 한번에 모아서 주문완료 버튼으로 주문을 하기 때문에 더욱 실효성을 높인 형태이다.
테이블 단위로 선택하는 번호는 Onclick 이벤트로 인해 String값으로 테이블 값이 날아가게 된다. String형의 테이블 번호는 int형으로 변환되며 그 번호에 속한 테이블의 주문한 메뉴와 책정 금액 등을 확인할 수 있다. 자바스크립트를 이용하여 거스름돈 계산, 총 매출 확인, 메뉴 삭제, 특정 메뉴의 판매량 등의 기능을 구현하였으며, 계산을 완료 했을 시에는 테이블의 DATA값들을 총 매출 테이블로 복사함과 동시에 초기화 시킨다.

2015ict융합 37호 (30)

주방에서 지속적으로 확인할 수 있는 주방 카운팅 뷰 시스템이다. 이 페이지가 지속적으로 업데이트 되는 것을 확인하기 위하여 페이지를 5초에 한번씩 Refresh시키는데, 이것은 Meta 속성 내부에 http-equiv 속성 중 refresh를 사용하고 content 내부에 숫자를 입력해주면 sec 단위로 문서를 reload 시킨다. 이것을 이용하여 블루투스로 송신되는 DATA값들을 지속적으로 확인한다. 만약 메뉴가 추가 되었을 시에는 몇 개가 추가 되었는지 확인할 수 있으며, 이 시스템도 테이블 단위로 확인이 되고 테이블의 DATA값이 초기화됨과 동시에 같이 초기화된다.

2015ict융합 37호 (9)

소비자들이 언제든지 자신이 속한 테이블의 정보를 확인할 수 있도록 만든 모바일 웹 시스템이다. View Port를 사용하여 디바이스 크기가 모두 다른 소비자들의 다양한 스마트 폰을 반응형 웹을 사용하여 언제든지 최적화된 화면으로 확인할 수 있도록 만들었으며, 모바일 뿐만 아니라 데스크탑이나 타블렛 등도 가능하도록 만들었다. 식당의 위치를 구글 맵 API를 사용하여 표시해 두었으며, 이 모바일 웹 역시 테이블 단위로 확인이 가능하다.
기타
소스코드 함수 설명
소스코드 함수들의 설명
파일 구성

2015ict융합 37호 (31)
Atmega8 Slave 부분 Atmega8 Slave 부분
2015ict융합 37호 (32)
라즈베리파이 부분 웹 서버 페이지 부분

함수별 기능

Menu_Master 부분 함수 (atmega8 중 master부분)
1) void Transm(void);
이 함수는 메뉴판의 전도성 페인트를 이용해 핀입력을 받는 부분에서 사용한다. 핀 입력이 들어올때마다 인터럽트가 걸리도록 구성했다. 초기의 구상은 LCD를 통해 계속 디스플레이를 하다가 핀 입력이 들어올 때 블루투스로 값을 전송을 하려고 하였는데, LCD안의 delay함수로 인해 핀입력시 바로 처리되지 않는 문제점이 생겨서 TWI통신을 사용했다.
외부 인터럽트를 생각했지만, atmega8의 외부인터럽트 핀이 매우 부족하여, 많은 핀입력들을 모두 인터럽트로 처리하지 못한것도 TWI 인터럽트를 사용한 이유이다.
이 함수의 역할은 while문 안에서 계속 반복되며, pin의 값은 모두 DDR을 통해 입력으로 설정하고 초기 값을 1로 모두 입력해준다. 그럼 항상 high인 상태이며, 이 상태에서 스위치를 통해 입력이 발생되면 값이 Low로 변하게 되고 이때의 신호를 잡도록 하기 위한 것이 바로 void Transm(void); 함수이다.
우선 pin B, C, D의 상태를 비트 연산자를 통하여 KeyB, C, D라는 변수에 저장을 한다. 이 저장된 unsigned char 변수를 if문을 통해 어떠한 핀이 입력이 들어왔는지 검사한다. 예를들어, if(keyC==0x0e)라면 keyC가 0b00001110으로 즉, 0번 핀이 high값에서 low로 변할때 if문 안으로 들어가는 것이다. 즉 필터링 역할을 해주는 함수이다.
함수 안으로 들어오면 str이라는 char 변수에 ‘a’부터 ‘o’까지의 문자를 저장시키고 이를 TWI 송신 함수를 이용하여 slave쪽으로 전송을 한다. delay를 준 이유는, 키를 누르고 있는 동안 문자가 slave로 여러 번 전송되는 것을 막기 위해 받는 쪽과 같이 delay를 넣어서 한번 눌렀을 때 한번 송수신을 하도록 했다.

2) void TWI_Page_WRITE(int add);
TWI통신이란 두 개의 선을 이용한 통신으로, 병렬적으로 여러 개가 버스 형식으로 연결이 가능한 통신이다. SDA와 SCL선이 있으며, 두 개의 선을 이용한 효율적인 통신 방식이다. 보통 master와 slave로 설정을 해주면 동작을 한다. 최대 400KHz까지의 통신속도를 지원한다. atmega8에서는 PINC의 4,5번이 이 두 개의 선에 해당한다.
동작되는 방식은 처음에 TWCR값을 조절하여 송신 start조건을 내보낸다. while문에서 TWINT가 1로 설정되기를 기다린다. 이는 start조건이 완료된 것을 의미하는데, TWINT는 작업이 끝나면 다시 1로 되기 때문이다. TWDR에 넣는 값이 전송하려는 값이 되며, TWCR 레지스터는 TWINT를 클리어 시키기 위해 새로 써넣는다. 그 다음 while(!((TWCR&TWINT)&&(TWSR&TW_MT_SLA_ACK))); 문장은 데이터가 전송 완료되어 ACK 신호를 받았는지 확인하는 것이다. 그리고 잠시 대기한 후 다시 TWCR에 stop 조건을 넣어주면서 송신기능을 마무리 하게된다.
slave 부분에서는 이와 비슷한 과정이 반복된다. 대신 TWDR에 값을 넣는 것이 아니라 TWDR의 값을 다른 곳으로 저장하는 부분이 다르다.

3) void Pin_Init(void);
메뉴판에서 핀입력을 여러개 받아야 하는데, 핀입력을 받으려면 DDRA=0×00;과 같이 입력 받을 핀을 0으로 설정해주며 입력으로 사용하는 것이 가능하다. 따라서 핀입력을 위한 설정이다.
DDRC=0×00;, PORTC=0xff;, DDRB=0×00;, PORTB=0xff;, DDRD|=0×00;, PORTD=0x1f; 등과 같이 입력으로 쓸 것으로 설정을 하고, 초기 값을 1로 주어 high로 설정해 놓는 함수이다.

< Menu_Slave부분 함수 (atmega 8중 slave부분) >
1) 블루투스 관련 함수들
ㄱ) void uart_init(void);
UART통신을 위해 atmega8에서 필요한 초기 레지스터 설정을 해주는 함수이다. UCSRB를 통해 수신 인터럽트, 수신, 송신을 enable 시킬 수 있도록 설정이 가능하다.
UCSRC의 경우 비동기방식, no parity, stop 비트1, 8비트 등의 블루투스 전송에 대한 기본적인 설정을 해주는 레지스터이다. atmega128같은 경우는 2개가 있지만 atmega8로 작품을 만들었기 때문에 하나의 UART통신이 가능하다.
UBRRH와 UBRRL레지스터를 통해 블루투스 전송속도를 설정 가능하다. 우리 작품의 경우는 16Mhz 크리스탈을 사용하므로 데이터시트를 참고하였을 때, UBRRH = 0×00;, UBRRL = 0×08;의 값으로 설정하면 115200bps의 전송속도가 설정된다.

ㄴ) void put_str(char* ch);
아래의 Putch 함수는 하나의 문자를 전송시켜주는 함수이고, put_str 함수는 포인터와 Putch 함수를 이용하여 parameter로 입력된 문자열을 전송시키는 함수이다. 기본적인 동작은 Putch 함수와 같고 다만 차례로 문자를 전송해 전체적인 문자열을 전송시켜줄 뿐이다.

ㄷ) void Putch(char data);
UCSRA과 0×20과 비교하며 6번째 비트가 0인지 1인지 비교하다가 송신할 준비가 되면 UDR값에 data를 넣어서 값을 전송시켜주는 간단한 함수이다.

ㄹ) char Getch(void);
UCSRA의 0×80과 비교하며 8번째 비트가 0인지 1인지 비교하다가 데이터가 수신되면 UDR값에 data를 수신하여 return 시켜주는 함수이다.

ㅁ) void atcommand (flash unsigned char *s);
블루투스로 명령어를 전송할 때 이 함수를 이용했었지만, 테스트 중에는 보드를 이용해 페어링 시켰기 때문에 실제로 사용하지 않았다. 하지만 추후에 조금 더 안정적인 블루투스 연결을 위해 내부에 이 함수를 이용하여 블루투스의 데이터시트에 있는 AT command를 전송하도록 소스를 구성할 예정이다.

2) LCD 관련 함수들
ㄱ) void LCD_Blink(void);
현재 제작한 메뉴판에는 총 15개의 핀이 있는데, 그 중 실제 메뉴는 14개만 사용중이며, 하나의 핀은 현재 수량을 나타내도록 사용한다. 그것에 해당하는 함수가 이 함수인데, 우선 DataCopy라는 함수를 통해 4개의 배열에 LCD에 디스플레이 할 문자들을 저장한다.
메뉴가 14개이기 때문에, 한 줄에 나타낼 수 있는 문자수를 고려하여 4개의 줄로 구성하였다. LCD_String 함수에 아까 저장한 배열을 입력해주면 첫줄에 출력이 되고, Command 함수의 명령어를 통해 2번째 줄로 이동한다. 그 다음 2번째 줄에 해당하는 배열을 똑같은 방식으로 출력해준다.
2×22 CLCD이므로 이렇게 하면 화면이 꽉찬다. delay를 조금 여유 있게 주어 사용자가 충분히 볼 수 있도록 한 후, Command 함수를 통해 화면을 모두 지워준다. 그 다음은 3번째와 4번째 줄을 표시하기 위한 과정이며 위의 과정을 반복하게 된다.

ㄴ) void DataCopy(void);
CLCD에 현재 메뉴판의 14개의 주문 현황을 나타내기 위해 필요한 과정이다. LCD의 길이에 맞도록 char형 배열을 선언하고, 이 배열에 sprintf를 이용해 원하는 문자열을 복사한다. sprintf를 사용하는 이유는 문자와 숫자를 동시에 쓰고 싶고 메뉴의 수량이 계속 변하기 때문에, 이 변하는 숫자 값을 저장시켜 주기 위해 사용하였다.

ㄷ) void LCD_init(void);
CLCD를 사용하기 위해서 초기에 가장 먼저 설정해주어야 하는 함수이다. 이 작품을 만들 때 생겼던 문제는, atmega8을 사용하다보니 포트수가 매우 적었다. 어쩔 수 없이 B나 D포트를 사용해야하는데 B포트는 사용할 수 없어서 D포트에 LCD를 연결했지만, D포트의 0번과 1번이 UART통신을 통해 블루투스 통신을 해주고 있었기 때문에 겹쳐서 문제가 발생하였다. 때문에 B포트에 0, 1, 2포트와 D포트의 4, 5, 6, 7 포트를 사용하는 것으로 수정했다. 따라서 처음에 이를 위한 DDR 설정이 있다. 그 다음은 Command 함수를 이용하여 데이터시트를 참고하여 초기화에 필요한 레지스터 값을 설정해주는 단계이다.

ㄹ) void Command(unsigned char);
이 함수는 좀 더 편하게 LCD의 명령어를 입력하고 제어하기 위해 설정한 함수이다. 상단에 #define을 통해 LCD의 동작값 비트를 설정해 놓았고, 데이터 시트를 참고하여 LCD의 4번부터 6번핀의 값인 RS, R/W, E값을 조절하며 LCD의 동작모드를 설정한다. 이러한 동작모드의 설정은 B포트와 관련되어 있고, 직접적인 데이터가 입력되는 부분은 포트 D의 4~7번 비트이다.

ㅁ) void Data(unsigned char);
위의 Command 함수를 통해 동작모드를 설정하게 되고 Data 함수는 실제로 LCD에 출력하기 위해 데이터를 쓰는 함수이다. 인자로 전달받은 값은 포트 D의 값과 비트 연산을 하게 된다. 비트는 8개의 비트지만 LCD에서 4개의 포트만 연결하여 사용하기 때문에 상위 4개 바이트와 하위 4개 바이트를 따로 처리하며, 인자값과 0xf0과의 &연산을 통해 상위비트만 걸러낸다. 포트 B를 조절해 write 기능을 동작하도록 한다. 그 후 포트B의 E=1로 설정해 LCD가 동작하도록 했다가 다시 0으로 만들어준다. 하위바이트는 시프트 연산을 통해 왼쪽으로 4칸 이동하여 하위 4개의 비트를 포트 D에 저장시킨다. 그 후 똑같이 레지스터를 설정해 write하는 과정을 거친다.

ㅂ) void LCD_String(char *str);
이 함수는 단순히 포인터로 인자를 전달받아 위의 Data 함수로 포인터를 차례대로 전송하여 LCD에 문자열이 출력되도록 하는 함수이다.

3) 데이터 분류 함수
ㄱ) void twi_slave_read(void);
위에서 설명한 master의 송신부분과 유사하며, 수신을 하는 함수이다. TWINT값이 1로 설정되기를 기다리며, ACK 신호를 받았는지 확인한다. 그리고 TWDR에 들어있는 값을 다른 변수에 저장하고, 이 변수가 바로 다음 detect1 함수의 인자로 전달되도록 되어있다. 그 후 다시 stop 조건을 걸어주고 끝난다. 이 함수는 while문 안에서 계속 수신하도록 반복되고 있다. master로부터 ‘a’부터 ‘o’까지의 문자중 하나를 받아 해당하는 동작을 하도록 연결해주는 역할을 한다.

ㄴ) void detect1(char ar1);
TWI의 slave 수신 모드 안에 속해 있는 함수로 ‘a’부터 ‘o’까지 입력받은 문자를, if문으로 필터링하여 넘어온 문자에 해당하는 핀값에 따라 블루투스를 이용해 라즈베리파이로 문자 패킷을 전송한다. 예를 들어, T1M01; 이라는 패킷을 전송하게 되면, T와 M과 ;을 기준으로 제대로 된 정보가 넘어왔는지 판단하고, 테이블 번호와 몇 번째 메뉴를 주문한 것인지 구분 하게된다. 블루투스를 전송하고 동시에 LCD에 몇 번 메뉴를 전송했는지 출력을 해주며, 전체 수량 출력을 위해 전역변수로 선언된 num 변수의 해당 메뉴 수량을 하나 올리는 역할을 한다.

라즈베리파이 소스의 함수
void Table_init(void);
typedef struct{
int menu[15];
int price[15];
}table
다음과 같은 구조체가 선언되어 있는데, 블루투스로 날라온 테이블과 메뉴에 해당하는 곳의 배열의 수량이 하나씩 추가되도록 되어있다. price에는 메뉴의 가격들이 저장되어 있다. 그 이유는 Mysql과 연동해 업데이트 시킬 때, 할인율이나 주문 개수에 따른 총 가격등을 업데이트 하기위해 초기 가격이 필요하기 때문에 저장해놓은 값이다. 이 함수는 이러한 구조체 변수를 초기화시키기 위한 함수이다.

※ 추가적 설명
while문 안에서 SerialGetchar 함수를 통해 입력을 받고 이를 터미널 창에 출력을 해준다. if문을 통해 문자 패킷이 프로토콜에 맞는 패킷인지 구분 한다. 예를들어 T1M01;은 주문을 의미하는 것이고 끝이 -로(T1M01-) 끝나면 값들을 모두 초기화 시키도록 하였다. 정상적인 값이 올 경우 01이라는 수량은 문자로 인식하기 때문에 이를 숫자로 바꿔 인식하는 작업을 해준다. 이 수량을 첫 번째 데이터와 두 번째 데이터라고 했을 때, 첫 번째 데이터가 0이라면 단순히 두 번째 데이터만 숫자로 변환하면 된다. 그렇지 않고 처음 데이터가 0이 아닐 경우 10의 자리를 무시할 수 없으므로, 처음 수신 데이터 값도 숫자로 바꾸고 10을 곱하여 두 수를 더해서 처리한다. 이렇게 테이블 번호와 메뉴 번호를 저장하고, 라즈베리파이의 mysql 관련 라이브러리를 설치한다. mysql.h라는 헤더파일을 이용하여 mysql과 연동하게 된다.
처음 연동시, localhost를 적고, mysql 계정과 비밀번호, database 등의 정보를 이용해 접속 한다. 접속된 후에, szQuery라는 배열에 sprintf를 이용하여 Mysql의 update 문장을 넣는다. 이 업데이트문은 아까 접속한 TMenu라는 database 안에 있는 tblinfo라는 테이블에 많은 값들을 변경시켜준다. 변경이 잘 된다면, 해당테이블과 메뉴의 쿼리 변경 현황을 터미널창에 출력하도록 되어 있다.

주요 함수의 흐름도

2015ict융합 37호 (33)
라즈베리파이 & 서버 함수 흐름도
2015ict융합 37호 (34)
메뉴판 & 라즈베리파이 함수 흐름도

 

참고문헌
우분투 리눅스, 강문규, 나익수, 이귀봉, 이병수, 가메 출판사
임베디드 리눅스 기초와 응용, 사공준, 우종정, 한빛 미디어
리눅스와 함께하는 라즈베리 파이, 피터엠브리, 데이비드 하우스, 제이펍
AVR Atmega128, 윤왕철, 복두 출판사
Learning PHP, MySQL & JavaScript , 로빈 닉슨, 에이콘 출판사
이것이 자바다, 신용권, 한빛 미디어
백견불여일타 JSP & Servlet, 성윤정, 로드북
Do it! HTML5 + CSS3 웹 표준의 정석, 고경희, 이지스퍼블리싱

프로젝트 시연 영상

2015ict융합 37호 (38)

https://www.youtube.com/watch?v=L0ppK_3X42I

회로도

2015ict융합 37호 (35)
5V 공급을 위한 전원부 회로도
2015ict융합 37호 (36)
NPN트랜지스터 2개를 이용한 터치 스위치 회로도
2015ict융합 37호 (3)
블루투스 3.3V 공급을 위한 전원부 회로도
2015ict융합 37호 (37)
전체적인 회로도

[37호]Inside 3D Printing Conference & Expo 2016

37 hot 인사이드3d (3)

37 inside mm

Inside 3D Printing Conference

& Expo 2016

 

글 | 이용동 책임기자 bluelyd@ntrex.co.kr

 

최근 우리 주변에는 3D 프린팅 기술을 이용한 제품들이 속속 나오고 있다. 장식용 공예품이나 플라스틱 식기, 가습기, 열쇠와 같은 크고 작은 물건들부터 배양된 세포를 3D 프린팅의 재료로 삼아 인공 장기를 만들려는 연구도 활발히 진행 중이다. 의료 분야에서도 역시 3D 프린팅 기술을 활용한 사례들이 나타나고 있다. 최근에는 선천성 기도 장애를 앓고 있는 아기의 기도 구조를 CT 및 자기공명영상(MRI) 촬영 후 분석해 생분해성 소재로 만들고, 몸에 이식해 수술을 성공적으로 마친 바 있다.

이런 가운데, 아시아 최대의 3D프린팅 국제행사인 인사이드 3D프린팅 컨퍼런스&엑스포가 지난달 22일부터 24일까지 3일간, 킨텍스 2전시장 6홀에서 열렸다. 올해로 3회째를 맞이한 이번 전시회는 킨텍스와 미국 라이징미디어가 공동으로 개최됐다.

이 행사는 전세계 3D프린팅 산업의 최신 제품 및 트렌드, 관련 정책 및 향후 전망을 총망라하는 국내 최초의 해외 합작 3D 프린팅 전문행사로, 뉴욕, 런던, 산타클라라, 베를린, 싱가포르 등 세계 10여개 도시에서 열리는 국제 순회행사이다. 특히 올해 전시회는 세계적인 경기 침체 속에서도 3년 연속 전시 면적, 참가 업체가 증가하고, 로봇, 드론, 가상현실 전문행사인 RoboUniverse & VR Summint 2016이 동시에 열려 관련 업계의 관심이 집중되는 전시회였다.

37 hot 인사이드3d (3)

최근 IT 업계의 트렌드가 아주 빠른 속도로 변화되고 있고, 3D 프린터 산업이 활발해짐과 동시에 중국 자본의 유입 등으로 국산 업체들의 경쟁력에 부정적인 영향이 있을 것이라는 예상이 가능한 가운데, 3D 프린터의 활용도가 분명히 넓어진 것과는 별개로 많은 사람들이 3D 프린터 전시회에 찾아줄 지에 대해서는 기자 개인적으로는 꽤 회의적이었다.

하지만 그 생각은 전시회장을 방문하기 전까지만 유효했을 뿐, 실제로 킨텍스에 도착해서 보니 전시회장 안팎으로 상당히 많은 관람객들이 방문한 것을 알 수 있었고, 이는 곧 기자에게 3D 프린터에 대한 관심이 아직 꽤 뜨겁다고 이야기를 해주는 것 같았다.

37 hot 인사이드3d (5) 37 hot 인사이드3d (6)

이번 인사이드 3D 프린팅은 3D 프린팅 기술과 콘텐츠, 사업 가능성까지 엿볼 수 있는 자리다. 스타트업 기업 에이팀벤처스가 선보인 3D 프린터 쉐어링 서비스, ‘쉐이프엔진’도 참관객의 눈길을 끌었다. 이 서비스를 활용하면 국내 곳곳의 개인용·산업용 3D 프린터를 공유할 수 있다. 3D 프린터가 없어도 인쇄 가능하며 고품질 인쇄물이 필요하면 인근의 산업용 3D 프린터를 대여해 사용 가능하다.

3D 프린터 소유자는 이 서비스를 통해 수익을 얻을 수 있다. 주로 3D 프린터, 또는 3D 프린터용 필라멘트 등 제품을 제조 또는 유통하는 것이 현재까지의 주요 사업영역이라면, ‘쉐이프엔진’의 3D 프린터 쉐어링 서비스는 3D 프린터를 소유하는 데 드는 비용을 지출하지 않아도, 출력물이 필요할 때만 서비스를 이용하며 경제적인 활용을 가능하게 해 준다는 것이 특징이다. 또한 전시되어있는 3D 프린터의 종류는 한 종류였지만, 이 업체의 부스에서 보여준 필라멘트는 매우 다양했다.

현재는 꽤 흔하게 유통되고 있는 플렉서블 필라멘트부터, 온도에 따라 색이 변하는 필라멘트, 야광 필라멘트, 자성이 있는 필라멘트, 전도성 필라멘트 등 다양한 색상과 성질의 필라멘트를 전시해 눈길을 끌었다. 또한 평소에 광고를 접해도 직접 구매하지 않으면 어떤 것인지 상상에만 그칠 수 밖에 없다. 덕분에 상상으로만 그쳤던 다양한 필라멘트를 직접 경험해볼 수 있는 좋은 기회가 되었다.

37 hot 인사이드3d (11) 37 hot 인사이드3d (13)

프리폼연구소(주)에서는 이번 전시회에서 2,400mm급 중형 3D 프린터 LC2400 제품과 출력크기 지름 1,200에 최대 높이 1,350에 이르는 프리포머 LD1200 제품을 선보였다. LC2400은 그라데이션으로 디자인된 창문으로 내부 출력 상황을 파악할 수 있으며, 출력 크기는 2,400 X 1,200 X 1,500인 제품이다. 실제로 위 사진처럼 사람을 기준으로 20명은 너끈히 들어갈 수 있는 크기의 내부 공간을 가진 큰 제품이었다.

기자가 방문했을 당시에는 기기가 점검 중인 관계로 출력하는 모습을 볼 수는 없었다. LD1200 제품도 연구실의 천장 높이인 2,500에 맞춰 제작되었을 뿐, 제한이 없었다면 더 크게 만들 수 있었다는 것이 업체의 설명이다. 프리폼연구소(주)의 제품은 일반 소비자보다는 주로 건축용, 산업용도로 사용될 것을 고려해 제작된 제품이며, 전시회에서는 볼 수 없었지만 이동식 펜션을 출력할 수 있는 7.3M X 3.6M X 3M 출력 크기의 초대형 3D 프린터인 프리폼 LC7300 제품도 개발해 이동식 펜션, 자동차, 대형가구 등을 본격 개발하고 있다고 업체는 밝혔다.

37 hot 인사이드3d (18) 37 hot 인사이드3d (16)

홍대에 사무실을 두고 있는 3D 프린팅 샵 ‘Gluck’은 이번 전시회에서 다양한 방식의 3D 프린터와 출력물들을 전시해 눈길을 끌었다. 글룩은 3D 프린팅을 보다 쉽고 편하게 사용할 수 있도록 해주는 3D 프린팅 작업을 대행해주는 곳이며, 한 달에 2회 정기적으로 3D 프린팅 교육도 진행하고 있다.

특히 글룩이 진행하는 교육은 무료로 진행되는 것이 특징이다. 주된 내용은 3D 프린팅 후가공, 창의적 활용방안, 금속 프린터의 활용방안도 교육시키고 있으며, 각각의 사례도 활발하게 공유하고 있다. 현재 다양한 분야에서 3D 프린팅이 활용되고 있지만, 일반인들이 제대로 된 결과물을 만들어내기는 쉽지 않다고 홍재옥 글룩 대표는 말한다. 특히 이번 전시회에서 눈길을 끈 것은 바로 도자기를 만들 수 있는 세라믹 3D 프린터와 출력물이었다.

물론 출력된 출력물에 유약을 바르고 후처리를 해야 실제로 사용할 수 있는 제대로 된 도자기처럼 표면처리가 되지만, 3D 프린터를 활용했기에 가능한 복잡하고 어려운 모양의 출력물들이 시판되는 것과 같은 표면과 단단함을 가지고 있음에 놀라지 않을 수 없었다.

37 hot 인사이드3d (22)

3D융합기술지원센터의 부스에는 (주)엔티렉스의 RexBot3D 시리즈, TPC애니웍스의 FINBOT, 온스캔스(주)의 스캐너 등 다양한 업체의 다양한 제품들이 한 데 모여 기술을 뽐내고 있었다.

37 hot 인사이드3d (24)

(주)엔티렉스는 초보자도 설치 및 사용이 간편한 3D 프린터 ‘RexBot3D OC-120′과 ‘RexBot3D OC-200’을 전시했다. 특히 OC-120 제품은 가격(DIY 키트 80만원대) 및 품질 경쟁력을 갖추고 금속 소재 가공 프레임으로 강한 내구성을 자랑하는 3D 프린터다. 초보자도 손쉽게 사용이 가능한 자체 소프트웨어를 지원하며 정밀도를 높여 레이어 품질을 보장하고, 조립이 편리한 MDF 케이스를 적용했다. 슬림하고 심플한 디자인으로 장소에 구애 받지 않고 설치 사용할 수 있으며, 근접센서를 이용한 오토레벨링 구현 및 CORE XY 시스템 프린터 방식으로 손쉽게 히터 및 노즐사이즈 교체가 가능하고, 컴퓨터 없이도 프린팅이 가능한 SD카드만 있으면 출력이 가능하다.

37 hot 인사이드3d (26)

(주)TPC애니웍스는 2015 KES 이노베이션 어워드 “베스트디자인”상을 수상한 ‘FINEBOT Touch S’를 선보였다. 일반적인 3D 프린터들이 모두 버튼을 누르거나 조그셔틀을 돌리는 형태의 조작 방식을 채용한 반면, 이 제품은 가장 직관적인 ‘터치’ 인터페이스를 적용하여 사용자 편의성과 디자인의 두 마리 토끼를 잡은 제품으로 평가받고 있다. 또한 한글 그래픽 UI로 진행과정 및 기기의 상태를 한 눈에 볼 수 있고, 한글파일 출력을 비롯하여 영어, 중국어, 일본어 등 다국어를 사용할 수 있어 사용상 제약을 최소화했다고 업체는 설명했다. 또한 32bit ARM CPU를 채택하여 기존 제품대비 10배 이상의 연산 속도로 높은 정밀도의 출력이 가능한 것이 장점으로 소개됐다.

37 hot 인사이드3d (92)

온스캔스(주)는 산업용 및 인체용 스캐너는 물론 3D 데이터 편집 프로그램도 자체적으로 제공하고 있고, 스캐너와 레이저 조각기를 이용한 3D 크리스탈 얼국 조각 사업 등도 진행하고 있는 제조업체이다. 이번 전시회에서는 다양한 스캐너 제품들과 함께 자체 개발한 3D데이터 편집 프로그램인 ‘LM’을 선보여 눈길을 끌었다. 온스캔스(주)의 스캐너 제품은 White Light 방식으로 인체에 전혀 해가 없고 직사광선이 없는 사무실 환경에서도 스캔이 가능하다는 장점이 있으며, 무엇보다도 자체 개발한 편집 프로그램을 스캔 데이터 활용에 맞춰 수정 공급 가능하다는 장점을 가지고 있다고 업체는 설명했다.

37 hot 인사이드3d (33) 37 hot 인사이드3d (35)

3D프린터 전문업체 XYZ프린팅 코리아는 이번 전시회를 통해서 정밀도가 130마이크론까지 향상된 SL 3D프린터 ‘노벨 1.0A’와 오픈필라멘트 사용이 가능하고 3D 스캔기능과 레이저 조각(옵션) 기능이 장착된 ‘다빈치 프로 3in1’을 비롯해 다양한 신제품을 전시했다. 특히 신제품 ‘다빈치 미니’는 지난 달 대만에서 열린 ‘COMPUTEX 2016’ ICT박람회에서 ‘베스트초이스 어워드’를 수상 한 제품으로 XYZ프린팅이 출시한 제품 가운데 가장 합리적인 가격과 쉬운 사용법을 가진 제품이다.

특히 ‘다빈치 1.0 프로 3in1’ 제품은 전시회 특가 1,499,000원의 가격에 3D 프린터, 3D 스캐너, 무선 통신이 가능한 엄청난 가격대 성능비를 자랑하는 제품이며, 옵션으로 레이저 조각기(옵션)도 장착할 수 있어 무궁무진한 활용 가능성을 가진 매력적인 제품이다. 다만 아쉬운 점은 실제 출력되는 모습을 보지 못해서 출력물의 품질과 속도 등을 겪어보지 못했다는 것이다. 한편 XYZ프린팅 부스에서는 3D 펜으로 참가자가 직접 창작물을 만들어 볼 수 있는 체험 공간이 마련되어 수많은 관람객들이 참여할 수 있는 좋은 시도가 진행되는 등 적극적인 홍보활동을 하는 것으로 보였다.

37 hot 인사이드3d (50)

37 hot 인사이드3d (51)

파트너스랩은 이번 전시회에서 날카롭고 단단한 느낌의 금속 소재부터, 나뭇가지처럼 가벼운 느낌의 출력물 등의 다양한 소재의 출력물들을 통해서 높은 기술력을 눈과 손으로 느낄 수 있도록 해주었다. 특히 금속 소재의 출력물들은 실제 공장 등에서 당장 사용해도 될 것처럼 정교해보였고 또 튼튼해 보였다.

이 업체는 산업용 메탈 3D프린터 출력 서비스를 제공하는 업체로, 사옥 내 독일 EOS사의 산업용 메탈 3D프린터를 비롯해 플라스틱 소재 전용 3D프린터 P396과 메탈 3D프린터 M290을 보유하고 있으며, 전시 및 협업 공간 등을 갖추고 있는 것으로 알려져 있다. 실제 M290에 적용되는 금속 소재는 다양하지만 파트너스랩에서는 현재 알루미늄 소재만 다루고 있다고 한다.

37 hot 인사이드3d (53) 37 hot 인사이드3d (59)

플라스틱 필라멘트 대신 차별화 기술을 강조한 종이소재 풀컬러 프린터도 만나볼 수 있었다. 예스에듀는 종이를 겹겹이 쌓으면서 풀로 붙이고 칼로 잘라내는 과정을 통해 출력물이 생성되는 Mcor사의 3D 프린터 ‘Arke’를 전시했다. 플라스틱 대신 종이를 원료로 사용한다는 장점과, 실제로 종이에 인쇄한 것을 적층하기 때문에 기존의 3D프린터들이 한 층에 많은 색상을 나타낼 수 없는 반면 이 제품은 잉크를 뿌려서 색감을 표현하기 때문에 미세한 색상 표현이 가능해 기존의 3D프린터보다 훨씬 높은 품질을 보여주며, 그 결과 마치 후처리를 한 것과 같은 색감와 세밀함을 보여준다.

또한 플라스틱과 비교해 독성이 없고 환경 친화적이라는 장점이 있다. 다만 그만큼 비싼 기기의 가격(국내 업체 통해서 구매시 약 30,000,000원)과 일반적인 PLA나 ABS와 같은 플라스틱 필라멘트보다 종이 원료가 70~80% 저렴하지만 잉크, 종이, 접착제 등 필요한 재료가 많기에 전체적으로 소모되는 비용이 많다는 점등 아직 일반 소비자들이 쉽게 다가갈 수 없는 정도로 높은 경제적 장벽이 형성되어 있어 아쉽다.

37 hot 인사이드3d (68)
최근 3D 프린터 시장에서의 큰 이슈 중 하나는 바로 ‘중대형 3D 프린터’라고 할 수 있다. 개인용 3D 프린터 시장을 넘어, 건설용도 등의 산업용으로도 활용할 수 있는 시장이 분명히 존재하기 때문에, 얼마나 큰 출력물을 만들어낼 수 있는지도 중요해지고 있는 것이다. 이런 시장의 수요와 관심이 높아지고 있는 가운데, 국민대학교는 가로 1미터, 세로 1미터, 높이 5.3미터에 달하는 초대형 3D 프린터를 공개해 눈길을 끌었다. 총 6대의 중대형 3D 프린터를 전시했으며, 0.9mm 대형 노즐을 사용해 기존 공정 시간을 최대 1/4까지 단축하는 등 신제품에 적용된 신기술도 선보여 관심을 모았다.

현재 3D프린터로 제품을 생산하는데 큰 어려움 중 하나는 원료를 사출하는 ‘헤더’가 막히는 현상이다. 정해진 온도에서 사출하는 기존의 방식은 환경 변화에 취약해 원료가 굳어버리기 일쑤였다. 하지만 국민대학교에서 개발한 3D 프린터는 재료에 가장 적합한 용융점(녹는점)을 찾아 적용하는 ‘스마트 온도제어 시스템’을 도입했다. 최적의 온도에서 원료를 사출해서 제품의 표면 질감이 깔끔해지고 원하는 재질감을 표현할 수 있다는 게 장중식 국민대 교수의 설명이다.

37 hot 인사이드3d (71)

제1회 3D프린트 디자인쇼(3D Print Design Show)에서는 3D프린팅 기술로 제작된 금속 공예품, 가방, 안경, 가구, 장난감, 신발 등 다양한 제품을 만나볼 수 있었다. 이번 행사는 인사이드 3D 프린팅 서울대회에서 최초로 개최되는 행사로, 총 18명의 유명 디자이너가 참여했으며 3D 컨텐츠 업체인 디지털 핸즈와 킨텍스의 공동 주관으로 진행되었다. 3D 프린터가 단순한 취미생활을 넘어 일상 생활에 다양하게 활용될 수 있음을 보여주는 전시였고, 다양한 전시품을 사진 속에 담아보았다. 이번 전시는 3D프린터를 활용해서 독창적인 출력물을 많이 만나볼 수 있는 기회가 되었다.

37 hot 인사이드3d (76) 37 hot 인사이드3d (74)
신서정 / 풍경 소리에 단풍 붉어지고 구본영 / Untitled
37 hot 인사이드3d (75) 37 hot 인사이드3d (79)
노경주 / Geometric Variation 목걸이 이찬우 / Break Time2_pithetrooper

한국과 미국에 거점을 둔 스타트업인 ‘아울웍스(OWL WORKS)’가 개발한 3D프린터 MORPHEUS는 작년부터 꽤 이름이 알려지고 있는 3D 프린터 제품이다. 모피어스의 제품은 DLP(프로젝터를 광원으로 사용) 방식과 달리 UV LED를 여럿 장착해 면단위 경화를 하는 방식을 통해 왜곡없이 더 큰 출력물을 만들 수 있는 것으로 알려진 LIPS(Light Induced Planar Solidification) 방식을 사용하고 있다. 이 장비는 최대 33cmx18cmx20cm 크기의 출력물을 출력할 수 있고, SLA 방식에 비해 디테일하고 부드러운 출력물을 만들어낼 수 있어, 실제로 전시해놓은 출력물들은 의학/의료 업계에서도 눈 여겨 볼 수 있을 만큼 정교했다.

37 hot 인사이드3d (88)

사진에는 모두 담지 못했지만 이 외에도 다양한 3D 프린터 업체들이 이번 전시회에 참가했고, 그만큼 또 많은 관람객들이 방문했다. 기존 3D 프린터들이 기본적으로 2백만 원 정도의 가격대에서 형성되었던 반면, 최근에는 백만 원도 되지 않는 3D 프린터 장비들이 많이 있고, 그 품질이나 속도도 초기에 비해 정말 많은 발전을 이루어 낸 것으로 보인다. IT 이슈가 빠르게 옮겨가고 있는 만큼, 또 그만큼 기술의 발전도 빠른 속도로 이루어지고 있고 3D 프린팅 활용 분야도 점차 넓어지고 있다. 미래학자들은 앞으로 3D 프린터가 생산비용을 낮춰 전 세계 제조업 지도를 완전히 바꿔 놓을 것으로 예견한다. 시장조사기관 홀러스어소시에츠는 3D프린터 시장은 해마다 두 자릿수 성장률을 유지해 2016년 31억 달러(3조 4500억 원), 2020년 52억 달러(5조8000억 원)까지 커질 것으로 전망했다. 세계 시장에서의 국내 업체가 선전하기를 바라는 마음과 함께, 3D 프린팅 시장이 더 뜨겁고 더 넓게 활성화되기를 바라면서 관람기를 마친다.

 

 

 

 

[37호]RoboUniverse & VR Summit 2016

37 robouniverse (1)

37 robouniverse (1)

 

RoboUniverse & VR Summit 2016

드론을 비롯한 로봇 관련 기술은 미래 성장 동력으로 각광받고 있다. 드론 시장의 경우 현재 40억 달러를 달성했으며, 2024년에는 147억 달러 규모로 성장이 기대되는 등 전 세계적으로 급격히 성장하고 있는 상황. 현재 한국은 세계 7위 수준의 드론 기술력을 가지고 있다. 이에 정부는 시장 확대와 기술력 확충을 위해 관련 부서 신설과 드론 시범사업 공역 지정, 재정 투입, 정책 시행 등 적극적인 움직임을 보이고 있다.

글 | 이용동 책임기자 bluelyd@ntrex.co.kr

 

최근 IT 업계의 최대 화두는 단연 VR(가상현실)이다. 구글, 삼성 등 세계적인 IT 기업들이 경쟁적으로 VR 헤드셋을 선보이는 것은 물론, 다양한 분야의 기업들이 AR 및 VR 서비스 타이틀을 걸고 홍보에 나섰다. 하지만 여전히 국내에서는 관련 최신 기기와 컨텐츠를 직접 체험하고, 비교해보기란 쉽지 않은 것이 사실이다. AR, VR 시장에서 글로벌 기업들이 한 발 앞서나가고 있는 현실 속에서 국내 기업들의 정보 부족으로 글로벌 트렌드에 대한 대응에 어려움을 겪고 있는 것이다.

이런 가운데 킨텍스가 관련 분야 국제 컨벤션 행사를 진행, 드론과 로봇 분야의 미래를 전망할 수 있는 ‘RoboUniverse’와, VR, AR 기기는 물론 관련 산업의 성장을 견인할 컨텐츠, 솔루션 등을 한 자리에서 만나볼 수 있는 ‘VR Summit’이 일산 킨텍스 7홀에서 2016년 6월 22일부터 24일까지 3일간 진행됐다. 두 행사가 동시에 개최됨으로써 현재 로봇 및 VR, AR의 핫 이슈를 총망라하는 전시회로의 시도가 돋보였다. 킨텍스와 Rising Media(미)가 공동 주최한 이번 행사에는 총 300개 부스에 100개 기업이 참여해 서비스 분야별로 적용된 최신 로봇, 드론 기술과 서비스 중심의 실제 사례를 소개하며 관람객들의 이목을 집중시켰다.

37 robouniverse (2)

 

37 robouniverse (3)

VR Summit 참가업체인 유니티 코리아는 오큘러스, HTC 바이브, 모바일 콘텐츠 등 VR 콘텐츠를 직접 체험할 수 있도록 하는 한편 VR 콘텐츠 개발을 위한 업체 전문상담 부스도 마련했다. 이번 전시회에서는 HTC의 VR 헤드셋 바이브(VIVE)의 기술 상담 부스가 유니티 부스 내 마련돼 국내 최초로 바이브 기술상담이 이뤄졌고, ‘VR 미션을 완료하면 T셔츠가 내손에!’라는 사은품 증정 이벤트를 겸하는 등 수많은 인파들이 몰려 VR에 대한 뜨거운 열기를 느낄 수 있었다. 유니티 마케팅팀은 “현재 유니티 고객들은 무료로 테스트 버전을 이용할 수 있고, 적은 금액으로 유니티 프로 버전의 사용도 가능하다”며 “연매출 1억불 이상 기업에는 프로+엔터프라이즈 버전도 지원하고 있다”고 설명했다.

37 robouniverse (4)

가상현실(VR) 및 증강현실(AR) 전문기업 에프엑스기어는 이번 전시회에서 VR 헤드셋인 ‘눈 VR(NOON VR)’과 증강 현실 기술을 기반으로 한 3D 가상 피팅 시스템 ‘FX미러(FXMirror)’를 체험할 수 있는 기회를 마련해 눈길을 끌었다. 눈 VR은 다양한 스마트폰 기종과 호환되는 스마트폰 전용 VR 헤드셋으로, 눈 VR 전용 애플리케이션의 VR 렌더링 엔진을 통해 생동감 넘치는 영상을 구현하는 제품이다. FX 미러는 동작 인식 카메라를 통해 사용자의 신체 사이즈를 자동 측정하고, 의상 피팅 모습을 실시간 3D 이미지로 보여주는 가상 피팅 서비스로, 지난해부터 서울 신사동, 코엑스의 의류 매장 일부에 설치돼 운영되고 있으며, 현대백화점 킨텍스점에는 가상으로 옷을 입어보고 구입까지 할 수 있는 체험존도 마련되어 있다. 한편, 에프엑스기어는 부스를 방문하면 눈 VR을 할인된 가격(6만원)에 구매할 수 있는 이벤트도 진행했다. FX미러 시연 영상은 https://youtu.be/NHAf8OiRPB0 에서 확인할 수 있다.

37 robouniverse (5) 37 robouniverse (6)

전시회장에서 개인적으로 가장 눈길을 끌고, 호기심을 자극했던 부스는 바로 ‘VRBora’의 부스였다. 기자가 부스를 처음 방문했을 때는 체험존 운영을 위한 준비 시간이라서 ‘15분 후 와달라’는 안내와 함께 바로 구경할 수 없었고, 다른 부스를 돌고 나서 10분 쯤 후에 다시 들어왔을 때는 이미 많은 사람들로 인해 대기열이 만들어져 있었다.

디바이스마트 매거진 독자의 연령 층이 주로 중, 고등학생부터 대학생, 직장인까지 다양하기 때문에 자세한 후기와 묘사는 어렵지만 생각한 것 보다는 화질이 나쁘지 않았고, 반면 기대한 것 보다는 시야의 한계가 꽤 있는 등 아쉽기도 했다. 국내 법 규정상 성인 VR 콘텐츠를 제작하는데 있어서 제약도 많고, 그로 인해 뛰어난 현실감의 컨텐츠의 제작도 쉽지 않을 것으로 생각되지만, 아직은 걸음마 단계라고 생각할 수 있는 ‘VR’이 미래에 호황을 누리는 데 기여할 것으로 보이는 성인 VR 콘텐츠의 미래를 살짝 엿볼 수 있는 기회였다.

37 robouniverse (7) 37 robouniverse (8)

100% 모듈화된 시스템을 통해 국내에서 유일하게 로봇 완제품을 자체 개발 및 생산 유통하고 있는 ㈜바이로봇은 주파수 혼선 없이 한꺼번에 여러 대가 비행할 수 있는 드론과 멀티충전 및 레이저 배틀 게임이 가능한 드론, 신제품 페트론 등을 선보여 이목을 집중시켰다. 한 공간 안에서 다수의 드론이 한꺼번에 비행하는 것을 직접 체험할 수 있는 자리와, 바깥쪽에는 실제의 드론 대신 모니터 화면을 통해서 드론 컨트롤을 연습해볼 수 있는 체험 공간을 마련했다.

또한 최근 선보인 페트론은 바이로봇이 드론파이터에 이어 두 번째 출시한 토이드론이다. 변신, 자동 호버링(제자리 비행), 음성인식, 비행경로 설정 등 다양한 기능을 추가해 많은 드론 유저들의 관심을 끌었다. 기체가 거꾸로 뒤집혔을 때 한쪽 동력을 독립 제어해 기체를 원상 복구하는 ‘터틀 턴’ 기능과 스마트폰 애플리케이션(앱)을 조종 기본 장치로 채택, 모션 제어로 기체를 조종할 수 있으며, 주요 부위를 모듈화 해 미니 RC카, 레이싱 드론으로 변신하는 등 다양한 신기술과 매력적인 장점을 갖췄다고 업체는 설명했다.

37 robouniverse (10)

열처리설비 엔지니어링 기업 와이에스썸택은 이번 로보유니버스 2016에서 링스 로봇 플렛폼과 링스 솔루션을 전시했다. 링스 로봇은 랜드마크 없이 자유롭게 이동하는 자율주행로봇이다. 기존 모바일 로봇은 바닥이나, 천장, 혹은 레이저 가이드 등 이동할 지점을 표시하는 랜드마크가 필요했으나, 링스는 다른 부착물들이나 주변 기기의 인도 없이 경로상의 장애물을 자동으로 인식해 회피할 수 있다. 실시간 LIDAR 스캔을 통한 위치 파악이 가능하고 디지털 지도와의 연동을 통한 주행제어도 가능하다.

3시간 30분 충전으로 16시간 작동이 가능하며 최대 60㎏의 물체를 싣고 이송할 수 있다. 모바일 위에 장치를 올려 시스템을 구성할 수 있어 적용 분야가 굉장히 다양하다. YSTT 관계자에 따르면 링스는 하드웨어 기능별로 모듈화 설계가 적용돼 다양한 분야의 응용개발이 가능하며 수리 역시 모듈 교체를 통해 간편하게 마칠 수 있다고 한다. 특히 전동컨베어 적재 및 이송장치인 ‘링스 컨베어(Lynx Conveyor)’ 등은 공장 자동화에 큰 역할을 할 수 있을 것으로 보여 기자의 눈길을 끌었다.

시연 동영상은 https://youtu.be/6q0qjoZtUvM 에서 확인 가능하다.

행사 기간 3일 동안 로봇, 드론, ICT, 가상 및 증강 현실 분야의 관계자를 비롯해 국내외 투자자, 주한 외국인 경제단체 등 업게 관련 국내외 바이어, 국방부, 산업통상자원부, 농림축산식품부 등 정부중앙부처 유관 부서 담당자 등 약 1만 2000명이 다녀간 것으로 조사됐다. 2016년 6월 한국 일정을 마친 RoboUniverse와 VR Summit은 앞으로 독일, 일본, 미국, 싱가폴 등 국제 순회 일정을 마치고 2017년 6월 28일 ~ 6월 30일, 고양 킨텍스에서 또다시 개최될 예정이다.

지난 로보유니버스 2015가 온통 ‘드론’이었다면, 이번 로보유니버스 2016은 온통 ‘VR’이었다고 해도 과언이 아니다. 작년의 드론이 올해도 물론 뜨겁지만, 그보다 더 뜨거운 VR이 나타나면서 조금은 미지근해 진 느낌이지만, 드론과 관련된 기술이 발전함으로 인해서 드론을 활용할 수 있는 분야는 점점 더 넓어지고 그 수준 역시 높아졌음을 알 수 있는 자리였다. 또한 VR이라는 기술이 점점 더 다양한 소재로 많은 사람들의 호기심을 채워주고 즐거움을 줄 수 있을지에 대한 기대감도 가질 수 있는 전시회였다.