ユーザ用ツール

サイト用ツール


dsshieldauto

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
dsshieldauto [2018/01/21 09:35]
– [使用できるピン] yaasan
dsshieldauto [2018/01/27 07:49]
– [アドレス3車両のファンクション操作] yaasan
行 1: 行 1:
 ====== DSshieldAUTO ====== ====== DSshieldAUTO ======
  
-DSshieldAUTOは、[[dsshield]]とArduinoUNOだけで、パソコンなしに小規模な自動運転を実現するためのソフトウェアソリューションです。 +DSshieldAUTO(AUTOスケッチ)は、[[dsshield]]とArduinoUNOだけで、パソコンなしに小規模な自動運転を実現するためのソフトウェアソリューションです。\\  
-小さいジオラマの車両やギミックをDCCで自動制御して、手を離しながら模型やジオラマをお楽しみいただける仕組みを提供しています。+小さいジオラマの車両やギミックを小さなArduinoUNO+[[dsshield]]によるコマンドステーション、DCCの自動制御ができます。手を離しながら模型やジオラマをお楽しみいただける仕組みを提供しています。ボリュームの入力でスピードを変えたり、ボタンで動き方を変えたり、いろいろな演出が出来ます。
  
 +
 +===== AUTOスケッチでできること =====
 +
 +  * パソコンなしで、DCC車両やポイントを気軽に動かせます。(最初のプログラミングするときだけ、パソコンを使用します)。ボタンやセンサーに応じて、車両やポイントを動かすことも出来ます。ArduinUNOにACアダプタをつなげるだけ。
 +  * DSシールドだけで完結。小規模な用途にも、数万円の高価なコマンドステーションは不要。
 +  * メルクリン(Marklin Motorola, MM1, MM2)やDCCの車両・ポイントに対応
 +  * 教育向け、研修向け、自分の技術向上、ジオラマのギミックのパワーアップなどに使用できます。
 +
 +
 +===== AUTOスケッチでできないこと =====
 +
 +  * 複雑な制御。並列で何個も複雑な条件で動く制御パターン。Arduinoで並列処理を書くのが難しいため。
 +  * 大電流を消費する環境。
 +  * 大きなレイアウト。
  
 ===== 必要な物 ===== ===== 必要な物 =====
行 42: 行 56:
 ==== 全体の構成 ==== ==== 全体の構成 ====
  
-Arduinoのスケッチは、setup()とloop()で大きく構成されます。一方で、AUTOスケッチでは、user_init()とuser_program()の2つで構成されます。setup()とloop()は、DCC制御で使用しておりますので、user_の関数にプログラミングしていただきます。なお、user_initはsetupからコールされています。user_programはloopからコールされています。ほとんど同じように使用することが出来ます。+Arduinoのスケッチは、setup()とloop()で大きく構成されます。一方で、AUTOスケッチでは、user_init()とuser_program()の2つで構成されます。\\ setup()とloop()は、DCC制御で使用しておりますので、user_の関数にプログラミングしていただきます。なお、user_initはsetupからコールされています。user_programはloopからコールされています。ほとんど同じように使用することが出来ます。
  
 +{{::dsauto_route6.png|}}
 ==== 使用できるピン ==== ==== 使用できるピン ====
  
行 115: 行 130:
 void user_program(void) void user_program(void)
 { {
- SerialDS.println("Power On");+ Serial.println("Power On");
  CMD_Power(1);  CMD_Power(1);
   
行 122: 行 137:
  CMD_Wait(500);  CMD_Wait(500);
   
- SerialDS.println("Loc 3, Func 10, On");+ Serial.println("Loc 3, Func 10, On");
  CMD_LocFunction(ADDR_DCC + 3, 10, 1);  CMD_LocFunction(ADDR_DCC + 3, 10, 1);
   
  CMD_Wait(500);  CMD_Wait(500);
   
- SerialDS.println("Loc 3, Func 11, On");+ Serial.println("Loc 3, Func 11, On");
  CMD_LocFunction(ADDR_DCC + 3, 11, 1);  CMD_LocFunction(ADDR_DCC + 3, 11, 1);
   
  CMD_Wait(500);  CMD_Wait(500);
   
- SerialDS.println("Loc 3, Func 9, On");+ Serial.println("Loc 3, Func 9, On");
  CMD_LocFunction(ADDR_DCC + 3, 9, 1);  CMD_LocFunction(ADDR_DCC + 3, 9, 1);
   
  CMD_Wait(500);  CMD_Wait(500);
   
- SerialDS.println("End...");+ Serial.println("End...");
  /* 永久ループ(終了) */  /* 永久ループ(終了) */
  while(1){}  while(1){}
行 200: 行 215:
 {{http://buin2gou.sakura.ne.jp/sblo_files/powerele/image/DSAUTO_RouteSCH-thumbnail2.png}} {{http://buin2gou.sakura.ne.jp/sblo_files/powerele/image/DSAUTO_RouteSCH-thumbnail2.png}}
  
 +Youtube動画:\\ 
 +{{youtube>JmZzkg3p--U?medium}}
 +
 +
 +==== メルクリン車両の単純往復シャトル運転 ====
 +
 +メルクリン車両(Marklin Digital, Marklin Motorola 2)の往復シャトル運転です。
 +ファンクション操作や、ボタンでスタートをかけるなどの動きを実現しています。
 +
 +
 +<code>
 +/*****************************************************************/
 +/*  User Program Area                                            */
 +/*****************************************************************/
 +
 +void user_init(void)
 +{
 +
 + pinMode(8, INPUT);
 + pinMode(11, INPUT);
 + pinMode(12, INPUT);
 +
 + digitalWrite(8, HIGH);//内部プルアップON
 + digitalWrite(11, HIGH);//内部プルアップON
 + digitalWrite(12, HIGH);//内部プルアップON
 +
 + //F0 Light ON
 + CMD_LocFunction(ADDR_MM2 + 2, 0, 1);
 +
 + //SPEED 0
 + CMD_LocSpeed(ADDR_MM2 + 2, 0);
 +
 + //POWER ON
 + CMD_Power(1);
 + Serial.println("Power On");
 +}
 +
 +
 +void user_program(void)
 +{
 + static byte sButtonState = 1;
 +
 +
 + //ボタンが押されたとき、digitalReadは0を返す。押さないときは1を返す。
 +
 + if( digitalRead(8) == 0)
 + {
 + Serial.println("Button 1");
 +
 + sButtonState = 1;
 + CMD_Wait(100);
 +
 + /* 前進 */
 + //FWD
 + CMD_LocDirection(ADDR_MM2 + 2, 0);
 +
 + //警笛
 + CMD_LocFunction(ADDR_MM2 + 2, 2, 1);
 + CMD_Wait(2000);
 + CMD_LocFunction(ADDR_MM2 + 2, 2, 0);
 +
 + //急加速
 + CMD_LocSpeed(ADDR_MM2 + 2, 100);
 + }
 +
 + if( digitalRead(11) == 0)
 + {
 + Serial.println("Button 2");
 +
 + sButtonState = 2;
 + CMD_Wait(100);
 + //急停車
 + CMD_LocSpeed(ADDR_MM2 + 2, 100);
 + }
 +
 + if( digitalRead(12) == 0)
 + {
 + Serial.println("Button 3");
 +
 + sButtonState = 3;
 + CMD_Wait(100);
 + }
 +
 + /* S88のスキャン */
 + CMD_ScanS88();
 +
 +
 + if( CMD_GetS88(0) == 1)
 + {
 + Serial.println("S88 Detected");
 +
 + CMD_LocSpeed(ADDR_MM2 + 2, 100);
 + CMD_Wait(500);
 + CMD_LocSpeed(ADDR_MM2 + 2, 75);
 + CMD_Wait(500);
 + CMD_LocSpeed(ADDR_MM2 + 2, 50);
 + CMD_Wait(500);
 + CMD_LocSpeed(ADDR_MM2 + 2, 25);
 + CMD_Wait(500);
 + CMD_LocSpeed(ADDR_MM2 + 2, 0);
 + CMD_Wait(1000);
 +
 + //REV
 + CMD_LocDirection(ADDR_MM2 + 2, 1);
 + Serial.println("REV");
 +
 + //警笛
 + CMD_LocFunction(ADDR_MM2 + 2, 2, 1);
 + CMD_Wait(2000);
 + CMD_LocFunction(ADDR_MM2 + 2, 2, 0);
 +
 + /* 加速 */
 + CMD_LocSpeed(ADDR_MM2 + 2, 25);
 + CMD_Wait(1000);
 + CMD_LocSpeed(ADDR_MM2 + 2, 50);
 + CMD_Wait(1000);
 + CMD_LocSpeed(ADDR_MM2 + 2, 75);
 + CMD_Wait(1000);
 + CMD_LocSpeed(ADDR_MM2 + 2, 100);
 + CMD_Wait(3000);
 +
 + CMD_LocFunction(ADDR_MM2 + 2, 3, 1);
 + CMD_Wait(2000);
 + CMD_LocFunction(ADDR_MM2 + 2, 3, 0);
 +
 + /* 減速 */
 + CMD_LocSpeed(ADDR_MM2 + 2, 75);
 + CMD_Wait(1000);
 + CMD_LocSpeed(ADDR_MM2 + 2, 50);
 + CMD_Wait(1000);
 + CMD_LocSpeed(ADDR_MM2 + 2, 25);
 + CMD_Wait(1000);
 + CMD_LocSpeed(ADDR_MM2 + 2, 0);
 + CMD_Wait(2000);
 +
 + //FWD
 + CMD_LocDirection(ADDR_MM2 + 2, 0);
 + Serial.println("FWD");
 +
 + //Clear
 + CMD_ScanS88();
 +
 + //警笛
 + CMD_LocFunction(ADDR_MM2 + 2, 2, 1);
 + CMD_Wait(100);
 + CMD_LocFunction(ADDR_MM2 + 2, 2, 0);
 +
 + /* 加速 */
 + CMD_LocSpeed(ADDR_MM2 + 2, 25);
 + CMD_Wait(1000);
 + CMD_LocSpeed(ADDR_MM2 + 2, 50);
 + CMD_Wait(1000);
 + CMD_LocSpeed(ADDR_MM2 + 2, 75);
 + CMD_Wait(1000);
 + CMD_LocSpeed(ADDR_MM2 + 2, 100);
 + }
 +}
 +</code>
 +
 +Youtube動画:\\ 
 +{{youtube>mtIwlYd2Fds?medium}}
  
dsshieldauto.txt · 最終更新: 2018/01/27 08:44 by yaasan

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki