2012年2月29日水曜日

Newton Keyboard to USB Converter


全国数名のNewton Keyboard ファンの皆様、お待たせしました!
Newton Keyboard をUSB 化するアダプタを小型化しました。
もちろん iPad (Camera Connection Kit 使用) でも使えます。
Keyboard の中に仕込むのも容易なサイズです。

Arduino Uno の替わりに「ダ・ヴィンチ32U」を使いました。
Arduino (Leonardo) ではなく、普通のAVR マイコンとして使っています。

変換プログラムは Arduino 版のプログラムをほぼそのまま移植。
USB Keyboard 部はdarran さんのプログラム。LUFA のライブラリ(LUFA-100807) を使用しています。
この 2つのプログラムを 1つにまとめました。

開発環境のセットアップが Arduino のように 簡単にはいかないので、
今回は製作の詳細解説はしない予定です。
(HEX ファイルと配線図は後日公開します。)

希望者がいれば 完成品を 3,000円、プログラム書き込み済みのダ・ヴィンチ32U のボードを2,000円で提供する予定です。中に組み込んでUSB Keyboard 化する改造も承ります。


コメント欄よりお問い合わせください。

**** (6/19) 追記 ****
現在、完成品として提供しているものはこちらの黒いBOXになります。




以前のものより、厚みが有りますが、そのかわり外に出ていたコネタクを内部に押し込めています。

・基板上のリセットSW は干渉するので外しました。
・オシロの信号をみて判断した結果、MAX485 レベル変換IC は省略しました。
・指定があれば従来版のケース(白い方)で制作することも可能です。


参考までに
現行BOX: テイシン電機 TB-50B (W30 x H20 x D50)
従来BOX: タカチ電機工業 SW-53 (W36 x H11 x D53)

指定がなければ TB-50B で制作します。


2012年2月20日月曜日

Puredata の本が出る


「Pd Recipe Book 〜Pure Dataではじめるサウンドプログラミング」松村 誠一郎


Puredata は機能モジュールを線でつなぐことで、処理の流れを記述するタイプのプログラミング環境です。オーディオのリアルタイム処理が得意です。

なかなか便利で、ちょこちょこ使っているのですが、積極的におすすめできない理由が、「とりあえず起動しても何も出来ない類いのソフトだから」です。自分は東京藝大で行なわれたRjDj セミナーに参加した際、習得しました。(それ以前に Max の経験もあり)

一種の開発環境なので仕方がないのですが、Arduino の様にサンプルやチュートリアルが整備されているとは言い難く、Help が充実(Help がそのままPd ファイルになっていて、実行できる)しているのが唯一の救いです。

操作はMax/MSP とほとんど一緒なので、そちらの経験がある人はそれなりに使えるはずです。
Arduino と連携する Pduino 環境もあり、OSC を手軽に送受信でき(しかも軽い)ます。
プログラミングとはまた違った頭の使い方を要求する、Puredata。
待望の参考書です。

これを読めば、きっとオーディオプログラミング が身近になりますよ。


発売前なので、内容の保証はできませんが、、、

2012年2月18日土曜日

Apple Remote Receiver (リモコン受信機)


Apple Remote とは、、、
世界で指折りの美しさを誇る赤外線タイプのリモコンです。

以前は初代 iPod シャッフルに似た、白いプラスチック製でした。
単品で購入する事もできますが、一部のMac に付属して来たり、iPhone/iPod のUniversal Dock に付属したり、Apple TV に付属したり、と、Apple 製品に囲まれている人は2、3個もっていたりします。

しかし、、、その大半が使われていないのではないでしょうか?
iPhone でMac の iTunes を操作するRemote.app や、iPhone の音をWiFi で飛ばすAirPlay など、リモコン要らずな環境が次々と出てきました。このリモコンのために作られたアプリとも言える「Front Row」は、Mac OS X Lion からは付属しなくなりました。MacBook から赤外線受光部が無くなるのも、時間の問題です。(既にMacBook Air にはリモコン受光部がありません。)

そんな余っている Apple Remote を使って操作するデバイスを、Arduino で作りましょう。
Arduino で学習リモコンを作る例はいくつか有るので、それをベースに作ろうと思っていましたが、HIFIDUINO というDAC をArduino でコントロールするプロジェクトがありました。

HIFIDUINOは、Apple Remote での操作に対応しているので、公開されているコードからリモコン受信ルーチンだけを取り出し、LED を点灯/消灯するようにしてみました。





リモコンの信号を受信すると、4Byte のデータ(c1, c2, c3, c4)を受信します。
そのうち、使っているのは c3 のみで、ボタンの種類を判別します。
c4 はリモコン自体のID になっています。
Macやリモコンが複数台ある場合に、特定のリモコンだけに反応したい場合に使います。
(システム環境設定 > セキュリティ > 一般 で設定します。Mac はリモコンに反応しない用に設定しておいた方が良いでしょう。)
このID は1Byte なので、ID が被る可能性があります。その場合リモコン側の操作で変更できるそうです。(Menu と Center を5秒間同時押しすると、ID が1つインクリメントされる)

Apple Remote は新(アルミ)・旧(プラスチック)でボタンの数が1つ増えました。そのため、新Center ボタンと新PlayPause ボタンは、旧Center(PlayPause) ボタンに相当する信号と、両方を出すようになっています。
(動画で、1つだけ青いLEDになっているのところが、旧Center 信号に反応しています。新リモコンを操作しているとき、[Center] と [PlayPause] の両方に、同時に反応しています。)

こちらで解説されていますが、このリモコンの信号は新・旧の違いの他に、なぜか 2種類 あるそうです。
HIFIDUINO のコードは 11, 13 のみに反応するようになっていましたが、
リモコンによっては11 ではなく10を、13ではなく12を出力します。
家のリモコンは新旧両方とも、このサイトでいう所の「ODD CODE」だったので、両方に対応する(であろう)コードにしてみました。

リピート信号(ボタンを押し続けたときに出る)の処理は、コメントアウトしています。
この辺りは、用途によって使い分けて下さい。


ハードウェアはリモコン受信モジュールの電源と、出力を3番ピンに接続するだけです。LED は確認用なので、お好みで。
シリアルポートに受信結果を出力することもできます。(コメントアウトされています。)
リモコン受信モジュールは秋月の PL-IRM0101(38kHz)シールド付き を使いました。

2012年2月13日月曜日

ダ・ヴィンチ32U でADK


Arduino Leonardo 互換ボード、ダ・ヴィンチ32U と Sparkfun USB Host Shield の組み合わせで、ADK が動きました。

ソフトウェアは Arduino IDE 1.0 と USB Host Shield Library 2.0 (Circuits At Home オフィシャル版)の組み合わせ。

写真は USB Host Shield Library のサンプル(demokit_20)を動かしているところです。

Arduino IDE 1.0 でダ・ヴィンチ32U を使う方法はこちら
USB Host Shield Library 2.0 についてはこちらの記事を参照して下さい。

demokit_20 をコンパイルすると、通常(Uno 等)では問題ないのですが、
ボードで Leonardo を指定すると、USB 関連で error になります。

この問題は、ATmega32U4 のUSB 関連機能を使うAPI で使用する変数名「USB」と、USB Host Shield で使うクラス名「USB」がバッティングするためのようです。

Library の方を修正するのが筋かと思いますが、変更箇所が多くなりそうだったので、IDE の中身を変更しました。

アプリケーション内部 (Mac は右クリックから「パッケージの内容を表示」) に、Arduino API 群のファイルがあります。
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino

以下の4つのファイル
CDC.cpp (28行目)
main.cpp (8行目)
USBAPI.h (22行目)
USBCore.cpp (624行目)

の中に 変数 USB を使っている箇所があるので、すべて別の名前に変更します。
(私はとりあえず USB1 にしました。)

これでコンパイルエラーは無くなりました。

次に、どうやって配線をするか、、、
Sparkfun のUSB Host Shield は Library2.0用に改造済みの場合、D9(INT), D10(SS), D11(MOSI), D12(MISO), D13(SCK) の線とRESET, 5V, GND の8本を繋げば動作します。

ダ・ヴィンチ32U と Arduino Leonardo のピン名称対応表(再掲)。

MOSI, MISO, SCK, RESET, 5V, GND はダ・ヴィンチ32U に対応する所に接続します。

シールドのD9 はダ・ヴィンチの D5(PC6) に、D10 はD13(PC7)に接続します。
これは Usb.h とavrpins.h で指定されています。
他のピンに変更したい場合は、これらのファイルを編集すれば良いと思います。

とりあえず動作させるのが目的だったので、今回はここまで。

2012年2月9日木曜日

極小液晶モジュール


aitendo 極小キャラクタ液晶(16x2)は、約5cm×2cm の液晶モジュールです。
小さいけど16文字 x 2行 で表示は同じ。バックライトもつきます。

Arduino の標準ライブラリで使用できます。

モジュール本体は安い(350円)のですが、フレキケーブルの変換基板は500円もします。
配線を直接ハンダ付けすれば良いのですが、楽をしたかったので、購入。



標準サイズ(?)の SC1602 シリーズとくらべて、こんなに小さい。
(SC1602 と、電源と GNDが逆になっているので要注意。)


購入時は期待していなかったけど、カナ文字もちゃんと入ってました。
小型Arduino 互換ボード ダ・ヴィンチ32U と組み合わせて使うと良いかも。

以前、カナ文字の紹介のときに作ったサンプルはIDE 1.0 に対応していなかったので、修正しました。

(2/12 追記) ケースに入れようとモニョモニョしてたらフレキ内部で断線してしまいました、、、


とりあえず、手配線で応急処置。変換基板の意味無し。

写真でケーブルは12本出ていますが、LCD モジュール上で配線すれば、8本に減らすことができます。(小さいので結構大変です。)

コメントに質問のあったバックライトLED ですが、パターンを追った所、単純にこのような配線になっているようです。

出荷時はJP4, JP5 がハンダでショートしていて、R8, R9 は空いています。
15, 16 番はバックライト LED のA, K に繋がっているだけなので、電流制限用の抵抗が必要です。

aitendo の説明では、JP4, JP5 のハンダを外して、R8, R9 に2.4Ω(4.2Ω) の抵抗をつけると「5V単一電源で使用できる」とあります。
モジュール上には、15(LED+), 16(LED-) 番と 2 (5V), 1(GND) 番を繋ぐジャンパが見あたらないので、別途配線する必要があります。

バックライト LED に流す電流のスペック上限(Absolute maximum ratings) は 60 mA です。写真の 4.7Ω の抵抗だと、少しオーバー (テスターによる実測で 約63mA) します。

定格 (Electrical characteristics) の上限は40mA なので、もう少し大きめの抵抗値の方が安全です。

(aitendo の写真にある 2.4 Ω+2.4 Ωだと小さい。ただし、文章では4.2 Ωになっている)

2012年2月8日水曜日

Leonardo のサンプル



前回前々回に続き、Arduino Leonardo 体験、第3段です。

実際に使っているのは ストロベリーリナックスの「ダ・ヴィンチ32U」です。
Leonardo ならではのサンプルとして、USB のHID を使ったサンプルがあります。
「JoystickMouseControl」という名前です。
このサンプルは Arduino 1.0 rc2 まではライブラリ「Mouse」のサンプルとして、付属していました。

RC2 もまだダウンロードできますが、このサンプルは public domain となっているので、こちらに置いておきます。
(一部改変してます。)
 LED D5 > D13
 SW D6 > D2
 pull-down > pull-up (internal resistor)
 X 移動 A1 (サンプルのまま)
 Y 移動 A2 (サンプルのまま)

アナログ入力 2つ (A1, A2) を使って、それぞれマウスの X 移動, Y 移動を送ります。
実行すると、ボタンを押したとき、LED が点灯し、Mouse になります。
もう一度ボタンを押すと、LED が消灯し、無効になります。
Mac からの見え方は特に変化がないようです。




続いて Keyboard です。キーボードはサンプルコードがありません。
Button をベースにしたサンプルを作りました。

 LED D13
 SW D2
 pull-down > pull-up (internal resistor)


Keyboard.write(code);

で、ASCII コードを指定すれば、キー入力に変換してくれます。
大文字、小文字の処理は勝手にやってくれるのですが、反面、ModifierKey (Shift など) を指定できません。(少し手を加えればできそうですが、、、)

何より残念だったのは、これらのデバイスはOS から複合デバイスとして認識されているということです。
単純なHID キーボードではないので、OS によっては認識されません。
そう、iPad (with Camera Connection Kit) からは認識出来ませんでした、、、
Android も(Xperia Arc, Android 2.3.4) 駄目でした。(消費電流が大きすぎると警告されました)。

この機能を使って、Newton Keyboard アダプタを安く小さく作れると思っていたのですが、iPad に繋がらないと意味がないですね。


ダ・ヴィンチ32U as Leonardo


前回に引き続き、ストロベリーリナックスのダ・ヴィンチ32U ボードの紹介です。

・Arduino IDE のサンプルをいくつか実行して気づいた点

 電源投入してから、ユーザープログラムが起動するまで数秒 待たされる。(D13 が明滅している)
 アナログポートとしてつかえるピンが増えている。
 SPI のポート(SS,SCK,MOSI,MISO) がD10〜D13 とは別のポートになっている。
 シリアル通信がうまくいかない?


・問題なく動いたサンプル
 1. Basics > Blink
 2. Digital > Button
 3. Analog > AnalogInput
 3. Analog > Fading
 4. Communication > PysicalPixel
 Ethernet > WebSerber

単純に28pin DIP 版のArduino Uno よりも、使えるIO が増えている。
Ethernet は D10-D13 にあった SPI のポートが別の場所に変わっているので、
そこを正しく接続すれば問題ない。

D13 はオンボードにLED がついていて、PWM ポートになっているようだが、analogWrite(13,val); ではコントロールできなかった。


・問題があったサンプル
 4. Communication > ASCIITable

これはMac 固有の問題なのかもしれないが、ASCIITable のサンプルの様に、
起動直後にSerial 出力をすると、受け取る事ができなかった。

理由を想像すると、

プログラム転送→(シリアルモニタ使えない)→転送完了→ユーザープログラム実行 →シリアル接続開始

とやっているうちに、転送が終わってしまうのが原因らしい。

それでは、と、リセットボタンを押すと、今度はUSB シリアルが死んでしまう。
(おまけに、シリアルポートをオープンしている時にリセットを押すと、高い確率でフリーズする。)

データを繰り返し送り続ける、ボタンを押したとき送る、シリアルを受信して返す、などのプログラムは問題なさそうだ。

・外部機器とのシリアル通信

Uno では別のチップだったUSB シリアル変換機能を内蔵している。
「Serial」はUSB シリアル通信専用になり、Serial.write/Serial.read の通信は外部に出力されない。

Atmega32u4 本来の UART機能を使う場合は「Serial1」を使う。
(Arduino MEGA など、複数のUART を持つボードで2つ目のシリアルを使うのと同様)
Serial1.begin / Serial1.write / Serial1.read などとすればOK。
これで、D0 をRX、D1 をTX として、外部と通信ができる。


・USB Host Shield
USB Host Shield のライブラリは、Leonardo ボードを指定すると、
コンパイル時にエラーになる。これは簡単には解決出来なさそう。
小型のADK ボードが作れるかと思っていたのに、残念。
(2/13追記)→動きました

以上、短時間動かしただけなので、実用上の問題がないかは分かりません。
Leonardo 正式リリース時には、また状況が変わるかもしれません。

2012年2月7日火曜日

Leonardo っぽいの


Arduino の新シリーズにArduino Leonardo という、Atmega32u4 チップを使ったボードが予定されています。
発表されてから4ヶ月以上たちますが、本家からはまだ発売されていません。
32U4 の機能でUSB シリアル変換を実現し、部品点数を大幅に省略しているのが特徴です。


上:aitendo AVR-USBasp (Atmega8) 下:ダ・ヴィンチ32U (Atmega32U4)

Strawberry Linux が製造・販売する、Atmega32u4 ボード「ダ・ヴィンチ32U」は、
Leonardo ブートローダー書き込み済み (with Arduino Bootloader) 版があります。
ボードは完成品。改造なしにLeonardo として使え、現在売られている互換製品の中でも抜群に安い(1,260円)です。



接続ピンは自分で付けるため、どの向きにつけるかは悩みましたが、結局 Arduino スタイル(基板表面にソケット)で付けました。

Arduino 1.0 IDE で使用する場合、boards.txt の書き換えが必要です。
マックの場合は Arduino.app を右クリックして「パッケージの内容を表示」を選び、
> Contents > Resources > Java > hardware > arduino とフォルダを辿ったところにあります。

/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/boards.txt

テキストエディタで開き、147行目〜161行目あたりの leonardo で始まる行のコメントアウトを外します。(行頭の# を消す)
保存して IDE を再起動すれば、Tools > Board からArduino Leonardo を選択できるようになります。

このダ・ヴィンチ32U は Atmega32u4 のI/O ピンが全部出ているのが特徴ですが、
基板に書かれているIOピン名称はArduino 互換ではないため、読み替えが必要です。

IOピン名称と、Arduino ピン名称の対応は、boards.txt と同じフォルダ内の、
> variants > leonardo フォルダにある、pins_arduino.h を見ると書いてあります。
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/variants/leonardo/pins_arduino.h

ダ・ヴィンチ32U と Arduino Leonardo のピン名称対応表。

いくつかサンプルを動かしてみて、Uno と全く同じというわけではない、というのが感想です。
サンプルに修正が必要なものもありました。
今後何回かにわけて、掲載します。

現時点で、Arduino Leonardo は正式にサポートされていません。
発売が遅れているのも、何かバグが見つかったからかもしれません。

このボード、あるいは別の32U4 ボードをLeonardo として使う場合、
その点を踏まえた上で、お楽しみください。

2012年2月1日水曜日

USBasp のファームウェアアップデート その2

aitendo USBasp-B のファームウェアアップデートについて、Arduino as ISP を使う方法を紹介しましたが、OS X 環境ではどうも再現性が低く、再度試したらだめでした。

そこで、、、


もう一個買ってきました。

USBasp を使って、USBasp のファームウェアを書き込みます。
2台をUSBasp をストレート結線でつなげばOK です(アップデートされる方の J3 ジャンパをショートします)。

千石で良いケーブルを売っていました。210円。
何も書いていませんでしたが、Sparkfun のDEV-09215 だそうです。

これは10pin - 10pin のストレートコネクタに加えて、AVR 用の 6pin ICSP コネクタがついています。
これで変換基板を作らなくてもOK。


このケーブルとUSBasp があれば、Arduino の自作も簡単です。
USBasp のファームウェアアップデートは、しなくても問題なさそうですが、
ケーブルとUSBasp 2つ買っても2010円。
はじめからこの値段だと思えば、、、、

高いか。


参考までに、aitendo USBasp-B を2台使って2011-05-28版ファームウェアを書き込む方法
(あくまで、私が購入したときのファームウェアから、2011-05-28 にする方法です。既に新しい版になっているかもしれません。)


プログラマーとして使う方をUSB で接続します。(J3, J5オープン、J4クローズ)
アップデートする対象をストレートケーブルで接続します。(J5 オープン、J3, J4 クローズ)

avrdude のバージョンは5.2 以上が必要です。
(確認コマンド)
$ avrdude -v

ファームウェアのあるディレクトリで
$ avrdude -c usbasp -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex:i
(fuse bit の書き換え:1度だけ)
$ avrdude -c usbasp -p m8 -U hfuse:w:0xC9:m