遅くなりましたが、あけまして、おめでとうございます。本年も宜しくお願いいたします。
2年前に年賀状を出すのを止めて、年末が楽になった。私に年賀状をくれた人、そういう訳ですので済みません。
正月は9日間、自宅でゆっくり過ごしました。基本的にTV,ネット、Civ4。OpenCVも少々。
買い収めで注文したものが年末にいろいろ届き、ブログのネタになると思ったものの記事を書くまで気力が高まらない。朝からダラダラとネットの記事とか読んでいると気力が落ちてしまって建設的なことができない。今年は反省して、朝からネットの記事を読みまくるのはやめよう。
2014-01-07(Tue)
謹賀新年 2014
2014-01-07(Tue)
OpenCV遊び
正月はOpenCVを少しいじっていた。OpenCVは以前QRコードのデコーダを動かしたくて、いじったことがある。調べたら5年前の話だった。機会があれば使いたいと、ずっと思っていたのだが今回やりたいことを思いついたので、いじり始めた。
最初、Windows用のバイナリをダウンロードし以前と同じようにPythonで試す。サンプルのコードは動くが、Pythonに慣れていないのでコードを書くのが面倒だ。それにPythonで書いてもコードが極端に短くなったり、わかりやすくなったりしている気がしない。
C言語のサンプルプログラムのコンパイルを試みるが、リンクするライブラリの多さに挫折する。
調べると、pkg-configコマンドが使える環境だと、
`pkg-config --libs opencv`とやるだけでライブラリの指定が可能らしい。OpenCV 2.4.8 for Cygwin (Japanese)というページの指示どおりにOpenCVのインストールを行う。しかしcmakeコマンドを実行したところでエラーになる。いろいろ試行錯誤して調べた結果、OpenCVのソースのファイルにread permissionがついていないのが原因らしい。read permissionがついていないのは、ソースのzipファイルをwindows側のプログラムで展開したせいだと思う。
read permissionが無くても、cygwin環境では普通に読めるし、コンパイルもできる。cmakeの一部の機能だけ動いていないような気がする。
chmod -R +r .で解決。cmakeのエラーが発生しなくなりOpenCVのコンパイル、インストールが完了した。cygwinで使うOpenCVは快適だ。emacs+makeで直接コンパイル&修正できる。OpenCVの本のプログラムがC++で書かれていることに気がついてからは、更に楽になった。
C++といっても、変数の宣言を途中で行うことと、引数の省略程度ぐらいしか使っていないので、パッと見はCに見えるので、気がつくのが遅れた。Cで書くと、省略された引数をやたらと補わなければならないので気がついた。正月中にチェスボードの認識、カメラのキャリブレーションなどが動くようになった。
OpenCVのプログラムは、USBカメラで取得した画像に認識した結果を上書きして、それっぽい感じで楽しい。しかし、目的がないと、ひととおりサンプルを試して終わってしまう。その後、やりたいことがあるかどうかが勝負。
2014-01-09(Thu)
PIC32 USB Starter Kit II を修理
digikeyに注文したPIC32 USB Starter Kit IIが年末に届く。自宅で少しいじってみようと、MPLAB X IDEをダウンロードしmicrochip_solutions_v2013-06-15にあるHID Custum Demoをコンパイル。プログラムを書き込むところまではすぐに出来たが、USBケーブルでPCにつないでもウンともスンとも言わない。年が明け、職場で試すが、状態は変わらない。デバッガには反応するしLEDも点滅したりするので、CPU自体は動いているようだ。他のUSBのプログラムを書き込んでも状況は同じ、PCが反応してくれない。他のPCで試しても同じ。
USBプロトコルアナライザで見ても、全く通信が行われていない。USBなんて、D+/D-のどちらかがLowに落ちるだけで通信が始まるんじゃなかったけ?
これはもう、いよいよUSBラインの接続が怪しいので調べるしかないのでUSBケーブルを接続した状態で、USBケーブルの端子と基板との接続をテスターで調べてみる。すると接触が不安定。基板上のmicro-Bコネクタの端子に半田がついていないように見える。 顕微鏡で見ながら端子をピンで触ってみると、やっぱりどうも付いていないようだ。
ハンダゴテ2本使いで、じゃまなコンデンサを一旦外し、端子をハンダ付け。考えてみれば、端子横のGNDと思われるパッドが金色のままなのも不自然だ。micro-Bコネクタ種類が変更になり、ここだけ手半田とかで作っているのではなかろうか。
はんだ付け後、USBケーブルでPCにつなぐと、一発でUSBデバイスとして認識された。メデタシメデタシ。
[gallery link="file" ids="8400,8401,8402,8396,8398,8397"]
2014-01-16(Thu)
いぶすき菜の花マラソン
12日の日曜日、s野君にに誘われていぶすき菜の花マラソンに参加した。距離はフルマラソンで、高低差が100メートルぐらいだから、なんとかなるかと思ったら、ものすごくヘビーで20数キロ過ぎでダウン、歩き始めてしまった。残りの距離が20km近くあり、歩くと4時間、果して帰ることができるだろうかと心配になったが、たまに走る程度で5時間52分、約6時間でゴールすることができた。タフなコースだ。
参加人数に制限が無く、2万人近くが走るのでコースが大混雑だったり、宿や駐車場の確保が大変だったり、帰りは大渋滞だと脅されたりしたが、沿道の応援や食べ物攻勢は、なかなかよかった。コース中盤以降2.5km毎に給水ポイントがあり、スポーツドリンクの外、バナナ、ふかし芋、氷砂糖、梅干し等は,だいたいあった。それ以外の有志による食べ物の提供がすごく、おしるこ、豚汁、焼き芋、マンゴージュース、地鶏の炭火焼まであった。
来るまでは一生に一度走れば充分かと思っていたが、途中で挫折したのが気にかかる。食べ物も良かったし、もっとスタミナが付いたら、再度挑戦してもいいのかもしれない。
帰りは、広域農道を通り、ひどい渋滞にかかること無く帰り着いた。
[gallery link="file" ids="8418,8419,8420,8421,8417"]
2014-01-25(Sat)
USB/HIDが使えるようになった
PIC32MXでmicrochipのライブラリを使用せずUSBの機能を使えるように作業していたのだが、苦労の末、使えるようになった。USB共通の処理、enunerationへの対応はスムーズにできたのだけど、そこから先はPC側のプログラムも必要になる。CDCクラスでシリアルデバイスのふりをすればPC側はputty等の端末ソフトで実験できるのでCDCクラスの機能の機能を実装してみると、これも比較的スムーズにできた。しかし、CDCクラスでは、PC側でCOMポートを選択してやる必要がある。HID(Human Interface Device)クラスならその必要がないので、HIDクラスで通信できるようになりたい。
HIDクラスでは、レポートデスクリプタというものをPC側に送ってやらなければならない。これで、PCとの通信内容を細かく記述できるのだが、PC側のドライバーが、このドライバーをどの程度利用しているかよくわからない。レポートデスクリプタの書き方を覚えるのが面倒なので、実験してみることにした。
HIDを操作するプログラムのやり方を調べるとHIDAPIというライブラリがあることを知る。Linux/Windows/Macに対応しており便利そうだ。添付のサンプルプログラムをWindowsで走らせるとHIDデバイスの列挙までは、すぐに動いた。Vendor_id/Product_idを設定し、その先の機能を試みると、デバイスをオープンでき、文字列等の取得はできるが、send_feature, get_feature, write, readが全て動かない。
Windows側のAPIでエラーになっており、USB上の通信は全く発生していない。
レポートデスクリプタのせいなのか、何のせいなのかわからない。サンプルプログラムはMicrochip社提供のサンプルプログラム「HID Custum Demos」が書き込まれたデバイスを対象としているように見える。
ここで、Microchip社のサンプルが、そのまま動く環境が欲しくなりPIC32 USB Starter Kitを購入したわけだ。ところが、USB Starter KitにHID Custom Demosを書き込んで試しても状況が変わらない。ここで解決策がみつからず、長いこと悩む。HIDAPIを疑い、いろんなversionを試したりしていた。
ある時、サンプルプログラムがreport1の読み書きを行っていることに気が付き、これを0に変更してみたところ writeとreadが動くようになった。
レポートデスクリプタに書かれたレポート番号とデータの長さが合っていないとWindowsのAPIのレベルでエラーになるらしい。このころにはレポートデスクリプタの内容が、なんとなくわかるようになったので、featureに関してもレポートデスクリプタに追加してやったところ send_feature, get_featureも動作するようになった。
2014-02-01(Sat)
HDDプロペラクロック点灯実験
HDDのモータを利用したプロペラクロックの点灯実験用基板を作成、なんか光るようになったので、回転させてみた。点灯実験用基板は、PIC32MX220と2個のTLC5940が搭載されており、最大32個のLEDを点灯させることができるが、現在は、まだ4個しか実装していない。
TLC5940でLEDを点灯できるようになったので、HDDモータの上に取り付け回転させてみたところ、回転した状態でも問題なく点灯できた。当然だ。なかなか綺麗だ。
動画でみると、起動が不安定な感じになっているが、これは回転部の重量が増したせいだろう。よくみると基板に作業用の黄銅製スペーサがついたままになっている。取り外してみても、起動がスムーズになるわけではなかった。ブラシレスモータドライバの設定用コンデンサの値を変更してやればなんとかなるだろうと思っている。点灯用基板の電源は5Vで、HDDモータの電源は回転速度を制御するため別電源が必要なので、現在2系統の電源を使用している。次は、HDDモータの回転速度を制御する基板を作成し、1電源による駆動と、定速度回転を達成する予定。
2014-02-01(Sat)
いろいろ平行して作業中
現在、いろんなものを平行して作業している。作業中の基板だけでも集めて写真を撮ってみた。写真の左上はHDDプロペラクロック、右上はUSB経由のLEDコントローラ。左下は某社のLEDディスプレーの実験を行うための基板で、右下はマイクロマウスの実験をするための基板。下の2つの基板では、秋月の赤いユニバーサル基板を使ってみた。どんなもんじゃろ..と思って買ってみて、買ったからには使ってみないと...と使ってみた。なんか意図せぬショートとか起きそうでちょっと怖いけど、グランドと電源ラインがどこでもスグに繋げるというのはとても便利だ。今後も使いそうな気がする。
2014-02-01(Sat)
littleBitsお試しキット購入
年末の話だが、マグネット式コネクタに興味がありlittleBitsお試しキットを購入した。たった3つのモジュールしかないが、実際に試すと良く出来たコネクタだと感心する。どう間違っても、間違った接続はできそうにない。このマグネット式コネクタの部品だけ欲しいのだが、手に入らないものか。Base Kitを購入すればwire bitが入っているようなので解決なのだが、高すぎる。コネクタだけ売ってくれないかなぁ。あと、できれば3Pでなく4Pのコネクタが欲しい。
[gallery link="file" ids="8448,8449,8447"]