SyntaxHighlighter

---SyntaxHighlighter ウィジェット---

2014年9月29日月曜日

ポケットサーモグラフィのプロトタイプ

数週間前に買ったUSBサーモグラフィ、シリアル通信が出来ず苦戦していたのだが
販売元に問い合わせてみると、ファームのバグだったらしい。

メインはPIC24Fだったので、手持ちのPickit2で頂いたHexファイルを書き込んで修復。
見事にシリアル通信ができるようになった。
以下の写真のサーモに5pinのヘッダが付いているのは、この書き込みの跡だ。

というわけで、かねてから計画していたポケットサーモを作ることにした。


画面には、簡単なシリアル通信で高度な描画が可能なe-DISPを使用。
センサーにはもちろんUSBサーモグラフィ。
制御は、シリアルポートとUSBシリアルが分離していてデバッグが容易なArduino Leonardo。

ArduinoのSoftwareSerialは、38400bpsでは送信はうまくいっても受信がうまくいかない。
そのため、ハードウェアUARTでUSBサーモと通信し、e-DISPにはソフトシリアルで送りっぱなしにすることにした。

e-DISPは、コマンドでいろいろと複雑な描画指定ができ、ここでは四角形描画コマンドを
使用して表示してるので、表示は実用レベルに早い。

表示できるようになると欲が出るもので、 補完処理が欲しくなる。

USBサーモのデモプログラムでは3次式補間(バイキュービック補間)を使用しているらしいが
これは結構重いらしい。
8bitマイコンでできる程度の補間といえば、ボカシとメディアン、直線近似くらいだろう。

一応、USBサーモを注文した段階でPC上でボカシ&メディアンな処理はやってみていたが
いまいちだった。
でもどうせならと、Arduino上で3x3のボカシ処理をするようにしてみると、あら不思議。
以外とまともな表示になるではないですか。



16x4を、48x12(限界)に拡大し、ここに3x3のボカシを掛けたのが、上記の画像である。
この時点では、処理にミスがあって端点ににじみのようなものが出てしまっている。
ちなみに、私の顔だ。



処理を修正し、元画像と並べて表示するようにしたのがこれ。私の手だ。
単にボカシを掛けただけなのだが、ここまで見やすくなるとは、本当に意外だ。

ここで、問題が出てくる。高解像度の表示をしようとすると、ぼかしの処理そのものが早くても、38400bpsの通信では遅い。

e-DISPにはダイレクトにピクセル単位で送受信する機能もあって試してみたが、
これでは四角形描画指示をするよりもむしろ格段に遅かった。

e-DISPそのものは、115200bpsまで送受信可能だ。
しかし、ArduinoのSoftwareSerialでは確実に通信できない。ハードウェアUARTに頼る他ない。
実際、115200bpsで表示したところ、さきほどまでのノロノロはどこへやら、高速に表示された。

しかしながら、SoftwareSerialの38400bpsでは送信できても受信がうまくいかないのは
先ほど言った通りだ。いくら表示が早くても、肝心のサーモ情報を受け取れないのでは話にならない。

USBサーモのボーレートが38400bps以外に変更できればいいのだが、それもできず。
というわけで、アホなことをすることにした。

_人人人人人人人人人_
> Arduino2台使用 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y ̄


実際の光景がこちら。


表示されない場合はこちら。

このあと、画面バッファの切替機能を使って描画中の表示を出さないようにするなど工夫している。
各種部品は注文したので、届き次第、ケースに組み込んで本当に携帯できるようにしたい。

今回は、ソースコードは載せないことにした。
ちょっと場当たりすぎて汚い。後々、リファインしたら載せるかもしれないが。

もし欲しい人がいたら問い合わせていただければお渡しできるかもしれませんが。

2014年9月23日火曜日

いろいろとメモ

まず1つ、Google App Scriptエンジンはかなり便利。

スプレッドシートでチャットもどきを作ったが、GASを組むと
自動でソートしたり、色つけたり、外部サーバーに通知送ったりと色々できる。
一定間隔で実行なんかもできるので、cron代わりに使っている人もいるようだ。
twitterにもアクセスできるみたいなので、botを組むこともできるかもしれない。
ただし、処理が長引くと切られる。

外部のサーバーにGETを投げるのも、
UrlFetchApp.fetch("http://example.com/");
の1行でOK。

ただし、接続に失敗したりすると、後々メールでエラーレポートが来るので
例外キャッチはしておいたほうがいいだろう。


もう1つ。Perlで、GETアクセスがあると音声を鳴らすだけの簡単な
HTTPサーバーを書きました。やっつけ。

Win32::Soundを使うと、どうも音が被った時なんかにならなくなるので、
マルチスレッドな用途にはWin32::MediaPlayerを使ったほうがいいようだ。

ただし、後始末をきちんとしていないせいか、メモリがごりごり食われる。
まあ、サーバー機ではなくPC上で一時的に使うものなので、気にしなくても良いだろうが。