February 20, 2018

디바이스마트 미디어:

[30호] 너무 쉬운 아두이노 DIY ② – 카멜레온 반지 + 빨노파 게임기 만들기

30 아두이노 카멜레온

30 아두이노 카멜레온

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

 

  여러분, 안녕하세요. 앞으로 1년에 걸쳐(6번 정도) [너무 쉬운 아두이노 DIY(Do It Yourself)] 강의를 진행할 강사 신상석입니다.
제 소개 간단히 드립니다.
· 서울대 제어계측공학과(학사) →, KAIST 전산과(석사) → KAIST 전산과(박사 수료)
· ETRI 책임연구원 → 해동정보통신 연구소장 → 욱성전자 연구소장 → (현재) 제이씨넷 연구소장, 상명대학교 컴퓨터시스템공학과 겸임교수, 임베디드홀릭 카페(http://cafe.naver.com/lazydigital) 부매니저, 아두이노 / AVR 강사
· 자격증 : 전자계산기 기술사
· 취미 : 영화보기, 바둑두기, 책읽기, 글쓰기(?), 여행하기, 이야기하기
· 연락처 : ssshin@jcnet.co.kr, 있는그대(cafe.naver.com/lazydigital)이 강의는 아두이노를 가지고 간단하게 생활에 필요한 용품을 만들어 보는 강의입니다. 뚝딱뚝딱 뭔가 자신만의 DIY 용품을 만들어 보는 쏠쏠한 재미가 있는 강의라고나 할까요? 이미 주변에 아두이노와 관련한 많은 책이 출간되었고 카페나 블로그를 통하여 강의가 진행된 경우도 꽤나 많이 있는데도 불구하고, 이 지면을 통하여 강의를 개설한 이유는 다음과 같습니다. 

1. 아두이노의 초보자들을 위한 쉽고 재미있는 강의가 거의 없는 것 같아, 가능하면 초등학생(?)까지도 함께 해 볼 수 있는 그런 강의를 한 번 해보고 싶어서…
2. 아두이노를 가지고 뭔가 조금은 다른, 자신만의 창의적인(?) DIY를 할 수 있는 자리를 만들어주고 싶어서…
3. 디바이스마트매거진은 임베디드와 관련된 독자들이 많고, 발행 부수도 많아, 저와 제가 속한 회사(제이씨넷) 그리고 임베디드홀릭 카페의 홍보에 도움이 될 것 같아서…

아두이노 계획표현재 구상하고 있는 회차별 내용을 간략하게 정리해 보면 다음과 같습니다. (변경될 수 있습니다.) 앞으로 즐겁고 알찬 강의가 될 수 있도록 최선을 다할 것을 약속 드리며, 이 강의를 보는 독자들도 메일이나 카페를  통하여 Q&A(Question & Answer)나 피드백을 주셔서, 함께 정감을 나눌 수 있는 계기가 되기를 기대해 봅니다.

   여러분, 안녕하세요. 신상석 강사입니다. 이번 회에서는 컬러 LED를 가지고 만들 수 있는 DIY 작품을 2가지를 만들어 보겠습니다. 하나는 여러가지 색깔로 변하는 ‘카멜레온 반지’이고, 또 하나는 가위 바위 보 게임과 비슷한 ‘빨노파 게임기’입니다. 간단하고 재미있는 DIY이므로, 이를 약간씩 응용하여 최종적으로는 각자 자신만의 개성있는 DIY 작품을 만들어 보면 좋겠습니다.

 

 ■ 카멜레온 반지                                                                                            

   카멜레온(chameleon)을 아시나요? ‘땅 위의 사자’라는 뜻을 가진 그리이스어에서 유래한 카멜레온은 주변의 색에 따라 아주 비슷한 보호색으로 변하는 능력을 가진 재주꾼입니다. 자신의 감정을 표현하기 위하여 자신이 원하는 색깔로 변할 수도 있다고 하니, 세상에는 인간 말고도 오묘한 동물이 정말 많은 것 같네요.

30 카멜레온반지 02

 그런데 “카멜레온 반지”가 뭐냐구요? 아마도 다들 모르실텐데요. 왜냐하면 제가 얼마 전에 작명한 이름이어서요. 카멜레온 반지는 카멜레온처럼 반지의 색깔이 자유자재로 변하는 반지를 말합니다. 가만히 있으면 저절로 색깔이 변하는 반지라고나 할까요?.

 

아래 그림은 12개의 달을 상징하는 보석으로 탄생석입니다. 에머랄드, 다이아몬드, 루비… 참 아름답지요. 무엇보다도 알록달록한 색깔이 압권입니다.

 

30 카멜레온반지 03

 

   그래서 오늘은 이렇게 멋진 보석이 콕 박혀있는 반지를 상상하며 12개의 보석으로 변신이 가능한 카멜레온 반지를 만들어볼까 합니다. 반지의 링은 준비가 되었다고 가정하고 보석 부분만 카멜레온처럼 색깔이 변하도록 만들면 될 것 같네요. 그런데, 어떻게 만드냐구요? 예. 컬러 LED로 만들지요.

 ■ 컬러 LED                                                                                              

   컬러 LED는 빨강, 녹색, 파랑 LED 3개를 하나로 모아 1개의 캡슐로 씌운 LED입니다. 그러니까 3개의 LED를 바짝 붙여서 한 개의 전구 속에 넣은 것이지요. 요렇게요.

30 카멜레온반지 04

다리가 가장 긴 것이 공통 애노드(Anode, +), 또는 공통 캐소드(Cathode, -)로 공통 애노드 타입의 경우는 (+) 핀을 High(VCC, 5V)에 연결하고, R, G, B 핀에는 Low(GND, 0V) 값을 연결하는 경우에만 불이 들어오고, 공통 캐소드 타입의 경우는 반대로 (-) 핀을 Low(GND, 0V)에 연결하고, R, G, B 핀에는 High(VCC, 5V) 값을 연결하는 경우만 불이 들어옵니다. (물론, 지난번 설명처럼 직렬 저항은 연결한다고 가정하였습니다.) 여기서는 아래와 같이 공통 캐소드 타입의 컬러 LED를 사용하여 제작해 보는 것으로 하겠습니다.

30 카멜레온반지 05

 

(53N RGB 262C-9001, 참조 : 디바이스마트)

 

  어 그런데, LED가 3개면 다리가 6개라야 되는 것 아닌가요? 다리가 4개 밖에 없는데…

  예, 원래는 6개지만 (-)에 해당되는 다리는 공통이니까(공통 캐소드), 빨강, 녹색, 파랑, 공통 (-), 이렇게 다리를 4개로 줄일 수 있겠습니다. 지난번 3색 신호등을 만들 때 각 LED의 (-)에 해당되는 것은 모두 GND로 함께 연결한 것을 생각해 보면 쉽게 이해가 갈 겁니다..

  그렇다면, 이 컬러 LED는 빨강, 녹색, 파랑으로 색깔이 고정되어 있는데, 어떻게 카멜레온처럼 여러가지 오묘한 색깔을 나타낼 수 있을까요?

  이 질문에 대한 해답은 바로 빛의 혼합에 있습니다.

  아래 그림은 누구나 초등학교 시절에 한 번은 보았을 것입니다.

30 카멜레온반지 06

 

  왼쪽은 빛의 삼원색(빨강(Red), 녹색(Green), 파랑(Blue), RGB)이고, 오른쪽은 색의 삼원색(자홍(Magenta), 청록(Cyan), 노랑(Yellow))입니다. 우리는 LED를 가지고 색깔을 만들 예정이므로 빛의 3원색의 경우만 보면, 3개의 빛이 합해지는 부분에 다른 색이 나타나는 것을 볼 수 있습니다.

 

   ■ 빨강 + 녹색 = 노랑

   ■ 녹색 + 파랑 = 청록

   ■ 파랑 + 빨강 = 자홍

   ■ 빨강 + 녹색 + 파랑 = 흰색

 

  오. 그렇네요. 이렇게 하니까 4개의 색이 더 만들어졌습니다. 하지만, 탄생석과 같이 알록달록한 여러가지 색은 아직도 만들어지지 않았는데 이것은 어떻게 만들 수 있을까요?

  이것은 광량(빛의 양)에 해답이 있습니다.

  즉, 빨강과 녹색, 파랑을 각각 100%씩 섞으면 흰색이 나오지만, 예를 들어 빨강 100% + 녹색 75% + 파랑 75% 로 빛을 섞으면 핑크(Pink)색이 나오는 원리입니다.

  결국 관건은 우리가 3가지 LED의 광량을 강하게 했다 약하게 했다 조절할 수 있느냐 하는 것인데 결론은 “할 수 있다” 입니다.

  아래 그림을 보시지요.

30 카멜레온반지 07

 

  원래 디지털 값은 High(1, 5V, 100%), Low(0, GND, 0%)의 2가지 값밖에 존재하지 않지만, 위 그림과 같이 어떤 핀의 값을 High ▶ Low ▶ High ▶ Low … 형태로 상태를 변환시키게 되면, 출력 전압의 평균(%)은 빨강색 점선과 같은 값을 갖게 됩니다. 예를 들어 High를 유지하는 시간과 Low를 유지하는 시간의 비율이 3:7이라면 평균값은 High값의 30%가 된다고 말할 수 있는 것이지요. 이렇게 주기적으로 High ▶ Low를 반복하는 신호를 펄스(Pulse)라고 하는데, 이 펄스(Pulse)의 폭(Width)을 조절(Modulation)하여 평균값을 조절하는 방법을 PWM(Pulse Width Modulation)이라고 합니다. 즉, PWM을 이용하면 디지털 출력인 High(1)와 Low(0)을 가지고 0.3(30%), 0.85(85%)와 같은 아날로그 값을 만들 수 있게 되는 것입니다. 핑크색을 컬러 LED로 표현해 본다면 아래와 같이 되겠네요.

    ■ 핑크 = 빨강 PWM 100% + 녹색 PWM 75% + 파랑 PWM 75%

 

 

 ■ PWM 출력을 만드는 방법                                                                   

  이제 PWM 출력을 만드는 방법을 알아봅시다. 아두이노에서는 다음과 같은 analogWirte( ) 라이브러리 함수를 제공하는데 이것을 이용하면 PWM 0% ~ PWM 100% 까지의 펄스를 아주 쉽게 만들 수 있습니다. 단, analogWrite( ) 함수를 사용할 수 있는 핀은 핀 번호 앞에 틸드(~) 표시가 있는 핀으로 한정되어 있다는 점은 주의하셔야 합니다.

 

    ■ analogWrite(pin, value)

    ■ pin : 입출력핀 번호에 해당되는 숫자, 틸드(~) 표시가 되어 있는 핀만 가능

    ■ value : 0~255까지의 값으로 0이면 PWM 0%, 255이면 PWM 100%를 의미함

 

  예를 들어 “analogWrite(5, 128)”으로 프로그램 한다면, 핀 5번의 출력을 PWM 50%(128/256 = 0.5 = 50%)로 출력한다는 의미가 되겠습니다.

  왜 value 값으로 알기 쉽게 0~100을 사용하지 않고 0~255를 사용하게 되었을까요? 사실 그렇게 라이브러리를 만들 수도 있겠지만 디지털 세계는 2진법으로 이루어져 있어, 1, 2, 4, 8, 16, 32, 64, 128, 256 이렇게 만들어지는 수를 더욱 좋아한답니다. 아두이노 내부적으로 본다면 Atmega328, 타이머, ADC(Analog Digital Converter) 등 좀 더 자세하게 알아야 할 것이 많지만 우리는 그냥 이 정도만 알고 넘어가는 것으로 하겠습니다.

  이제 색의 배합을 %로 할 수 있다는 것을 배웠으므로, 간단히 한 번 연습해 보지요.

  노랑과 흰색, 핑크를 R, G, B의 value 값으로 표현해 보세요. 아래와 같이 나오면 정답!.

 

   ▶ 노랑 : R(255), G(255), B(0)

   ▶ 흰색 : R(255), G(255), B(255)

   ▶ 핑크 : R(255), G(192), B(192) // 192/256 = 0.75 = 75%

 

 ■ 컬러 LED 연결                                                                    

 

  자, 그럼 이제 기본 원리는 모두 이해했으니, 프로그램을 하기 전에 컬러 LED를 아두이노와 연결해 보겠습니다. 컬러 LED는 시중에서 구할 수 있는 것 아무거나 구하셔도 됩니다.  R, G, B 및 (-) 핀을 아래와 같이 연결하면 되겠네요.

 

    ■ R (가장 왼쪽) ←→ 330오옴 저항 ←→ 아두이노 6번핀

    ■ (-) (왼쪽에서 2번째, 길이가 가장 긴 다리) ←→ 아두이노 GND

    ■ G (오른쪽에서 2번째) ←→ 330오옴 저항 ←→ 아두이노 5번핀

    ■ B (가장 오른쪽) ←→ 330오옴 저항 ←→ 아두이노 3번핀

 

  우리가 연결한 아두이노 6번, 5번, 3번 핀의 옆쪽에 실크로 쓰여진 숫자에는 틸드(~) 표시가 되어 있는데, 이것은 아두이노 핀 중에서 analog_write( ) 함수로 PWM 신호를 만들어 낼 수 있는 핀이라는 것은 앞에서 설명하였습니다. 우리는 3개 핀에 모두 PWM을 사용하여야 하므로 반드시 틸드(~) 표시가 연결된 핀을 R, G, B에 연결해야 합니다. 아래의 그림처럼 연결이 되겠네요.

 30 카멜레온반지 08

 

 

 ■ 연습 프로그램 작성                                                                   

  이제 연결은 끝났으니 프로그램을 작성하여 실행할 차례입니다.

  최종 목표는 카멜레온 반지이지만 기왕 회로를 꾸몄으니 지난번 배운 것도 복습할 겸 7가지 색(빨강, 녹색, 파랑, 노랑, 청록, 자홍, 흰색)을 먼저 만들어 보도록 하겠습니다.

  아래는 기능 규격입니다.

 

[7가지 색 만들기 기능 규격]

  1. LED가 ON되는 순서는 빨강 ▶ 녹색 ▶ 파랑 ▶ 노랑 ▶ 청록 ▶ 자홍 ▶ 흰색 ▶ 빨강 ▶ … 으로 무한 반복됨

  2. LED는 어떤 한 순간 한가지 색깔만 표시함

  3. 표시된 색깔은 1초 동안 켜진 상태를 유지함

 

  위의 7가지 색 중 노랑, 청록, 자홍은 동시에 2개의 LED를 ON 하면 얻을 수 있고 흰색은 3개의 LED를 동시에 ON하면 얻을 수 있으므로 analogWrite( ) 함수를 사용하지 않고 digitalWrite( ) 함수만 사용하여도 충분히 구현이 가능하겠습니다. 스스로 혼자 구현해 보신 후 10분 후에 함께 해보도록 하지요. (10분간 실시!)

(1분), (2분), ……, (10분)

모두 잘 되셨으리라 생각합니다. 함께 해 보겠습니다.

#define RED_LED 6

#define GREEN_LED 5

#define BLUE_LED 3

void setup()

{

 pinMode(RED_LED, OUTPUT);

 pinMode(GREEN_LED, OUTPUT);

 pinMode(BLUE_LED, OUTPUT);

}

void loop()

{

 digitalWrite(RED_LED, HIGH);     digitalWrite(GREEN_LED, LOW);   digitalWrite(BLUE_LED, LOW); // R=ON, G=OFF, B=OFF –> 빨강(Red)

 delay(1000);

 digitalWrite(RED_LED, LOW);     digitalWrite(GREEN_LED, HIGH);   digitalWrite(BLUE_LED, LOW); // R=OFF, G=ON, B=OFF –> 녹색(Green)

 delay(1000);

 digitalWrite(RED_LED, LOW);     digitalWrite(GREEN_LED, LOW);   digitalWrite(BLUE_LED, HIGH); // R=OFF, G=OFF, B=ON –> 파랑(Blue)

 delay(1000);

 digitalWrite(RED_LED, HIGH);     digitalWrite(GREEN_LED, HIGH);   digitalWrite(BLUE_LED, LOW); // R=ON, G=ON, B=OFF –> 노랑(Yellow)

 delay(1000);

digitalWrite(RED_LED, LOW);     digitalWrite(GREEN_LED, HIGH);   digitalWrite(BLUE_LED, HIGH); // R=OFF, G=ON, B=ON –> 청록(Cyan)

 delay(1000);

digitalWrite(RED_LED, HIGH);     digitalWrite(GREEN_LED, LOW);   digitalWrite(BLUE_LED, HIGH); // R=ON, G=OFF, B=ON –> 다홍(Magenta)

 delay(1000);

digitalWrite(RED_LED, HIGH);   digitalWrite(GREEN_LED, HIGH);    digitalWrite(BLUE_LED, HIGH); // R=ON, G=ON, B=ON –> 흰색(White)

 delay(1000);

}

약간 긴 듯하지만 알고리즘은 지난번과 거의 비슷하고 간단합니다.

자, 컴파일 ▶ 업로드 ▶ 실행해 봅시다. 그리고 결과는 ?

동영상에서는 LED 빛이 너무 밝아서 색깔 구별이 또렷하지 않지만, 실제 눈으로 보면 아주 예쁜 7가지 색깔이 나옵니다. 이 정도면 만족스럽네요.

 ■ 컬러 및 컬러값 선택                                                                   

  연습으로 몸을 풀었으니, 이제 본격적으로 카멜레온 반지를 D.I.Y.하러 가겠습니다. 우리가 할 일은 12개 탄생석의 대표색을 찾아서 이것이 R, G, B의 어떤 값(어떤 세기, %)으로 표현되는지를 알아낸 다음 이것을 analog_write( ) 함수를 이용하여 구현하면 될 것 같습니다.

  자, 이제 탄생석의 색깔에 알맞은 R, G, B의 값을 찾아내면 되겠는데… 2가지 방법이 있습니다.

1. 색상표를 이용하는 방법

  아래와 같이 색상표가 있으므로 이것을 보고 탄생석과 가장 비슷한 색깔을 찾아 그 코드값을 추출하는 방법입니다. 6개의 숫자는 16진법으로 나타낸 코드 값으로 앞의 2개는 R(Red), 중간 2개는 G(Green), 마지막 2개는 B(Blue)에 해당되는 값을 나타냅니다. (혹, 2진법, 10진법, 16진법의 표기법이나 변환이 익숙하지 않은 분은 이 부분에 대하여 따로 각자 공부하신 후 다시 오시기 바랍니다.) 가장 왼쪽 줄의 위에서 6번째 색상이 노랑인데, 이 값을 보면 FFFF00 으로 표기되어 있으니까 [R(FF), G(FF) B(00)] ▶ [R(255), G(255), B(0)]가 되어 노랑색 PWM 표기값과 동일하다는 것을 확인할 수 있습니다.

 

30 카멜레온반지 10

2. 컬러 추출 응용프로그램을 이용하는 방법

  PC 상에서 특정 컬러에 대한 코드값을 추출해 내는 응용프로그램을 실행시켜서 원하는 색상을 클릭하여 코드값을 추출하는 방법입니다.

 

30 카멜레온반지 11

   탄생석은 코드표로 똑 떨어지는 색상이 아니고 우리가 색상을 직접 추출해보는 것도 재미있을 것 같으니까 우리는 두번째 방법을 사용하도록 하지요. 여러가지 프로그램이 있겠지만 여기서는 그냥 간단하게 실행시킬 수 있는 컬러캅(ColorCop)이라는 무료 프로그램을 사용하는 것으로 하겠습니다. (인터넷에서 찾아 다운로드받아 실행하면 됩니다.) 아래와 같은 화면이 나오는데요. 중간 왼쪽에 있는 스포이드처럼 생긴 아이콘을 드래그(클릭한 후 끌기)하여 원하는 컬러 위치에 가져다 놓으면 10진수로 표시된 R, G, B 값이 나타나게 됩니다. 참 쉽네요.

  자, 그러면 지금부터는 탄생석의 대표색에 대한 코드값를 추출해 보는 시간입니다. 색깔도 감상해 가면서 즐거운 마음으로 표를 작성해 보면 더욱 좋겠네요.

  코드 추출은 혼자서도 가능하겠지요? 12분 드립니다.

 

1분, 2분, …, 11분, 12분

 

  제가 직접 찍어서 추출한 값은 아래와 같습니다. (각자 다를 수 있습니다.)

한글 이름 영어 이름 R G B
1 가넷 garnet 254 26 27
2 자수정 amethyst 179 117 180
3 아쿠아마린 aquamarine 211 146 251
4 다이아몬드 diamond 254 155 255
5 에메랄드 emerald 14 219 133
6 진주 pearl 246 241 237
7 루비 ruby 206 3 163
8 페리도트 peridot 167 212 31
9 사파이어 sapphaire 26 27 216
10 오팔 opal 203 200 149
11 토파즈 topaz 254 198 40
12 터키석 turquoise 58 197 189

참, 가넷이라는 보석은 얼마전 종료된 ‘지니어스’라는 TV 프로에 이름이 소개되었던 짙은 자주색계통의 보석이지요. 꽤나 재미있었던 시리즈물이었는데 여러분들도 기회가 되면 꼭 한 번 시청해 보시기 바랍니다.

 

 

 ■ 카멜레온 반지 프로그램 작성                                                                          

 

  모든 준비가 끝났으니 이제 목표 프로그램을 작성하여 실행할 차례입니다. 우리가 원하는 기능 규격을 작성해 보지요.

 

[12가지 탄생석의 대표색을 디스플레이하는 카멜레온 반지 기능 규격]

  1. 컬러 LED로 12개 탄생석의 대표색 12개를 차례대로 ON하며, 무한 반복된다.

  2. 한 가지의 색은 1초 동안 켜진 상태를 유지한다.

 

  지난번에는 digitalWrite( ) 함수를 사용했지만 이번에는 analogWrite( )를 사용하고 작성된 표를 참조하여 R, G, B에 해당하는 PWM value값을 정해주는 것만 조금 다를 것 같습니다.

  같이 한 번 작성해 보시지요.

#define RED_LED 6

#define GREEN_LED 5

#define BLUE_LED 3

void setup()

{

 pinMode(RED_LED, OUTPUT);

 pinMode(GREEN_LED, OUTPUT);

 pinMode(BLUE_LED, OUTPUT);

}

void loop()

{

 analogWrite(RED_LED, 254);  analogWrite(GREEN_LED, 26);  analogWrite(BLUE_LED, 27);  // 가넷

delay(1000);

 analogWrite(RED_LED, 179);  analogWrite(GREEN_LED, 117);  analogWrite(BLUE_LED, 180);  // 자수정

delay(1000);

 analogWrite(RED_LED, 211);  analogWrite(GREEN_LED, 246);  analogWrite(BLUE_LED, 251);  // 아쿠아마린

delay(1000);

 analogWrite(RED_LED, 254);  analogWrite(GREEN_LED, 255);  analogWrite(BLUE_LED, 255);  // 다이아몬드

delay(1000);

 analogWrite(RED_LED, 14);  analogWrite(GREEN_LED, 219);  analogWrite(BLUE_LED, 133);  // 에메랄드

delay(1000);

 analogWrite(RED_LED, 246);  analogWrite(GREEN_LED, 241);  analogWrite(BLUE_LED, 237);  // 진주

delay(1000);

 analogWrite(RED_LED, 206);  analogWrite(GREEN_LED, 3);  analogWrite(BLUE_LED, 163);  // 루비

delay(1000);

 analogWrite(RED_LED, 167);  analogWrite(GREEN_LED, 212);  analogWrite(BLUE_LED, 31);  // 페리도트

delay(1000);

 analogWrite(RED_LED, 26);  analogWrite(GREEN_LED, 27);  analogWrite(BLUE_LED, 216);  // 사파이어

delay(1000);

 analogWrite(RED_LED, 203);  analogWrite(GREEN_LED, 200);  analogWrite(BLUE_LED, 149);  // 오팔

delay(1000);

 analogWrite(RED_LED, 254);  analogWrite(GREEN_LED, 198);  analogWrite(BLUE_LED, 40);  // 토파즈

delay(1000);

 analogWrite(RED_LED, 58);  analogWrite(GREEN_LED, 197);  analogWrite(BLUE_LED, 189);  // 터키석

delay(1000);

}

  음. 조금 많이 길긴 하지만…

  일단, 컴파일 ▶ 업로드 ▶ 실행해 봅시다. 결과는?

  카메라에 찍힌 것은 색깔 구별이 또렷하지는 않은데, 실제로 보면 아름다운 색깔이 구분되어 나타납니다. 보석에 비할 수는 없지만 그래도 아주 색상이 화려하고 아름답습니다.

  그런데 프로그램 짜면서 조금 마음에 걸리는 것이 있습니다.

  무엇이냐구요? 비슷한 내용이 12번이나 반복되고 코드 값을 일일이 입력해 주는 것이 조금 불편한 듯 하네요. 그래서, 12번 반복하는 것은 for 문을 이용하여 수정하고, 코드 값은 미리 어레이에 지정해 놓았다가 사용하도록 하여 위 코드를 조금 단순화시켜 보겠습니다. 아래와 같이 될 것 같습니다.

#define RED_LED 6

#define GREEN_LED 5

#define BLUE_LED 3

void setup()

{

 pinMode(RED_LED, OUTPUT);

 pinMode(GREEN_LED, OUTPUT);

 pinMode(BLUE_LED, OUTPUT);

}

void loop()

{

 analogWrite(RED_LED, 254);  analogWrite(GREEN_LED, 26);  analogWrite(BLUE_LED, 27);  // 가넷

delay(1000);

 analogWrite(RED_LED, 179);  analogWrite(GREEN_LED, 117);  analogWrite(BLUE_LED, 180);  // 자수정

delay(1000);

 analogWrite(RED_LED, 211);  analogWrite(GREEN_LED, 246);  analogWrite(BLUE_LED, 251);  // 아쿠아마린

delay(1000);

 analogWrite(RED_LED, 254);  analogWrite(GREEN_LED, 255);  analogWrite(BLUE_LED, 255);  // 다이아몬드

delay(1000);

 analogWrite(RED_LED, 14);  analogWrite(GREEN_LED, 219);  analogWrite(BLUE_LED, 133);  // 에메랄드

delay(1000);

 analogWrite(RED_LED, 246);  analogWrite(GREEN_LED, 241);  analogWrite(BLUE_LED, 237);  // 진주

delay(1000);

 analogWrite(RED_LED, 206);  analogWrite(GREEN_LED, 3);  analogWrite(BLUE_LED, 163);  // 루비

delay(1000);

 analogWrite(RED_LED, 167);  analogWrite(GREEN_LED, 212);  analogWrite(BLUE_LED, 31);  // 페리도트

delay(1000);

 analogWrite(RED_LED, 26);  analogWrite(GREEN_LED, 27);  analogWrite(BLUE_LED, 216);  // 사파이어

delay(1000);

 analogWrite(RED_LED, 203);  analogWrite(GREEN_LED, 200);  analogWrite(BLUE_LED, 149);  // 오팔

delay(1000);

 analogWrite(RED_LED, 254);  analogWrite(GREEN_LED, 198);  analogWrite(BLUE_LED, 40);  // 토파즈

delay(1000);

 analogWrite(RED_LED, 58);  analogWrite(GREEN_LED, 197);  analogWrite(BLUE_LED, 189);  // 터키석

delay(1000);

}

  예. 요렇게 작성해서 다시 실행시켜보면… 처음 프로그램하고 똑같이 실행되는 것을 알 수 있습니다. 이것도 당근 성공이겠죠?

  그럼, 마지막으로… 이 반지를 진짜 반지처럼 한 번 연출해 볼까요?

  손가락에 켜보는 형태로 흉내를 내보지요.

  컬러 LED를 뽑아서 4개의 다리에 선을 연결하고 이선을 원래 LED가 위치했던 브레드보드의 핀 위치에 꼽으면 원래 회로와 똑같은 회로입니다. 이것을 반지 모양으로 손가락 앞쪽으로 LED만 보이게 만들고 아두이노에 전원을 넣으면?

30 카멜레온반지 14

30 카멜레온반지 15

 

  야호~~~ 카멜레온 반지가 완성되었습니다.

  소품을 이용하여 잘 만들면 어느 정도 쓸만한 것도 만들 수 있을 것 같은데, 이것은 여러분들이 D.I.Y. 해보시기 바랍니다. 잘 만들어졌으면 주변에 자랑도 한 번 해 보시구요.

  시간나실 때 아래 과제도 한 번 해보시면 더욱 좋겠죠?

 [과제-카멜레온반지-1]

 R, G, B 색이 임의로 변하는 카멜레온 링을 만들어 보세요.

 [과제-카멜레온반지-1]

 R, G, B 각각이 0~255까지 짧은 시간 내에 계속 변화하면서 모든 색상을 디스플레이할 수 있는 카  멜레온링을 만들어 보세요. 총 256 x 256 x 256 = 16,777,226 가지의 색깔을 만들수 있을까요?

 

 

 

 ■ 스위치 연결                                                                                

  바로 전 강의까지 우리는 아두이노로 할 수 있는 2가지 기초 기능을 다루어 보았습니다. 디지털 출력(digitalWrite())과 아날로그 출력(analogWrite())이지요. 여기서의 아날로그 출력은 엄밀히 말하면 디지털 출력을 PWM을 이용하여 만든 유사 아날로그 출력이지만요.

 

  기본적인 출력을 2가지 해보았으니 이번에는 기본적인 입력을 이용하여 ‘빨노파 게임기’ D.I.Y.에 도전해 보겠습니다. 빨노파게임기란 빨강 ▶ 노랑 ▶ 파랑 순으로 LED 색깔이 상당히 빠르게(0.1초 이내) 변하다가 스위치를 누르는 순간 빨강, 노랑, 파랑 중의 1가지로 약 5초 정도 고정되는 LED 디스플레이어입니다. 아주 빠르게 색깔이 변하므로 사람이 임의로 색깔의 변화를 읽어서 스위치를 누른다는 것은 불가능하다고 볼 수 있으므로 임의의 색깔이 나타나는 상황이 됩니다. 그러므로 가위바위보 게임과 비슷하게 빨강은 파랑을 이기고, 노랑은 빨강을 이기고, 파랑은 노랑을 이긴다고 룰을 정한 후 두 사람이 스위치를 순서대로 눌러서 나온 색깔로 승부를 가린다면 간단한 게임기가 될 수 있겠습니다.

  아 참, 이건 여담인데, 빨노파… 하니까 생각나는게 하나 있네요. ‘개그콘서트’라는 TV 프로의 ‘나는 킬러다’ 코너에 등장하는 빨노파 3형제…  ‘일소일소(一笑一少)’라는 말이 있는데 한 번 웃으면 한 번 젊어진다고 하니, 여러분도 틈나는 대로 개그 프로 열심히 보면서 많이 웃으시기 바랍니다.

  LED가 대표적인 기본 디지털 출력 부품이라면, 스위치는 대표적인 기본 디지털 입력 부품입니다. 스위치를 모르는 사람은 천지(天地)에 없겠지만, 기왕 말이 나왔으니까 많이 쓰는 스위치 2-3가지만 조금 살펴보고 가는 것도 나쁘지는 않을 듯 합니다.

  우리가 제일 흔하게 많이 보고 많이 쓰는 스위치는 무엇일까요?

  요렇게 생긴 것이겠죠? 전자기기 전원 껐다 켰다 하는 스위치, 형광등 껐다 켰다 스위치.

30 카멜레온반지 16

(KCD1-101A RED, 상품코드: 1790)

  실생활에서 가장 많이 쓰이는 스위치로 이름은 로커(Locker) 스위치입니다. 잠긴(lock) 것처럼 ON이거나 OFF이거나 한가지 상태로 존재하지요.

  또, 어떤 스위치가 있을까요? 아래와 같이 생긴 슬라이드(Slide) 스위치도 많이 사용됩니다. 왼쪽이나 오른쪽으로 옮기면 각각 가운데 신호가 왼쪽이나 오른쪽에 연결된 신호와 연결되는 구조를 가진 스위치입니다. 요건 2단으로 되어 있어 2개의 서로 다른 신호가 동시에 왼쪽 또는 오른쪽으로 연결되는 형태네요.

30 카멜레온반지 17

 

(MSL-1C2P(듀얼)-2mm, 상품코드: 30530)

  이번 강의에서 사용할 스위치는 아래와 같이 생긴 택트(Tact) 스위치입니다. 이것도 굉장히 많이 사용됩니다. 아마도 contact에서 이름이 유래(?)된 듯한데, 손가락으로 누르면(contact 되면) ON, 떼면 OFF 상태가 되는 스위치이지요.

  아래 것은 다리가 4개가 있어서 2쌍의 신호가 한꺼번에 연결되거나(ON), 끊어지거나(OFF) 하는 스위치가 되겠습니다.

30 카멜레온반지 18

(ITS-1105-5mm, 상품코드: 34555)

  자, 스위치가 결정되었으니 그럼 이제 스위치를 연결해 볼까요?

  스위치 심볼은 보통 아래와 같은 2가지 형태를 취합니다. 스위치가 눌려지면 왼쪽과 오른쪽에 연결된 전선이 연결되는 것이지요. 스위치를 놓으면 양쪽의 연결은 끊어지는 것이구요.

30 카멜레온반지 19

30 카멜레온반지 20

  스위치가 디지털 입력이라고 하였고, 스위치는 양쪽 끝이 있으니까 한 쪽은 당연히 아두이노의 디지털 신호선 중 하나에 연결하여야 할 것이고, 다른 한쪽은 어디에 연결해야 할까요? 스위치를 눌렀을 때 ‘1’(HIGH)이나 ‘0’(LOW)이 입력되어야 하므로, ‘1’이 연결되려면 VCC(+5V)가 연결되어야 하고, ‘0’이 입력되려면 GND(0V, Ground)가 연결되어야 할 것입니다.

  그러면 이렇게 연결이 되겠네요.

 30 카멜레온반지 21

 

30 카멜레온반지 22

 

  그런데 가만히 보니까, 스위치를 눌렀을 때는 연결된 상태에 따라서 +5V 또는 0V(GND)가 연결되지만 스위치가 눌리지 않았을 때는 선이 끊어진 상태(floating 상태)가 되는데… 어라, 이렇게 되면 아두이노는 이 핀의 값을 HIGH(1)로 판단할까요? 아니면, LOW(0)로 판단할까요? 조금 어려운 문제인데 이것은 아두이노의 내부 로직과 상태에 따라 값이 결정될 수 있으므로 정확하게 HIGH 또는 LOW라고 단정지어 말할 수 없습니다. 즉, 상황에 따라 HIGH가 될 수도 있고 LOW로 될 수도 있다는 뜻인데, 이렇게 되면 값이 확정되지 않으므로 프로그램을 작성하는 사람은 대략난감(大略難堪, 이러지도 저러지도 못하는 당황스러운 상황)하게 됩니다. 그래서, 이렇게 선이 끊어진 상태가 될 때는 아두이노가 HIGH 또는 LOW 중, 하나의 값으로만 결정되도록 만들어 주는 조치가 필요합니다. 즉, 스위치를 눌렀을 때 HIGH가 되는 회로는 눌러지지 않았을 때 LOW가 되도록 조치해 놓아야 하고, 반대로 스위치를 눌렸을 때 LOW가 되는 회로는 눌러지지 않았을 때는 HIGH가 되도록 조치해 놓아야 하겠습니다. 아래와 같이 될 것 같습니다.

30 카멜레온반지 23

30 카멜레온반지 24

  하지만 위 그림도 아직은 문제가 있어 보입니다. 왜냐하면 스위치가 눌려졌다고 생각하면 위 2개 회로 모두가 +5V와 GND가 직접 연결되는 형상이 되어 버리니까요.

  뿌직~~~ 번쩍! 푸쉬푸쉬~~~

  무엇인가 터지던지… 불꽃이 튀던지… 연기가 나던지… 뭔가 문제가 생길 것 같습니다. 그래서 이런 경우를 방지하기 위한 대비책이 필요한데 이 역할을 수행하는 것은 저항입니다. 아래와 같이 스위치가 눌렸을 때와 눌려지지 않았을 때의 값이 서로 다르게 입력되는 위치에 저항을 달면 문제가 해결되겠습니다. (저항값은 보통 1K~10K 정도를 사용합니다.) 참고로 GND에 저항이 연결되는 것을 풀다운(pull down) 저항이라고 하고, VCC(+5V)에 연결되는 것을 풀업(pull up) 저항이라고 합니다.

30 카멜레온반지 25

 

30 카멜레온반지 26

 

 

  하나 하나 설명하다보니 조금 장황해졌는데요. 어쨌든 이제 연결 방법은 알았으니, 실제로 회로를 아두이노에 연결해 봅시다. 조금 전에 만들었던 카멜레온반지 회로에 스위치 한 개를 추가하여 2번핀(D2)에 연결하는 것으로 하겠습니다. 아래와 같이 되겠네요.

 30 카멜레온반지 27

  오, 그럴듯하게 잘 꾸며진 것 같습니다. 만족? 만족!

 

 

 ■ 신호등 게임기 프로그램 작성                                                  

 

  이제 프로그램을 작성하여야 하는데요. 언제나 마찬가지로 일단 원하는 기능 규격을 작성해 봅시다.

 

[신호등 게임기 기능 규격]

  1. 컬러 LED,의 색깔은 0.1초 마다 빨강 ▶ 노랑 ▶ 파랑 ▶ 빨강 ▶ 노랑 ▶ 파랑… 의 순으로 계속 바뀐다..

  2. 스위치를 누르는 순간 5초 동안만 현재의 LED 색이 유지되었다가 다시 ‘1’번을 수행한다.

 

  컬러 LED의 색깔이 바뀌는 것은 지난번에 했으니까 별 문제가 없을 것이고, 스위치 값을 읽어서 그 값이 0(LOW, 스위치 눌림)인지 1(HIGH, 스위치 눌리지 않음)인지를 검사할 수만 있으면 쉽게 해결될 것 같습니다. 이런 경우에 대비해서 아두이노에서는 digitalRead(pin)라는 기능의 함수를 제공하므로 이것을 이용하도록 합니다.

 

digitalRead(pin)

  ■  pin : 핀 번호

  ■  return 값 : pin을 통하여 들어온 디지털 값으로 0 또는 1

 

  이제 기능 규격을 만족할 수 있는 프로그램의 알고리즘을 만들어 보지요. 아래를 보기 전에 각자 먼저 5분 정도 생각해 보시구요.

… (1분) … (2분) … (3분) … (4분) … (5분)

  아래와 같은 모습이 될 것 같습니다.

30 카멜레온반지 28

  이제 프로그램을 함께 해볼까요?

int SW=2; // #define을 이용해도 되지만 이와 같이 변수로 선언하는 것도 방법

int BLUE_LED=3

int GREEN_LED=5;

int RED_LED=6;

void setup()

{

 pinMode(SW, INPUT); // 2번핀은 스위치 입력

 pinMode(BLUE_LED, OUTPUT); // 3번핀은 파랑 LED 출력

 pinMode(GREEN_LED, OUTPUT); // 5번핀은 녹색 LED 출력

 pinMode(RED_LED, OUTPUT); // 6번핀은 빨강 LED 출력

}

void loop()

{

analogWrite(RED_LED, 255);  analogWrite(GREEN_LED, 0);  analogWrite(BLUE_LED, 0); // 빨강

if (digitalRead() == 0)

   delay(5000); // 스위치를 눌렀으면 5초 대기

else

delay(100); // 스위치를 누르지 않았으면 0.1초만 대기

analogWrite(RED_LED, 255);  analogWrite(GREEN_LED, 255);  analogWrite(BLUE_LED, 0);   // 노랑

if (digitalRead() == 0)

   delay(5000);

else

delay(100);

analogWrite(RED_LED, 0);  analogWrite(GREEN_LED, 0);  analogWrite(BLUE_LED, 255); // 파랑

if (digitalRead() == 0)

   delay(5000);

else

delay(100);

}

  digitalRead()를 수행하여 값이 ‘0’인 상태가 나타나면 스위치가 눌려진 것이니까 그 상태에서 delay(5000); (5초 동안 아무것도 하지 않음)을 수행하게 되므로 LED가 5초 동안 한가지 색깔을 유지하게 됩니다. 자신의 색깔이 결정되는 것이지요.

  작성이 다 되었으면… 컴파일 ▶ 업로드 ▶ 실행! 잘 나오나요?

 30 카멜레온반지 29

  옆에 있는 가족/친구/상사/동료와 간단히 게임 한 번 해 보시지요! 나는 빨강, 상대는 파랑, 야호~ 내가 이겼다. 밥 먹으러 갑시다.

  오늘은 여기까지입니다. 다음 시간에는 FND(Flexible Numeric Display)를 가지고 007 영화에 항상 등장하는 카운트다운 계수기 D.I.Y.에 도전해 보겠습니다. 아래 과제는 짬을 내서 해보시고 다음 강의에서 예쁜 얼굴로 또 만나겠습니다. 감사합니다.

 [과제-빨노파게임기-1]

 스위치를 누르면 ‘1’이 되도록 연결하고 프로그램해 보세요.

 [과제-빨노파게임기-2]

 스위치를 2개 사용하여 더 재미있는 DIY 작품을 만들어 보세요.

 

 

 

아두이노 구매하러 가기 : 클릭!

2018 ICT 융합 프로젝트 공모전

 

2018 ICT 융합 프로젝트 공모전

 

2018 ICT 융합 프로젝트 공모전 응모요강

 

1. 참가자격 : 국내•외 대학생, 대학원생 및 일반인

2. 주제 : 전자, 로봇, 기계 분야 중 자유주제

3. 접수기간 : 2018년 2월 1일(목) ~ 3월 31일(토)

4. 시상내역 : 입상작 30편, 총 상금 및 상품 300만원 상당

* 최우수상( 1명)   –     50만원
* 우수상 ( 3명)     – 각  30만원
* 입선 ( 6명)         – 각  10만원
* 참가상 ( 20명)  - 각    5만원

※ 시상 기준에 부합하는 응모작이 없을 경우 시상 내용이 변경될 수 있으며, 상금은 디바이스마트 적립금으로 제공됩니다.

※ 심사 및 평가 : ㈜엔티렉스, 위드로봇 ㈜, ㈜칩센, ㈜펌테크, ㈜뉴티씨

5. 응모 요령
- 응모 원고 : A4 20매 내외 분량

6. 접수 및 문의처
- 접수 방법 : 이메일 접수(press@ntrex.co.kr)
- 문의처 : TEL. 070-4342-6312 또는 070-7019-1518

7. 주최 및 협찬
- 주최 : ㈜엔티렉스-디바이스마트
- 협찬 : 위드로봇㈜, ㈜칩센, ㈜펌테크, ㈜뉴티씨

 

[응모자 유의사항]

응모 자격은 국내외 일반인 및 대학생, 대학원생, 휴학생도 참가 가능합니다.
심사 기준에 적합하지 않을 경우 시상 편수 및 수상 인원이 변경될 수 있습니다.
제출된 원고는 반환되지 않으며, 응모작의 저작권은 응모자와 주최기관에 공동으로 귀속됩니다.
응모된 작품은 순수 창작이어야 하며, 타 공모에 입상한 작품 및 다른 간행물에 발표되지 않은 것이어야 하며, 모방과 표절에 관련하여 저작권, 초상권 등의 문제가 발생할 경우 법적 책임은 응모자에게 있습니다.

위 내용이 발생할 경우 시상 이후라도 시상을 취소하고 상금은 반환하여 합니다.
제작 과정에 관한 모든 사항을 기록하고, 문서화하여 제출하여야 하며, 해당 내용은 디바이스마트 매거진 특집 기획으로 게재됩니다.

[원고 작성 유의 사항]

파일 형식 : DOC, HWP, PDF 중 택 1
작성 분량 : A4 20매 내외(최대 글자 크기 12 point)
아래의 작성 목록을 기준으로 원고를 작성하여 주시기 바랍니다.

- 작성 목록(최대한 자세하게 기술)
1. 작품 제목
2. 작품 개요
3. 작품 설명
3.1 주요 동작 및 특징
3.2 전체 시스템 구성
3.3 개발 환경(개발 언어, Tool, 사용시스템 등)
4. 단계별 제작 과정
5. 기타(회로도, 소스코드, 참고문헌 등)
4. 필수 입력 항목 : 소속(회사, 학교), 성명, 이메일, 휴대폰번호, 주소
5. 파일 접수시 최종 문서 파일①과 문서 파일①에 첨부된 자료(이미지, 회로도, 소스코드 등)②을 압축하여 총 2개의 파일(①+②)을 접수합니다.
6. 첨부된 이미지는 직접 촬영하거나 제작한 원본 이미지여야 하며, 화면 캡쳐 이미지 및 식별 불가한 이미지를 사용해서는 안됩니다.
7. 이미지 파일 확장자는 jpg, eps, tiff, pdf, png, bmp, 이미지 해상도는 150 ~ 300 DPI 이상으로 작성하시기 바랍니다.

 

자세한 사항은 아래 사이트를 참조해주세요.^-^

http://www.devicemart.co.kr/board/view.php?seq=28&table=capstone&page=

[45호]프로차일드 블루투스 5 적용 저 에너지 SoC 기반의 BLE 모듈 출시

프로차일드

프로차일드 블루투스 5 적용

저 에너지 SoC 기반의 BLE 모듈 출시

 

프로차일드는 현재 이슈화되고 있는 블루투스 5가 적용된 저 에너지 모듈인 BLE 모듈을 출시한다고 밝혔다.
블루투스 5는 빠른 시일 내에 공식적으로 채택될 예정이며, 스마트 홈, 웨어러블, IoT 애플리케이션에서 블루투스 무선 기술의 적합성을 획기적으로 향상시킬 수 있는 장거리 동작범위와 향상된 처리량 등의 기능을 제공한다.

프로차일드01

프로차일드에서 출시하는 블루투스 저 에너지 모듈은 블루투스 최신 사양을 준수하는 노르딕 세미컨덕터(Nordic Semiconductor) 사의 nRF52840 SoC를 기반으로 개발되어 출시되며, 기존 블루투스 4.2 저 에너지 모듈과 비교해 최고 4배의 동작범위와 2배의 데이터 대역폭(2Mbps)을 지원하며, 특히 비콘 애플리케이션의 경우, 보다 효율적으로 데이터 전송을 할 수 있도록 애드버타이징 패킷 페이로드 크기를 251Byte까지 증가시킬 수 있는 확장 기능을 갖추어 브로드캐스팅 성능이 8배까지 향상하게 된다.

또한 IEEE 802.15.4 기능도 포함하고 있어 기존의 지그비(Zigbee), 스레드(Thread)와 같은 스마트 홈 기술의 토대를 구성할 수 있으며, 6LoWPAN 및 표준 인터넷 프로토콜을 사용하는 네트워크 적응 레이어로도 사용이 가능하다. 이러한 솔루션을 지원함으로써, 여러 다양한 무선 기술을 이용하는 IoT나, 스마트 홈, 산업용 센서 등 무선 네트워크를 위한 상호 운용이 가능한 기반 기술로 제품의 기능을 획기적으로 확장시킬 수 있게 되었다.
주요 타깃 어플리에이션으로는 IoT(Internet of Things)용 네트워크-연결 센서 및 비콘 빌딩 블록과 저가형 웨어러블 기기, 컴퓨터 및 태블릿용 무선 마우스와 키보드, 장난감, 일회용 의료용 모니터링 장치, 기본 RF 리모컨 등이 해당된다.

ABI 리서치의 대표 분석가 패트릭 코널리는 “글로벌 무선 연결 시장이 급격하게 성장 중이며, 2021년까지 연간 IC 운송량이 100억 개에 달할 것으로 예상된다” 또한 “블루투스 5는 사물인터넷 개발을 손쉽게 해주며, 비용 절감과 더불어 용도에 최적화된 설계가 가능하도록 유연성을 제공할 것이다. 즉, 블루투스 5의 출시로 다양한 사물인터넷 관련 기업 및 산업 환경에서 새로운 기회를 제공할 것이다.”라고 전했다.

프로차일드는 블루투스 5가 탑재된 제품들은 블루투스 5 출시일로부터 빠르면 2개월에서 6개월 내에 다수의 제품이 출시될 것으로 예상하고 시장 선점을 위해 개발 엔지니어들이 쉽고 빠르게 개발하고 제품을 출시할 수 있도록 컴팩트한 사이즈의 블루투스 5 저 에너지 모듈을 출시하여 블루투스 5 저 에너지 모듈 시장에서의 중추적인 역할을 할 것으로 기대된다.

프로차일드02

또한, 블루투스 5 저 에너지 모듈을 기반으로 하여 블루투스 5가 적용된 비콘, 메디컬 디바이스 및 헬스케어 관련된 모션센서를 이용한 웨어러블 디바이스 등 지속적으로 개발하여 출시할 예정이다.

현재 프로차일드는 자체 개발한 블루투스 4.2 저 에너지 모듈에 대하여 업계 최초로 국내 전파인증 및 KC 인증을 비롯하여 블루투스 SIG, FCC, CE, TELEC, IC 인증을 받은 PBLN51822, PBLN51822m, PBLN52832 모듈을 판매 중에 있다.

www.prochild.com

 

 

프로차일드 제품 보러가기

 

 

 

[45호]Nordic칩셋 극소형 BLE모듈 BoT-nLE522 출시

㈜칩센

Nordic 칩셋 극소형 BLE모듈 BoT-nLE522 출시

 

블루투스 전문 업체 ㈜칩센은 노르딕의 nRF52832 칩셋과 초소형 내장 안테나를 적용하여 극소형(5x11x1.6mm) Bluetooth Low Energy 모듈을 출시하였다. 이 모듈은 작은 사이즈의 스마트 기기 및 IoT 솔루션에 적합하며, 노르딕 세미컨덕터사의 우수한 저전력 기술을 활용할 수 있다.

㈜칩센은 최근 글로벌 반도체 기업 노르딕 세미컨덕터(Nordic Semiconductor)사와 협력을 강화하고 있다. 지난 10월 18일 노르딕 세미컨덕터사의 글로벌 세일즈&마케팅을 총괄하고 있는 게일랑헬란드(Geir Langeland)씨가 ㈜칩센을 방문하여 전 세계 IoT 시장 동향과 Bluetooth 시장에서 노르딕 세미컨덕터사의 높아진 입지와 독보적으로 전세계 시장점유율을 넓혀가고 있는 현황을 소개했다. 또한, 한국에서 ㈜칩센의 Nordic chip을 적용한 Bluetooth Module 비즈니스를 적극 지원키로 약속했다.

㈜칩센02

㈜칩센01

㈜칩센은 오래전부터 노르딕 세미컨덕터사의 저전력 무선통신 기술에 관심을 가져왔으며, Nordic BLE Chip을 적용한 Bluetooth 모듈을 개발/제조하여 한국에서 Nordic Bluetooth모듈을 판매를 하고 있으며 여러 가지 프로젝트도 진행하고 있다.

㈜칩센은 노르딕 세미컨덕트사의 3rd Party Module Partner사로 선정되어 있으며, 노르딕 세미컨덕터사의 홈페이지에도 한국 파트너사로 게시되어 있다.

 

(주)칩센 제품군 보러가기

 

 

 

 

 

[45호]KC인증 고품질 리튬폴리머 배터리 대량 출시!

thehan

thehan

 

주식회사 더한

KC인증 고품질 리튬폴리머 배터리 대량 출시!

요즘 많은 전자제품들이 휴대가 가능한 충전식 제품으로 제작되고 있어 배터리를 찾는 소비자들이 날로 증가하고 있다. 최근 배터리 폭발 문제가 화제가 되고 있는 가운데 폭발 위험이 가장 적은 리튬폴리머 배터리가 이목을 끌고 있어 많은 소비자들과 제조업체에서 리튬폴리머 배터리 구매를 문의했으나 국내에 제조 및 공급사가 없어 판매에 어려움이 있었다.

주식회사 더한은 국내에 리튬폴리머 배터리를 원활하게 공급하기위해 정식 수입 통관 절차를 거쳐 40여종의 배터리를 출시했다. 모든 배터리는 생산 공정의 셀 생산부터 보호회로 장착 및 품질 검사까지 모두 한 곳에서 이루어져 고품질을 자랑하며, KC인증을 획득해 안전성을 검증받아 엄격한 관리하에 생산되고 있다. 40여종의 배터리는 다양한 용량과 사이즈로, 출시와 동시에 판매 돌풍을 일으키고 있다.

주식회사 더한은 소비자들이 선택의 폭을 넓힐 수 있도록 배터리의 모델 수를 150여종으로 확대 공급할 예정이다.

제품 주요 사양
· 전압 : 3.7V
· 용량 : 30mAh~1300mAh
· 충전률 | 방전률 : 1C
· 보호회로 장착

 

주식회사 더한 배터리 제품군 보러가기

 

 

[45호]색종이로 작곡하는 춤추고 노래하는 자동차로봇

Cap 2018-02-05 09-27-40-142

2017  ICT 융합 프로젝트 공모전 입선작

색종이로 작곡하는 춤추고 노래하는 자동차로봇

글 | 숭실대학교 김세현

1. 심사평
칩센 작품명을 보았을 때 작곡을 어떻게 하는지, 그 작곡에 대해 어떻게 로봇이 동작하는지가 매우 궁금하였습니다. 첨부한 동영상 및 보고서 내용을 보았을때, 작곡이라기 보다는 어떠한 형태이든지 간에 입력이 이루어 지는 수동적인 (흔히 보는 형태의) 입력과, 입력된 악보에 대해 어떤 방식과 패턴으로 로봇이 움직이는 등에 대한 내용이 매우 부족한 것으로 보입니다. 보고서에서 말한 영유아 및 어린이를 대상으로 한다고 보더라도 음계와 색상을 매칭하는 것 자체가 쉽지 않은 과정으로 보입니다. 작품의 이름 대비 많은 부분이 아쉬운 결과물로 느껴집니다.

뉴티씨 색상 인식이 인상적인 작품입니다. 실제로 기술을 적용하려면 새로운 암호인증 시스템으로 만들거나, 공장의 불량감지 같은 분야에서 사용이 가능해 보입니다.

위드로봇 컬러 센서를 음악과 연결한 부분이 참신합니다. 전체적으로 완성도가 높은 작품으로 평가합니다.

2. 작품 개요
개발자가 생각하는 주요 고객 타겟 층은 다음과 같은 세 부류이다.
첫째, 한국의 현대사회는 고령화 시대와 1인 가족 시대로 점점 가게 되면서, 사회적, 경제적, 개인적인 여러 방면에서 다양한 문제들이 함께 발생하고 있다. 개인적인 정서적 문제 중 하나가 바로 ‘외로움’이다. 이에 따라 독거노인들이나 1인 가족들의 적막한 삶에 활력소가 되어주고 외로움을 채워줄 존재가 점점 필요해지고 있다. 그 빈자리를 채우기 위해 주인의 명령에 재롱을 떨며 춤추고 노래하는 손자, 손녀 같은 또는 친구 같은 로봇을 개발하였다.

두 번째 주요 고객층은 영유아 및 어린이들이다. 어린이들에게 색감으로 계이름을 시각적으로 받아들이게 해주고, 로봇이 아이가 직접 만든 색종이 계이름판으로 음악을 만들어 그에 맞춰 춤까지 추는 모습을 보며, 자연스럽게 음악과 로봇에 친숙해질 수 있다. 이는 결과적으로 아이들의 정서 발달 및 로봇과 관련된 가치관 발달에도 큰 도움을 줄 수 있다.

마지막으로, 아직 전자공학이나 로봇공학과 친숙하지 않은 일반인들에게도 그들의 가치관에 대한 긍정적인 효과를 기대할 수 있다. 현실적으로 로봇공학의 발전에 대해 다소 거부감이 있는 일반인들이 많다. 이들에게 로봇이 ‘재롱’을 부리는 모습은 그들의 감성을 자극하여 로봇과 더욱 친숙해질 수 있고 로봇에 대한 호감 이미지를 만드는 데에 기여한다.

이와 같은 세 가지 효과를 기대하며 색상 인식으로 춤추고 노래하는 자동차로봇을 개발하였다.

3. 작품 설명
3.1. 주요 동작 및 특징
3.1.1. 주요 동작
Ⅰ. 악보 생성 기능
(1) 컬러센서를 이용한 색상 감별로 악보 생성

Cap 2018-02-05 09-27-59-998

TYPE 29의 컬러센서를 컬러 인식 모드인 MODE 2로 설정하여 컬러센서 자체에서 인식 가능한 검정, 파랑, 초록, 노랑, 빨강, 흰색, 갈색을 인식하여 각 색에 음계를 매치하여 라즈베리파이 내의 buffer에 저장하였다가, 사용자가 색 악보에 따라 작곡한 음악을 듣고자 하면 한 음계 당 500ms 동안 스피커로 각 음계를 출력하며 ‘노래’를 하도록 하였다. 아래 표는 각 색상마다 매치한 계이름과 주파수를 정리한 표이다.

Cap 2018-02-05 09-28-07-480

1-2) 계이름과 1:1 매치되는 숫자로 악보 생성
컬러센서로 인식할 수 있는 색상의 수는 위의 표에서 볼 수 있듯이 7가지로 한정되어있기 때문에, 다양한 음을 사용하는 악보를 만들기에는 부적합하다. 따라서 사용자가 각 계이름에 맞게 미리 매치시켜놓은 숫자들의 나열을 buffer에 입력함으로서 악보를 생성할 수도 있다. Linux의 C 언어에서는 getchar()이나 scan() 종류의 함수와 같은 문자를 입력받는 함수가 따로 없다. 따라서 사용자가 직접 이 기능을 하는 함수를 만들어야 한다. 아래 소스는 getchar() 함수를 구현한 getch 함수 소스코드이다.

Cap 2018-02-05 09-28-21-898
악보 생성은 위와 같이 두 가지 방법으로 가능하지만, 앞으로는 주로 색상 악보를 만들어서 작곡하는 모드를 주로 다룰 것이다.

Ⅱ. 저장된 악보에 맞춰 춤추는 기능
EV3 자동차로봇에 달려있는 4개의 포트에는 자동차 좌측 앞바퀴, 우측 앞바퀴 2개를 연결하는 Large motor 2개와 Medium motor 1개를 연결시켜 직진, 후진, 좌회전 직진, 우회전 직진, 좌회전 후진, 우회전 후진, 팔 올리기, 팔 내리기 등 EV3와 연결된 모터가 할 수 있는 8가지 기능은 각 음계와 매치되어 로봇이 춤을 추게 된다. 각 음계와 연결된 motor 모션은 다음 표와 같다.

Cap 2018-02-05 09-28-30-230

Ⅲ. 터치 센서를 이용한 간단한 on-off 기능 탑재
터치 센서란, 단순하게 누르면 1의 값을, 누르지 않으면 0의 값을 유지하는 스위치와 같은 원리의 센서이다. 이 센서를 이용해, 처음 프로그램을 실행하고 한 번 센서를 눌렀을 때 자동차가 직진을 하면서 바닥에 깔린 색종이의 조합인 악보를 컬러센서로 센싱을 하도록 했고, 센싱해야 하는 색종이의 모임이 끝나면 다시 한 번 터치 센서를 눌러야만 저장한 악보대로 노래를 하고 춤을 추도록 제어하였다.

Cap 2018-02-05 09-28-39-932

3.1.2. 특징
Ⅰ. 마인드스톰 EV3

Cap 2018-02-05 09-28-45-914

마인드스톰 EV3란, LEGO사와 MIT 미디어랩의 합작품으로, 로봇을 만들고 프로그래밍을 할 수 있는 블록이다. labVIEW의 블록 코딩을 사용하면 아주 쉽게 코딩이 가능하다. 하지만, 이번 프로젝트에서는 당연히 블록코딩을 사용하지 않았다. EV3의 VM(Virtual machine)에서 실행되는 bytecode라는 것이 있는데, USB, Bluetooth, WiFi를 통해 VM으로 전송이 가능하다. 바이트코드의 목록과 형식은 LEGO MINDSTORMS EV3 Firmware Develop kit를 참고하였다. 바이트 코드는 OP code, parameter, return valude로 구성된다. 각 값들을 정의에 따라 바꾸며 섬세한 EV3 제어가 가능하다.

Ⅱ. 라즈베리파이3로 EV3를 WiFi로 제어

Cap 2018-02-05 09-30-30-181

EV3를 제어하는 MCU로는 라즈베리파이3를 채택하였다. 라즈베리 파이2와는 다르게 3에서는 와이파이 기능이 자체적으로 들어가 있기 때문에 근거리에서 무선으로 EV3 자동차로봇을 제어하는 데에 적합하였다. 이 때, 라즈베리파이라는 외부의 MCU로부터 EV3를 제어하므로 Direct Command 형식으로 명령코드를 작성하였다. Direct Command는 외부에서 EV3로 byte code를 전송할 때 사용하는 형식으로, USB, Bluetooth, WiFi로 전송 가능하며 이 또한 LEGO MINDSTORMS EV3 Communication Developer kit를 참고하였다. 응답으로 Direct reply를 받을 수 있다.

 

Ⅲ. 컬러 센서 사용하는 악보 제작

Cap 2018-02-05 09-30-35-966

컬러 센서로 색종이의 색깔을 구분하여 악보를 제작할 수 있다. 이 때 프로젝트 환경이었던 실내 장판은 갈색이 아닌 무색(색 없음, value 값 0)으로 컬러 센서가 인식을 하였다. 실제로, 컬러 센서로 색을 인식시킬 때 가장 까다로웠던 색이 바로 갈색인데, 조금 밝은 갈색이면 노란색으로, 조금 어두운 갈색은 검은색으로, 또 약간 붉은 기가 있는 갈색은 빨간색으로 인식하여 컬러센서를 위한 갈색을 찾는 데에 조금 애를 먹었다. 하지만 시중에서 판매되는 색종이로 갈색 값을 어렵지 않게 인식시킬 수 있으므로, 사용자가 사용하는 데에는 큰 무리가 없을 것으로 예상된다. 컬러센서로 인식시킬 색상 악보의 예시는 다음 사진과 같다. 아래 ‘악보’는 조지 윈스턴의 ‘캐논 변주곡’의 앞부분이다. 화살표 방향으로 자동차로봇이 전진하면서 컬러센서로 색상을 인식하고 각 색에 1:1 매칭이 되어있는 숫자로 변환시켜 색종이의 순서대로 저장하게 된다.

Cap 2018-02-05 09-30-43-930

Ⅳ. 소프트웨어적 발전 : Direct Command를 자동으로 전송하는 함수 및 Direct Reply를 자동으로 수신하는 함수의 알고리즘 개발
Direct Command는 위에서 언급하였듯이 EV3로 bytecode를 전송할 때 사용하는 형식으로, Little Endian을 사용하며 리턴 값으로 사용하는 Global variable의 offset은 align되어야 하며, 커맨드를 보내는 형식 또한 다소 복잡하다. 아래는 Direct Command의 형식을 정리한 그림이다.

Cap 2018-02-05 09-30-50-380

bytecode를 보낼 때마다 이 형식을 지키며 일일이 보내게 되면 굉장히 시간이 많이 걸리고, 복잡하다. 따라서 이번 프로젝트에서 Direct Command를 구조체로 미리 만들어서 함수의 매개변수로 보내면 byte code로 해석하여 EV3로 전송해주는 send_command() 함수를 개발하였다. 또한, Direct Reply 또한 해석하여 shell에 print해주는 read_reply() 함수 또한 개발하였다. 함수의 작성 코드는 다음과 같다.

① send_command 함수

Cap 2018-02-05 09-31-02-634

② read_reply 함수

Cap 2018-02-05 09-31-11-014

Cap 2018-02-05 09-31-21-164

이 두 함수는 이 프로젝트뿐만 아니라 byte code를 작성하여 마인드 스톰 EV3를 제어하는 모든 프로젝트에서 아주 유용하게 쓰이게 될 것이다.

3.2. 전체 시스템 구성
Ⅰ. 소프트웨어적 구성
라즈베리파이와 EV3를 연결하여 명령을 송수신한다. 라즈베리파이와 EV3는 USB 포트로 연결되며, 라즈베리파이의 전원 공급은 EV3의 USB 단자로부터 공급받게 된다. 리눅스 환경에서 와이파이로 라즈베리파이와 ssh로 통신하여 C 프로그래밍으로 춤추고 노래하는 자동차로봇의 알고리즘을 짜고 실행시키게 되면, USB 드라이버는 USB 컨트롤러를 통해 프로그래밍 명령을 전달하게 된다.

이 때 EV3의 특성상, 외부에서 오는 명령은 EV3 전용 Byte code로 작성이 되어있어야 하며, 이 byte code는 EV3의 USB controller를 통해 USB 드라이버로 인식되어 EV3 내부의 가상 머신에 전달된다. USB로 연결된 라즈베리파이와 EV3는 일단 라즈베리파이에서 USB 장치 디바이스 파일을 찾는데, 다른 USB 장치가 없이 EV3만 연결되어있을 때는 절대경로로 /dev/hidraw0 파일을 찾으면 된다. 라즈베리파이에서 해당 디바이스 파일을 읽고 쓰기 위해 open을 할 때도 이 위치의 디바이스 파일을 이용하면 된다. 이 가상머신 위에서 EV3는 라즈베리파이 알고리즘의 명령대로 각 Output 드라이버들에게 명령을 전달하고, 모터 컨트롤러와 스피커에 전기적 신호가 전달되어 명령을 수행하게 된다. EV3와 라즈베리파이를 연동하는 일련의 과정을 도표로 요약하여 작성하면 다음과 같다.

Cap 2018-02-05 09-31-43-615

Ⅱ. 하드웨어적 구성
절차적인 하드웨어 구성 도표는 다음과 같다.

Cap 2018-02-05 09-31-52-696

조립 및 연결이 완료된 라즈베리파이와 EV3의 전체 조감도는 다음과 같다.

Cap 2018-02-05 09-32-02-697

Cap 2018-02-05 09-32-05-981

Cap 2018-02-05 09-32-14-430

3.3. 개발 환경
Ⅰ. 개발 언어
라즈베리파이는 기본적으로 Linux 환경에서 동작한다. 리눅스 환경에서 주로 쓰이는 언어는 C언어와 Python인데, 본 프로젝트에서는 C언어를 사용하였다.

Ⅱ. 사용 시스템
MCU로 라즈베리파이 3를 채택하였다. ssh 통신으로 근거리에 있는 자동차 로봇과 호스트 컴퓨터 사이의 무선 통신을 하는데에 WiFi 기능이 기본적으로 탑재되어있는 라즈베리파이 3가 적합하다고 판단했다.

Cap 2018-02-05 09-34-40-081

Ⅲ. 사용 툴
Linux Ubuntu OS 기반에서 vim 편집기를 사용하여 개발하였다.

4. 단계별 제작 과정
Ⅰ. 전체적인 제작 과정
위 프로젝트를 진행하는데 소요된 전체 제작 기간은 2017년 1월 29일부터 2017년 2월 26일까지이다. 1월 말 며칠 동안은 리눅스 및 라즈베리파이에 대해 이론적으로 공부하는 시간을 가졌으며, 실질적으로 춤추고 노래하는 자동차 로봇 프로젝트를 진행하는 데에 소요된 기간은 2월 한 달이다. 따라서 단계별 제작 과정을 2월 한 달 간의 시간의 흐름을 따라 도식적으로 도표로 정리하면 다음과 같다.

Cap 2018-02-05 09-34-47-463

Ⅱ. EV3 로봇 조립
마인드스톰 EV3 키트에 포함되어있는 설명서대로 조립을 진행한다. 그 후 전원을 키고, 데모 프로그램을 실행해보며 제대로 조립을 했는지 확인한다. EV3는 사용자의 목적에 따라 다양한 형태로 조립이 가능한데, 나는 4개의 바퀴가 달린 포크레일 형태로 조립하였다.

Cap 2018-02-05 09-34-56-081

그 결과 4개의 바퀴를 위한 large motor 2개, 포크레일의 팔을 제어하기 위한 medium motor 한 개가 조립 시 필요하였다. 특히, 라즈베리파이를 EV3 로봇에 고정시켜야했는데, 이 때 LEGO의 장점이 십분 발휘되었다. 위의 그림 4-1.1에서 확인할 수 있듯이, 라즈베리파이를 EV3 본체의 우측에 고정시키기 위해 여분의 레고 조각들을 이용해 개발자가 라즈베리파이가 고정될 수 있도록 라즈베리파이 둥지를 만들었다.

Ⅲ. 라즈베리파이와의 연동
본 프로젝트에서 사용한 MCU는 라즈베리파이3로, 호스트 컴퓨터와 라즈베리파이 사이의 WiFi를 이용한 ssh 통신이 기본적으로 가능하다. 아래 그림 4-2.1은 호스트 컴퓨터에서 라즈베리파이로 ssh를 이용해 접속한 모습이다. 개발자가 사용한 라즈베리파이의 ip 주소가 192.168.0.10이며 성공적으로 라즈베리파이와 통신이 연결된 것을 확인할 수 있다.

Cap 2018-02-05 09-35-02-196

Ⅳ. 핵심 알고리즘 개발
알고리즘의 흐름도는 아래 그림 4-3.1과 같다.

Cap 2018-02-05 09-35-08-697

 

Ⅴ. 테스트 및 디버깅
컬러 센서가 감지하는 색상은 정확한 편이었지만, 다양한 색상 인식이 필요하고 고정적인 크기의 색상 인식 물체가 필요한 이유로 색종이를 색상 인식 물체로 선정했다. 그런데, 색종이의 밝은 분홍색은 컬러센서가 하얀색으로 인식하고, 색종이의 주황색은 컬러센서가 노란색으로 인식하는 등 조금의 오차가 있었다. 따라서 이러한 부분들을 컬러 센서를 테스트하는 과정에서 컬러 센서가 인식하는 대로 다시 분류하는 작업이 필요했다. 특히 색상 인식이 까다로웠던 색은 갈색이었는데, 밝은 갈색은 노란색, 붉은 갈색은 빨간색, 어두운 갈색은 검정색으로 인식하였다. 다행스럽게도 색종이의 갈색은 한 번의 오류 없이 항상 갈색으로 인식하여 갈색 색종이를 악보로 쓸 수 있었다.

Cap 2018-02-05 09-35-21-917

라즈베리파이와 EV3를 연결시켜 고정시키는 과정에서 여러 종류의 커넥팅 라인들 또한 많을 수 밖에 없었는데, 이 선들의 무게중심이 EV3 자동차 로봇의 한 쪽으로 극단적으로 쏠리게 되면 자동차가 직진할 때 조금 회전하는 경향이 보였다. 따라서 선들을 묶어서 EV3 본체 중간에 움직이지 않도록 고정시켰다. 그 뒤로는 직진을 할 때 문제가 일어나지 않았다.
색상을 인식한 후 buffer에 저장하는 과정에서 더 빠르고 단순한 방법으로 알고리즘을 개발하기 위해 여러 방법으로 알고리즘을 변형하고 테스트해보았다. 다음 그림 4-1.1은 알고리즘 테스트 과정 중인 모습이다.

가장 많은 방법으로 테스트를 해본 것 중 하나는 바로 무음 처리이다. 프로젝트를 진행하면서 한 가지 해결하지 못한 것은, 첨부 2 또는 첨부 3의 동작 동영상에서 볼 수 있듯이 박자가 쉬는 부분에서는 스피커의 출력 주파수를 0Hz로 설정하고 스피커의 출력 시간 또한 0초로 설정하였음에도 그 타이밍에 ‘툭’하는 소리가 나는 현상이 일어난다. 스피커를 출력하는 동안 무음으로 처리되어야 할 부분에 마치 잡음처럼 들리기도 하여, 이 부분을 해결하지 못한 점이 아쉽다.

5. 작동 이미지

Cap 2018-02-05 09-35-32-150

Cap 2018-02-05 09-35-40-364

6. 참고문헌
· NCS(임베디드SW구현)기반의 스마트로봇EV3, 남상엽, 2014, 이지테크
· 산딸기 http://www.rasplay.org