요즘 IoT라는 단어가 핫하다.

가전이나 전기제품에 IoT라는 이름이 붙이면 가격도 더 비싸게 팔린다.


어제 퇴근하고 나서 갑자기 때 아닌 생활 코딩을 하게 되었다.

얼마 전부터 잘 때 스마트워치로 불을 끄면 좋을 텐데 라는 귀차니즘을 실행에 옮긴 결과이다.


4월 25일 취침등으로 필립스 휴2.0 스타터 키트를 구입했다. (자세한 건 링크 참고)

앱을 통해서 제어할 수 있는 비싼 전구 세트인데 API를 공개해 놓아서 여러가지로 응용을 할 수 있었다.

침대에 누웠는데 충전중인 스마트폰을 들고 불을 끄는 것이 번거로워서 잘 때도 차고 있는 손목 스마트시계에서 끄면 참 좋겠다는 생각을 하게 된 것이다.


협탁(충전중인 스마트폰) | 아내 | 나


이런 식으로 자고 있기 때문에 스마트폰을 집기 위해서는 아내를 넘어가는 불편이 있었기 때문에 아내한테 불꺼달라고 요청을 했는데, 먼저 자면 결국 내가 돌아서 스마트폰을 집어야 하기 때문이다.


어쨌든 사설을 길게 해봤자 감이 잘 안올 테니 좀 전에 아이폰으로 찍은 동영상을 보면 이해가 될 것이다.

참고로 내가 사용하고 있는 스마트 시계(라기 보다는 피트니스 시계)는 Garmin 의 Fenix 3 HR 이다.



쉽게 이야기 하면시계에서 사용할 수 있는 앱을 만들어서 시계에 넣고 동작 시킨 것이다.


앱은 단순하게 아래와 같이 불을 켜거나(Light On) 끌 수 있게(Light Off) 두 개의 영역으로 나누었다.

참고로 Sample에 있던 Attention 을 기반으로 수정을 했다.


DOWN 버튼을 누르면 회색 빛깔이 아래로 바뀐다.


동작은 START-STOP 버튼을 누르도록 했다.


즉 Light On 에 넣고  START-STOP 버튼을 누르면 불이 켜지는 것이고,

Light Off 에 넣고  START-STOP 버튼을 누르면 불이 꺼지는 아주 단순한 장난감 앱이다.



피닉스 3의 경우 앱 파일은 prg이라는 형식의 바이너리 파일이다.

USB 인터페이스로 컴퓨터에 연결하면 외장 USB 드라이브 처럼 연결이된다.


GARMIN/APPS/ 아래에 위치하면 실행이 가능하다.


가민의 스마트 워치는 애플와치나 갤럭시 기어에 비하면 일반인에게는 생소할 수 있어서 자세하게 어떻게 만들었는지 공개해도 별로 의미가 없긴 한데 주요 코드를 공개하면 아래와 같다.


불을 켜는 부분이다.

using Toybox.Communications as Comm;


// ...

class AttentionView extends Ui.View {

// ...

// Turn on light

function lightOn(isOn) {

var params = {

"on" => isOn

};

var headers = {

// body will be encoded as '{"on":true}'

"Content-Type" => Comm.REQUEST_CONTENT_TYPE_JSON,

// accept responses that are reported as json-compatible

"Accept" => "application/json"

};

var options = {

:method => Comm.HTTP_REQUEST_METHOD_PUT,

:headers => headers

};

Comm.makeWebRequest("http://192.168.1.2/api/fmx2mSqgrIznR7JKoOilDeuy1elBSIkhRtwZrTUV/lights/2/state", params, options, method(:onReceive));

}


    // Handle communication events

    function onReceive(responseCode, data) {

    }


피닉스3에서는 HTTP 클라이언트 기능이 가능한데, 직접적으로 네트워크에 연결해서 통신을 하는 것이 아니라 블루투스로 스마트폰을 프록시(Proxy)를 이용해서 간접적으로 통신을 한다.


Fenix 3 HR -> Smart Phone (iPhone/Android) -> Garmin Connect App -> Network (Wi-Fi or LTE ...)


참고로 Toybox.Communications를 사용하기 위해서는 manifest.xml에서 권한을 명시해야 한다.

아래 블럭중 <iq:uses-permission id="Communications"/> 부분이다.

<!-- This is a generated file. It is highly recommended that you DO NOT edit this file. --><iq:manifest xmlns:iq="http://www.garmin.com/xml/connectiq" version="1">

    <iq:application entry="AttentionApp" id="966D8948C2494F72ACEBD1A7A9719644" launcherIcon="@Drawables.LauncherIcon" minSdkVersion="1.3.0" name="@Strings.AppName" type="watch-app">

        <iq:products>

            <iq:product id="fenix5"/>

            <iq:product id="fenix5x"/>

            <iq:product id="fenix5s"/>

            <iq:product id="fr935"/>

            <iq:product id="fr630"/>

            <iq:product id="fr235"/>

            <iq:product id="fr735xt"/>

            <iq:product id="fr230"/>

            <iq:product id="vivoactive"/>

            <iq:product id="fenix3"/>

            <iq:product id="fenix3_hr"/>

            <iq:product id="fenixchronos"/>

            <iq:product id="d2bravo"/>

            <iq:product id="d2bravo_titanium"/>

            <iq:product id="fr920xt"/>

            <iq:product id="epix"/>

            <iq:product id="edge_1000"/>

            <iq:product id="edge_520"/>

            <iq:product id="vivoactive_hr"/>

            <iq:product id="edge820"/>

            <iq:product id="oregon7xx"/>

            <iq:product id="rino7xx"/>

        </iq:products>

        <iq:permissions>

        <iq:uses-permission id="Communications"/>

       </iq:permissions>

        <iq:languages>

            <iq:language>eng</iq:language>

        </iq:languages>

    </iq:application>

</iq:manifest>



저작자 표시 비영리 동일 조건 변경 허락
신고

지난 번 '스마트한 조명? 필립스 휴(HUE) 구입, 전구 하나 반품!'의 후속 글


아이폰에서 HUE 앱을 설치해서 사용하는데, 알림이 보여서 확인해보니 '소프트웨어 업데이트'에 (1)이 보여서 누르면 앱이 죽는 일이 계속 벌어졌다. 나만 그런줄 알았는데 아내도 마찬가지라고 한다.


이럴 때 해결하는 방법은 아래와 같다.

HUE API를 이용해서 하면 된다.


HUE가 있는 네트워크내에서 PC에서 하면 된다.


1. HUE 브릿지의 IP를 확인한다.

 주소: https://www.meethue.com/api/nupnp

에 접속하면 아래와 같이 현재 HUE의 내부주소가 보인다.

2. #1에서 얻은 IP로 API debug 툴에 들어간다.

 주소: 본인의 internalipaddress 로 사용한다.

 나의 경우 내부 IP가 이므로, http://192.168.25.5/debug/clip.html 로 접속을 하였다.

이 페이지는 개발을 할 때 테스트를 위한 일종의 Restful 도구라고 보면된다.

웹 브라우저에서는 GET 밖에 할 수 없으므로 PUT, POST, DELETE같은 다른 메소드(verb)를 수행할 수 있게 해준다.

메세지 바디랑 결과까지 입력/확인 할 수 잇는 영역이 있는 셈이다.


우선 개발 도구를 사용하기 위해서는 개발 키가 필요하다.



3. 개발 키 받기.

 주소: http://<bridge ip address>/api

CLIP API Debugger의 URL 부분에 /api를 넣고

Message Body:에는 아래와 같은 내용을 넣고

{"devicetype":"my_hue_app#iphone namo"}


 POST 버튼을 누른다.


그러면 아래와 같이 '링크 버튼이 눌리지 않았다'는 결과를 받게 되는데,


브릿지의 버튼을 한 번 눌러주고 POST를 하면 아래와 같은 결과를 받게 된다.


해당 username 이 바로 API를 이용하기 위한 KEY이다.


4. 브릿지의 현재 상태 확인하기.

 주소: /api/{username}/config

 HTTP: GET

나의 경우 

"swupdate": { "updatestate": 2, ... } 로 받았다.

위의 그림에서 updatestate가 3인 것은 캡쳐를 업데이트 명령을 내린 후에 캡쳐한 것이라서 상태가 이미 3으로 바뀐 것이 찍혔다.



updatestate가 2라는 것은 업데이트가 가능하다는 것이다.

관련 상태 다이어그램은 아래와 같다.


5. 업데이트 명령을 내리기

updatestate가 3이되면 브릿지가 업데이트를 하게 된다. (전제조건: updatestate가 2 [업데이트가 가능]여야 한다.)


 주소: /api/{username}/config

 Message Body: {"swupdate": {"updatestate":3}}

 HTTP: PUT





6. 상태 확인. (바로는 아니고 시간이 좀 지나야 한다)

 주소: /api/{username}/config

 HTTP: GET


를 해보면 updatestate가 1로 바뀌었음을 알 수 있다.

1의 의미는 현재 시스템 업데이트를 위한 다운로드가 진행중인 것이라는 의미이다.



자세한 것은 개발자 문서 https://developers.meethue.com/documentation/software-update 를 참고하면 된다.

저작자 표시 비영리 동일 조건 변경 허락
신고

블랙박스를 장착할 때 상시모드로 시공을 했다.

문제는 겨울철이다보니 배터리 방전 염려가 생겼다. 실제로 방전까지 간 것은 아니였지만 주차모드 상태에서 다음날 블랙박스 상태를 보니 꺼져있었다. 저전압 차단 기능이 있어서 블랙박스가 먼저 꺼진 것이어서 다행이다. 하지만 만에 하나 배터리 방전이라도 되면 연료 절감형 스탑&스타트 시스템(ISG시스템; Idle Stop & GO)이 적용된 1.5 터보 말리부에는 FLA(Fluid Lead Acid) 배터리 보다도 비싼 AGM(Absorbed Glass Mat) 배터리를 교체해야 한다. 참고


블랙박스에 전원 스위치가 있어서 운행을 마치고 끌 수는 있는데 문제는 다음에 운행을 할 때 블랙박스를 끈 채로 다니다가 켠 적이 한 두번이 아니였다. 그래서 시동이 켜지면 블랙박스도 녹화가 시작될 수 있었으면 좋겠다는 생각이 들었다.


블랙박스를 설치한 쪽에 문의를 해보니 주행모드로만 사용할 경우 B+ 단자를 ACC랑 조인트하면 된다고 한다.


인터넷을 보니 이미 스위치를 부착한 글도 있어서 참고를 했다.

http://blog.naver.com/jjunblog/220778684939


그래서 옥션에서 스위치를 구입했다.

http://itempage3.auction.co.kr/DetailView.aspx?itemNo=A607121965


스위치는 490원인데 배송비가 2,500원! 배보다 배꼽이 더크다.

옵션에 보면 배선작업하면 230원이 더 부가되는데 배선도 신청했다.


토요일에 주문해서 월요일에 도착했다. 판배자가 논산쪽 이었는데 금방왔다.

부품이 원래 작기 때문에 아래와 같은 박스에 담아서 보내주었다.


배선달린 스위치 이외에 케이블 타이, 수축튜브, 조인트 캡, 마운트 등을 같이 넣어줬다.


한밤중(22:32)에 지하주차장에 내려갔다.

첫 차라서 퓨즈박스 여는 것부터 어려웠다. 매뉴얼을 보았는데 솔직히 도움이 되지 않았다.

인터넷으로 찾아보니 오른쪽 홈을 - 자 드라이버로 찔러 넣어야 빠진다고 했는데 빠지지 않았다. 결국 힘으로 해결.

빼보고 나니 그냥 빼면 되는 구조이다. 나처럼 처음 빼는 동일 오너를 위해 사진 첨부.

사진을 보면 알다시피 넣을 대는 홈이 경사가 완만하고, 뺄때는 경사가 급해서 잘 안빠지게 되어 있다.


작업전에 만일을 대비해서 사진을 찍어놓았다. 나중에 배선할 때 참고할 수 있으니 꼭 찍어놓자.


설명서상의 퓨즈박스의 배선은 다음과 같다.

F37(앞좌석 보조 전원 소켓)에 ACC, F17(전동식 허리받침대)에 B+ (상시) 전원이 연결되어 있었다.



처음에 할 일은 배선의 피복 벗기기. 가져간 라디오 펜치의 날이 무뎌서 잘 잘리지 않아서 라이터로 열을 이용해서 녹여냈다.

피복 벗기는 것은 미리 집에서 해가길 추천한다. 추운날씨에 피복 벗기기가 퓨즈함 여는 것 다음으로 어려웠다.


상시전원(F17)을 스위치의 검정색 선으로, VCC(F37)에 물려있던 블랙박스 적색 선과 스위치의 적색을 이어서 F37에 꼽았다.

블랙박스의 노란색 B+ 단자는 스위치의 노란색 가운데 배선에 조인트 했다.


퓨즈함을 닫기 전에 테스트를 했다.

스위치를 작업전(상시녹화 모드)으로 해놓고 동작을 했더니 잘 동작한다.

그런데, 주행전용모드로 스위치를 바꾸고 테스트를 했는데 블랙박스가 꺼지지 않는 것이었다.


혹시 배선이 잘못되었나 싶어서 VCC 조인트한 스위치를 제거했는데 이번에는 블랙박스가 켜지지 않는 것이었다.


몇 번 테스트를 하다보니 원인을 찾았다.

시동을 끄고 난 이후에 VCC 전원이 바로꺼지는 것이 아니라 문을 열고 나가는 동작을 해야 그제서야 차단되면서 꺼지는 것이었다.


스위치는 안쪽으로 밑으로 내려서 늘여놓았다.

처음으로 퓨즈함을 작업을 했는데 처음에는 퓨즈함 여는 것도 어려웠는데 작업을 하고 보니 생각보다 간단해서 다음에는 더 잘 할 수 있을 것 같다.

저작자 표시 비영리 동일 조건 변경 허락
신고

데이터를 올바른지를 검증하기 위해서 패리티라는 추가 데이터를 심심치 않게 사용한다.

내가 처음 들었던 것은 네트워크 수업 때였지만 일상생활에도 많이 쓰인다.


잘 알려진 예로는 주민등록번호 맨 마지막 자리라던지 바코드 등이다.

궁금하면 http://tdremon.tistory.com/entry/주민등록번호-패리티-코드에 많은 예제가 나와 있다.


재산세 납부 영수증이 와서 보고 있는데 가상계좌번호에 패턴이 보이기 시작했다.

같은 주택을 공동 소유 하고 있기 때문에 가상계좌를 일련번호가 있을 것으로 가정하고 보니

아래와 같이 일련번호 + 패리티가 보이기 시작했다.

농협

790133-85-77207P

790133-85-77208P


우리은행

273-443551-18-37P

273-443551-18-38P


신한은행

562-109-5665630P

562-109-5665631P


국민은행

503690-14-10PPPP

503690-14-09PPPP


농협, 우리은행, 신한은행은 맨 마지막 자리가 패리티이고, 국민은행만 4자리의 패리티를 사용하는 것으로 추측된다.


혹시 패리티 알고리즘을 알고 있는 분은 댓글로 맞추어 보길 바란다.

저작자 표시 비영리 동일 조건 변경 허락
신고

여름 휴가를 영국으로 가게 되었다. 그래서 집을 10일 이상 비워야 하게 되었는데 기르던 금붕어 먹이 급여가 문제였다.

다자란 성어라면 괜찮을 것 같은데 하루에 4번씩 조금씩 자주 줘야 하는 유어/치어 들이라서 걱정이 되었다.


벤치마킹

인터넷에서 '자동먹이급여기'로 검색을 하면 꽤 여러가지 상용 제품이 있다.

 - G마켓 - Automatic Fish Feeder (FF-03) (매뉴얼: PDF / 급여영상: YouTube25,000원 

 - 옥션 - 자동먹이 공급장치 AF-2009D (매뉴얼, 스캔PDF / 급여영상: YouTube) 23,000원


 - Amazon: EHEIM (급여영상: YouTube / 제작사: https://www.eheim.com/en_GB/products)


DIY 벤치마킹

해외: DIY Automatic Fish Feeder Using Arduino Nano (링크) / 동영상: YouTube


국내: 초이스님::설 연휴 대비 급조한 자동 먹이 공급기 (링크)


         ARDUINO 기반의 서보모터를 이용한 자동먹이 급여장치 구현 (링크)


먹이를 지속적으로 급여를 위해서는 모터가 필요했다.

 - 주기적으로 급여

 - 회전 운동 -> 중력에 의한 먹이 투하


가지고 있는 모터는 '서브모터'(임의의 각도로 제어가 가능한 모터, 초이스님 작품 참고)와 '기어박스가 장착된 DB 모터' 부품이 있었다.

나는 DC 모터를 이용하기로 했다.


DC 모터 양방향으로 제어하기 (링크) by L293D 모터 드라이버 칩 이용

1. 급여 통 : 빨대

2. 립톤 아이스티 스푼


처음에 급여 통을 공차 같은 버블티용 큰 빨대를 이용하려고 생각했다.

문제는 큰 알갱이들만 있을 때는 별 문제가 없었다.

문제는 작은 치어들을 위해서 가루를 빻아서 같이 넣으니 생겼다. 작은 알갱이가 큰 알갱이랑 같이 결합해서 마찰(?)을 증가하는 역할을 하게 된 것.


동영상을 보면 먹이가 일정하게 나오지 않고 있는 문제점이 보인다. (작은 먹이를 넣기도 전에 균일하게 나오지 않는 문제가 있었어..)

또한 문제가 모터를 계속 돌리다 모니 빨대까 나중에는 모터에서 빠지는 문제도 있었다.


벌써 이때가 새벽 2시였고 영국에 가는 날이었다.


다음 생각해본 것은 영국국에 있는 날이 12일이니깐 중간 6일정도에 한꺼먼에 먹이를 투여 하면 어떨까라는 생각이 들었다.

서브모터 돌리는 대기시간을 6일 후에 맞춰놓으면 될테니깐.


그래서 다음에 생각한 것은 티스푼을 돌리는 것으로 바꾸었다.


생각보다 단순하고 먹이도 100%로 원하는 시간에 투여가 가능했다.

티스푼으로 바꾸고 나서 생각을 해보니 저런 형태의 큰 스푼이면 여러번 돌려도 괜찮을 것 같다는 생각이 들었다.


빨대 -> 티스푼 -> 립톤아이스톤 스푼


그래서 최종 완성된 형태는 아래와 같다.


립톤 스푼에 먹이의 양을 많이 담을 수 있다는 점은 좋았으나 먹이가 한꺼번에 떨어지는 것은 티스푼하고 동일했다.

그래서 감자망과 랩을 컵 입구에 고무줄로 묶었고, 랩에 구멍을 뚫어서 먹이가 떨어지는 정도를 조정했다.


동작하는 동영상을 보면 제법 잘 작동함을 알 수 있다.


배선은 딱히 기록을 해놓지 않았는데

2, 4, 9번 핀을 사용한다. 9번핀을 모터를 동작하게 하는 아날로그 핀드로 사용했고, 2, 4번 핀을 드라이버의 모터 출력 핀으로 사용했다.

(L293D 모터 드라이버에는 2개까지 모터를 연결 할 수 있다.)


소스코드는 다음과 같다.  sketch_aug02a_motor.ino


주기적으로 시간을 통제하기위해 SimpleTimer라는 공개된 타이머 소스를 사용했다.

 http://playground.arduino.cc/Code/SimpleTimer

에서 다운받을 수 있으며 다운받은 소스를 libraries 폴더 아래에 넣으면 된다. (위치가 어디인지 잘 모르겠으면 http://www.arduino.cc/en/Guide/Libraries 를 참고한다.)


8월 6일에 만들고 여행을 갔다 돌아온 17일에 잘 동작을 하고 있는 집에 오자마자 확인했다.

금붕어들은 잘 활발히 돌아다니고 있었고 일부 사료가 잎사귀에 떨어져 있는 것을 확인했다. 이것은 먹이를 중력에 의해 떨어뜨리는 방식에 단점이다. 뭔가 레일이나 떨어지는 길을 통제를 할 수 있다면 개선 할 수 있는  것이다.


아무튼 11박 12일의 영국 여행은 잘 다녀왔다~



저작자 표시 비영리 동일 조건 변경 허락
신고

Arduino UNO R3는 아두이노를 처음 시작할 때 가장 많이 사용되는 하드웨어라고 한다.

관련 공식 웹사이트 주소는 다음과 같다:

- https://www.arduino.cc/en/Main/ArduinoBoardUno


ATmega328에 기반한 보드라고 하고 자세한 시트는 링크를 참고: 링크

회로도는 다음과 같다: https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf


전원공급

보드에 전원을 공급하기 위한 방법은 2가지가 있다.

1. USB 소켓에 USB-B형 케이블로 연결

2. DC 소켓에 7~12V DC 어댑터(외경 : 5.5mm / 내경 : 2.1mm)를 연결


USB로 연결하면 아래와 같이 LED에 불이 들어 온다.



LED 불 깜박이기(예제)

https://www.arduino.cc/en/Main/ArduinoBoardUno 에 있는 샘플이다.

USB를 연결하고 아두이노 개발 IDE를 띄운다.

예제는 File > Examples > 1.Basics > Blink. 에 있다.


(복사 & 붙여넣기를 위한 코드)


/*

* 깜박이기

*

* LED의 불을 1초는 켜고, 끄는 것을 반복한다.

* 이 예제는 public 도메인에 속한다.

*/ void setup() {  // 출력을 위한 디지털 핀을 초기화한다.  // 대부분의 아두이노 보드들에는 Pin 13에 LED가 연결되어 있다.  pinMode(13, OUTPUT); } void loop() {  digitalWrite(13, HIGH); // LED를 켠다  delay(1000);            // 1초를 기다린다  digitalWrite(13, LOW);  // LED를 끈다  delay(1000);            // 1초를 기다린다 }


자신의 보드 선택하기

도구 메뉴에 보면 보드와 포트가 있는데 자신의 보드에 맞게 선택한다.

나는 Arduino Uno와 /dev/cu.usbmodemfa131을 선택했다.


프로그램 컴파일 / 업로드

스케치(코드)를 작성하고 보드와 포트 설정만 잘 되어 있으면 쉽게 올릴 수 있다.

컴파일: 버튼, 스케치 메뉴 > 확인 / 컴파일 (단축키⌘-R)을 누르면 된다.

업로드: 버튼(단축키: ⌘-U / 메뉴: 스케치 > 업로드)을 누르면 프로그램을 바로 업로드 할 수 있다. 올리고 나면 메모리의 사용량을 알려준다.


올리고 나면 보드의 상태가 바로 바꾼다. 오렌지색 LED가 깜박거림을 알 수 있다.


프로그래밍 리팩토링

프로그래밍 세계에서는 리팩토링(refactoring)이란 용어가 흔희 쓰이는데 '결과의 변경 없이 코드의 구조를 재조정함'을 의미한다. 같은 기능의 코드를 가독성 있고 좀더 알기 쉽게 바꾸는 작업이다.


우선 13이라는 매직넘버를 기호 상수로 의미를 부여할 것이다.

전역 변수로 LED의 값을 뺀다. (LED라는 전역 변수가 등장하였다. 주석(//로 시작되는 회색의 라인)도 같이 나왔다.)

이제 해당 변수로 대체할 예정이다. 13이 무엇을 의미하는지가 좀더 명확해졌다.


다음은 1000이라는 매직넘버에 의미를 부여해 볼 수 있다.


리팩토링과 임베디드에 대한 고찰

매직넘버를 기호 상수로 바꾸기 작업은 사람에게는 가독성을 준다. 하지만 메모리 제약이 있는 임베디드의 세계에서는 어떻게 보면 안그래도 적은 메모리를 더 부족하게 되는 원인이 될 수 있다.

실제 두 개의 전역 변수를 만들고 나서 프로그램을 올려보면 전역변수의 크기가 9바이트에서 13바이트로 4바이트가 늘어난 것을 알 수 있다.

여기서 int타입은 2바이트 임을 알 수 있다. (4바이트 / 2개 = 2바이트)


책에서 나온 소스코드에서는 처음에 led 라는 변수를 통해 코드가 있었지만, 지금 시점의 코드에는 이 변수가 없어진 것도 되짚어 보면 이런 전역 변수를 줄이기 위함이 아닌가 생각이 된다.


맥용 IDE의 버그(?)

스케치 '확인 / 컴파일'의 단축키가 ⌘-R라고 위에서 언급했는데, 이상하게 가끔 아래와 같은 오류 메세지가 뜨는 것이 보였다.

분명히 문법상 오류가 없는데 발생했다.

/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o:(.init9+0x0): undefined reference to `main' collect2: error: ld returned 1 exit status 컴파일 오류 발생.


알고보니 '입력 소스'가 한글로 되어 있을 경우 ⌘-R을 누르면 위의 화면 처럼 컴파일 오류가 발생함을 알게 되었다.

따라서 단축키로 동작을 할 때 불편하지만 언어를 영어로 바꾸고 해야 한다.

정 불편하면 버튼을 누르면 된다.


저작자 표시 비영리 동일 조건 변경 허락
신고

회사에서 도서 주문의 지원을 해주고 있다.

어떤 분이 아두이노 키트가 포함되어 있는 도서를 주문했다.

 - 아두이노 완전정복 + Arduino KIT

가격은 놀랍게도 14만 5천원!!1


회사에서 자기계발을 위해 도서를 지원하는데 이런 키트가 포함되어 있는 것까지 구입할 수 있다니 좋다. 또한 재미있을 것 같아서 같이 나도 스터디를 하기로 얘기를 하고(우리 팀 말고 다른 팀에도 이 키트를 주문한 사람을 발견) 나도 주문을 했다.


그리고 지난 수요일(6/24) 도착.


안에를 열어보니 책과 키트가 들어있었다.


아두이노 보드는 UNO R3였다.

 아두이노가 무엇인지 처음 듣는 사람들은 TED에서 마시모 반지라는 사람이 발표한 영상을 보는 것이 좋을 것 같다.

https://www.youtube.com/watch?v=UoBUXOOdLXY / TED 웹사이트의 영상 (링크) -> 이쪽은 자막도 나온다!

동영상을 유심히 본다면 우리가 '아두이노'라고 붙인 이름이 /아르뒤이노/라고 들린다.


아두이노 공식 웹사이트에 가봐도 아직 Rev.3이 팔고 있는 걸로 보아 아직까지 최신의 보드인 듯 싶었다.

 - https://store.arduino.cc/product/A000066


키트에 포함되어 있는 보드 (Arduino UNO R3)


뒷판에 보면 제품명이 들어가 있다.


현재 웹사이트의 보드의 뒤 판하고는 조금 다르긴 하다.



개발환경 갖추기

프로그래밍을 할 때 콘솔(혹은 터미널 혹은 명령 프롬프트)에 직접 타이핑을 할 수 있으나 통합개발환경(IDE)라고 하는 것에서 개발하는 것이 편하다. 그러하듯 아두이노도 IDE를 제공을 한다.

오픈 소스 프로젝트이므로 플랫폼도 다양하게 지원한다. 참고로 나는 집에서 Mac OS X Yosemite를 사용하고 있어서 맥 환경을 택할 것이다.


공식 웹사이트에보면 맥에서 개발환경을 갖추는 방법이 잘 적혀있다. : https://www.arduino.cc/en/Guide/MacOSX


우선 https://www.arduino.cc/en/Main/Software 에 가보면(아직 한글로 번역되어 있는 사이트가 없어서 영어를 선택했다.) 자기 컴퓨터에 맞는 플랫폼을 선택한다. 나는 맥이라서 'Mac OS X 10.7 Lion or newer'를 선택하였다.


다운로드를 받으려고 링크를 누르면 기부하라는 중간 페이지가 나온다. 기부는 개인의 주머니 사정에 맞게 적절하게 하고 (만약 기부를 원하지 않는다면 'JUST DOWNLOAD'를 누르면 된다.) 링크를 누르면 된다.

다운로드 폴더에 가보면 arduino-1.6.5-macosx.zip 형식의 파일이 있다. 물론 파일 이름은 다운로드를 받는 시점에 따라 버전이 바뀔 수 있으므로 숫자 같은 것은 달라질 수 있다. 내가 받은 버전은 1.6.5 버전이네.

압축을 풀고 열어보면 'Arduino.app' 파일이 있는데 개발을 자주 할 것이라면 '응용 프로그램' 디렉토리로 드래그 해서 사용을 한다.


실행을 해보면 인터넷에서 다운로드된 응용 프로그램이라고 경고성 창이 뜨는데 '열기' 버튼을 누른다. (당연히 인터넷에서 다운로드 했지;;;) 기존 매버릭스에서는 ctrl + 열기를 해야 인터넷에서 다운로드 받은 파일을 실행할 수 있었는데 요세미티에서는 불편해서 그런지 단순 경고창이 뜨는 것으로 바뀐 것 같다.


실행이 되면 아래와 같은 창이 뜬다. 맥에서는 메뉴 창이 공용으로 뜨므로 같이 캡쳐를 했다. 윈도우라면 응용 프로그램마다 별도의 메뉴창이 뜨는 것 같았다.


기본적인 뼈대(stub) 코드가 들어가는데 setup()과 loop() 함수가 있다.

아두이노는 C언어를 이용하여 코딩을 한다고 들었다.


저작자 표시 비영리 동일 조건 변경 허락
신고