無料ブログはココログ

« 2019年9月 | トップページ | 2019年12月 »

2019年10月

2019年10月28日 (月)

ミント缶で自動運転その5

手動運転、自動往復

Manualpushpull

 こども運転会の結果です。対応に追われて現地の写真がありませんが、こども達が作ったプチブロックの作品を貨車に乗せて走りました。純正の車止めは高くて手が出ないのでバルサ材で作ったバラックです。

 見学に来たこども達には「ツマミを廻すと動くよ」とだけで後は何も教えないで様子を見ました。車止めが近づくと焦ってツマミをゴリゴリやりますが、自動で反転する事に気が付いた子はいなかったみたいです。付き添いの親御さんに「自動トイレのセンサーです」と言うと皆さん驚いていました。狭いエリアなので方向反転だけは自動で、あとは速度つまみを廻して発車や停車を好きなだけ遊んでもらいました。してやったりと自画自賛です。

 

2019年10月13日 (日)

ミント缶で自動運転その4

子供運転会

 今月末のイベントで子供たちの運転会を行います。手持ちの線路が無い事と確保できる場所が狭い事からセンサーで自動往復させますが、なにも操作出来ない完全自動運転では子供たちは退屈でしょうから、スピード調整をミント缶の操作で行えるようスケッチを修正しました。最高スピードは自動運転スケッチのパラメータで決まりますが、ミント缶が自動運転のスピードより遅ければミント缶のスピードで走行します。

Marklin

自動運転解除

 センサーの感度を調整して動作を確認するには完全手動モードも必要なので、基板の製造ミスでGNDに落ちていたスイッチのランドを削ってコメントアウトしていた自動開始スイッチを有効にしました。ミント缶でスピードを上げた状態で自動解放スイッチを押すと自動運転スケッチの速度制限が解除されロコが暴走する可能性があるので、ミント缶本体のスケッチも変更しました。R1.3e、R1.5のスケッチでは自動解除コマンド受信で即オフにしていたbIICLocalAddrフラグ


void processFromIIC()
{
switch(iic.Cmd) {
case CMD_NOP:
processSendPacket(CMD_DIR, addr, GO_FWD);
processSendPacket(CMD_SPD, addr, 0);
bIICLocalAddr = false;
break;

これを


void processFromIIC()
{
switch(iic.Cmd) {
case CMD_NOP:
processSendPacket(CMD_DIR, addr, GO_FWD);
processSendPacket(CMD_SPD, addr, 0);
bIICLocalPending = true;
break;

で解除ペンディングフラグを立てて


void processDial()
{
if(gCurSpeed != gLastSpeed)
{
if((aStep == 0) && (bIICLocalPending = true)) {
bIICLocalAddr = false;
}

で、スピードが0になったら自動解除する事にしました。

 センサーディテクタ側は電源オンでセンサー検出を開始しますが、停止ボタンを押すとセンサー検出を停止して完全手動モードになり、開始ボタンで検出を再開します。
 子供たちは手当たり次第にボタンを押しまくりますが、これでロコが線路から飛び出す事は避けられそうです。停止センサー付きの車止めを作れば安心ですが、準備が間に合いそうに無く今回はここまでとします。ミント缶のボタンも押しまくって『動かなくなった』と怒られるので、ロコアドレスを固定するKidsModeも追加する事にします。

 

更新スケッチを公開

 変更したミント缶IVスケッチはR1.3fとR1.5bで、ウェッブページのミント缶履歴にアップしました。またR1.5基板はボタンの読み込みをアナログポートに変更した事で、R1.3以前の基板と方向反転論理が反対でしたので、R1.3と同じ論理になるよう修正しました。R1.3はメモリ節約目的の自前printfで100から109までのゼロサプレスに不具合があったので修正しました。

センサーディテクタスケッチはミント缶IV-I2C通信ページのサンプルスケッチをβ2に更新しました。

« 2019年9月 | トップページ | 2019年12月 »