손바닥컴퓨터들2014.04.18 00:25

아두이노 혁명과 함께  많은 분들이  아두이노의 가능성을 좀더 넓히려는 시도를 하게되었습니다.

그 노력중의 하나가  USB Host 기능을 추가하여  PC와 같이  USB 마우스나  키보드 등의 USB 기기를 연결하여 작동할수 있도록 하는것이었습니다.   이를 지원하는 USB Host Shield 제품이 만들어졌으며, 이를 지원하는 공개 라이브러리가 발전되기 시작하였습니다.   


이후 구글은 Google IO 2011 행사에서 아두이노와 안드로이드기기의 연결을 지원해주는 Open ADK 를 공개하여 안드로이드 스마트폰 기기를 다양한 외부 기기(아두이노 연계)와 연동할 수 있는 가능성을 열어 줬습니다.  이때 모태가 된 기술이 바로 아두이노의 USB Host 연동 라이브러리입니다.


이후 공식 아두이노팀은 아두이노에 USB Host Shield 기능을 기본으로 내장한 Arduino ADK 제품을 발표하였습니다.

이를 통해 UNO 보드에 별도의 USB Host Shield 를 장착해야하는 불편이 없어졌으며,  ADK 보드를 사용하여 좀더 편리하게  공개된 라이브러리를 활용하여  USB 마우스나 키보드, 일부 Bluetooth Dongle 등과 연동하는 작품 제작이 가능해졌습니다.


한마디로 무궁무진한 가능성을 보유한 아두이노 ADK 보드입니다.


하지만  많은 분들에겐 왠지  어렵고  가까이하기엔 뭔 ADK 보드이며,

자칫 잘못하면 1주일을 헤매도 뭘 어떻게 사용해야하는지 답이 안나오는 ADK 보드이기도 합니다.


저 또한 많은 것을 알지는 못하지만,  직접 테스트해본 결과 아두이노에 대해 어느정도 경험이 있으신 분들이라면 많이 어렵지 않게 기본적인 사용이 가능한것으로 판단되어  미루고 미뤄왔던 ADK 보드의 기초 사용법을 적어봅니다. 


자,  시작해보십니다.


Mega ADK 보들 사용을 하시려면 일단  아래의 공식 제품소개 페이지를 참고하시면됩니다.

http://arduino.cc/en/Main/ArduinoBoardMegaADK?from=Main.ArduinoBoardADK


하지만 장황하고 혼돈되어 뭘 봐야할지 모르겠습니다.


2011년 처음 ADK보드가 나왔을때는 google ADK 공식 페이지에서  관련 SDK 와 함께 아두이노 예제소스가 제공되었습니다.

하지만  최근에 일반 USB_HOST_SHIELD 라이브러리가 보강되어  ADK보드에서도 조금만 손보면 간단히 사용 가능하게 되었으며, 구글 IO Open ADK 관련 페이지를 참고할 필요가 없게 되었습니다. 아래의 사이트에서 해당 파일을 다운로드하시면  필요한 라이브러리와 예제소스를 한번에 받으실 수 있습니다.


https://github.com/felis/USB_Host_Shield_2.0



1. 라이브러리와 예제소스가 포함된 파일을 다운로드 하세요


위 사이트에서 아래 파일을 받으시면 됩니다.

https://github.com/felis/USB_Host_Shield_2.0/archive/master.zip



2. 라이브러리 설치 및 정상 설치 여부 확인


자, 이제 라이브러리부터 설치하기위해 다운로드한 파일을 압축해제합니다.

압축해제된 파일이 폴더에 들어있는데요


보통 USB_Host_Shield_2.0-master 라는 폴더명으로 압축이 풀리게됩니다.

아마도 대부분 이 폴더속에 동일명으로 또 하나의 폴더가 보일겁니다.


그 폴더 속에  *.h 파일과  *.cpp 파일이 보이고  examples라는 디렉토리가 보일겁니다.

이 폴더가 바로 라이브러리 폴더입니다.

이 폴더의 명칭을  USB_Host_Shield_2로 변경하시기 바랍니다. 

(현재의 제목으로는 특수문자가 포함되어 있어 라이브러리 설치시 오류가 발생합니다.)



이제 아두이노 SW를 엽니다.

현재 가장 기본으로 사용되는 아두이노 SW 1.0.5 버전을 기준으로 소개해드리겠습니다.

1.0버전 이전에는 직접 설치할 라이브러리 폴더를 아두이노 라이브러리 폴더에 복사해 넣었었는데요

최근 SW 에서는 라이브러리 설치를 위해 파일 복사를 할 필요가 없고,


메뉴에서 스케치 > 라이브러리 가져오기... >  위에서 폴더명을 변경해둔 "USB_Host_Shield_2" 폴더를 선택을 해주시면 자동 설치됩니다.


이후에 꼭 SW를 재 시작해주셔야합니다.

재시작 이후, 정상 설치 여부는 예제가 등록되었는지 확인하면됩니다.


메뉴에서 파일 > 예제 > USB_HOST_SHIELD_2 라는 폴더가 보이면 일단 설치완료입니다.



3. 라이브러리 및 예제사용을 위한 안내문 읽기


그리고 아래의 페이지에 있는 안내문을 꼭! 꼭! 꼭! 읽어보시기 바랍니다.

http://felis.github.io/USB_Host_Shield_2.0/


대부분의 공개 라이브러리나 예제소스들은 다운로드페이지나  소스코드 폴더에 

날좀 보셔(README)정보를 함께 제공합니다만,,,,

많은분들이 제작자가 힘들고도 친절하게 적어놓은 사용 안내문을 잘 살피지 않는것 같습니다.

하지만, 종종  "날좀 보셔" 를 안보실 경우  낭패를 보시게 되므로 꼭 읽어보시기 바랍니다.


즉, 위 라이브러리는  여러종류의 보드나 제품들에서도 사용할 수 있기때문에  사용자의 환경에 따라 수정이 필요한경우가 있으며, 이에 대한 정보를 README 에 안내하게되므로  꼭 참고하셔야합니다.


실제로,   Mega ADK 보드의 경우, 위 힌트글을 안보시고  아두이노 1.0.5에서 사용하시면  작동이 안되게됩니다.

안타까운건 이경우도  컴파일 및 업로드는 정상적으로 된다는 것입니다.


하지만 정상 작동이 안되게되고, 며칠을 고민해도 작동이 안되게됩니다.

그리곤 결국 보드 고장을 의심하시고,  구매처에 반품을 요청하게 됩니다. 

(정말 가슴 아픈 상황입니다 ^^;;)


해당 안내글을 참고하시면,  Mega ADK보드를 아두이노 SW 1.0.5 버전에서 사용하실경우

라이브러리 폴더에 있는 settings.h 파일에서 Mega ADK 관련 define문을 수정해야 함을 알수 있습니다.


4.  자신의 환경에 맞게 라이브러리 수정하기


아두이노 라이브러리 폴더에 설치된 해당 라이브러리 폴더속에 있는 settings.h 파일을 수정합니다.

(주의.  최초에 다운로드 한 라이브러리파일속에 있는 파일을 수정하는것이 아닙니다.)


아두이노 라이브러리 폴더의 위치는  메뉴에서 파일 > 환경설정 >"스케치북 위치" 를 보시면 됩니다.

윈도우 탐색기로 해당폴더를 찾으셔서 그속에 있는 Arduino 폴더내에 Libraries 폴더가 있습니다.

이곳에 USB_Host_Shield_2 폴더가 있으며 그 안에서 settings.h  파일을 열어서 아래의 항목을 수정해주시면 됩니다.

(단, 아두이노 Due 등의 보드 지원을 위한 아두이노 SW 1.5.5 이상을 사용시엔 수정을 안해도 된다고 안내되어있습니다.)


/* Set this to 1 if you are using an Arduino Mega ADK board with MAX3421e built-in */


아래의 문장을

#define USE_UHS_MEGA_ADK 0 // If you are using Arduino 1.5.5 or newer there is no need to do this manually


아래와 같이 숫자 0만 1로 변경하시면됩니다.

#define USE_UHS_MEGA_ADK 1 // If you are using Arduino 1.5.5 or newer there is no need to do this manually


10분도 안걸리는 참 간단한 작업이지만, 이 작업을 안하시면  며칠을 노력하셔도 제대로 작동이 안됩니다.


자, 이제  본격적으로 테스트를 해봅시다.  



1부.  ADK보드에 USB 마우스 키보드를 연결하여 테스트 해보기



자, 이제 대부분 이미 보유하고 계신 장비로도 쉽게 테스트가 가능한 예제를 실행해보겠습니다.

가령 아래의 예제들은 대부분의 USB 마우스나 USB 키보드로 테스트 가능합니다.


파일 > 예제 > HID > USBHID_desc     (USB 기기 디스크립션 확인 예제, 일반 마우스로도 테스트 가능)

파일 > 예제 > HID > USBHIDBootMouse (USB 마우스 예제)  

파일 > 예제 > HID > USBHIDBootKbd   (USB 키보드 예제)


일단,  Mouse 예제를 해보겠습니다.


1. 예제 불러오고 컴파일 및 업로딩


파일 > 예제 > HID > USBHIDBootMouse 예제를 컴파일하시고  업로드 하시면 됩니다. 

컴파일중 오류가 난다면  라이브러리를 잘못 설치하셨거나,

기존에 설치하셨던 라이브러리와 충돌하는경우로 여겨집니다.


2. 시리얼 모니터창 열고 세팅하기


정상 컴파일 및 업로딩이 되셨다면, 시리얼 모니터창을 열어주고 통신속도를 115200으로 맞춥니다.

컴파일 및 업로딩을 위한 보드설정, 통신포트설정 등에 대해 모르실 경우 아두이노 기초실습을 먼저해주시기 바랍니다.


3. 초기 메시지 확인

모니터창에   Start 라는 메시지가 뜹니다.  ADK 보드가  준비가 되었으니  USB 기기를 연결해도 좋다는 신호입니다.


4. USB 기기 연결


자 이제  ADK 보드의 USB Host 포트에  USB 마우스를 단자를 삽입합니다.


이후, 마우스를 움직이거나  버튼을 누르면 대응되는 정보값이 문자로 표기됩니다. (와우~ 활용도가 매우 높은 예제입니다!)

키보드 예제도 마찬가지 방법으로 시도해보시기 바랍니다.



ADK 보드에 USB 마우스를 연결하여  마우스 드래그 및 버튼 눌림 정보를 확인할 수 있습니다.



우측의 모니터창을 보시면  좌표이동 상태와  버튼 눌림 정보가 보입니다.



 HID_Desc 예제의 경우도  연결된 기기의 상태정보를 보여줍니다. 

가령 USB 마우스를 연결할경우 위와 같은 정보를 출력합니다.


이밖에도 다양한 예제가 있습니다만,  해당 예제들은 부가 장비가 필요하거나 좀더 난해하므로  여러분이 직접 공부하셔서 도전해보시기 바랍니다. 


2부.  Open ADK 보드와 안드로이드 폰의 연동 테스트해보기 

 

시작하기 전에,

Open ADK는 일부 안드로이드 스마트폰에서만 지원되므로 호환되지 않는 스마트폰에서는 테스트가 불가합니다.

저는 Nexus 5 (안드로이드의 최신 레퍼런스 폰)로 테스트 해봤습니다.  참고로, ADK가 지원되지 않는 폰의 경우도 기기 인식 및 앱설치까지는 가능할 수 있지만, 실제로 앱을 구동할때 오류가 발생되고 멈추게됩니다.  


이제는 Open ADK 예제 중  별도의 부품이 필요없는 가장 단순한 LED 켜고 끄기 예제를 해보겠습니다.

즉, ADK 보드에 기본장착된 LED를  안드로이드폰에서 실행되는 앱을 통해 켜고 끄는 예제입니다.



1. 예제 컴파일 및 업로딩


아래의 예제를 선택 후 컴파일 및 업로딩 합니다.

파일 > 예제 > USB_HOST_SHIELD_2 > ADK > ArduinoBlinkLED  


2. 스마트폰 연결

자, 이제 Nexus 5 폰이 연결된 USB 케이블을 USB Host 포트에 삽입합니다.


호환되는 기기이고 특별히 해당 기능을 막아두지 않았다면

아래와 같은 Open ADK 연결 안내문이 뜨게되며,  해당 기기와 연동에 필요한 안드로이드 앱이 필요하다는 안내와 함께, 해당 사이트에서 다운로드 할지 여부를 확인하게 됩니다.  


ADK 보드를 연결하면  엑세서리로 인식되며 연동될 앱이 없을경우 다운로드 할 수 있도록 안내해줍니다.  보기를 누르고 다운로드를 하시면됩니다.



3. 관련 앱의 다운로드




다운로드 확인 하시고,




다운로드가 완료되면  실행시켜줍니다.



4. 앱의 설치 실행



특별한 권한이 필요없는 안전한 앱입니다.  설치해줍니다.




5. 앱 사용 허용


해당 기기가 연결되때마다 이 앱을 사용할것인지 확인해줍니다.  이후 해당 기기가 연결될 때마다 해당 앱이 자동으로 실행되게 됩니다.  최초 앱 설치 후엔 자동 인식을 위해 ADK보드를 재 장착해야할 수 도 있습니다.




6. 앱의 테스트


앱이 시작되면 아래와 같이 단순한 버튼이 뜨며, 그하단에 Connected 라는 메시지가 보입니다.



버튼을 눌러주시면,  ADK 보드에 내장된 LED 가 켜지는 것을 확인할 수 있습니다. (초록색 원)






이상으로 기본적인  ADK 보드 사용안내를 마칩니다.  예제를 참고하셔서 멋진 응용작품 만드시기 바랍니다!


테스트에 사용된 제품들은 아래와 같습니다.


1부 준비물

1. 아두이노 ADK 보드 (제품 구입처 링크)

2. ADK 보드 프로그래밍 용 USB 케이블 ( 제품 구입처 링크)

3. USB 마우스 또는 USB키보드 ( 대부분 보유중이신 제품 활용 가능)


2부 준비물

Open ADK 가 지원되는 안드로이드 폰과 micro USB 케이블 

( 갤럭시 S2,  Nexus 5 등 일부 기기만 지원되며, 대부분의 다른 안드로이드 기기는 지원되지 않습니다.) 




저작자 표시 비영리 변경 금지
신고
Posted by 로보밥 로보밥

댓글을 달아 주세요

  1. 아두보거스

    안드로이폰 중 일부기기만 지원되는 특별한 이유가 있나요?

    저는 베가 레이서 쓰고 있는데,
    잘 안되네요.

    디버깅 모드가 됬다가 연결이 끊어졌다가 반복입니다.

    해결책이 없을까요?

    2014.05.03 00:15 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • ADK 지원은 구글에서 권장하는 사항일뿐 실제 적용 여부는 스마트폰 제조사가 결정하게됩니다. 제조사 입장에선 아직 별 이득이 없으니 지원하지않는 상황인것 같습니다.

      2014.05.16 02:34 신고 [ ADDR : EDIT/ DEL ]
  2. 아두이노초보

    노트2인데 되나요 지금 그림과 같이 했는데 스마트폰에서 충전만 되지 usb연결되었다는 표시가 안뜨네요..노트2가 문제가 아니라면 보드에 있는 max3421에 문제가 있는건가요?

    2014.05.22 15:56 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. 강철민

    아두이노 adk 제품도 레오나르도 처럼 주변기기(마우스, 키보드)로 인식하는 건가요??

    2014.09.22 06:34 신고 [ ADDR : EDIT/ DEL : REPLY ]
  4. 볼레로

    안녕하세요.

    Arduino Mega ADK R3 보드를 구매하였는데요.

    아무리해도 마우스가 붙지를 않네요.
    settings.h 에서

    #define USE_UHS_MEGA_ADK 1

    로 바꾸어도 안되고,

    #define ENABLE_UHS_DEBUGGING 1
    을 해도 안되네요.

    보드는 잡히고 blink 예제같은 것도 되는데, 마우스 끼우면 광마우스의 전원도 들어가지 않습니다.

    혹시 뭘 더 봐야 할까요?

    감사합니다.

    2014.12.22 23:02 신고 [ ADDR : EDIT/ DEL : REPLY ]


킹!왕!짱! 기다리고 기다렸던

많은 분들이 안드로이드기기의 무선통신 기능( Bluetooth, Wifi) 을 활용하여 원격 제어되는 자동차나 탱크등을 갖고 싶어 하시는것 같습니다.  이중 소수의 분들이 직접 제작하는경우를 봤습니다만 제작 비용도 만만치 않고 소요시간과 제작을 위해 알아야할 사항도 제법 많은것 같습니다.  특히 하드웨어 개발보다는 소프트웨어 개발에 집중하려는 개발자분들은 무선으로 제어되는 적당한 하드웨어 플랫폼을 찾고 계실겁니다. 저도 마찬가지로 이런 기능을 하는 저렴한 장비를 찾아왔는데요 오늘 소개해드릴 제품이 바로 딱! 그 제품인것 같습니다.  


해킹 권장 플랫폼

안을 들여다 보면 ATMega칩을 주제어칩으로 장착하고 있고,  이곳에 모터드라이버 회로와  블루투스(Bluetooth) 모뎀이 장착되어 있는것이 보입니다.  제어보드에는 MCU를 재프로그래밍하려는 해커? 분들을 위해 ISP핀홀도 마련되어 있어서 내장된 프로그램을 직접 원하는데로 바꿔보실 수 있습니다.(차량용 펌웨어 소스코드와 무선 명령어 코드가 공개되어 있습니다.)  또한 전용 안드로이드앱(apk파일)을 동봉된 CDROM에 넣어 주므로 프로그래밍을 전혀 모르시는 분들도 파일메니져를 이용하여 apk 파일을 설치하기만 하면 재밌게 갖고 놀 수 있습니다. 


All in One

필요한 액세서리도 모두 포함되어있어서 작동을위해 따로 준비해야할 것은 안드로이드폰(또는 스마트패드) 뿐입니다.

LiPo배터리가 내장되어 있고, 충전기능이 내장된 USB케이블이 제공되므로 PC에 꽂아서 충전해 주시면 수십분간 주행이 가능합니다. Wow~


첨부된 동영상을 참고하시기 바랍니다.




제품링크: 안드로이드 연동 무선카 제품링크 (아트로봇: Artrobot.co.kr)


저작자 표시 비영리 변경 금지
신고
Posted by 로보밥 로보밥

댓글을 달아 주세요

안드로이드(Android)2011.07.30 23:52
여러분이 획기적인 아이디어와 훌륭한 기술로 안드로이드용 앱을 개발하고 계시다면 아마도 최근 구글 IOIO행사에서 발표된 Open ADK (공개형 안드로이드용 엑세서리 개발킷)에 대해 들어보셨을 겁니다.

안드로이드용 오픈 엑세서리 개발 보드는 PC에 각종 USB 장치를 연결하여 확장된 기능을 사용할 수 있는것 처럼 안드로이드와 결합하여 사용가능한 하드웨어 장치를 개발하기위해 사용됩니다. 이미 많은 안드로이드 기기가 GPS, 가속센서, 자기 센서등을 내장한채 보급되고 있습니다만, Open ADK와 호환 개발 보드를 사용하면 그밖에 특화된 센서를 연결하거나 좀더 고급의 유저 인터페이스를 결합시킬 수 있게됩니다.  그렇다고 새로운 기기의 개발에만 필요한것이 아닙니다. 표준화된 규칙을 이용하여 기존에 개발되어 있는 제품들과도 손쉽게 연동이 가능해 지므로 큰 노력 없이도 안드로이드와 많은 엑세서리와 연동할 수 있게되어 하드웨어 개발자와 안드로이드 디바이스 및 앱 개발자 모두에게 효과적인 환경이 제공되는것 같습니다.

Open ADK 관련 정보는 공개되어 있으므로 관련 개발보드는 직접 개발하실 수도 있습니다. 하지만 많은 분들에겐 이미 상용화된 제품을 이용하시는것이 효율적일겁니다.  이번에 소개해 드릴 제품도 그중의 하나입니다.



안드로이드 요요  ( IOIO for Android )

해당제품에 있는 실크 이미지를 잘 보시면 안드로이드 로봇이 한손에 요요를 갖고 노는것이 보입니다.  IOIO를 yo-yo 라고 발음한다고 하는데 안드로이드와 함께 연결되어 IO(Input Output) 기능을 수행하는 녀석을 요요로 표현한것은 매우 적절한 비유인것 같습니다.  서두가 길었습니다.  이제 본격적으로 요요 보드를 소개해 드리겠습니다.

아래의 정보들은 http://codaset.com/ytai/ioio/wiki 에 있는 요요 Wiki 정보와 요요 제조사의 튜토리얼 정보를 참고로 하였습니다.   (변경안내:  위 codaset 링크를 비롯한 모든 자료가  https://github.com/ytai/ioio/wiki 로 이전되었으니 신규 사이트 정보를 이용해주시기 바랍니다.)

1부. 둘러보기

요요,  너의 정체가 무엇이냐?

제품에 떡 하니 자리를 차지하고있는 녀석은 MICROCHIP사의 PIC24FJ256 MCU입니다.   보드 둘레로 총 48개의 IO핀이 있고 VIN , GND, 5V, 3.3V 전원 연결핀이 있으며 USB 기기를 연결 할 수 있는 커넥터가 있습니다. 

어짜피 요요 보드의 펌웨어를 직접 변경하지 않으시고 사용하셔도 되므로 내장 MCU 칩이 AVR이건 PIC이건 상관없습니다.


요요 사용법

1. 전원
요요는 USB 호스트 역활을 수행하는 보드이며 연결된 안드로이드기기에 전원을 공급하여 충전할 수 있게 개발되어 있습니다.  즉, 자신뿐 아니라 연결된 안드로이드까지 커버할 정도의 충분한 전력이 필수적으로 요구됩니다.

VIN과 GND 단자에  전압이 7~12V정도의  *1A이상 전류 공급이 가능한 전원을 사용해야합니다.
정전압 5V 전원의 경우엔  VIN 단자 대신 5V 단자와 GND 사이에 직접 정전압 전원을 연결하셔도됩니다.  3.3V 단자에서는 레귤레이터로 감압된 3.3V 전원을 출력하여 활용할 수 있습니다.  (단, 3.3V단자에 3.3V 전원을 입력하는건 안됩니다)
관련 정보를 꼭 읽어보시고 연결하시기 바랍니다.

보드에 전원을 입력하면 POWER LED에 불이 들어옵니다.

2. Charge 전류량 조정용 트리머
요요에 전원을 연결후 안드로이드 기기와 연결해주면 안드로이드 기기의 충전이 시작되는 것을 확인할 수 있습니다.
하지만, 기기의 배터리 상태와 기기특성에 따라 충전과 요요 기기 인식이 안되는 경우가 있습니다. 이는 요요가 적절한 전력을 공급하지 못하는 경우인데요, 이때는 USB단자 옆에 있는 트리머를 시계방향으로 회전하여 전류공급량을 늘려주면됩니다. 기기마다 특성이 다른점에 대처하기 위해 본 트리머 설정기능을 제공하는것 같습니다.


3. 안드로이드 기기 설정

안드로이드 앱을 개발해오신 분들이라면 다 알고계신 내용입니다.

설정 > 응용프로그램 > 개발 > USB 디버깅  설정을 켜주셔야 합니다.


4. 프로그래밍

요요 보드 자체는 별도의 프로그래밍 작업이 필요없습니다.
안드로이드 기기에서 요요 보드에 있는 48개의 IO핀을  범용 디지털 입력,출력,아날로그입력(ADC),TWI, SPI,UART,PWM 등의 용도로 설정하고 값을 IO할 수 있는 라이브러리가 제공되기 때문입니다.   즉, 요요를 연결하면 안드로이드 기기에서 제어가능한 48개의 IO핀이 생겼다고 보시고 안드로이드 디바이스를 프로그래밍을 하시면 됩니다.

5. 케이블 연결 방법

케이블은 기존에 안드로이드 개발에 사용하셨던 기기용 USB 케이블을 그대로 사용하시면 됩니다.
PC와 안드로이드 디바이스를 USB 케이블로 연결 후 요요 연동용을 위한 프로그래밍을 하신 후,
PC쪽 단자를 뽑아서 요요에 연결하시면 됩니다.


6. 요요 보드 사용법

본래 요요보드는 Android 1.5 부터 지원되는 MicroBridge (ADB의 구현)를 활용하도록 개발되었으며 이는 구형 안드로이드OS(1.5이상) 에서도 활용이 가능한 장점이 있습니다.  하지만 최근에 새롭게 발표된 Open ADK (Android 2.3.4 이상 지원)의 지원도 가능하도록 새로움 펌웨어가 제공되고 있습니다. IOIO의 ADK 펌웨어는 현재 beta버젼이며 필요하신 경우 요요보드의 펌웨어를 변경후 사용가능한 방법입니다.

본 글에서는 펌웨어 변경없이 요요의 기본 연동방식을 이용합니다. 제가 갖고있는 안드로이드 기기가 1.5~2.2 정도만 지원되므로 당장 Open ADK 방식의 테스트는 어려울것 같습니다;;

7. ADB?  MicroBridge? 
개발시 디버그 용도로 사용되는 통신방법 및 툴 정도로 생각하면 될 것 같습니다. 이를 활용하여 안드로이드에 연결된 장치와 통신을 할 수 있습니다.  여러분도 보유하신 MCU보드에 USB호스트 기능만 추가하고 본 프로토콜 구현만 해주시면 안드로이드 연동 보드 개발이 가능합니다.  사실 Open ADK도 이것에서 파생되었다고 볼 수 있습니다.


8. 요요 IO 핀맵

요요 보드 뒷면에는 동그라미와 네모, 알바벳 P 등으로 각 핀의 기능을 간략히 표현하고 있습니다.  가령 네모 박스된 핀들은 모두 아날로그 입력핀으로 사용할 수 있으며,  동그라미 표시된 핀은 5V 입력이 허용되는 핀입니다.  요요의 기본 입출력 전압 레벨은 3.3V이지만 일부 핀의 경우 5V 입력이 허용되는 것 입니다. 자세한 핀별 용도는 별도의 상세페이지로 소개되고 있습니다. (IOIO핀맵 핀별 기능소개)


2부. 실습

이제는 직접 요요보드에 프로그래밍 후  기초적인 IO를 수행해 보도록 하겠습니다.
아래에 소개된 예제들은 안드로이드 프로그래밍이 처음인 분들을 위한 튜토리얼에 포함되 기본 예제와 아래의 IOIO 기본 공개 예제들을 그대로 사용하거나 몇 줄만 수정한 것입니다. 직접 해당 소스를 보시고 응용해보시기 바랍니다.
http://codaset.com/ytai/ioio/source/master/tree/software/applications

안드로이드 프로그래밍 자체가 처음이신 분들은 요요를 사용하시기 전에 우선 안드로이드 프로그래밍 기본예제를 꼭 실습 후 진행하시길 권장드립니다.  안드로이드  개발환경 설치 및 디바이스 인식 등이 마무리 되어야 요요 보드 응용 개발이 가능합니다.  거꾸로 마이크로 콘트롤러 보드와 같은 전자회로에 대한 경험이 없으신 분들은 Open ADK 보드의 기준 플래폼인 아두이노로 기초 학습을 진행하실것을 추천드립니다. (아두이노 학습용 킷 추천)


예제1-1. 상태 LED 제어하기

안드로이드 프로그래밍이 처음인 분들을 위한 튜토리얼에 포함된 기본 예제입니다.
보드에 내장된 stat(상태) LED를 On/Off 하는 예제이므로 별도의 전자회로를 연결할 필요가 없이 요요 보드에 전원만 공급해주면 테스트 해볼 수 있는 간단한 예제입니다. 



동영상1. 요요 기본사용방법과 예제1-1 수행 장면입니다.



예제1-2. 디지탈 출력으로 SSR제어하여 220V 전등 On/Off하기

예제1-1.의 소스에서 상태 LED를 제어하는 소스를 그대로 한줄 더 복사하여 특정 디지탈 출력핀을 On/Off하고, 이 출력 값을 SSR(Solid State Relay)에 연결하여 가전용 전등을 On/Off 하는 예제입니다.



동영상2. 안드로이드로 220V 전등 On/Off 제어



예제2-1. 아날로그 입력 및 PWM 출력

IOIOSimpleApp 예제가 사용되었습니다.

가변저항으로 0~3.3V 범위의 임의 전압을 만들고 요요 보드의 ADC(아날로그 입력) 기능으로 입력받은 전압값을 수치화 하여 보여주는 예입니다.  더불어  디지탈 출력핀을 통해 PWM 파형을 출력하는 예제입니다.  기본 예제에서는 스크롤바의 위치에 대응하여 0.5ms ~ 2.5ms duty의 파형을 출력하도록 되어있으며 정확한 출력이 나오는지 확인을 위해 오실로스코프로 관측해봤습니다.


동영상3. PWM 출력과 아날로그 입력

예제2-2. PWM 출력으로 서보모터 제어

예제2-1. 에서 사용한 소스를 그대로 활용하여 RC서보모터를 구동할 수 있습니다.  다만 일부 서보모터의 회전각 범위는 0.5~2.5 ms 범위를 지원하지 않으므로 서보모터의 안전을 위해 이값을 0.8~2.2ms 범위로 수정하여 테스트 하였습니다.
이를 위해 PWM duty 관련 소스를 아래와 같이 수정하였습니다.

      pwmOutput_.setPulseWidth(800 + (int)(seekBar_.getProgress() * 1.4));


예제2-3. PWM 출력으로 전압메터 변화보기

이번 예제도 예제2의 소스를 그대로 사용하였습니다.   0~5V 범위의 전압을 측정할 수 있는 아날로그 전압 메타를 PWM 출력 핀에 연결하여 PWM duty 변화에 따른 출력 전압변화로 눈금의 변화를 확인해 보는 예제입니다.  기본 소스는 duty를 0~100%로 수정하면 약 0~3.3V 출력 변화를 확인 하실 수 있습니다.  전압 메타는 보유하신 멀티테스터 전압계를 이용하셔도 됩니다. PWM 파형의 Duty 비율을 조절하는것으로 서보모터 제어나  LED의 밝기 제어, 색상 제어 등 을 하실 수 있습니다.



동영상4. PWM제어로 RC서보모터 제어 및 전압메터 변화 관측

제품 링크


추가사항



IOIO 공식 자료 링크 변경 안내
 글 내용중 codaset 사이트에 보관되었던  모든 자료가  https://github.com/ytai/ioio/wiki 로 이전되었으니 신규 사이트 정보를 이용해주시기 바랍니다.)


저작자 표시 비영리 변경 금지
신고
Posted by 로보밥 로보밥

댓글을 달아 주세요

  1. 스페이스

    예제 소스가 있는 사이트를 알려주셨는데요...
    http://codaset.com/ytai/ioio/source/master/tree/software/applications
    지금은 게시가 안되어있었습니다..
    혹시 지금도 예제 소스를 가지고 계신다면 저에게 보내주실수 없으신지요?
    메일은 : great2000kr@naver.com 이곳으로 보내주시면 감사드리겠습니다.

    2012.03.13 22:49 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 해당 소스 및 공식 IOIO자료는 아래의 링크에서 보실 수 있습니다. https://github.com/ytai/ioio/wiki
      예전에 codaset 에 있던 자료가 위 사이트로 옮겨진것입니다. 알려주셔서 감사합니다.

      2012.03.15 20:50 신고 [ ADDR : EDIT/ DEL ]
  2. 박희정

    안녕하세요. 저도 이번에 ioio board를 테스트 해보려고하는데요
    sparkfun 홈페이지에 있는 튜토리얼 따라 라이브러리(App-IOIO0322) 다운받고 이클립스에서 import 시키고 이것저것 순서대로 똑같이 다 따라 했는데, 막상 ioio보드와 스마트폰을 연결해 테스트(led켜고 끄는...예제)를 해보니 보드의 led가 꿈쩍도 안합니다. 무엇이 문제인지를 모르겠네요. 물론 보드에 전원을 따로 넣어줬죠. 제 생각엔 라이브러리 문제가 아닐까 싶은데... 왜냐하면 튜토리얼에 나와있는 이클립스화면 사진과 제 이클립스에 생성된 파일내용이 좀 다르더라구요.
    혹시 테스트 하기 이전에 하는 파일 임폴트하는 절차좀 알려주실 순 없으신가요?

    2012.04.20 19:46 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • http://artrobot.co.kr/front/php/b/file_download.php?no=1520&filename=fbc1a01b08f75cf0a96d25087ca1511b.apk
      개발환경/컴파일 없이도 버전호환문제만 없다면 위 apk 파일을 설치하신후 테스트 해보실 수 있습니다.

      해당os버전용 라이브러리들을 모두 받으시고, 해당 os용으로 컴파일해보시기 바랍니다.
      저도 오래전에 해봤고 안드로이드 개발은 초보이므로 자세한 설명이 곤란합니다.
      이미 관련 절차를 자세히 소개해둔 영문자료가 많습니다. 혹시 빼먹은게 없는지 다시한번 차분히 진행해보시기 바랍니다.

      2012.04.21 20:50 신고 [ ADDR : EDIT/ DEL ]
  3. 박희정

    방금 올려주신 apk파일 설치해서 테스트했는데, 어플이름이 IOIO Sample app으로 나오는거 맞죠??
    그래서 폰과 보드 연결 후 이 어플 실행을 했는데 스크롤이나 led버튼이 활성화가 안되어 있네요;;
    원래 이런건가요...ㅠㅠ
    아 그리고 sparkfun 홈페이지에서 다운 받은 App-IOIO0322폴더 안에 보면 HelloIOIO.apk 라는 apk파일이 있는데
    이놈을 설치해서 실행해봐도 보드의 led는 여전히 반응이없네요...
    제가 가지고 있는 보드에 문제가 있는건 아닌가 싶은데,
    혹시 보드에 올려져있는 PIC에 펌웨어코딩이 안들어가 있는건 아니겠죠...? 살 때부터 들어가 있는걸로 아는데...
    보드에 문제가 있는지 없는지 확인해볼 방법은 없는걸까요?

    아아, 그리고 혹시 보드 핀맵별 기능에 관한 회로도나 파일 있으시면 제 메일(hidingke8982@nate.com)로좀 보내주실 수 있으신가요?

    2012.04.23 20:13 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 앱 UI 활성화가 안되었다면 제대로 연결이 안된상태입니다. 전원등의 연결상태를 확인해보시기 바랍니다. 핀맵정보는 https://github.com/ytai/ioio/wiki 에 있습니다. 보통 펌웨어가 이미 올려져 있어서 따로 바꿀필요는 없습니다. 구입처에서 확인해보셔야할것 같습니다.
      참고로, 아트로봇샵의 경우 모든 IOIO보드의 작동테스트를 한후 판매하고있습니다.

      2012.04.25 10:28 신고 [ ADDR : EDIT/ DEL ]
    • 박희정

      아 그렇구나, 저도 아트로봇에서 구매를 했거든요. 펌웨어코드까지 다 올라가있는 상태로 알고 있었는데, 음...제대로 연결이 안되있을 수도 있겠네요. 제가 간과하고 있던 부분이었네요. 연결방법이 usb 디버그모드 켜고, usb connector(이클립스로 앱 개발할 때 잘 쓰고 있던 것입니다. 이클립스로 보니 DEVICE연결되어 있는 것 확인했구요. 이 connector의 pc쪽 부분을 빼서 보드에 꽂음.)로 보드와 핸드폰을 연결하고 보드에 전원 따로 넣어주면 되는거 아닌가요? 올려주신 첫번째 동영상이랑 똑같이 했는데... 혹시 전원을 컴퓨터 usb포트에서 뽑아서 나온 connecter를 이용해 보드에 전원을 넣어주고 있거든요...이거때문에 문제 될리는 없어보이는데, 오실로로 찍어보니까 5V 나오고 있더라구요. 그리고 전류 조절하는 부분도 최대로 올려준 상태이구요. 근데도 연결이 왜 안되어 있을까요..ㅠㅠ

      2012.04.26 18:16 신고 [ ADDR : EDIT/ DEL ]
  4. PC에서 USB케이블로 전원을 공급받으면 출력가능한 전류가 부족해 문제가 됩니다;;
    튜토리얼에 소개해드린대로 충분한 전류 공급이 가능한 전용 전원으로 대체하시기 바랍니다.
    장착후 충전중인 상태를 알리는 표시가 떠야 정상입니다.

    2012.04.27 15:36 신고 [ ADDR : EDIT/ DEL : REPLY ]
  5. 박희정

    결국 이틀 전에 IOIO보드를 새로 구매했습니다. 오늘 도착해서 바로 테스트를 해보았습니다. 결론은 됩니다...ㅠㅠ
    문제가 뭐였냐면 보드 고장이었던 것 같습니다. 제가 맨 처음에 보드에 전원을 공급할 때는 컴퓨터 USB가 아닌 파워서플라이를 이용해서 공급했었는데 그 때 고전압이 약간 들어간 적이 있는데 그 때문에 칩이 고장이 난 것으로 생각됩니다. 아 그리고 새로 산 보드에 컴퓨터 USB포트를 사용해서 전원을 공급하여도 잘 돌아가는 것을 확인했습니다. 그 동안 이문제에 대해 답변 일일이 다해주셔서 정말 감사합니다.

    2012.04.27 23:48 신고 [ ADDR : EDIT/ DEL : REPLY ]
  6. 박희정

    아아 그리고 이제 기본샘플예제 테스트는 해보았으니, 제가 진짜 하려고 하는 것을 시작하려고 하는데요.
    어떤 하드웨어와 IOIO보드와 유선으로 통신을 해야하는데, 통신방식은 I2C를 사용하려고합니다. 그래서 회로도를 보면서 어느 핀에다가 연결을 해야되나 살펴보려고 했지만, DA와 CL이 쓰인다는 것만 알았을 뿐 여기다가 어떻게 연결을 하고, 하드웨어에서 데이터를 어떻게 보내줘야하는지, 보내진 데이터는 IOIO보드에서 어떻게 처리되어 어떻게 출력되는지, 이런 것들이 궁금한데 어떻게 해야될까요? 펌웨어 코드를 보면 어떻게 되있는지 대충은 알 수 있을 것 같은데 그럴수도없고...

    2012.04.27 23:56 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • ioio wiki페이지에 소개되어있습니다.
      ioio펌웨어는 전혀 알필요가 없습니다.
      안드로이드개발환경에서 함수사용하듯이 사용하면 끝입니다. 아래 페이지들을 참고하시기 바랍니다.
      핀배열=> https://github.com/ytai/ioio/wiki/Getting-To-Know-The%20Board
      i2c 함수사용법 소개 => https://github.com/ytai/ioio/wiki/TWI

      2012.05.01 21:12 신고 [ ADDR : EDIT/ DEL ]
    • 아, 그리고 아트로봇샵에서 구입하셨다면 차후 질문은 샵 QnA게시판에 남겨주시면 더 좋을것 같습니다 ^^.

      2012.05.01 21:14 신고 [ ADDR : EDIT/ DEL ]
  7. 궁굼이

    IOIO보드에 블루투스 동글 연결하면 안드로이드폰에서 장치검색이 되나요? 가지고 있는 동글은 연결이 안되는데, 되는 동글 좀 알려주세요..

    2012.09.17 15:19 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 제경우 아래제품으로 성공했습니다.
      http://artrobot.co.kr/front/php/product.php?product_no=453

      아마 연결만되면 작동되는건 아닐겁니다. 펌웨어에서 지원이 되어야겠죠..

      2012.09.24 15:39 신고 [ ADDR : EDIT/ DEL ]
  8. Star

    안녕하세요.
    IOIO 보드와 Bluetooth 동글을 연결하고, 안드로이드 폰과 연동 테스트를 하려고 합니다.
    그런데 아직 Bludetooth 동글을 사지 못했습니다.
    어떤 Bludetooth 동글을 사야 될지 모르겠는데, 추천 부탁 드립니다.
    저는 LG P509모델을 사용하고 있습니다.

    웹사이트(https://github.com/ytai/ioio/wiki/Supported-Bluetooth-Dongles)에 Bludetooth 동글에 대한 안내가 나와 있긴 한데, 어떻게 구매해야 될지 모르겠어요.
    국내에서는 구매가 가능한 곳은 없나요?

    2012.09.18 03:23 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 아래의 제품(SparkFun수입)으로 IOIO와 연동해봤습니다.
      http://artrobot.co.kr/front/php/product.php?product_no=453
      참고로, 동일하게 생긴 다른 동글(국내구매)로는 안되더군요;;;

      2012.09.24 15:35 신고 [ ADDR : EDIT/ DEL ]
  9. 요요보드짱

    안녕하세요. 최근 요요보드로 전공수업을 진행하고 있는 학생입니다.
    https://play.google.com/store/apps/details?id=app.akexorcist.d2dcontroller
    이것을 기초로 해보려고 하는데 양쪽 폰에 어플을 깔고 와이파이를 연결해서 스캔을하고 업데이트를 하였는데
    안되더라구요.어떻게 하면 이것을 성공할수 있을까요??
    꼭 성공한다음 요요보드로 여러가지를 해보고싶어요.

    2014.06.03 02:25 신고 [ ADDR : EDIT/ DEL : REPLY ]
  10. HS

    안녕하세요~아두이노로 작업하고 있는 학생입니다.
    전구로 하는 작업을 진행중인데 아두이노로 이용해서 제어하기위해 SSR을 사용합니다
    그런데, SSR로 들어오는 전기를 CDS로 제어하고 싶은데 가능한건가요?
    ?

    2014.12.02 00:19 신고 [ ADDR : EDIT/ DEL : REPLY ]

안드로이드(Android)2011.07.30 23:22
안드로이드용 엑세서리를 만든다?

올해 2011년 구글 IOIO 행사에서 소개된 Open Android ADK(엑세서리 개발 킷)에 대해 들어보셨나요?  간단히 말하면 스마트폰을 비롯한 각종 안드로이드 기기와 결합하여 활용 가능한 하드웨어 개발을 지원하는 개발킷을 공개한 것 입니다.
자세한 정보는 http://developer.android.com/guide/topics/usb/adk.html  에서 확인 하실 수 있습니다.

현재 안드로이드 기기용 엑세서리 개발 킷은 크게 두가지가 있습니다.

안드로이드 엑세서리 개발 킷

1.  첫째는 위에서 소개해 드린 Android 3.1 과 함께 발표된 Open Android ADK ( Android v2.3.4 부터 지원) 입니다.
2.  두번째는 MicroBridge 같은 Android Debug Bridge(ADB) 구현을 통한 지원입니다. 새로 발표된 ADK 에 밀려 곧 잊혀져 버릴지 모르지만 Andorid 1.5 이상만 되도 지원이 가능하다는 무시 못할 장점이 있습니다.


엑세서리 개발용 보드

소프트웨어 개발을 위해 필요한 개발도구와 SDK 와 더불어 엑세서리 개발을 위해선 안드로이드와 결합하여 사용 가능한 마이크로콘트롤러 보드가 있어야합니다.  이를 위한 제품들이 ADK 관련 기술페이지에 링크되어있습니다.

그중, 현재 아트로봇샵에서 취급중인 제품은 아래와 같습니다.

우선은  Android IOIO(요요라고 발음함) 보드 사용기를 별도의 페이지로 소개해 드리고, 차후에  Seeeduino Android ADK 보드도 소개해 드릴까합니다.

1. 안드로이드 요요 소개글 보러가기




저작자 표시 비영리 변경 금지
신고
Posted by 로보밥 로보밥

댓글을 달아 주세요

  1. itsmeyjc

    android open accessory에 대한 교육이 있어 홍보해드립니다.
    http://doedu.co.kr/incumbent/shortContent.do?index=152

    Cortex-M3 계열의 장비를 안드로이드 플랫폼에서 제어하도록 펌웨어와 애플리케이션 개발에 대해 다루고 있습니다.

    2012.03.26 08:37 신고 [ ADDR : EDIT/ DEL : REPLY ]