60.USBマスコンを使用したコントローラ(スロットル)の作成

     
   S88-NでPS2時代のマスコンに対応したコントローラはありましたが、USBに対応したマスコンへの対応版は存在しませんでした。
   ZUIKIというメーカからSWITCHの電車でGo用マスコンが販売されましたがこれもUSBです。
   このため簡単にできる方法で、ArduinoUNOにUSBホストシールドを使用して、そこにスロットル用の基板を追加してみました。
   スケッチ次第でS88-N、Lnetにも対応できるような構造にしてみました。

   本来であれば1基板に収めたいのですが、昨今の半導体不足でパーツが調達できないため、あえてこの方式をとりました。
   
必要なもの
  ArduinoUNO
  

  USBホストシールド
  
  Amazonで購入可能


  回路図

     USBマスコンシールド回路(PDF)
 

  アートワーク
   


  パーツリスト

  
必要な部品は以下の通りです。 

NO カテゴリ 名称  部品名 個数 通販コード 
頒布品 基板    1  
  共通 Arduino Uno   1  
  共通

USBホストシールド 2.0 for Arduino

  1 Amazon
U2 共通  0.96インチ128x64ドット有機ELディスプレイ 1 秋月 P-12031
R1,R10 共通  カーボン抵抗 10KΩ 1/4w せんごくネット 
R8,R9 共通  カーボン抵抗 330Ω 1/4w 2 せんごくネット  
D1,D2  共通  LED  任意の色で可 秋月 I-11637(緑)
秋月 I-11639(黄)
J1 共通  I2C Groveコネクタ L型面実装 114020164 1 秋月 C-15514(20個入)
J3 共通  ピンヘッダ 2x2 2.54mm 2x2
PH-2x2SG
1 秋月 C-16792(10個入) 
J6 共通  ジャンパーピン J3用ショートピン 1 秋月 P-03687 
P1,P4 共通 ピンソケット1X8(8P) リード長10mm FH105-1x8SG/RH 1 秋月 C-04046
P2 共通 ピンソケット1X6(6P) リード長10mm FH105-1x6SG/RH 1 秋月 C-04045
P3 共通 ピンソケット1X10(10P) リード長10mm FH105-1x10SG 1 秋月 C-07199
C1 共通  積層セラミックコンデンサー 0.1μF 1 秋月 P-13582(10本入)
C2  共通  電解コンデンサー 10uF 16v  1 秋月 P-10590
U1 Lnet  コンパレータ 面実装 LM311 Mouser
926-LM311M/NOPB
R2 Lnet  カーボン抵抗  47KΩ 1/4w  せんごくネット  
R3 Lnet  カーボン抵抗  150KΩ 1/4w  1 せんごくネット 
R4  Lnet  カーボン抵抗 4.7KΩ 1/4w  せんごくネット  
R5  Lnet  カーボン抵抗  10KΩ 1/4w  せんごくネット  
R6  Lnet  カーボン抵抗  22KΩ 1/4w  せんごくネット  
R7  Lnet  カーボン抵抗  220KΩ 1/4w  せんごくネット  
Q1  Lnet  トランジスタ  2SC1815  1 秋月 I-13491(20本入) 
J2  Lnet  6極6芯モジュラージャック  7002-6P6C(15mm)  秋月 C-00954
J4,J5  S88-n  基板取付用LANコネクタ  7810-8P8C  秋月 C-00159
D3 S88-n ショットキーダイオード 40V1A 1S4 S88から電源供給する場合に使用します 0 秋月 I-00127

※OLEDは、少しサイズの大きい OLED Display 1.3 Inch OLED Display Module IIC I2C Communication 128X64 BlueText Color も
  使用可能です(Amazonにリンクします)
  この場合はスケッチで修正がありますので下記1.3インチのOLED使用についてを参照ください
※D3はS88-NでDSmain5から電源供給する場合に使用します。
※I2Cのコネクタはユーザでの任意な改造などで使用できるようにGroveコネクタの使用に合わせ設けています。ホームページにある
  スケッチでは使用しません。

基本 S88-n仕様です。
Lnetへの対応は、各自での対応となります。

基板への部品の実装

   掲載のプリントパターンを基板を作成しました。 
   頒布用に用意しました。 記事末尾にある基板頒布について を参照ください。
   
   実装(S88-N)の場合 

     部品表に従い必要なパーツを取り付けます。
     
      抵抗(R8、R9)を付けます。
     抵抗(R1、R10)はI2Cを使わない場合は不要です。
     

      I2C用のGroveコネクタを取り付けます。
     使用しない場合は不要です。
     

      極性に注意して注意してLEDを取り付けます
     

     ピンソケットを取り付けます。
     

     ジャンパーピン用ピンソケット(2x2)を取り付けます。
     

     S88-N固定で使用の場合は、ジャンパー線でも可です。
     S88と記載がある側をジャンパーします。
     

     コンデンサー(C1,C2)を取り付けます。
     OLED用ピンソケットを取り付けます。
     ここでは実装していませんが、S88から電源供給する場合はD3を取り付けます。
     

     基板取付用LANコネクタ(J4,J5)を取り付けます。
     コネクタの爪の取り付け穴が少し狭くきつい場合は穴をごくわずかだけ広げてください
     ケガしないように注意して取り付けてください。
     
     これでS88-N用の基板は完成です。

     裏の2本のピンはUSBシールドのリセットボタンに干渉するのでカットします。
     基板の向きに注意して間違いないようにしてください
      

     S88-Nでの部品実装は以上です。


    実装(Loconet)の場合

      表面実装部品 LM311を取り付けます。向きに注意してください
     

      抵抗(R2〜R7)を付けます。
     

      抵抗(R8、R9)を付けます。
     抵抗(R1、R10)はI2Cを使わない場合は不要です。
     

      I2C用のGroveコネクタを取り付けます。
     I2Cを使用しない場合は不要です。
     

      極性に注意して注意してLEDを取り付けます。
     

     トランジスタ2SC1815(Q1)を取り付けます。
     

     ピンソケットを取り付けます。
     

     ジャンパーピン用ヘッダ(2x2)を取り付けます。
     

     Lnetで固定で使用の場合は、ジャンパー線でも可です。
     

 
     コンデンサー(C1,C2)を取り付けます。
     

     OLED用ピンソケットを取り付けます。
     

     6極6芯モジュラージャック (J2)を取り付けます。
     
     での部品実装は以上です。

     双方の部品を実装しても問題ありませんが、J3のジャンパーで切替出来るようにしてください
     どちらかを明示的に選択しての使用となります。

各基板のセットアップ
   1.ArduinoUNOへのライブラリの登録
      このマスコンにはArduino のHOSTシールドライブラリが必要になります。
      Lnetの場合は、さらにLoconetライブラリが必要になります。

      ライブラリマネージ管理を選択してライブラリマネージャを開きます。
         

          USB Host Shield  で検索して、それぞれライブラリをインストールしてください
          
          Loconetで検索
          

          USBホストシールド用のライブラリ https://github.com/felis/USB_Host_Shield_2.0
          Loconetライブラリ          https://www.arduino.cc/reference/en/libraries/loconet/

   2.ArduinoUNOへのスケッチ書き込み
      対応するスケッチをArduinoUnoへ書き込んでください。
      スケッチは こちら にあります。

      Arduino IDEで 
        ・ボードはArduinoUNO 
        ・シリアルポートはArduinoUNOが接続されているシリアルポート
      に設定してスケッチを「マイコンボードに書き込む」を選択して書き込みます。
      

      


    シールドの結合
      以下の写真のようにシールドを重ね、
      ワンハンドルマスコンをUSBシールドに接続します。
      S88-NケーブルかLnetケーブルをコマンドステーションにつなぎ
      Arduino UNOの電源を投入します。   
      一番最初はアドレスが0003になっているはずです。
      


対応のキーと操作

  S88-Nアドレス設定
     
     注:S88-Nはリリース機能はありません。


     設定手順 
       1.電源投入直後
           
         起動後の初期画面
           

       2.アドレス設定
         運転する前に必ず列車のDCCアドレスを指定してください。
        ・ZRボタン(Menu)を押す
          以下の画面(白抜きでADと表示)が出るので
          

         ・ ← → ボタンで アドレスの桁を選択(数字の下のカーソルが動きます)
         ・選択した桁の位置で↑↓で番号を選択
         ・Aボタンで決定 Bボタンでキャンセル

      ・Aボタンを押してアドレス設定がされた場合は、connectLEDが点灯します。

     運転時のキーマッピング
          初期のスケッチでは以下のようになっています。
          
         注意:S88ではDCCの緊急停止信号が出せませんので、緊急停止ボタンはスピードを0にするのみで
            突発的な急停車ができませんのでご注意ください。


   アクセサリ(ポイント切り替え)
    ZRボタンを押します。アドレス設定画面が出るのでさらにZRボタンを押します。
    
 
    画面に白抜きでSWと表示された画面になります。
    

    ここで←→↑↓キーでアドレスを設定して AかYボタンで切り替えます。
    この画面を終了する際はBを押します。 この画面のままでも運転は可能です。 
    


  Lnetアドレス設定
      S88-Nと同じになるようにしています。 
          

     設定手順 
       1.起動時
           
         起動後の初期画面
           
       2.アドレス設定
         運転する前に必ず列車のDCCアドレスを指定して基板上にあるConnectのLEDを点灯させてください。
        ・ZRボタン(Menu)を押す
          以下の画面(白抜きでADと表示)が出るので
          

         ・ ← → ボタンで アドレスの桁を選択
         ・↑↓で番号を選択
         ・Aボタンで決定  Bボタンでキャンセル  Yボタンでアドレスリリース

 
        Aボタンを押して、指定したアドレスがすでに使用されている場合は、スチールするか聞いてきます。
        使用されていない場合はこの画面は表示されません。
         
         ・スチールする場合 ⇒ Aボタン
         ・スチールしない場合 ⇒ Bボタン(アドレス指定画面に戻ります)

      ・Aボタンを押してアドレスが使用できる場合は、connectLEDが点灯し、初期画面に戻ります。

      ・設定されたアドレスを解放(スロット上からリリース)する場合
         ・ X ボタンを押します。
        
         ※アドレスリリース機能について
           コマンドステーションではスロットというアドレスを管理するテーブルがあり、
           そのスロットにアドレスを指定して関係するファンクションやスピードなどの列車の情報を持っています。
           KATOのDCS50Kですとスロットを11個持っており、コマンドステーションはそのスロットを管理することで
           複数の列車を同時に制御できます。
           このリリースは使用したアドレスをコマンドステーション上のスロット管理のテーブルから消す(解放)する
           機能です。
           他の列車を操作して再び操作に戻る場合はリリースをせずに新なアドレスを指定してください。

           このスロットで11個分スロットが使用されるとSlotMAXになり、新たなアドレスの割り当てができなくなります。
           このため使用しないアドレス(スロット)はリリースすることをおすすめします。



  運転時のキーマッピングは以下のようになっています。
         
        注:Loconetライブラリの機能でファンクションはF8までしか使用できません。

   アクセサリ(ポイント切り替え)
    ZRボタンを押します。アドレス設定画面が出るのでさらにZRボタンを押します。
    
 
    画面に白抜きでSWと表示された画面になります。
    

    ここで←→↑↓キーでアドレスを設定して AかYボタンで切り替えます。
    この画面を終了する際はBを押します。 この画面のままでも運転は可能です。 
    


1.3インチのOLED使用について
  作例では0.96インチのOLEDを使用していますが、もう少し画面の大きい1.3インチのOLEDも使用できます。
  
 この場合
  スケッチの中ににあるライブラリ OZOLED.cppの下記の記述のコメントを
  1.3インチ側にすれば表示のずれなく使えること確認しました

  // If you want to use 1.33inch OLED, delete the follow comment line
  #define OFFSET_1P33INCH_OLED 2 //1.3INCH              ←この行を有効にして下の行をコメントアウトしてください。
  //#define OFFSET_1P33INCH_OLED 0 //0.96, 1.5, 2.4inch        

スケッチでの速度の設定とファンクションマッピング

 USBMASCON**のスケッチの冒頭にあるdefine宣言で設定値を変更できます。
 自己責任で変更していただいてかまいません。


  マスコン加減速定数
  この定数を変化させることで加速率・減速率を変更できます。

  //ブレーキは減速数 加速は加速数
  //0から1023までで速度制御するのでノッチの位置でどれだけ足し引きするかの定数 
  #define CONST_EB 20  
  #define CONST_B8 15
  #define CONST_B7 10
  #define CONST_B6 8
  #define CONST_B5 5
  #define CONST_B4 4
  #define CONST_B3 3
  #define CONST_B2 2
  #define CONST_B1 1
  #define CONST_NN 1
  #define CONST_P1 10
  #define CONST_P2 5
  #define CONST_P3 5
  #define CONST_P4 5
  #define CONST_P5 5

  NNに値を設定するとはマスコンをN位置おいても指定した数値に従い減速するようになります。
  マスコン位置がNで減速させない場合は0を指定します。
  またP1〜P4位置で後述にあるマスコン速度リミット%より速度の値が大きい場合は、その時点での
  スピードを維持します。

  マスコン速度リミット%
  ノッチの位置で何%までの速度にするの上限を指定できます
  下記の例ではP3にマスコンを置いた場合速度は50%までとなります。

  //マスコン速度リミット%
  //Pノッチの位置でどこまでを最高とするかの率を%で指定
  #define LIM_P1 10
  #define LIM_P2 30
  #define LIM_P3 50
  #define LIM_P4 80
  #define LIM_P5 100

  キーのファンクションマッピング
  下記のボタンについてはファンクションの割り当てを変更できます。
  S88版ではF0〜F28まで
  Lnet版はF0からF8までになります。



  //ボタンのファンクション割り当て(F0〜F8までしかできません)
  //99を指定するとそのボタンのファンクション機能は無効
  #define BUTTON_A 2
  #define BUTTON_B 3
  #define BUTTON_Y 4 
  #define BUTTON_X 6
  #define BUTTON_ZL 5
  #define BUTTON_L 0
  #define BUTTON_M 1
  #define BUTTON_P 7
  #define BUTTON_R 8

 ZLボタンはマスコンの仕様でEBにマスコンを入れた時必ず押された状態になりますので
 押した状態が続くことを留意ください

 基板頒布について

      頒布のページよりお申し込みください。  


   お願い
      頒布品については、営業を目的とした販売とは位置づけが異なり、お互いの協力や紳士協定で行うことを前提としております。
      基板・スケッチの変更・改造を自由に行っていただいてかまいませんが、保障はありませんことご了承ください。

      ご質問等はお手数ですが、デジタル鉄道模型フォーラム のスレッド Nagoden(名古屋電鉄) に投稿ください。
      (Desktopstation様のご厚意によりDesktopstationフォーラムを使わせていただいております)

      掲載内容に基づき作成または改造を行った結果、万一損害が生じても、リンク先のサイトならびに名古屋電鉄では責任を
      負いませんので、ご自身の責任の範囲でお願いします。


     名古屋電鉄  ホームページ  http://nagoden.la.coocan.jp/
                  ブログ  http://nagoden-diary.blog.so-net.ne.jp/

Copyright (c) 名古屋電鉄 http://nagoden.la.coocan.jp/