USB Humping Dog改造大作戦

20081030200131.jpg




堂々完成USB Humping Dogメモリカードリーダライタ改造大作戦

現在プロト1(アクセスにあわせて腰を振る機能)です。


動画はこちら


過去の記事は編集中につきこちら


プロト2は、PWMでモーターの速度制御を行い、説明しがたい動作をさせる予定



ここから先は編集中なので書きかけの項目があります



つくりかた

あまりにくだらない改造なうえに、けっこう細かい作業が要求されるので書いたところであまり作る気は起きないかもしれないわけですが、せっかくなので作り方をかいておきます。
ただ、電子工作初めて半年もたっていないドッ素人が作ったものなので正しくない部分とかがあるかもしれません。へんなことかいてあるようでしたらおたよりいただけるとすごくうれしいです。




ぶんかいしてみよう

usbhd_decompo.JPG
分解してみたの図
モーターとダイオードが入ってるだけです。


ねじ山は向かって左側の、コネクタの部分(隠れていないのでここはすぐわかる)、腹の部分(切れ込みがある部分をはがす)、耳の部分(耳をはずす)の三箇所です。
瞬間接着剤はがしを使ってもうまくはがすのは難しいので、デザインナイフなどで削りながら最後に強引に引っぺがしたほうが確実です。
足のある駆動部のパーツは金具で本体とつながっているので外せません。ねじを外す前に接着面をカッターなどで切っておき、ねじを外したら強引に半分に割ります。


とりあえずこの辺は適当にやってるので分解さえできれば手順はなんでもいいです。



動力部

usbhd_motorcir.JPG
モーターのとこだけ取り出した。
最初ダイオードが何で直列で二個つながってんだかわかんなかった。逆流防止ならいっこでいいはずだし。
んで実際何のためかっツーと、ダイオードの順方向電圧降下の特性利用して減圧してるんですねこれ。


usbhd_motorcird.jpg
ダイオード一個につき0.6Vちょいさがってるので、1.2Vほど電圧降下して3.8V弱でモーターが動いてることになるわけです。
(プロト 1のときはダイオードのつなぎ方変えたので、モーターは5Vで動作していて、えっらいスピードで腰振るようになっています)







改造についての概要

gakkari.jpg



リーダライタ

usbhd_rw.JPG
動画見ればわかると思いますが、RWは既製のものを使っています。A-DataのMicroSDカードについてるリーダライタです。こいつはサイズが小さいのもさることながら、ちいさいくせにLEDのアクセスインジケータがついてるすぐれものです。んでもって、この改造では、LEDのインジケータのON/OFFを解析してモーターの動作と連動させようという改造を行っています。(黄色い丸の部分を半田付けしています)
USBのデータを中抜きしてアクセス解析を行うような高等なものではありません。




リーダライタとモーターの動作(どうさ)の関係(かんけい)

 このリーダライタは差し込むと点灯、アクセスを行うと点滅を行います。(サスペンド中は消灯)点滅中にモーターを動かすようにマイコンでプログラミングしてモーター制御を行っています。


usbhd_timchrt.jpg
タイミングチャートです。
RWアイドル中は LEDがOnなのでLEDがOffになったのを検出したらモーターを起動させます。んで、点滅中は駆動させ続け、LED Onを1秒連続で検出したらモーターを停止させます。
(プロト1では行っていませんが、ホストがサスペンド中の場合は消灯になるので消灯を1秒連続で検出したらモーターを停止させる必要があります。)
モーターには5Vで20mAから最大で200mAぐらい流れるので、ICのポートと直結させるとたぶんICが壊れますので、トランジスタで増幅してモーターを動作させる必要があります。



回路図

usbhd_piccir.jpg
最初は555のタイマーICを使う予定だったのですが、いろいろ検討に検討を重ねた結果、とりあえずマイコン制御にした。単純にディレイを行うだけでなく、回転数の制御をPWM方式で簡単に行えるようになります。
PWM方式で回転数の制御を行う場合は、20Khzぐらいの周期でOn/Offfが行われるのでダイオードはショットキバリアなどの高速SW用でないとだめみたいですね。


リーダライタのLEDの出力の部分は、いろいろ探してみたのですが、3Vちょっとしか取り出すところが見つからなかったのでトランジスタで増幅しています。



マイコン

実はPICマイコン使うの今回が初めてです。


プログラム

要求定義

プログラムを書く前に要件を整理しておきます。ここが一番重要なところです。


RWとLEDの動作関係
  • RWがアイドルの時はLED On
  • RWがアクセス中はLED点滅
  • ホスト(PC本体)がサスペンド中の場合はLED Off
  • ホストに接続直後は自動再生の判別などでアクセスが行われるため点滅する


ポート
  • GPIO1を出力ポートとして使用
  • GPIO3を入力ポートとして使用(GPIO3は入力専用ポートです)
  • LEDがOnならポートがGNDとショートするようになるためGPIO3は0になり、LEDがOffなら1になる


モーター
  • ポートonにしっぱなしだと5V動作になり動作が速すぎるのでduty70%ぐらいで動作させる

システム要件
  • LED点滅を検出したらモーターを作動
  • モーター作動中LED Onを1秒連続で検出したらRWアイドルとみなしてモーターを停止
  • LED Offを1秒連続で検出したらホストがサスペンドとみなしてモーターを停止
  • 挿入直後は必ず点滅になる。挿入してすぐモーターが動くようだと挿しにくくなるので、電源投入直後の点滅は無視するようにする


やることそんなに多くないのでこんなもんです。
余談ですが楕円と棒人間のユースケース図をそのまま要求定義書に載っけるのは無粋なのでやめたほうがいいと思います。



設計ドキュメント

usbhd_state1.png
状態遷移図。これだでもけつくれそうです。






usbhd_class1.png
アセンブラなので、クラスも関数もなにもないのですが、関数仕様書として無理やりかいてみた。




シーケンス図?は、モジュール一個しかないので書きようがありません。
とりあえずこんだけあればプログラムはつくれるので設計は完了です。




ソースコード

なんかうまいこと表示できないみたいだけどとりあえず




かきこみ

こんな小さいソケットないので適当に冶具作った。
usbhd_soc1.JPG
ユニバーサル基盤にのっけてクリップで固定するといったとても簡素なものです。プログラムや回路の確認はDIPパッケージでやったほうがいいですから、SOT-23パッケージの書き込みは頻繁に行うこともないでしょう。だからこんなんでじゅうぶんです。
んでもってここで使ってるクリップは半田付けのときに使うヒートクリップなのですが、こいつは何本かもっとくとえっらい便利です。




usbhd_soc2.JPG
このユニバーサル基盤は、秋月で売っているものを使っています。これ、何でかようわからんのですが、幅がSOP(1.27m)より若干小さいです。




usbhd_soc3.JPG
裏側は絶縁と基盤の保護をかねてテープ貼っています。




usbhd_soc4.JPG
基盤のホールの間隔がSOPより小さいとはいっても、SOT-23と比べるとだいぶ大きいので、両サイドのピンを外側に広げてピン幅を広くしておきます。基盤と接触しやすいように下方向にも少し折りまげておくといいでしょう。




usbhd_soc5.JPG
クリップで固定。ちょっとむつかしい。




usbhd_soc6.JPG
プログラマを使って書き込みます。べりファイは必須です。


とりあえず一例でした。このへんは工夫次第で何とでもなるのでいろいろ試してみるのがいいとーもいます。




実装

deployment view

usbhd_dep.gif
ちょっと変な書き方ですが、どういう風に配線したらいいかを焦点にしてかいています。
データ線はコネクタからリーダライタに直結です。(データ線が長かったりとかするとデータエラーが起きたりデバイスが認識されなかったりすることがあるのでデータ線の長さは長すぎないようにしてください)
5VとGNDはコネクタからいったんマイコンボードに接続して、マイコンボードからリーダライタ、モーターに接続するようにしています。




コントロール基盤の実装

実装図

usbhd_picimp.jpg
かなり雑だけど実装図。灰色の部品は裏側に実装
7.2*7.2ミリ、ちいさいよー




部品リスト

usbhumpingdog_impparts.jpg
下の黒いのがシャーペンの芯ね。
どんだけちいさいかってーと、2kの抵抗の向きよーくみて確認したのに逆さだったってぐらいちいさい。肉眼じゃ数字ほとんど読めないです。




配線

usbhd_wire.JPG
上の実装図のとおり配線したの図
より線をむいて一本だけ取り出した細い線を編みこんで配線しています。
白い線がつながっています
(5,1)の部分には線入っていません。この部分に電源コードをさして(4,1)-(6,1)につながるように半田付けを行います。




























gigaya.jpg

  • 最終更新:2008-12-11 01:07:37

このWIKIを編集するにはパスワード入力が必要です

認証パスワード