2014年6月22日日曜日

ArduinoからEthernetで直接fluentdにPOSTする

IMG_0993

ArduinoにEthernet Shieldを載せることで、Arduinoから直接各種サーバにデータを送ることができるようになります。ArduinoでA/D変換した電圧値をfluentdに送付することで、簡易ロガーとして活用することもできます。

fluentd側

Ethernet経由で受信するだけなので in_http が動くようにします。サンプルどおりで大丈夫です。

Arduino側

fluentd の in_http はPOSTで受け取るので、サイトのWebClientを参考にしてPOSTを送信するスケッチを作成します。

  • servername:fluentdサーバのドメイン名 or IPアドレス
  • serverPort:fluentdサーバのポート
  • pageName:fluentdに送信する際のタグ(スラッシュ含む)
  • params:fluentdに送信するJSON(json=で始まる)

コード中のこれらの変数を適宜書き換え、POSTメソッドの生データを組み立てて送信する形になります。

目的

回路の性能測定の際、電圧・電流を長時間モニタすることがあります。専用機器を使うものなのですが、機器自体が高価で、なかなか手が出ないものです。A/D変換し値を保存できればよいので、Arduino + fluentdの組み合わせで簡易ロガーとして使用します。fluentd側がが受信した時刻を記録できるので、ネットワークの遅延を気にしない程度の間隔ならば、複数のArduinoで計測記録の同期をとるのも容易です。

また、センサネットワークのセンサそのものに組み込むには高機能高コストですが、別途なんらかの無線とかで受信したセンサの値をネットワークに送信する母艦としても使えると思います。

2014年2月2日日曜日

定時退社を強く主張する腕時計を購入しました

IMG_0585

現在時刻のわかりにくい腕時計を壊してしまったので、腕時計を新調しました。

Happy Hour Timepiecesというメーカーの、The Ishという機種。文字盤は数字の5のみ。5の周辺以外はぼかしてあります。5時だけがすぐにわかる仕組みです。

栓抜きがついている

IMG_0587

留め具は栓抜きになっているので、5時になったら仕事を終えてビール瓶を開けることができます。サイトには開け方も載っているけれど、バンドにかかる力を考えると少し不安です。実際にやってみました。

IMG_0602

説明を見ずにやってしまいました。きちんとグリップするのですが、ふつうの栓抜きにあるテコの部分がないため開けにくいです。手首につけた状態なら、腕が多少のテコになってくれるのかもしれません。ウケはよかったです。

2014年1月17日金曜日

Negiccoを支える技術

これをみて"書かねば"と思い立ったので。NegiccoさんのライブステージでリアルタイムのWebアプリを使った演出がありました。

昨年9月の話

渋谷の2.5DへNegiSUMMIT Vol.6を観にいったときのこと。ライブステージも終わったイベント終盤、観客がスマートフォンのブラウザを操作することによって、ステージ背面に設置されているスクリーンに動作が反映されるというもの。

現場のみなさんは入場時にURLの書かれた小さな紙を渡されており、あらかじめページを開いて待っててねとのお約束。仕掛け2のスマホシェイクのページに移動します。そのページにはNegiccoのロゴとネギイラストのみ。

スマートフォンを振ると、振ったぶんだけスクリーンにネギが出現するという演出。ネギは一定時間で消えるので、ちょいとした弾幕のような雰囲気に。2.5Dのライブストリーミングはアーカイブしないようなので、テキストでしか説明できないもどかしさ。

見える部分から仕組みを想像する

スマホシェイクのページはWebアプリなので、ここから裏側の仕組みを探っていきます。jQueryプラグインのgShakeを使って振動を検出し、Socket.IO経由でサーバにシェイクが起きたことを通知しています。サーバはSocket.IO→Node.jsのつかえるPaaSのひとつ、AppFogに設置。

スクリーンショット 2014-01-17 0.19.00

この先は予想になります。AppFogのサーバはリレーとして使って、スクリーンに映している端末へメッセージを送る。端末側(Macだった)でアニメーションの演出をするとなると、真っ先に出てくるのはQuartz Composer。githubにQuartz Composer用のWebSocketプラグインがあったので、これを使えばサーバからメッセージを受信できそうです。ここまでできれば、メッセージをトリガーにアニメーションを描画することであのステージの演出を再現できそうです。

楽曲派のやってることと似ている

ステージ演出の仕組みを読み解いてみると、楽曲派が曲や歌詞から元ネタを探っていくのに似て楽しいということに気付きました。背景を探って奥にあるものを見つけ出してはニヤニヤするだけなんですけど、これがなぜか楽しい。なじみのある技術が、見慣れた場所以外で活用されている様子に出会うとちょっとうれしいものですね。

2014年1月12日日曜日

USBを電源にしてゲームボーイを動かす

うちにはスケルトンタイプのゲームボーイがあります。小学生のときに買ってもらったものです。これをUSBのポートを使って動かします。

電池で動いているとき

初代ゲームボーイは、単3電池4本を全て直列でつなぐことで動きます。アルカリ電池を使う場合、1.5V x 4 = 6.0Vが電源電圧となります。ここをエネループのような充電池にすると、1.2V x 4 = 4.8Vとなります。アルカリ電池が切れるときはだいたい1.0V程らしいので、ぎりぎり駆動できる範囲と言ってよさそうです。USBを電源にすれば安定して5Vを供給できるので、昇圧・降圧などの回路を増やすことなく置き換えられます。

ケーブルをつくる

φ1.3のプラグと適当なUSBケーブルを用意します。一部の電気屋さんではUSB→DCφ1.3のケーブルをふつうに売っていますが、だいたい極性が逆かもしれません。ゲームボーイはセンターマイナスです。よく売っているものはセンタープラスなので、そのままつなぐとおそらく故障します。USBケーブルのBプラグ側を切り、出てきた配線をプラグにはんだづけします。だいたい赤い線が5V、黒い線がGNDですよね。信号線はショートしないようにカバーするなりしておきましょう。

動かしてみる

ゲームボーイの消費電力は、筐体をみる限り0.7Wです。引き込む電流はそんなに大きくないので、写真のようなモバイルバッテリーではなくPCの端子でもいけると思います。

2013年12月8日日曜日

FRDM-KL25Zを簡易なARMマイコンライタにする

Cortex-M0+を積んだFreescaleの安いマイコンボード、FRDM-KL25Z。これをちょっとした改造でARMマイコン用のライタにします。参照元はいつものMCU on Eclipseから。

仕組み

FRDM-KL25Zは、PC向けUSBポートの管理やデバッグ、書き込みのインタフェースとして、OpenSDAという仕組みを使っています。購入時の状態では、これは同じボード上のKL25Zのマイコンへファームウェアを書き込むのに使われますが、基板上の端子穴からこれを横取りすることで、任意のARMマイコンへファームウェアを書き込むことができるようになります。

改造箇所

  1. 基板裏面にある、J11の穴どうしをつなぐパターンをカット
  2. J6にピンヘッダをはんだづけ
  3. OpenSDAのファームウェアを更新

この3箇所のみ。J11のパターンカットによって、SWDのクロックがボード上のマイコンに届かなくなるので、OpenSDAの影響を受けなくなります。再度接続したい場合は、ジャンパピンをたててショートさせましょう。

J6のピンヘッダがくせ者です。縦横どちらの方向も1.27mmピッチなので、店頭であまり売ってません。残念ながらぼくはどこで買ったか忘れました。これに対応したケーブルつきメスコネクタは秋月に売っていたので、もしかしたらあるかもしれません。

OpenSDAのファームウェアは、Freescaleのサイトからダウンロードします。リンク先の"FRDM-KL25Z Quick start package"からどうぞ。KL25Zに書き込む場合は MSD-FRDM-KL25Z_Pemicro_v105.SDA を、それ以外のARMマイコンの場合は CMSIS-DAP_OpenSDA.S19 を書き込みます。DEBUG-APP_Pemicro_v102.SDAは、ボードをデバッガとして使う場合に書き込みます。v102の部分はバージョン番号で、異なるかもしれません。

接続例

IMG_0423

USBケーブルがささっているほうがライタ、もう一方がターゲットになります。PC側はOpenSDAによってUSBドライブとして認識されているので、コンパイル済みのファームウェアを放り込むだけで書き込みが終わります。

2013年8月29日木曜日

FRDM-KL25ZにUSBホストの機能を実装するための準備

Freescaleのやっすい評価ボードのFRDM-KL25Z。やっすいのに加速度センサやタッチセンサ、フルカラーLEDなんかもついているうえ、マイコン自体がUSBのホスト・デバイス・OTGのいずれにも対応している高機能品です。基板上のUSBコネクタはMini-Bですが、ちょっと無理をすることでUSBホストの機能を実装することができます。

実装にあたり、ほとんどの情報はMCU on Eclipseを参考にしています。この記事もほとんどそのサイトに書いてあることを日本語にしているだけです。ぼくが忘れないように。リンク先の著者はFreescaleの中の人のようですが、Freescale本家サイトよりも圧倒的に詳しくわかりやすく書いてくれています。本家しっかりしろ。

FRDM-KL25Z自体は、最初の発売からアップデートがかかっています。この記事ではRev.Eを使用しています。スイッチサイエンスにて購入したときはこのRev.Eでしたが、一部の回転が遅めな販売業者ではRev.Dが販売されているようです。USBホストとして改造するには死ねますが、mbed互換基板として使うぶんにはよさげです。

基板側の準備

箱から出した状態では、USBデバイスとして基板が構成されています。いくつかの配線をショートさせることで、USBホスト向けの回路にします。

USB ID端子のショート

USBホストを実装する際には、IDピンは不要となります。コネクタそばのR82に0Ω抵抗を実装してGNDへ落とします。

ジャンパピンをショート

2か所のジャンパピンをショートさせます。ひとつはJ21。OpenSDA(デバッグ)用としてPCとつながっているMiniBコネクタの5Vを、そのままVBUS電源として供給するため。もうひとつはJ20。D20のVfでマイコン本体向け3.3Vが低下するのを防ぐため。その先のJ3とJ4もショートさせたほうがいいらしいですが、横の抵抗が0Ωなのでどうなのかなと。

5V出力の3端子レギュレータの追加

これは必須ではありませんが、J22に5V出力の3端子レギュレータを追加すると、外部電源(〜9V)をつないだ際にUSBのVBUSへ安定した電源を供給できます。J9の10番端子に5Vが出てくるので、そこから線を引っ張ってVBUSへ。基板上にはパターンはなさそうなので、めんどうではありますが。

ファームウェアの更新

のちのちデバッグがやりやすいように、OpenSDAをシリアルポートとして認識させるファームウェアに書き換えます。mbed対応のものではないので注意。

PEmicroがOpenSDAの各種ファームウェアやドライバを公開しています。ダウンロードにあたって会員登録が必要なのは目をつむるとしても、ログイン画面だけがHTTPSだったりXSS仕込み放題だったり(さすがにscriptタグは対策してたが)とメールアドレス以外の情報はできるだけ渡したくない雰囲気がぷんぷんしますが、そういう便利ツールを無料公開してるから仕方ないかなって気がしたりしなかったり。

Pemicro_OpenSDA_Debug_MSD_***.zipをダウンロード・解凍すると、各種評価ボード用のOpenSDAファームウェアが入っています。KL25Z…をインストールしそうになりますが、DEBUG-APP_Pemicro***.SDAをつかいます。Windowsにて、基板上のボタンを押したままUSBケーブルをつなぐと、小さなドライブがマウントされるので、そこにファイルをドラッグします。ケーブルを差し直すと、デバッグにやさしい状態になっています。

IDEの準備

mbedはつかいません。なぜならKL25Z向けにUSBホスト機能を提供していないからです。チップがOHCIに対応してないから当分の間実装はしないってさ。なのでブラウザIDEではなく、Freescale提供のCodeWarriorを使います。無償トライアル版ではフラッシュが64KB制限だったりRTOSのサポートがなかったりしますが、特定のデバイスのみに対応するUSBホストを実装して任意のちょいとしたコードを追加するには十分です。どうしても足りないなってときは、もろもろの制限の外し方をさきの参考サイトが書いてくれています。中の人なのに。

FreescaleのサイトからCodeWarriorに加えてUSB Stackをダウンロードし、インストールします。最新版CodeWarriorのなかみはEclipseですが、Windows版のみでMacOS版はありません。マイコン開発の壁はここだと思う。

Processor Expertの準備

CodeWarriorにはProcessor Expertというコード自動生成ツールがついています。UARTやタイマーなどのペリフェラルのうち、レジスタを直接たたくような部分については自動生成し、それ以外のアプリ部分に集中してコードを書けるという仕組みです。USB Stackをインストールすると、ホスト・デバイス・OTGを扱うためのProcessor Expertの追加機能がついてきます。CodeWarriorを起動し、メニューバーのProcessor Expert内、Import Component(s)から。"スタックのフォルダ\ProcessorExpert\Components"の*.PEupdを全て指定しておきましょう。

これで準備完了

これでUSBホスト機能を扱うまでの準備が完了しました。この先のコードなどについてはサンプルや例のサイトなどを参照ください。

2013年8月24日土曜日

いまさらレコードプレイヤーを買った

もう21世紀も1割すぎたってのにね。雰囲気がいいよね。

Vestax handytrax USB

なんか本気の、発電所まで指定しなきゃいけないんじゃないかっていうやつはいらなくて。むかーしアルバムのジャケットで見たものか、ピチカート・ファイヴが歌ってたポータブルプレイヤーがあるといいなーと電気屋さんを見てたら、コレでいいんじゃないかと。

IMG_1235
ほんとはこういうのがよかった

TIのUSBオーディオのICが載っているので、スピーカーから出る音をA/D変換してPCで聴けます。専用ソフトが付属していたけど、とくになくても大丈夫な感じ。PCからは一般的なUSBオーディオデバイスとして見えるだけなのでドライバが必要ってわけでもなく、外部音声入力としてQuickTimeなんかで録音したりもできます。

Negiccoのアナログ盤を聴くために買った

IMG_1217

新潟を中心に活動するアイドルのNegicco、新譜をCDとレコードで出したんですよ。発売当初はCDだけでいいかなと思ってたんだけど、在庫あるっぽいからとりあえず買っておいて、これを機にレコードプレイヤーを導入するのもいいかなと強引に納得させるように。

いま初めて知ったこと

7インチ盤は片面で1曲分。だからボーカル抜きのトラックは入ってない。もともと入ってなくて、8センチCDが出たときにおまけで追加されるようになったんですね。

LP盤は片面20分くらいなので、最近の12センチCDアルバムの内容をレコード化すると2枚組。3〜4曲で片面うまっちゃうんだね。