2008年 4月 20日 日曜日
[Sun SPOT で"デューク神棚(Duke Temple)" を動かそう(1)] DC Motor を駆動してみる。
今朝は休日だというのになぜか6時に目が覚め、また寝るのも勿体無いので午前中を使って Sun SPOTで遊ぶことにしました。昼ぐらいまでに何か動くものを作れるでしょうか。ちょうど手近に神だな工作セット(TAMIYA製)が転がっていたので、これを改造して Duke 神棚 を作ることにします 
# sound activated temple (TAMIYA)
この工作セットには元々音センサースイッチ回路がついており、かしわ手を打つと扉が開いて神さまが出てくる、という動作をします。扉の開閉の制御には FA-130 というDCモータを1つ使用しています。
# 付属している音センサースイッチ回路とDCモータ。今回は音センサー回路は使わず、Sun SPOTを使って扉の開閉を制御します。
DCモータでは数100mAの大電流が流れるため、Sun SPOTの出力ポートでは直接駆動することができません。またDCモータを1つの電源で正逆回転させるためには Hブリッジなどの回路を組む必要があります。そこで、今回はモータドライバICを使って制御回路を作成して、この回路を Sun SPOTの出力ポートで制御することにします。
モータドライバICとしては TA7291P などが書籍などでよく紹介されていますが、今回はそれより少しだけスペックが下(で安価: 100円ぐらい)なTA7291SG というICがちょうど転がっていたので、これを使用します。
# TA7291SG の外観
1時間半ぐらい半田ごてを動かして、以下のようなモータ制御回路を作成しました。
(データシートや書籍、Webサイトを参考にすれば、比較的容易だと思います)
# モータ制御回路の外観 (パスコンが抜けてる。。4/22追記)

# 裏。半田付けが下手で恥ずかしいので縮小。まぁ、動けば。。。
IN1, IN2 に、Sun SPOTの出力ポートを2つ接続して制御します。また、OUT1, OUT2 にモータを接続します。
さらに、モータ動作用の電源として1.5Vの単三電池x2、ドライバICとSun SPOTのVH用としてACアダプタ5V電源を使用します。ACアダプタのジャックは、CK-23 という電源コネクタ変換基板を使って2.54mm に変換してケーブルを引き出せるようにします。
# CK-23
DCモータを動かすための準備が整ったので、ちょっとテストしてみることにします。
# ケーブルを接続したところ
Sun SPOTのVH ピンに5V電源、GNDにドライバ制御回路のGND、そして H0、H1 に制御回路の IN1、IN2をそれぞれ接続しています。
# 拡大
あ、もちろんモータ制御用のSun SPOTアプリケーションも必要ですね。こんな感じで作成しました↓
| package org.sunspotworld; import com.sun.spot.peripheral.Spot; import com.sun.spot.sensorboard.EDemoBoard; import com.sun.spot.sensorboard.io.IOutputPin; import com.sun.spot.util.*; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class StartApplication extends MIDlet { private IOutputPin h0; private IOutputPin h1; protected void startApp() throws MIDletStateChangeException { new BootloaderListener().start(); Spot.getInstance().getSleepManager().disableDeepSleep(); // 大電流出力ピンH0、H1を使用する IOutputPin[] pins = EDemoBoard.getInstance().getOutputPins(); h0 = pins[EDemoBoard.H0]; h1 = pins[EDemoBoard.H1]; stop(1L); while (true) { forward(6000L); // 6秒間正転 stop(1000L); // 1秒間ストップ reverse(6000L); // 6秒間逆転 stop(1000L); // 1秒間ストップ } } /** * 正転 */ private void forward(long duration) { stop(1L); h0.setHigh(); Utils.sleep(duration); h0.setLow(); } /** * 逆転 */ private void reverse(long duration) { stop(1L); h1.setHigh(); Utils.sleep(duration); h1.setLow(); } /** * ストップ */ private void stop(long duration) { h0.setLow(); h1.setLow(); Utils.sleep(duration); } protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } } |
最後に、制御回路のOUT1,OUT2にモータ(と羽根)を取り付けて早速実行してみます。。。
。。。
回転しました 
Posted at 11:56午後 4 20, 2008 by Shuichi Machida in SunSPOT | 投稿されたコメント[0]