아두이노만 바라봐선 절대 사물인터넷 제품 만들 수 없다

규링은 대학원 들어오기 전에 학부연구생을 했었다. 그때에는 사물인터넷이 엄청나게 주목받을 때였고, 다들 아두이노 배우기 시작하고 그전에 조금이라도 전자회로 공부하고 했던 사람들은 여기저기서 강의를 뛰고 했다. 그리고 그걸 빌미삼아서 메이커 프로젝트도 많이 발전하고 했다만…

그때부터 나랑 우리 교수님은 사물인터넷으로 연구하는 걸 포기했다.

발전하는 방향성이 어이가 없었다. 여러모로…

그 중에서도 제일 공감하던 것이 있다면 바로 아두이노를 가지고 제품화를 밀어부치려는 사람들 때문이었다.

아두이노를 통해서 프로토타입을 만들 수는 있다. 그건 확실하다. 근데 그 이상으로 제품화를 하기 시작하면 아두이노를 이용해야 하는 것이 아니라 그 안에 있는 atmel을 다룰 수 있어야 한다. 아두이노의 부트로더와 코드를 그대로 인풋해서 이용한다 하더라고 회로 최적화를 할 수 있어야 한다. 그에 걸맞는 제품 디자인도 같이 진행할 수 있어야 한다. 그 외에도 제품화를 진행하기 위해서는 많은 작업들이 더 필요하다. 근데 문제는 그 밑에 작업들을 하기에는 너무 어렵고, 아두이노를 가지고 쉽게 한 것에는 한계가 있는 거 같고 해서 더 이상 진행하지도 않고 끝내는 경우가 상당히 많다. 그래서 제대로 된 제품화가 이루어지는 곳이 별로 없다. (돈없어서 그러는 곳 말고)

그러나 지금까지도 이어져 오고 있는 아두이노에 대한 것은 바뀌지 않았다. 한국만 그런 거 같은 기분이 진짜 많이 든다. 뭐, 지금 한국의 사물인터넷은 대기업.. 이라기보단 통신사들만이 할 수 있는 특수한 것이라는 그런 특성적 이미지가 많이 깔려서 그런지 자꾸 뭔가 통신 잘 하는 거 외엔 신경도 안쓰는 그런 분위기이다.

물론 프로토타입을 제대로 만든 다음에 제대로 제품화까지 성공한 기업들도 있다. 스타트업에 보면 그런 기업들 있다. 많지는 않은 거 같지만…(소식 들리는 게 얼마 없어서 그런걸까?) 그런데, 그런 기업들이 하나 둘 있다고 해서 그렇게 하면 되겠지라고 하는 것도 또한 아니다. 지향하는 것이 다 다르기 때문에 그에 따라 만들 수 있는 길도 다 다르다. 그걸 간과하지 못하는 이상 제품화 하는 데 있어서는 더 이상 나가려고 하지 않을 것이다.

그럼 뭐하냐고? 아두이노 교육으로 돈 벌어먹고 있을 확률이 제일 높다.

avrdude stk500_getsync()

Screenshot - 2016년 03월 07일 - 15시 40분 29초

센서 테스트 해달라고 해서 하려고 하는데 아두이노에서 이런 녀석을 만났다…ㅡㅅㅡ 코드 보면 알겠지만.. 테스트를 위해서 무지 단순한 수준으로 짰지만, 오류가 있다.

아두이노의 디지털 핀 중에서 0번의 Rx, 1번의 Tx에는 될 수 있으면 센서 같은거 꼽지 말자. 디지털 데이터 읽어들이는 걸 꼽고 그대로 코드 짜로 업로드 하다보니 센서 모듈 전원은 들어가 있어서 보드에 계속 읽는 신호 보내고 있는 상황에서 프로그램 업로드 하려고 하면 저런 오류난다.

걍 귀찮아서 대충 꼽았더니 이러네…

아두이노 이것들…

아두이노에 이더넷 쉴드 연결해서 연동작업 테스트 하고 싶은 게 있어서 아두이노를 새로 하나 샀다. (기존 꺼 딴 넘이 망가뜨렸고.. 나머지 하나는 다른 쪽에서 열심히 전기 쳐묵하며 돌고있고…ㅠㅠ) 그리고 박스에서 아두이노 까는 순간 잠싼 놀랐다. ㅡㅅㅡ

이게 그 말로만 듣던 arduino.org 모델이냐..!

아두이노 재단이 arduino.cc랑 arduino.org로 나뉘었단 소식 듣고, 자기들이 각각 IDE까지 따로 내놨다고 했을 때 “이것들 설마 호환도 안되게 하나…?” 라는 소문도 있었고….

근데 저 아두이노에 있는 LED 블링크 거리는 걸로 디바이스 테스트 해보려고 연결하고 기존 cc IDE(1.6.5) 가지고 그냥 했는데 도는 건 잘 돈다. ㅡㅅㅡ

arduino.cc랑 arduino.org에 대해서 한번 뭔 상황인지 찾아봐야지…ㅇㅅㅇ;;; (이런 건 찾아서 알고 있는 게 더 나을듯.)

p.s. 3D 프린터로 아두이노 받침대 겸 옆구리 보호용으로 쉴드를 만들었는데…. 처음 한 것 치곤 조잡하다. ㅠㅠ

openCM 개발환경 구성

*이 글은 중앙대학교 제로페이지, TMI와 서울대학교 SIGMA, 숭실대학교 동아리와 공유하는 글의 목적으로 작성됩니다.

openCM 개발 환경을 구성하는 방법은 쉽다. 아두이노와 마찬가지로 IDE를 제공해 주고 있다. 그리고 생긴것도 상당히 유사하게 생겼다. 왼쪽이 아두이노, 오른쪽이 openCM용이다. (사실 이것도 그냥 외부에서 끌어왔다는 이야기가 무성하다.)

프로그램의 다운로드는 이 링크를 클릭하면 받을 수 있다. 메뉴얼로 연결된다.

윈도우 버전의 경우에는 드라이버까지 추가로 설치해서 실행해 줘야 한다. 그 방법도 메뉴얼에 나와있다. 다음에는 IDE과 보드를 이용해서 실제로 간단하게 해보는 것을 진행해 보기로 하겠다.

openCM 하드웨어 살펴보기

*이 글은 중앙대학교 제로페이지, TMI와 서울대학교 SIGMA, 숭실대학교 동아리와 공유하는 글의 목적으로 작성됩니다.

 

위에 있는 사진이 openCM 입니다. A 타입이고, 핀이나 헤더 등을 직접 납땜하게 만들어놨습니다. (그래서 규링이 싫어합니다)

보시면 구명 옆에 숫자나 글씨가 써있는데 그 핀 번호에 맞춰서 출력 등을 제어할 때 선언해서 쓰면 됩니다. 계중에는 아날로그 입력이 되는 핀이 따로 있고, pwm 제어가 되는 부분도 따로 있다고 합니다.

아두이노와 비교한 사진입니다. 오른쪽이 아두이노 UNO, 왼쪽이 openCM입니다. 크기가 상당히 작죠? 상당히 작은 대신 여러모로 부하가 걸린다고 하는군요. 열을 많이 받아서 뻗는다던지, 부하가 심해서 기판이 녹는다던지…(뭔가 일어나선 안되는 것들인 거 같은 기분이 듭니다.)

제품과 함께 사용설명서도 아래의 사진과 같이 첨부되어 있습니다. 아두이노를 안써보셨거나 잘 모르시는 분들은 아래의 설명서를 같이 참조하시거나 레퍼런스를 보시고 참조하시면 됩니다.

 

하드웨어를 살펴봤으니 다음 글에서는 실제로 개발 환경 설정하는 부분을 살펴보겠습니다.

openCM 글을 시작합니다.

*이 글은 중앙대학교 제로페이지, TMI와 서울대학교 SIGMA, 숭실대학교 동아리와 공유하는 글의 목적으로 작성됩니다.

openCM은 로보티즈사에서 개발한 제어 보드입니다. 아두이노와 같이 PC에서 프로그램을 작성하여 그에 맞는 제어를 할 수 있도록 설계된 보드입니다.

위의 동아리에서는 이 디바이스를 통해 작품 제작 및 펌웨어 수정 작업 등 여러 활동자료를 공유합니다.

그러나 이 블로그에 쓰이는 글은 처음 접하는 사람(openCM 외에도 아두이노도 접해보지 않은 사람들)을 위한 글로써 상당히 쉽게 작성할 것입니다.

MCU(Micro Control Unit)

MCU는 제이터를 기억하고, 연산을 하고 하는… 사람의 몸으로 보면 두뇌와 같은 역할을 한다고 보시면 됩니다.

라고는 여러 곳에서 설명이 되어 있지만, 이게 대체 뭔 소리인지 이해 못하는 경우가 많다. 당장 나도 첨 보면 이해 안된다. 그런 것이라면 바로 떠오르는 게 CPU인데… MCU가 CPU와 대응되는 점이 있겠지만, CPU와는 엄연히 차이가 있을텐데 그 차이를 잘 모르겠던지라… (내가 바보라서 그런가..) 그래서 임베디드란 것을 이해하고 나서 MCU에 대한 정의를 다시 한 번 보도록 하자.

임베디드는 다음과 같이 정의된다.

“특정 기능을 수행하는 규모가 있는 전자적 시스템으로 구성되는 컴퓨터 시스템”
(출처: 위키백과)

여기서 말하는 “특정 수행”이란 녀석을 잘 살펴보니.. 이용되려는 임베디드 시스템 설계에 따라 MCU가 각기 다른 것이 이용되고, 그 MCU의 역할이 따로 따로 만들어져 있는 것을 알게 되었다. 실제로 판매도 그렇게 하고 있기도 하다. 아래 화면을 보면 알 것이다.

이걸 제대로 알려면 각 부품에 맞춰져서 나오는 데이터시트를 보면 알 수 있다.

 

데이터 시트의 일부분. ㅇㅅㅇ

(정해진 목적에 이용되기 위해 정해진 핀에 정해진 작업을 하면 어떤 것이 실행되고 하는지가 설명되어 있는 것이 데이터시트다. 그러므로 데이터시트도 보는 방법이 있으므로 그걸 확인해서 봐야 한다.)

이렇게 MCU 자체가 필요한 목적에 따라 만들어져 있기 때문에 거기에 맞는 사양을 설계하고 그에 따라 이용해야 하는 것이다. 필요한 목적이 단순한, 그리고 특정 작업에 맞춰져서 만들어야 한다면 굳이 범용적인 CPU를 쓰는 것보다 특정 단순작업을 하는 MCU를 이용하는 것이 더 좋은 것이다. 여기에 각종 장치를 연결하여 특정 제어를 하도록 만들면 하나의 하드웨어가 되는 것이다.

…뭔가 횡설수설하게 정리했지만 우선은 이정도로 알아두자. MCU를 구성하는 녀석들에 대해 조금씩 정리하다 보면 이녀석이 뭔 녀석인지 알 거 같으니 말이다.

하드웨어 기본 시작합니다.

워드프레스에 글써보기 오랜만이군요. 이리저리 치이고 하다가 개발자와 건강에 대한 글만 약간 올리고 한 거 외엔 오랜만…

이젠 OS와 하드웨어, 드라이버 시스템 등을 중점적으로 공부하고 하다보니 이런 것들을 정리해서 만들어 봐야 겠군요.

그리고 저도 일단은 하드웨어를 해야하다보니…

아니, 조금이라도 알아야 하다보니..

일단

하지마루요~(퍽!)

PXA255-PRO 사진

제가 직접 실습에 사용할 PXA255-PRO 사진을 보여드리겠습니다. ㅇㅅㅇ

 

옥션에서 구했던 겁니다. ㅇㅅㅇ 외부 케이스는 튼튼하게 생겼습니다. ㅇㅅㅇ

 

내부 사진입니다. 왼쪽 아래에 있는 것이 ARM SoC입니다. 여러가지 붙어있는 것들은 데이터 시트 등의 내부 CD 문서를 보고 확인해야 합니다. (학교에서 주는 시디에 있을 겁니다) 가운데 있는 LCD는 직접 보고 작업할 수 있도록 되어있습니다. ㅇㅂㅇ 그 외에도 시리얼 포트 등 각종 I/O 포트가 달려있는데, 이 보드 세트는 임베디드 리눅스를 통하여 여러 장비들을 물려보는 걸 목적으로 만들어져서 그렇습니다. ㅇㅅㅇ

무튼 이걸로 재밌게 할 수 있는 건 많다고 합니다. 그럼 잘 갖고 놀아보기로 하죠.

라즈베리 파이 방열판 장착 부위에 관하여

라즈베리 파이에 방열판 장착한 사진을 제가 뒤늦게 잘못 업로드해서 사진 재첨부 후 다시 올렸습니다. ㅇㅂㅇ;;

여기에 의문이 드는 분들이 계셔서 글을 올립니다. “왜 세곳에 붙여요? 파는곳에서는 방열판 두개 줬는데?”

Micheal Dornisch라는 분의 블로그에서 참조한 사진을 인용하겠습니다.

 

이분이 직접 촬영하신 라즈베리 파이의 온도입니다. 인터넷으로 동영상 감상을 하는 상황에서 촬영한 것인데, 중앙에 있는 것이 SoC, 왼쪽 하단에 있는 것이 voltage regulator(전압 조정기), 오른쪽에 있는 것이 USB/Ethernet Controller입니다. SoC보다 이더넷/USB 컨트롤러 쪽에 발열이 더 심한 걸 보실 수 있죠?

라즈베리 파이는 작은 보드안에 이것저것 다 집어넣느라 칩 설계도 여러 작업을 할 수 있도록 해두었습니다. 특히 USB, 이더넷 같은 외부 I/O를 칩 하나에 통합해 두어 작업하여 설계 단순화 및 하드웨어 오류 검출을 쉽게 할 수 있도록 설계한 것이 오히려 많은 업무를 하게 되어서 발열량이 많은 칩셋이 되어버렸습니다. 데이터 프로세스 처리와 더불어서 데이터 I/O에 의한 처리도 디바이스의 소형화에 중요한 요소입니다. 그래서 일단 SoC와 이더넷/USB 칩셋은 방열판을 다는 것이 좋습니다. (판매처에서도 두개 주는 것이 그 이유죠)

근데 저 밑에 있는 voltage regulator에는 왜 다나고요? 여러분 PC에 있는 파워 서플라이에 쿨러 달려있는 거랑 마찬가지입니다. 외부에서 들어오는 전원이 USB 같으면 DC입니다만 그 전압이 항상 일정하지 않습니다. 사용 가능한 정도 이상의 전압, 전력이 들어오더라도 그 수치가 미묘하게 들락날락 거립니다. (그래도 측정기로 알아볼 수 있는 정도이니 별 신경 안쓰는 겁니다) 그걸 PCB 내부에서 사용 가능한 전압, 전력으로 나눠서 처리해야 하는데 그 부분에서 여러모로 조정을 시켜주기 위한 게 voltage regulator입니다. 이녀석이 조금이나마 안정적으로 동작하게 하기 위해서 방열판을 달아주면 좋은 것이죠.

Michael Dornisch의 참고용 외부링크를 들어가 보시면(당연히 영문입니다.) 본인이 측정한 상태와 측정 결과, 그리고 PC 메인보드용 방열판 잘라서 달아주는 것을 확인할 수 있습니다.