Hexapodを作った

Galileo7さんのArduino用オリジナルシールド、Hexapodを作りました。買ったのはかなり前なのですが、ADKの勉強の合間に作っていました。
制作目的は、動く工作物の勉強のためです。ロボットを作りたいと思いつつ、これまであまり動くモノを作っていなかったので、まずは動き・構造・制御の勉強に作った次第。可能であれば今後、自分なりの改造もしてみたいです。
ということで以下、制作過程の写真などを。


▼着手したばかりの時の写真。左上が半田付けで作る脚の束。


Arduino用ピンソケットとサーボを取り付けた。


▼脚を取り付け中。


▼ほぼ完成。


▼測距センサが付いてこれで完成。


▼拡張用にさらにピンソケットを付けた。


動かしてみましたが、サーボ3個でこんなに面白い動きができるのかと感心しました。虫のような動物のような、なんとも変な動きが楽しい。
それにしても、自律的に動くモノ、要するにロボットはインパクトありますね。光ったり音が出たりという工作も、美しかったり異様だったりすればもちろん印象に残りますが、ロボットが自ら動く姿はさらに強烈です。私も、例えば今度のMaker Faireなどには、自分で作った何らかのロボットを展示したいと思いました。

Android端末でデジタル・アナログ入出力

ADKの基礎を勉強してきましたが、最後にAndroid端末でのデジタル・アナログ入出力を行いました。



新しい要素は、独自のプロトコルを作ってやりとりする点。複数のアクチュエータへの出力とセンサからの入力を処理するために必要になります。プロトコルというと難しそうですが、例えば今回だと、やりとり用の配列の1要素目に実行内容、2要素目に値を入れる、といった約束事を作るだけです。
とりあえずここまでで、Android端末を使ったオリジナルの工作はできるようになりました。今後は本の4章以降の応用編に進みつつ、自分なりの工作をしてゆこうと思います。

PR0C0D1N6

iOSバイスでProcessingとかHTML5を書けて実行できるアプリ「PR0C0D1N6」を購入してみました。450円。謎なアプリ名ですが、何か意味する事がありそうですね。
ちなみに購入時点でサンプルコードが色々入っており、実行したりコードを編集したり可能。アプリ自体はとても使いやすい印象を受けました。
Processingは以前勉強してたことがあったので、とりあえずPCで作ったスケッチ(.pdeのファイル)を入れられるか試してみました。


▼まずiPadをPCに接続すると、iTuneのAppタブ・ファイル共有の所にPR0C0D1N6が表示されます。PR0C0D1N6を選択すると右のリストにファイル一覧が表示されるので、そこにPCからスケッチを追加します。


iPadで一度PR0C0D1N6を完全に終了させ、再度起動するとPCから入れたスケッチがリストに表示されます。


▼PCで作ったスケッチも動作。


上記の手順で、PCで作成したProcessingスケッチは動きます。PCで書くほうが効率は良いのでこれは嬉しい。iPadとはいえ、長々とコードを書くのはさすがに辛いです(カーソルキーが無いのが特に辛い)。
iOSでネイティブアプリを作るほどじゃない場合は、Processingで書いてPR0C0D1N6で実行するのも手軽で良いかもしれません。
ただ画像ファイルなどは転送できなかったので、外部ファイルを使うProcessingスケッチの動作のさせ方が分かりませんでした。外部ファイルはWebに置けば良いのかな?

Android端末にデジタル入力とアナログ入力

引き続きADKを使った勉強を。前回のデジタル・アナログ出力に続き、今度は入力を行いました。出力と比べるとAndroid側のコードが、入力監視にスレッドを使うのと、GUIの書き換えにハンドラを使うため、やや複雑になります。

▼デジタル入力。外部スイッチの状態が端末の画面に表示される。


▼アナログ入力。光センサ(CdSセル)で取得した値を表示。


ちなみに小数(Double)の表示桁数を設定するのに若干苦労してしまいましたが、こちらを読んでDecimalFormatクラスを使用して解決。

Android端末からアナログ出力をしてサーボを動かす

前回、アナログ(PWM)出力でLEDの明るさを変えれたので、今度はサーボを動かしてみました。本には載っていませんが、主に以下の変更で簡単にできます。
ArduinoスケッチでServoライブラリを使い、読み込んだ値で回転角を変更できるようにする。
Android側は、出力する値を0〜255から0〜179に変更する(使用したサーボの最大回転角度が180度のため)。


▼シークバーでサーボの回転角を変更。


今回はシークバーを使いましたが、ボタンで指定した角度に動かすことも可能だと思うので、色々な工作に使えると思います。

Android端末からデジタル出力とアナログ出力

引き続きADKを使った勉強を。Android端末からArduinoにデジタル出力してLEDを点灯させる通称Lチカと、明るさを変えるアナログ(PWM)出力を行いました。デジタル出力もアナログ出力も、共通のコードが多いので楽です。


▼デジタル出力。画面のトグルボタン押下でLEDが点灯します。


▼アナログ出力。シークバーでLEDの明るさを0〜255段階で変えられます。

iOSでプログラミングを始めた

先日Macを買ってから、2ヶ月くらい解説本を読みながら写経して、iOSプログラミングの勉強をしていました。よくわかるiPhoneアプリ開発の教科書と、Xcode 4ではじめるObjective-Cプログラミングの2冊です。


私はいわゆる高級言語Javaしか勉強しておらず、あとはCやC#を少し、という半端な状態なのですが、Objective-Cが特に分かりにくいということは無かったです。メソッドに対するメッセージで、第2引数以降のラベルを記述する所が未だにしっくり来ませんが、まぁこれは慣れでしょう。オブジェクト指向について復習できたり、ポインタについて改めて勉強したりと、得るものは多かったです。

そしてiOSプログラミングは、Androidと全く違う体験でした。まずXcodeがとても良い。IBでコントロールを並べるだけで見た目を定義できるのは、特に新しい事ではありません。しかしXMLでレイアウトを長々と記述しなければいけないことに比べると雲泥の差です。コントロールソースコードの接続も、アシスタントエディタでマウス操作で簡単にできちゃいます。凄いね。

私が今所有するiOS端末はNew iPadですが、勉強で作ったプロジェクトが実機上で動くのは、なんというか非常に感慨深い。この「うわー動いた!」という感じ、とても気持ちが良いものです。


以下は勉強の過程のテストアプリなど。







とりあえずまだスタートラインに立っただけの段階なので、これから先どうするかですね。openFrameworksやCocos2Dなんかも興味ありますし、作りたいものもあるにはあったりします。
その一方、iOSプログラミングは趣味としては面白いですが、自分のビジョンを具現化する主戦場では無いような気もしています。とはいえ世の中の動きもありますので、しばらくは勉強を継続してゆこうと思います。