ラベル Electronics の投稿を表示しています。 すべての投稿を表示
ラベル Electronics の投稿を表示しています。 すべての投稿を表示

2017年3月6日月曜日

秋月TB6612FNG使用デュアルモータドライバ基板について

2月27日に秋月を訪問したところ、TB6612FNG使用デュアルモータドライバ基板を発見、店頭にあったものの大半をおさえてしまった。「新製品なんで店頭在庫少なめ」という話だったけれど、いまサイトをみると、3日前に発売開始したばかりだったらしい。
TB6612使用 Dual DCモータードライブキット (K-11219) 
モータドライバは発熱が怖いので、どうしても十分な放熱面積を確保したモジュール基板を使いたくなってしまう。ところがSparkFunやPololuのブレークアウト基板はかなりいい値段になってしまうので、350円というのはとてもありがたい。

しかし、この基板はブレッドボードでの実験用という位置づけのようで、ロジック側の9ピンは、秋月細ヘッダピン(φ0.5)に合わせた穴サイズ、モータ用電源やモータはターミナルブロックに合わせて5.08mm間隔のピン間隔になっている。マイコン基板を製造して、そこに載せるにはなかなかつらい。特に、ターミナルブロックを載せるために、Pololuと較べて縦横10mm以上大きくなるのもやや難点(放熱的には有利だろうけれど)。

そこで、外形のどの位置にピンがあるのか、もちろん加工誤差があるので記述しても意味がないのだけれど、クリアランスの目安がほしかったので、ノギスをあて、だいたいの寸法を入れてみたのが下の図。
秋月の「取扱説明書」に、寸法を追加してみた図
穴径で、ターミナルブロック側はφ1.3と書いたけれど、秋月のピンヘッダで製造する基板に載せることを考えると、ピンヘッダは0.64SQなので、対角1.1mmと考えてφ1.2で十分かもしれないし、製造公差やめっき処理の種類によってはφ1.3がよいかもしれない。基板の実寸はφ1.2のようだった。ターミナルブロック本体の足はφ1.0とのこと(こちらの寸法図より)。

また、説明書には「JP1をショートすることによりSTBYをプルアップ可能」とありながら、この図ではJP1の位置が、文字のどちら側なのか見えにくいので、印をつけておいた。よくある、半円が向かい合ったジャンパパターンが基板にあるのが確認できたし、回路図でもR1(10kΩ)でプルアップする形なので、隣に並んでいるのは、まあそうなのかなと思う。ただ、ICと非常に近いので、はんだづけが苦手な人には、ここにはんだを盛るのはやや難しいかもしれない。

ひとつ気になるのは、C1(0.1uF)をVMとGNDの間に入れているのはよいとして、VCC側にCがなぜないのか疑問。データシート通りに、VCCとVM両方に0,1uFと10uFを並列に入れるのが無難かと思うところ。ブレッドボードで使う人は、3番(VCC)と、ひとつ置いた5番(GND)のところに、リードの積セラ0.1uFをはんだづけしておくといいんではないだろうか。

製造予定の基板では、いつもモジュールを基板上に実装するときに使っている、秋月のロープロファイルピンヘッダ(7.7mm)の足を一本ずつ抜くか、モジュール側だけ切るかしたのをモータ側に使って高さを合わせようと思っている。ソケットは使わない予定だが、使いたい方は、対応したロープロファイルのピンソケットと、細ピンヘッダはICソケットが合うそうなので、丸ピンソケットを使われるのがよいのではないかと思う。

2016年9月11日日曜日

FT231XS(SSOP20タイプ)のピン配置図

まさか公式データシートにピン配置図がないとは...

あんまりびっくりしたんで、パワポで作図してみました。
FT231XSのピン配置(SSOP20タイプ)
ご参考まで。データシートを読めば誰でも作れる図だと思いますので、ご自由にお使いください。

This is a pin layout of FTDI FT231XS which is missing in official FTDI's datasheet.

You may use this freely because anyone can draw this by reading the datasheet.

DISCLAIMER:
LICENSE of this picture:  AS-IS.
I don't have any warranty to the correctness of this picture.  Use at your own risk.

2016年9月10日土曜日

Eagleで作るドリルデータがgerbvでよく見えない件→解決

いまだにEagleの無償コースを使っています。KiCadのいま、とか、Altiumのクラウド版CircuitMakerなどに全くついていけていません。クラウド版CircuitMakerについては、日本語ではガレスタさんの詳しい解説がありますね。

というわけで今回のプロジェクトもEagleなのでして、しかもいまさら感のある内容ですが検索してもなかなかわからなかったので、こちらに書くことにしました。

Eagleで作ったガーバーファイルをプレビューするにはMacならgerbvが定番だと思うのですが、ここで問題になるのがドリルデータがちゃんと見えない件。基板製造会社さんはドリルデータ作成にexcellon.camを使ってくださいとだいたい書かれていますが、できたガーバーファイルをgerbvでプレビューすると、ドリル穴が見えないぐらいちっちゃくて不安になるパターンでありました。コールセンターに電話して確認する感じで。それもどうかということで、調べてみました。

ドリルの問題については、OSH社のサポートページがよくまとまっています。
Common Errors with Drill Files - OSH Park Docs
んで、「EXCELLON24を使え」というんですが、それがどこにあるかは書いてありません。それで検索しつつさまよっていたところ、「Eableのbinの下にあるeagle.defを見ろ」と書かれた呪いがありまして、早速たしかめてみると、いわゆるWindowsの設定ファイルの形式でありました。つまり、角括弧の見出しのあとに、「キーワード=値」がずらっと並ぶもので、たくさん見出しがあるんですが、そのなかに、「EXCELLON」と「EXCELLON_24」があったわけです。

このふたつのどこが違うかというと、ResXとResYが10倍違っていて、EXCELLONは100000、EXCELLON_24は10000でありました。加工機の精度に合わせてあるんだと思うのですが、他のデータを作るGERBER_RS274Xは10000なのでして、gerbvがそっちに合っているのかなと思った次第です。低い方の数値でも工場が保証する加工精度には十分見合っているようなので、camファイルをコピーして、EXCELLON_24に書き換えておきました。具体的には、4行目を
Device="EXCELLON_24"
のように、「_24」を追記しただけ、ということであります。

ご参考になれば。

2016年1月6日水曜日

逐次比較型A/Dコンバータの勉強

そもそもA/Dコンバータってどうやってできてるの? ADCデバイスをソフトウェアから使うとき,クロック周波数指定するけどどうして? という疑問から,いまさらながらにしくみを勉強したところ,逐次比較型A/Dコンバータって,上位ビットから順に二分探索で電圧値を求める(LSBは切り捨て)手順だということに気づいた。

説明は,第一種アマチュア無線免許の試験問題解説をされているRadio-GXKさんのサイトの記事がとてもわかりやすい。同時に解説されている二重積分形型についてもわかりやすくて,とてもよかった。

変換トリガとともにサンプルホールドした入力電圧値を,Aref電圧に対して,上位ビット(MSB)から1/2, 1/4, 1/8, ... と,求めるビット数分だけ割っていった電圧を保持するDAC(キャパシタで構成するのが一般的なようだ)を用意しておき,クロックごとに上位ビットから順に比較していき,入力電圧値がDACのそのビットの電圧値より大きければ1,小さければ0をを出力ラッチに入れると同時に,次のサイクルでDACのビット設定にも反映することをLSBまで繰り返す。

つまり,末端,葉の部分で左から0V,右に向かって2のbit数乗(8bitなら2^8=256)刻みでArefまでの値が並ぶ二分木として決定木を作り,根から左なら0,右なら1を選ぶように木をたどることでアナログの電圧値をArefの比でいくつになるのかを二進法で示した値が得られるということ。決定木は「コンピュータサイエンス・アンプラグド」の活動「20の扉」と,その解説が参考になると思う。MSBが根でLSBが葉になるところも解説の図と一致する。

なるほど二分探索ね,と思って検索してみたら,特許にそういう記述をしているものがあった。意外と大学の講義ノートのようなものには見かけないので,ソフトウェア屋さんとハードウエア屋さんの壁みたいなものを感じた次第。アルゴリズミックに動く回路なので,アルゴリズム名で説明すればいいのになあ。

一方,⊿Σ型ADCについては,日本人の発明ということで,ちょっと感動した。Wikipedia参照。PDMになる,というのは感覚的にはわかるがデジタル信号処理の理解が中途半端なので,式を見ていても,はあそうですかとしかならなかった。残念。

それで,ではPDMの結果をマルチビットにする(PCM相当に変換する)デシメーションフィルタってなんだろうと思ったら,⊿Σ変調含めて詳しく書いてあったブログがあった。このへんから入っていくと,すっきりわかるような気がする。decimationで辞書をひくと「サンプリングレートを大幅に下げる」って書いてあるけれど,高い周波数で1bit AD変換しているPDM結果を,適当な量子化ビット数に数えられるだけの間隔(例えば8bitなら,1/256)に落として,その区間における,元の周波数における1の数をカウントするという理解でよいのだろうか。密度の高低を値の大小に変換するわけだから。このページではディジタルローパスフィルタとなってて,検索してみると詳しい解説がいろいろあって,いくつか眺めているうちに,その表現に,ひとまず納得した。加算するので遅延していく(位相が遅れる)というのもアナログと同じ特性。なるほど。

2014年7月5日土曜日

Eagleでプリント基板のデザインをして発注するまで(追記あり:ドリルデータとドリルリストについて)

来週末は、勤務先のイベントで小学生対象の「ものづくり教室」の担当。去年実施したのが、Parallax社の8 core 32bitマイコンであるPropellerを使った、ドラムシンセサイザーだった。

内容は、Propellerのプロジェクトとして公開されている、Amiga Commodor 64の音源チップSIDエミュレータを使い、シンセドラムっぽい音をプログラムで自作したもの。欧米を中心に「SID Tune」という分野があって何千曲ものデータ蓄積があり、SIDはレジスタに書かれたパラメータに合わせて音響信号を出すだけのLSIなので、プログラムで高速制御して見事な効果を含む演奏する専用プログラムがあったほど。いまでも「SID Emulator」が各OS用にいろいろあって、バイナリに変換されたSIDレジスタ書き込みシーケンシャルデータを読み込んで再生することができる。それらには及ばないものの、僕もPropellerマイコン内蔵インタプリタを直接呼び出す言語「SPIN」で、様々に試行錯誤を突貫で行って、まぁなんとかできたという感じだった。

もともとの志は高かった。叩く部分、通称「パッド」にピエゾスピーカーを仕込んで、高速なA/Dコンバータならば、衝撃力に応じた電圧をばっちり計測できるところまで実験は済んでいたのだが、使ったチップがAnalog DevicesのADC124S021というもので、これはParallaxのActivity Boardという実験用基板で採用されているので、カリフォルニア本社まで出かけて諸々懸案を電子エンジニアと相談して解決したものだった。

ところが、このADC124S021はTSSOP10という、足の間隔が0.5mmの表面実装パーツで、DIP変換基板を使わないと自作基板の実験さえできないし、当時はDigikeyにしか在庫がなく、たしか1個400円ぐらいだったような気がする。10名参加で、このADCは4channelなので5つのパッドのためにひとりあたり2個、故障やはんだ失敗などを見込んで全部で30個を買った。DIP変換基板で0.5mmピッチの10pinで手頃なものはたまたま在庫がなく、Aitendoの18pin用をカットして使ったりした。それで、変換基板への手ハンダはうちの学生さんが職人技でやったんだけれど、そのあとピンヘッダを、教室実施の前夜にものすごくおおざっぱにつけたおかげでADCが浮いてしまい全部オシャカ(ICは生きているはずなんだが足を直す時間なし)という衝撃の事態があり、タクトスイッチに置き換えることになったりした。

アンプは、Activity BoardはRail-to-Railのオペアンプを使ってΣΔDACを組んで、たいへん良好な音を出していたんだけれど、カネが続かないので秋月のいちばん安価なオーディオ・アンプを選択したのが敗因で、すごくS/Nが悪く(あとから、秋葉原の店頭でアルバイトの男子学生さんっぽい従業員に尋ねたら、「僕も試してみたんですけどたしかにノイズ多いです」と答えてくれた)、回路が同じでも実装のしかたで音が全く違ってしまい、ブレッドボードで最適な増幅度とS/Nを見出しても、ユニバーサル基板に組むと、どれもまともな音が出なくて個別に調整というたいへんな思いをした。

そんな疲労困憊の記憶があるので、今年は両面基板を製作してリフローするんだと決めていたわけなんだけれど、PCBミルを自作してみたものの経験が足りなくて0.1mmの精度は出せず、そうしているうちにFusion PCB(安くて早いので有名な深圳のSeed Studio社のサービス)のリードタイムにも間に合わないことがわかり、最短翌日出荷に対応する、静岡県磐田市の「プリント基板センターPB」さんにお願いすることにした次第。前日到着は怖いので木曜到着を考えると水曜出荷で、金曜日に受け付けても月曜からの計算になるので3日コースということになった。この工場ですけれど、見積をオンラインでざっくりできるのでみていただきたいですが、特急であることを考えたらかなり安いほうだと思います。納品したガーバーデータも夜遅くまでひとつひとつチェックしてくださって、対応はとても良好な感じです。

まぁそういうわけで、3日寝ないで名古屋まで出かける非常勤講師の授業もこなしたりしつつ作ったのがこれ。ちなみにその前日までは、前エントリーのRaspbianのSDカード量産なんかをしていたので、週末から数えてやっぱり全く寝ていない。

Eagleの画面
SMD部品のサイズがいろいろなのは入手できたのがそれしかなかったから

今週末もArduino量産とかいろいろあるので徹夜が続く予定。

それはともかくEagleなんだけれど、回路はぶっちゃけActivity Boardの流用(オープンソースハードウェアです)に、去年の夏のノウハウが入ったものなので、回路図はライブラリを集めるのに苦労したけれどわりとさっくりできた(徹夜をはさんで2日でできた)。問題は図の右下をみていただくと気づかれるかどうか、スライドスイッチが裏面にあるわけです。

ケースも3Dプリントしたものを使うのだけれど、小学校3年生がネジ止めで工作できる範囲というと、ケースの上面にはスピーカーと電源スイッチ、電源ランプ相当のチップLEDの窓がある形にならざるを得ず、簡単で安価なのは基板をフタにネジ止めすることで、したがって電源スイッチとLEDが基板の裏面にあって、表面から電池ボックスのコネクタやスピーカーの端子にアクセスする形をとることになるというわけ。

ここでようやく本題。Eagleは部品を裏にまわすには、基板エディタでパーツを選んで「Mirror」ボタンを押せばいいのだけれど、それは表面実装部品の場合で、Padがあるスライドスイッチはそうはいかない感じでありました。シルクは反転して裏面に行っている感じなんだけれど。それでPadの上に同じ形のSMDパターンを置いたりなんだとやったら、当然ERCでも文句言われるし、オートルーティングでも無視されたりするわけです。

しかたがないので手で配線を引いてやるわけですが、そのあとのオートルーティングもベタパターンもどうも具合が悪い。

やむなくライブラリを手編集すべえと調べてみたら、ライブラリ(.lbrファイル)ってXMLのテキストファイルなのですね。で、DTDはdocの下にあるeagle.dtdなんだと。それで、DTDの<pad>タグの定義にLayerを追加したりとか変なことをしているうちに、「Info」ボタンから「Properties」を開いてやると、「mirror」というチェックボックスがあるじゃないですか。それチェックしたら、TOPレイヤーにPadが描かれて(緑色のPadの上に赤のクロスハッチが上書きされた状態になる)、これでオートルーティングかけると何事もなかったかのように未配線を残さず完了するわけで、ここまでたどりつくのに3時間かかってすごく残念な気分になりました。

これをチェックすればスルーホール部品でも裏面に移動できる

Eagleのネット上での説明というと、「EAGLEによるプリントパターン自動作成」が唯一まともな資料として他の説明もすべてそこにリンクされているわけですけれども、両面基板だとかSMDだとかのことは書いてないわけです。そもそも、最終工程がエッチングなのでして、基板発注をお安く個人がする時代のちょっと前の記事です。

そういうわけで、ガーバーデータを出力するのは、例えばCuBeatSystemsさん(個人)のページとかが簡潔にまとまっているのかな、というところ。ガーバーデータを確認するビューアは、3Dプリンタがらみでいろいろ入れているのでいつのまにかgerbvが入っていたのでMacでもことなきを得た感じ。

(追記:「ドリルデータとドリルリストがありません」とのご指摘をプリント基板センターPBご担当者様からいただき、急ぎ送信しました。諸々は「P板.com」さんの手順と同じなんだろうと思うので、Cam Processorのジョブでexcellong.camを実行する形で作成したんですが、ドリルデータってG-Codeなんですね。へえって思いました。2014-07-07)

あと、今回はプリント基板センターPBさんに、特別にメタルマスク(英語的にステンシルというと思っていたんだけれど、それでは通じないんですね)も製作してもらうことにしたので、メタルマスク出力用の設定追加は「Eagleでメタルマスク用ガーバーデータを出力する」のブログエントリをみて実施しました。

当初の構想では、カッティングマシンでコート紙でも切ればいいやと思っていたけれど、最小ピン間0.15mmなんでたぶん無理だろうと。試行錯誤している時間がないからプロに頼むと。

いずれにせよ、プリント基板製作にもメタルマスク作成にもCNCミル使っているはずなんで、自作するなら手堅くプロクソンのフライス盤をCNC化していく方向から経験を積んでいかねばならんだろうなと思っているところ。

そして、レジストとシルクなんだけれども、レジストは塗布後にマスクを印刷したフィルムを載せて紫外線に当ててから洗えばいいのかと。参考

シルクは、インクジェットプリンタでプリントゴッコ(昭和の記憶)的にやるのが簡単そうだなと。参考

あとはあまり考えたくないんだがリフロー前のマウンタも自作したりしたら実装の内職できるんじゃないかみたいななにか。

そういえば、クリームはんだ(はんだペースト)をまだ買ってないのだった。大昔にシリンジに入ったのを買ったのがどこかにあるはずだが、フラックス足せば古くても使えるとか読んだんだがそれで足りるのだろうか。アマゾンで65gの瓶が3000円で出ているが、価格を出している業者を見ると980円なんで、えらいぼったくりだなと思ったり。参考

それで、検索すると「クリームはんだ印刷機」というのがいつもトップにあるんだけれど、いまどきはマスクみたいな再利用がきかないものは作らないんですね。ついでに「クリームはんだロボット」という見出しが別に見えたので、もしかすると3Dプリンタのエクストルーダ改造で、シリンジ入りのソルダペーストをプリントできるんではないかと思った。

2013年9月17日火曜日

Beagle Bone Black届いた

本日到着。いまのところ、これといった予定はないのですが。
Beagle Bone Black

2013年9月16日月曜日

ユニバーサル基板の配線には「ポリウレタン銅線」を使え

この夏は(というかお盆前からずっと)ユニバーサル基板に手ハンダで配線ということをずっとしているのですけど、いやほんと、疲れますね。

何が面倒かというともちろん部品間の配線でありまして、従来の(論理ICやオペアンプ単品を扱うような時代)常識では、部品の足を曲げたり、ニッパで切った足を集めておいてつなぐとか、長さが足りない時はスズメッキ線で引き回すなんてことをしますよね。

スズメッキ線は銅線にスズをメッキしているだけなので、当然交差すると接触のおそれがありますから、できるだけ接触しないように気遣うとか、場合によっては基板の表裏を縫って配線をまたぐなんてことをするわけですが、やればやるほど疲れるじゃないですか。

かといって、リード線は被覆をむくのが面倒(いくら工具を使うとしても)だし、裏で引っ張れば配線山盛りになるし表に出せば美しくない仕上がりで、美観を考えつつ引き回すとかまぁ、ありえな〜い!と叫びたいです。そもそも配線が何本も重なったら、デバッグの際にどれがどこに行っているのかわかったもんでもないわけですし。(色を変える人とかいますか)

もちろん、マイコン初期世代ではワイヤーラッピングなどというある種の工芸もあったわけですが、いずれにせよソケットに多数のワイヤが巻きつきそれがあちこち交差するわけで、やっぱりワイヤ山盛り状態でなおかつその美意識が厳しく問われる世界だったような気がするわけです。

さて、それで何年か前に「TTLでマイコンを自作する」話をTwitter経由で知り合った方から、「ポリウレタン銅線がいいですよ」と言われていたのを、先日ふと立ち寄った秋葉原で思い出したわけです。なんでも、銅線にポリウレタンがコートされているだけなので、ハンダゴテで簡単に溶けて、絶縁されているので重なってもOKという。その方は、ICソケットのピンに引っ掛けるぐらいの細い線でくるくると引き回すような職人芸をお持ちとおっしゃっていたような。

ちょうどいま、Raspberry Piの拡張I/O基板を作っておりまして、スズメッキ線の限界を感じていたところなので、秋月→千石→ヒロセというコースをたどるなかで、最後にヒロセの地下にあるのを見つけた次第。店頭の方いわく、「ネットでヒロセにあるというのをきいて買いに来られる方多いですよ」とのこと。あ、そうなんですか。

ただ、その前に、「ポリウレタン線」と言ったら、「ああ、ニクロム線ですね」と軽く返さえて「え?」と。ニクロム線というと、小学校の理科なんかでモータ巻くのに使った記憶しかなくて、濃紺色の塗膜が鈍く光る銅線というイメージと、店頭にある明るい銅線のギャップに戸惑うわけです。紙やすりで塗料をはがして配線する感じ。面倒だと歯でしごいたりなかして、塗料飲み込んでるけど大丈夫かな―なんて思ったりした少年時代を思い出します。

それはさておき、いや、なんでも、いまどきニクロムを塗布するような線材は作ってないんだそうで、ポリエステル、ポリスチレン、ポリウレタンなどが主流になったから、その経緯でそれらを総称して「ニクロム線」と業界では言うらしい。へー。

というわけで買いました。0.4mm, 0.5mm, 0.6mmの3種類。いくらロジック回路とはいえ、あまり細い線は自分で取り回せるか不安だったので、どのへんが使いやすいか確認する意味でこの3種。というのも、極細のポリウレタン線のリールをお尻につけたペンを買って難儀した思い出(しかも1000円以上してすごく損した気分)がありまして。

ポリウレタン銅線
ひとことでいうなら、この0.5mmぐらいがある意味万能的な感じ。0.4mmは同じところを何本も線を通さなければいけないときに使うぐらいかな、というところ。でもってまぁ、使ってみたイメージはこんなところ。
追加の配線に使ってみた
スズメッキ線での涙ぐましい配線の末、回路図エディタの両面基板でも通せなかった線(基板を起こすならピン間に2本ぐらい通せばたぶんなんとかなるんでしょうが、手ハンダですからね)にこれを起用いたしました。これ、どこにつながっているかというと、Raspberry PiのGPIOから2個のモータドライバのロジック部分に入る線と、モータドライバから実際にモータをつなぐ端子台へつながる線のところ、それからトランジスタアレイ通したデジタル出力端子への配線です(と書いて、GPIOから直接つながっていることに気づきました…修正せねば)。ここはもう、両面駆使してなんとかモータドライバ周辺だけはなんとかなったものの、GPIOコネクタからの線が通る場所がなくて諦めていたところ。基板は秋月の両面スルーホールB基板です。なので、GPIOのコネクタのハンダは部品面に出ますから、その隣からえいやと貫通させて表で折り曲げてハンダする感じ。

使用感ですが、0.5mmはスズメッキ線ほどハンダの乗りはよくないものの、被覆が熔ければなんとかなる感じ。鉛フリーはんだをつかっているせいもあって作業性に問題があるのかもしれず、一応調温できるハンダゴテで450度設定です。なので、スズメッキ線全廃するには少し慣れが必要な印象でした。特に、短い配線は熔けたハンダに流されたりして、あららと戸惑ったりしました。

というわけで手ハンダする皆様には、ヒロセから通販で買うのをおすすめする次第ですが、名古屋の方なら、第二アメ横ビルのパーツコーナー入ってすぐ左のタケヤ電子でも扱われていましたのでどうぞ。なにより、スズメッキ線より安いのがよいです。貧乏なので10m巻きを買うわけですが、スズメッキ線だと300円ぐらい(ヒロセだと327円とか)のところ、それより100円ぐらい安かったりします。もちろん、リールで買うのもありかと。手のひらサイズで500g(グラム売り)が太さによりますが2000〜3000円ぐらい。

でももはや、Fusion PCB(香港)がある現在、ユニバーサル基板でがんばる必然性はほとんどないですよね。今後は回路図エディタでERCチェック通った基板を発注して作るつもりです。あと手ハンダも厳しいので、皆さんがやられているような、カッティングマシンでステンシル作って表面実装部品を鉄板焼きリフローするメソッドに移行していきたい感じです。

2013年1月24日木曜日

Wiimote IRカメラとのたたかい

Wiimoteの赤外線カメラと格闘している。

Wiiリモコン先端の黒い窓、いわゆる赤外線リモコンを連想する部分なんだけれども、よく知られているように、このなかには、画像処理するマイコンを内蔵した赤外線カメラが存在している。

マイコンでは赤外線の光点を4つまで追跡して、それぞれのカメラ上の座標をI2Cで出力するような処理が行われるので、単にI2Cで出てくる数値をとるだけでアプリケーションが簡単に作れるという仕様。

いわゆるWiimote Hackでは、BluetoothでWiimoteとPCなどを接続してセンサのデータをとったりするのだが、過去に作成されてきたソフトウェアはどれもWindows 7またはMac OS Lion、あるいはLinuxに限られていて、Windows 8とMac OS Mountain Lionしかない状況ではどうにもならないのであった。

それで、世界中が感動した、このカメラの解析ページをもとに、中古で買ってきたWiimoteを分解して、このページと同じように2.54mmピッチの8pinヘッダをとりつけたのだった。これはもう、自分で自分をほめるしかないタフな作業。というのは、Wiimote IRカメラは2mmピッチの千鳥足なんである。つまり、前列4pinと後列4pinは1mmずれていて、ただでさえピッチが合わないのに、前と後ろがずれているので、合わせる場所が本当に8つのピンの中央にしかない。また、カメラの極細の足を曲げないといけないので、空中配線になる。さまざまな試行をしたが、結果として、ヘッダーピン側を水平になるよう、うまく固定して、その隣に、コピー用紙5枚(試行錯誤で、この枚数で上側の端子と高さが合った)に載せたカメラユニットを置いて、そっと中央を合わせ、その2本をはんだ付けし、それから左右を少し開いてはんだを流し、片側を完了させたあと、裏返して再び横からじっくり眺め、高さが揃うように今度は前後の間隔を開くよう、適当な定規で持ち上げ、中央2本をつけ、残りを開いてつけるという作業で完了した。老眼で細かいものが全く見えないうえ、電気スタンドで強い光をあてないと細かいものが見えなくなっているので、ルーペを片目で眺めながら、片目だから距離感がないのを時計職人のつもりで慎重に位置をはかりながらの作業であった。

続いて、カメラのCPUを動作させるためのクロック回路とリセット回路の製作に入った。回路図の定数通りに部品を揃えるのだが、リセット回路の30kΩというのは謎である。E24系列でも存在しない値だから。とはいえ、これは単にプルアップしているだけなので、適当でよいはず。22kΩにしておいたら、海外で商品化した人の回路図も22kΩであった。

ひとまず完成したように見えたので、簡単に導通テストだけをやって、少なくとも電源のショートという情けない状態ではないことを確認して、クロック発振を確認してみた。手軽なので使っている、Seed StudioのDSO Nano Duoで見ようと思ったのだが、ちっとも確認できない。いくら回路を調べても、テスターで電圧を調べてもわからないので、テクトロのちゃんとしたデジタルオシロで確認したら、25MHzのはずが75MHzで発振していた。3倍の異常発振だ。

実はクロック回路を自分で組み立てるのは初めてで、ネットに助けを求めたところ、水晶発振子の異常発振の現象と対策についての解説があり、まさに3倍のケースだったので、Rsを追加することで解決をはかった。幸い抵抗はE24系列すべて100本ずつ揃えてあるので、100Ωから順に10kΩまで試してみた。1kΩでようやく25MHzが出たものの、過電流のせいか、振幅が大きく、3.3Vの給電なのに5V近くまで上がり、逆にマイナスにも振れてしまっていた。10kΩでそれはおさまったけれどもまだ歪みがあるので22kΩにしたら、50MHzになってしまったので10kΩに戻した。ほかにも、CLを大きくするというアドバイスがあったので、15pFを4つ買ってあったのを幸いに、それぞれ2個並列にしてみたが、あまり効果はなかった。

そうしてようやく、デバイスを壊さないであろう程度のクロックが得られたのでカメラユニットをソケットに挿してみたのだが、I2Cのクロックさえ出てこないうえに、しばらく調べながらふとユニットを触ってみたら熱いこと。危ないので即座に取り外して、基板を調べてみると、よくわからないのだけれどVcc-GND間が19kΩしかない。はては、I2Cの端子に至っては34kΩとかで、電圧を測ってみると2V以上出ていた。配線ミスなんだろうけれど、やり直す時間も体力もないので、再び海外の商品の回路図を眺めてみたところ、クロックはオシレータユニットを使っているのであった。秋月ならこれで済ませられるところ。

クロックまわりを除けばあとは単に電源とI2Cの引き出しをするだけなので、せっかくがんばったクロック回路はとりやめることにした。それで、なんとなく検索をしていたら、ARMマイコンであるmbedに接続したよという例があって、クロックはCoretex-M3内蔵のPWMで生成してしまい、結局リセット端子のプルアップとI2C端子のプルアップをするだけの簡単回路になっていた。

当初はArduinoに接続するつもりで、Arduinoの5V端子に接続するため、手持ちのSparkfunのレベルコンバータ基板まで実装していたのだけれど、mbedで済むならこれさえいらない。また、mbedでシリアルに流してやれば、当初予定していたNode.jsとの連携もArduinoでやるのと変わらない。この人のように、シリアル(USBだが)に出力するように素直に書けば、Arduinoとやってることは同じだ。

なんだかすごく遠回りをしたような、まぁ勉強になったのではあるが、そんじゃあ、ということで、mbed+StarBoard Orangeを取り出してきたところである。StarBoard Orange使うならWebSocketで出力する例で、さらにUSB HostにもなるからWi-Fiドングルつければいいんじゃないかとか、そんな意見もあるかもしれないが、BluetoothがWi-Fiに置き換わっただけなんだがそれってうれしいのか、とか、それならBlueUSBで無改造のWiimoteと直接ペアリングしてWebSocketしゃべれよとか、いままでの努力はなんだったのかと悲しくなってくるので、シリアルでデータを流すところで勘弁して貰いたいと思っているところだ。

(2013年1月26日追記:昨日mbed接続用の基板を作ってカメラユニットを装着し、見事に4つずつのXY座標をシリアルポートで得ることに成功した。ちなみに、mbedのPWMが出していたクロックは20MHz前後だった。したがって、水晶発振子でクロック回路を自作する人も25MHzにこだわることなく、入手しやすいクリスタルなりオシレータを使っても大丈夫なようだ。また、mbedの出力は結構ジッターがあるので、クリスタルでなくセラロックでも大丈夫かもしれない。あと、Mac OSでシリアルポートと通信するのは、screenコマンドだというのが新鮮だった。古いUNIXユーザなので、POSIXならcuと頭から決め込んでいたのだけれど、cuの仕様も変わっているし、しばらく迷ってしまった。シリアルポートの速度設定はsttyで。だがめんどくさいのでmbed側のプログラムで9600bpsにして、デフォルトから変更しなくてもよいようにした。)

2012年5月8日火曜日

[Book Review] "Getting Started with RFID" by Tom Igoe; O'Reilly Media


Forward

I would like to recommend people who would like to know how the RFID works and how to built in your some electrical projects.  This book, "Getting Started with RFID" is very concise, easy to read, and includes very practical description of wiring, programing, and controlling devices.

Related Books

The author excuses this is an excerpt from the previous version (1st revision) of famous book "Getting Things Talk" from O'Reilly Media, because the current (2nd) revision replaces the article for RFID into the cutting edge technology - NFC (Near-Field Communication) which is adopted to such as Samsung's Galaxy Nexsus S, etc.

However, this book is still have a value for learners or hackers who want to implement not-so-complicated projects such as the same as familiar applications on a token of transportation systems. Yes, every IC tokens as an ticket for some countries' local trains are still not an NFC but this kind of simple RFIDs. Maybe, some leading countries in transportation systems such as England, Korea, and Japan adopt "non-contact type IC cards", but they may still be not an NFC (I am Japanese, and IC cards available in Japan nation wide is the SONY's "FeliCa" which is slightly different from NFC and it does not have compatibility with it, sigh...).

Summary

This book describes how to utilize the Parallax's RFID reader and devices with your project by using some very concrete and highly readable example programs written in Processing and Arduino.  But, because this reader only send the unique ID of each RFID device from TTL-level serial data, any programming languages that can handle serial stream are applicable. Not only this virtue, but the conscious comments on every example codes leads the readers; both novice and expert programmer convince why every specific instructions are put there as so.

Consequently, this book is a handy primer for everyone who have an interesting to utilize RFID technology.  I would recommend it.