FourBeat ハッカソン


20120825fourbeat

2013年4月24日(水)に FourBeat ハッカソンに参加した。
FourBeat は、Android 端末と連動する押しボタンスイッチです。
CampFire でパトロンを募集をしていて、私も一口投資しています。

この日は、完成品のお披露目会と、アプリ作りのハッカソンでした。
完成品の写真は、残念ながら公開できません。
代わりに、昨年の make で展示されていた試作品の写真を載せておく。

まずは、サンプルコードの説明。
(1) Java。
物理層は ADK そのものです。ボタンを押した離したのイベントが取れます。
(2) JavaScript
WebView の下に ADK 層が隠蔽されて、JavaScript のAPI が提供されています。
(3) enchant.js
WEB 画面にエミュレータとして使える4つのボタンが用意されています。

続いてハッカソン。
jsdo.itenchant.js で動くサンプルコードを用意したので、何か面白いもの作ってね、とのこと。
enchant.js の使い方がよく分からなくて、試行錯誤。
やっとコツが分かったところで、時間切れ。
これじゃ、FourBeat じゃなくて、 enchant.js のハッカソンだね。

完成品はこちら
「赤」で逆向きに進む。「青」で色が変わる。「緑」で元に戻る。
20130424fourbeat_game

最後に、5月末に完成品を配布するから、それまでに面白いものに仕上げるように、という厳命が。


PIC-ADK を Android 4.1 対応にする


Android 4.1 から ADK の protocol version が1から 2 にバージョンアップしました。
それに伴い PIC-ADK も protocol version 2 に対応にする必要があります。
変更するのは下記の2つのファイルです。

main.c

 
BOOL USB_ApplicationEventHandler( BYTE address, USB_EVENT event, void *data, DWORD size )
{
	...
	case EVENT_ANDROID_DETACH:
		device_attached = FALSE;

		// Reinit the device if a detach is detected
		USBInitialize(0);
		AndroidAppStart(&myDeviceInfo);
 
		return TRUE;
		break;

usb_host_android.c

 
static ANDROID_PROTOCOL_VERSION protocolVersions[] =
{
	{
		1,
		...
	},
	{
 		2,
		AndroidAppWrite_Pv1,
		AndroidAppIsWriteComplete_Pv1,
		AndroidAppRead_Pv1,
		AndroidAppIsReadComplete_Pv1,
		AndroidInitialize_Pv1,
		AndroidTasks_Pv1,
		AndroidAppEventHandler_Pv1,
		AndroidAppDataEventHandler_Pv1
	}
};

BOOL AndroidAppEventHandler( BYTE address, USB_EVENT event, void *data, DWORD size )
{
	...
	case EVENT_TRANSFER:
		...  
		if(j >= (sizeof(protocolVersions)/sizeof(ANDROID_PROTOCOL_VERSION)))
		{
			//If we don't support that protocol version, use the next best version

			//Override the protocol version specified by the device                       
			devices[i].protocol = protocolVersions[j-1].versionNumber;                       

			devices[i].state = READY;                       
			devices[i].protocolHandle = protocolVersions[j-1].init(devices[i].address,devices[i].flags, devices[i].clientDriverID);                   
		}

修正したファイルは code.google にあります。

参考
PIC24F ADK device not working on Android Jelly Bean (Nexus 7 Tablet)
ADK 1.0 devices fail to work with Jelly Bean, why?

関連
PIC24FJ64GB002のADK開発環境
ADK 2012


GR-SAKURA で ADK を動かす



写真は 赤川さんのブログ から。

GR-SAKURA には Renesas 製の32ビットCPU が搭載されています。

ADK ( Accessory Development Kit ) は Android Phone と電子機器を接続するための開発キットです。
Arduino 版や PIC 版が公開されています。
GR-SAKURA には、ADK勉強会の赤川さんが移植しています。

ソースコードは下記で入手できます。
Android ADK for GR-SAKURA

書いてあるとおりにやったら、すんなり動きました。


ADK 2012


Google I/O 2012 にて、Android 4.1 と ADK 2012 が発表されました。
大きな特徴は下記のとおりです。
(1) ADK の protocol version が1から 2 にバージョンアップした。
(2) Bluetooth をサポートした
(3) 音楽を流せるようになった。

これに伴い、Android 4.1 と 従来の ADK の接続ができないという問題も出ています。

参考
Accessory Development Kit 2012 Guide
グーグル「ADK 2012」は出色のデザイン性
動画で見るADK 2012
ADK 1.0 devices fail to work with Jelly Bean, why?


横浜ロボット部のADK温度センサ


横浜ロボット部 ADK製作実習 の続きです。

yokorobo ボードに温度センサをつける。
ADK製作実習では、プログラムは原田さんに書き込んで頂いたが、今回は自分で作成する。
方法は Android ADK プログラミング&電子工作バイブル に掲載されています。
プログラムは ソシム社のサイト からダウンロードできます。

1. yokorobo ボード側
1-1. プロジェクトの作成
PIC-ADK開発環境 と同様に、ADKのプロジェクトを作成する。

1-2. プロジェクトの変更
温度センサに変更する
下記を2つのファイルを変更する。
– main.c (変更)
– HardwareProfile.h (変更)

※ main.c はダウンロードした chap5/ADK_Thermometer/ に入っている。

1-3. プロジェクトのビルド
Clean and Build Main Porject を実行する。
エラーなく終了した。(^o^)

1-4 PIC に書き込む
yokorobo ボードに PICKit3 を接続する。
Run Main Porject を実行する。

2. Android側
2-1 Eclipse 環境
Eclipse に ダウンロードした chap5/Thermometer/ をインポートする。
Androrid アプリケーションを実行(Run) する。
エラーなく終了した。(^o^)

2-2 Android にインストールする
Android端末を接続して、再度 実行する。

3. 実機確認
(1) yokorobo ボードに温度センサをつける
(2) yokorobo ボード と Android を接続する
(3) yokorobo ボード の電源を入れる
(4) Android に「このUSBアクセサリーが接続されたときに…」という表示がでる
(5) Android に室温が表示された。(^o^)


PIC24FJ64GB002のADK開発環境


Microchip 社からADKキットが発売されています。
PIC24F Accessory Development Starter Kit for Android

ADKキット(PIC24FJ256GB110) の相当品を PIC24FJ64GB002 で実装しました。
実機には 横浜ロボット部の基板 を使用しました。

1. プロジェクトの作成
PIC-ADK開発環境 と同様に、ADKのプロジェクトを作成する。

2. プロジェクトの変更
PIC24FJ64GB002用に変更する
下記を3つのファイルを作成・変更する。
内容は割愛する。
– PIC24FJ64GB002_PIM.h (新規)
– main.c (変更)
– HardwareProfile.h (変更)

3. プロジェクトのビルド
Run -> Clean and Build Main Porject を実行する。
エラーなく終了すれば、OK。

作成したプロジェクトはこちらから。
http://code.google.com/p/ohwada/wiki/PIC24FJ64GB002ADK

4. 実機確認
4.1 PIC側
(1) PIC24FJ64GB002 に下記を接続する。
– USBコネクタ 1個
– LED 8個
– プッシュボタン・スイッチ 4個
– ポテンシャルメータ(可変抵抗) 1個
(2) PICKit3 を接続する
(3) Run -> Run Main Porject を実行する。

4.2 Android側
(1) マーケットから入手する
BasicAccessoryDemo – Microchip Technology Inc

(2) または、Microchip Application Libraries に含まれているソースからビルドする

4.3 PIC と Android を接続する
(1) PIC と Android を接続する
(2) PIC の電源を入れる
(3) Android に「このUSBアクセサリーが接続されたときに…」という表示がでる
(4) Android から LED を点灯できれば、OK

YouTube Preview Image

関連
横浜ロボット部 ADK製作実習
PIC-ADK を Android 4.1 対応にする

参考
PIC24FJ64GB002でADKを試す


PIC-ADK開発環境



Microchip 社からADKキットが発売されている。
PIC24F Accessory Development Starter Kit for Android

PIC と Android のプログラムも公開されている。
Microchip Application Libraries

1. プロジェクトの作成
Create New Project からADKのプロジェクトを作成する。

2. ライブラリのコピー
(1) Android Accessories/Basic Communication Demo – OpenAccessory Framework/Firmware/ からプロジェクトのディレクトリに下記をコピーする
– main.c
– usb_config.c
– usb_config.h
– HardwareProfile.h
– HardwareProfile – PIC24F Starter Kit.h (ターゲットに合わせて)

(2) Common ディレクトリを作成し、
Microchip/Include/ から下記をコピーする
– Compiler.h
– GenericTypeDefs.h
– struct_queue.h

(3) USB ディレクトリを作成する
(3-1) Microchip/Include/USB/ から下記をコピーする
– usb.h
– usb_ch9.h
– usb_common.h
– usb_hal.h
– usb_hal_pic24.h
– usb_host.h
– usb_host_android.h

(3-2) Microchip/USB/ から下記をコピーする
– usb_hal_local.h
– usb_host_local.h
– usb_host.c

(3-3) Microchip/USB/Android Host Driver/ から下記をコピーする
– usb_host_android_protocol_v1_local.h
– usb_host_android_protocol_v1.c
– usb_host_android.c

3. プロジェクトの設定
3-1. プロジェクトにファイルを追加する
MPLAB X IDE は、ディレクトリにファイルを置くだけでは、プロジェクトのファイルとして認識してくれないみたいです。
(1) New Logical Folder から論理ディレクトリを作成する
(2) Add Existing Item からファイルを選択する
 ファイルをまとめて選択する方法がわからなかったので、1つ1つ選択した。
 えらく面倒だった (^^;

3-2. Include パスを設定する
MPLAB X IDE は、上記の方法で Header File を指定しても、コンパイル時に認識してくれないみたいです。
Properties -> x16-gcc -> Preprocessing and messages -> C Include dirs から、
Common ディレクトリと USB ディレクトリ を設定する

3-3. Heap size を設定する
Properties -> x16-ld から、
Heap size を 3000 に設定する。

4. プロジェクトのビルド
Run -> Clean and Build Main Porject を実行する。
エラーなく終了すれば、OK。

5. 実機確認
Starter Kit を持っていないので、実機確認はできず。

PIC24FJ64GB002 を使って Starter Kit もどき を作ってみました。
PIC24FJ64GB002のADK開発環境


横浜ロボット部 ADK製作実習


2012年6月2日に KBIC(かわさき新産業創造センター) で開催された横浜ロボット部のADK製作実習に参加した。
http://atnd.org/events/29418

今回は、PIC版ADKを組立てて、アンドロイド端末から制御する実習です。
横浜ロボット部のメンバーが執筆した Android ADK プログラミング&電子工作バイブル の出版記念を兼ねています。
実習内容は、第5章 Androidで温度モニタリング に沿ったものです。

組立て前
基板と部品

組立て
基板のスルーホールに部品を挿入し、ハンダ付けする。
久しぶりのハンダ付けなので、最初はうまくハンダが乗らなかった。
少しずつ慣れてきて、最後に付けたピンヘッダはまずまずの仕上がり。

組立て後
PICボードの完成

ボード単体の動作確認
PICボードにLEDを接続する。
原田さんのPCから、PICにテストプログラムを書き込んで貰う。
無事にLEDが点滅した。

ADKの動作確認
PICボードに温度センサを接続する。
原田さんのPCから、PICにADKプログラムを書き込んで貰う。
原田さんのアンドロイド端末と接続する。
温度センサを指で摘むと、アンドロイド端末に表示される温度が上昇する。

完成
ブレッドボードにPICボードと温度センサを搭載する


Google Developer Day – Open Call


2011年11月1日(火) GDD Google Developer Day に参加しました。
GDD は Google が主催する開発者向けのカンファレンスです。
今回は Open Call の展示要員として参加しました。
Open Call は、一般公募による展示コーナーです。
テーマは ADK と HTML 5 の2つでしたが、展示は ADK が中心でした。
ADK Android Open Accessory Development Kit は、アンドロイド端末と外部機器を接続するためのマイクロコントローラです。

以下、Open Call のミニシアターの発表順に

紙相撲マシン (Paper SUMO Battle Field) Ryoji Sakai
お馴染みの紙相撲です。 太鼓を叩いて、上からぶら下がった指で、土俵をゆらす。
遊び心いっぱいで、一番人気だった。

SceneMix 日高隆博
オーディオミキサー。動かず 会場でず~とデバックしてました。

Tele Sky Mapで星空散歩 大槻正樹
天体望遠鏡に連動して、星空を映す。 出来栄えはぴか一でした。
横浜ロボット部 の大槻さんの作品。 私はここのお手伝い。

移動探索型せんぷうき Takahiro Okada
人を探して風を送ってくれる扇風機。 上下に高くバランスが悪いのが逆に愛らしい。
横浜ロボット部 の岡田さんの作品。

DreamWaver –さざ波によせて 石田勝美
小さい磁石を使って水の上に波紋をつくる。 製作時間のほとんどがコイルを巻く時間だったそうです。

Android + Robot Illusion Noboru Sugiura
LEDを点灯させながら動くロボット。 非常に綺麗でした。
横浜ロボット部 の部長 杉浦さんの作品。
 

Escape the Wait Kevin Jordan
病院の待合時間の短縮するもの。 受付票にタグがついていて、自分の受付票がどこまで進んだか分かる。
遠くカルフォルニアからの参加です。

クラウド時代の文鳥との暮らしをサポートするサービス 「コトリト」 itog
家で飼っている小鳥に外出先から餌をあげる。 本物の鳩を持ち込んでました。

Sanshin Jyunji Kondo
沖縄の楽器 三線 を模擬したもの。 音楽好きな方に人気でした。

NFC for Everybody zaki
Felica リーダーを NFC 用に改造したもの。 これで NFC が内蔵されていないアンドロイド端末も NFC 対応に。
転職したばかりの zaki さんの名刺が大人気。

DroidAdventureres 冒険家たち 竹内陽児
冒険家のためのツール。 写真はガイガーカウンタ。

StreetView Exercise Sugi2009
ステッパーを踏むとストリートビューが変化する。

Thank you the World Shigeki Ohtsu
これだけ HTML5 の発表。
震災支援の感謝を表す canvas アニメーション。

番外
私が持ち込んだアンドロイドから制御する マインドストーム
Gclue さんのブログで「Open Call に呼ばれてないのに ゲリラデモしていた」と紹介された。

GDD に参加するには
GDD に参加するには、DevQuiz にチャレンジして、招待される必要があります。
私が DevQuiz をチャレンジしたところ、100.2 点でした。
合格ラインが 100.5 点だったので、あえなく落選してしまった。

地元 横浜での開催でもあり、なんとか参加したいと思っていました。
横浜支部のMLにて、Open Call の手伝いの募集があり、応募したところ、こちらで採用となりました。
そんな訳で、当日は発表は聞かずに、Open Call の展示コーナーに1日居ました。

御礼
横浜支部 をはじめ大勢の方々に見学に来ていただきました。
そのまま、展示コーナーに居つくてしまう人もいました。(^o^)
おかげさまで、楽しい時間を過ごせました。

参考
Google Japan Developer Relations Blog
Google Developer Day 2011 Japan Open Call- Android ADK
GClue blog : Google Developer Days 2011 レポート Open Call
MRSa’s blog : Google Developer Day 2011 Japanに出品してました