[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にモータ(と羽根)を取り付けて早速実行してみます。。。

 

 

 。。。

回転しました ;-)


投稿されたコメント:

コメント
  • HTML文法 不許可
About

machida

Search

Archives
« 4月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
今日