ファームウェアの準備手順

DCC/MM2シールド・DSmain側の準備

当サイトから直接頒布されたキットには、予めDCC/MM2シールド・DSmainを制御するファームウェアが書き込まれています。特に書き込みなどの作業や特別な準備は不要です。


DCC/MM2シールドやDSmain上に直接載っているマイコンのファームウェアは、こちらから頒布する機器は全てソフト書き込み済みで出荷しますので一切操作は不要です。 Arduino側のマイコンはArduino IDEを用いてご自分で好きなソフトをUSB経由で簡単に何度でも書き込めます。

Arduino側の準備手順

Arduino側は、皆様がご自由にソフトを作って書き込んで、鉄道模型を制御できます。DCC/MM2シールドに指令を送るために、当ページでダウンロードできるDSGatewayLib(Arduino IDE専用)を提供しています。DSGatewayLibには、サンプルスケッチ(サンプルソフト)が含まれています。
Arduino IDEを予めダウンロードし、インストールを完了していることを前提とします。Arduino IDEのインストールなどは、インターネットで数多く掲載されていますので、ご自分で探しになられるか、関連書籍をお買い求めください。

必要な外部ソフトなど:

  • Arduino IDE 1.0.xを推奨(安定版のため)
  • DSGatewayLib
  • Desktop Station コマンドステーションソフト(PCから制御する場合)
  • まず、ArduinoをPCに接続し、ドライバをインストールします。インストール方法については、Arduino用ドライバのインストール手順をご覧ください。
    Arduinoのドライバは、Arduino IDEに含まれています。


    ダウンロードした、DSGatewayLibを解凍し、Arduino IDEのLibrariesフォルダ内にフォルダごとコピーしてください。


    Arduino IDEを起動する前もしくは直後にArduinoを接続し、ボードをArduinoの種類にあわせて選択してください。ここでは、Arduino UNOを選択しています。

    シリアルポート(COMポート)の確認と設定変更も忘れずに行いましょう。もし、シリアルポートがArduino以外になく、1つのみの場合は自動的にArduinoのCOMポートが選択されます。



    この時点で、後は自由にArduinoのソフトを作成できるようになっています。もし、サンプルを試しに動かしたい場合は、exampleからDSGatewayLibを選ぶとサンプルのスケッチ(ソフト)が呼びさせるようになるはずです。


    なお、ArduinoとDCC/MM2 ShieldをDesktop Stationと接続する場合は、DSGatewayをexampleの中から開いてください。単独で走らせるサンプルスケッチを開くには、DSLocRunを開いてください。そのまま、Arduinoにアップロードすると、制御できるようになります。

    ファイルメニューからアップロードを選択すると、Arduinoにあなたの作成したソフト(もしくはサンプルソフト)が書き込まれます。アップロード後すぐに、動き出します。

    Arduino用DSGatewayLibの使い方

    Desktop Stationをご使用になる場合は、exampleのDSGatewayを開いて書き込みます。書き込み後は、Desktop Stationの使い方ページをご参考ください。本項は、ご自分でArduinoに自動運転などの処理を記述する際の説明資料です。
    まずは、exampleのDSG_LocRunをベースにご参考にしてください。なお、ArduinoではC言語で命令を記載します。ご存じない方は、「Arduino 入門」などで検索いただき、予め使い方などを確認することをおすすめします。

    DSGatewayLibの動かし方:
    DSGatewayLib.h, SPI.hをインクルードします。グローバル変数などを宣言するところにDSGatewayLib Gateway;などと、DSGatewayLibのクラスを宣言しておきます。ここでは、Gatewayという名前で使えるようにしました。setup()内で、Gateway.begin();を記述することで、使えるようになります。

    機関車のアドレスの決め方:
    MM2機関車の場合、word型の変数とし、"ADDR_MM2+機関車アドレス"となります。
    DCC機関車の場合、word型の変数とし、"ADDR_DCC+機関車アドレス"となります。

    アクセサリのアドレスの決め方:
    MM2アクセサリの場合、word型の変数とし、"ADDR_ACC_MM2+アクセサリアドレス"となります。
    DCCアクセサリの場合、word型の変数とし、"ADDR_ACC_DCC+アクセサリアドレス"となります。

    例:
    word aLocAddr = ADDR_DCC + 34; /* DCCアドレス34の機関車を操作するためアドレス設定用変数をセット */
    Gateway.SetLocoSpeed(aLocAddr, 128);

    例:
    word aAccAddr = ADDR_ACC_MM2 + 4; /* MM2アクセサリアドレス4のポイントを操作するためアドレス設定用変数をセット */
    Gateway.SetTurnout(aAccAddr, true); /* ポイントをまっすぐ */

    提供されている関数:

    関数名
    SetPower(boolean power)
    引数 引数の意味
    boolean power true : 線路に電源投入(運転可)
    false : 供給停止(運転不可)

    関数名
    SetLocoSpeed(word address, int inSpeed)
    引数 引数の意味
    word address 機関車のアドレス
    MM2: ADDR_MM2+1~255
    DCC: ADDR_DCC+1~127
    int inSpeed 機関車の速度(0~1024)
    0:停止,
    1024:最高速度

    関数名
    SetLocoFunction(word address, unsigned char inFunction, unsigned char inPower)
    引数 引数の意味
    word address 機関車のアドレス
    MM2: ADDR_MM2+1~255
    DCC: ADDR_DCC+1~127
    unsigned char inFunction ファンクション番号(0:F0, 1:F1, ・・・)
    DCCはF12まで、MM2はF4まで。
    unsigned char inPower 0: オン,
    1: オフ

    関数名
    SetLocoDirection(word address, unsigned char inDirection)
    引数 引数の意味
    word address 機関車のアドレス
    MM2: ADDR_MM2+1~255
    DCC: ADDR_DCC+1~127
    unsigned char inDirection 進行方向(FWD: 1, REV: 2)

    関数名
    SetTurnout(word address, boolean straight)
    引数 引数の意味
    word address ポイントのアドレス
    MM2: ADDR_ACC_MM2+1~320
    DCC: ADDR_ACC_DCC+1~2044
    byte inSwitch 1: 直進
    0: 曲がる

    運転サンプル

    1. /*********************************************************************
    2.  * Desktop Station Gateway Sketch for Arduino UNO/Leonard
    3.  *
    4.  * Copyright (C) 2014 Yaasan
    5.  *
    6.  */
    7. #include <avr/wdt.h>
    8. #include <SPI.h>
    9. #include "DSGatewayLib.h"
    10. #define CHANGETIME 5000
    11. DSGatewayLib Gateway;
    12. void setup()
    13. {
    14.     
    15.     Gateway.begin();
    16.     
    17.     delay(5000);
    18.     Gateway.SetPower(true);
    19. }
    20. void loop()
    21. {
    22.     int aSpeed;
    23.     word aLocAddr = ADDR_MM2 + 3;←ここを変えると機関車が変更できる
    24.     
    25.     // Go forward
    26.     Gateway.SetLocoDirection( aLocAddr, 1);
    27.     
    28.     for( int i = 0; i < 10; i++)
    29.     {
    30.         aSpeed =i * 73;
    31.         Gateway.SetLocoSpeed( aLocAddr, aSpeed);
    32.         delay(CHANGETIME);
    33.     }
    34.     
    35.     for( int i = 0; i < 10; i++)
    36.     {
    37.         aSpeed = (10 - i) * 73;
    38.         Gateway.SetLocoSpeed( aLocAddr, aSpeed);
    39.         delay(CHANGETIME);
    40.     }
    41.     
    42.     // Go reverse
    43.     Gateway.SetLocoDirection( aLocAddr, 2);
    44.     
    45.     for( int i = 0; i < 10; i++)
    46.     {
    47.         aSpeed =i * 73;
    48.         Gateway.SetLocoSpeed( aLocAddr, aSpeed);
    49.         delay(CHANGETIME);
    50.     }
    51.     
    52.     for( int i = 0; i < 10; i++)
    53.     {
    54.         aSpeed = (10 - i) * 73;
    55.         Gateway.SetLocoSpeed( aLocAddr, aSpeed);
    56.         delay(CHANGETIME);
    57.     }
    58.     
    59. }

    Go to top.