2017年12月24日日曜日

【オリジナルガシャット】レッキングクルーガシャット動画(高画質版)公開【作製番外編2】

相変わらず忙しく、オリジナルガシャットの作製になかなか時間が割けない状況ですが、前回のレッキングクルーガシャットをハンディカメラで撮り直してみました。

今回はガシャコンブレイカーの電源を入れ忘れずに撮影できたのですが、完成した動画を見た感じ、クリティカルフィニュッシュ音はあと0.2秒程度早めで良かったかもしれません。

とりあえず、レッキングクルーガシャットの製作はここで一旦中止として、次回からは別のネタの作製に入ります。

2017年12月9日土曜日

【プラレール修理】RCプラレール 東北上越新幹線(旧動力)の修理

以前修理したけどブログにアップできなかったもの その3 です。
なお、修理前の画像は撮り忘れたので修理後の画像のみです。

RCプラレールの東北上越新幹線(旧動力)を修理しました。
作業内容は、ほぼいつも通りの作業で、埃やゴミの除去、グリスアップ、電池端子の錆取り、ヒートペンによる破損部品の応急修理です。
全体画像

貰ってきた当初、家族から新しい電池を入れても動かないと言われたので、中を確認したところ先頭車からの配線が中間車に伸びており、中間車にも電池が入るような設計でした。
車両接続部画像 中間車画像

初見は電飾かサウンド系かなと思いましたが、ネットで検索してみたところ、RCで発車・停車をコントロールできるタイプの車両らしく、貰い物の入っていた袋の中にリモコンらしきものも入っていたので併せて分解清掃しました。
リモコン画像

作業終了後、車両とリモコンに電池を入れ、動作確認をしてみたところ、無事リモコンで操作できるようになりました。

2017年11月4日土曜日

【オリジナルガシャット】レッキングクルーガシャット動画公開【作製番外編1】

オリジナルガシャットの作製は相変わらず音ネタ探しに苦労している状況です。
10月1日の雑記に少し記載しましたが、ネタ被りで保留中の案件をこのまま眠らせておくのも勿体ないので、ブログ用として公開します。

レッキングクルーガシャット

ヒダカヒロジ様のスーパーマリオガシャットとゲームは異なりますが、マリオ被りするため保留中のレッキングクルーガシャットです。
BGMの入手元は手持ちのゲームサウンドミュージアム~ファミコン編~のレッキングクルーから。
シングルサイズのCDだったため、再生環境を整えるのに苦労しました。

ネタ的にはガシャコンブレイカーのハンマーモードでクリティカルストライクを…と考えていたのですが、動画はガシャコンブレイカーの電源入れ忘れ&クリティカルストライク音の調整が不十分だったため、動画の最後の方が少し残念な結果になってしまいました。


なお、今回の動画を撮影中、DFPlayerを1個壊してしまいました。
壊れたのはSDカードスロットなので、秋月電子あたりでマイクロSDカードコネクタを買って修理してみようかとも思いましたが、送料等を考えると新しいDFPlayerを買っても大差なさそうな金額になりそうなので、壊れたDFPlayerはジャンク行きにしました。
暇なときにでも、SDカード変換アダプタと結線して修理できるか挑戦してみます。

【動画を撮り直したのでこちらもどうぞ。】

2017年10月24日火曜日

【プラレール修理】つうきん電車(旧動力 緑)の修理

以前修理したけどブログにアップできなかったもの その2 です。
なお、修理前の画像は撮り忘れたので修理後の画像のみです。

つうきん電車(旧動力 緑)を修理しました。
修理箇所はシャーシの動力ユニットを固定する部分です。
全体画像

画像中央部、動力ユニットのツメを引っかけて固定する部分が欠損していたため、プラモデルの灰色ランナーを使用してヒートペンで再生させました。
シャーシ修理画像 上面

底面からはこんな感じです。
シャーシ修理画像 底面


シャーシに合う色の灰色ランナーを全部使ってしまったため一部不完全ではありますが、無事動くようになりました。
シャーシ修理後画像

2017年10月1日日曜日

【雑記】オリジナルガシャット作製の雑記2

あぁ…
オリジナルガシャット用に考えていた案のうち、最も音声データ作製が進んでいた案が使いづらいネタになってしまった。
残り3案のうちの一つはヒダカヒロジ様のガシャットと若干ネタ被りするしなぁ…

困りましたねぇ…

2017年9月18日月曜日

【プラレール修理】名鉄7000系パノラマカー(旧動力 白線なし)の修理

以前修理したけどブログにアップできなかったもの その1 です。
なお、修理前の画像は撮り忘れたので修理後の画像のみです。

名鉄7000系パノラマカー(旧動力 白線なし)を修理しました。
修理箇所は運転台窓枠が折れて紛失していた所と車体左側ひび割れの2ヶ所です。
全体画像

運転台の窓枠は、プラモデルの赤ランナーを使用してヒートペンで再生しました。
が、仕上げが甘くガタガタになってしまいました…
窓枠部分拡大画像


車体左側のひび割れも、プラモデルの赤ランナーとヒートペン塞いだのですが、微妙に赤の色合いが異なったため逆に目立つ結果に…
ボディ左側拡大画像

いつか時間が出来たら、修理し直したいです…

2017年9月3日日曜日

【音声改造】オリジナルガシャット作製その5 『動作確認動画とプログラム公開』

新しい仮面ライダーの放送が始まりましたが、私はまだガシャットを弄っています。
という事で今回は、前回修正したスケッチが正常に動作するか検証していました。

動画にするとこんな感じです。
ガシャット挿入音の再生中にキメワザスロットのボタンを押下しても次処理のキメワザ待機音は実行せず、ガシャット挿入音の再生が終了した後にボタンを押下することでキメワザ待機音が鳴るようになりました。

スケッチが長くなってしまったのでvoid loopの所のみ抜粋してありますがこんな感じです。
void loop(){
  current_state[0] = digitalRead(BUTTON_1_PIN);
  current_state[1] = digitalRead(BUTTON_2_PIN);
  current_state[2] = digitalRead(BUTTON_3_PIN);
 
  if(memcmp(before_state, OFF_OFF_OFF, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_1);
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      if(single_mode_flag == false){
        wait = 1;
        action = set_action(GASHAT_NAME);
      }else{
        randNumber = random(2);
        if(randNumber == 0){
          wait = 1;
          action = set_action(GAME_CLEAR);
        }else{
          wait = 1;
          action = set_action(GAME_OVER);
        }
      }
      single_mode_flag = !single_mode_flag;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      slot_in_time = 0;
      slot_in_flag  = true;
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_1);
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      critical_mode_flag = true;
      slot_in_time = 0;
      slot_in_flag  = true;
      wait = 1;
      action = set_action(WEAPON_C_READY);
    }
  }else if(memcmp(before_state, ON_OFF_OFF, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      if(s_process_ID == 3 && slot_in_time >= 40){
        randNumber = random(2);
        if(randNumber == 0){
          wait = 1;
          action = set_action(CRITICAL_FINISH);
        }else{
          wait = 1;
          action = set_action(CRITICAL_FINISH_KAI);
        }
        s_process_ID = 0;
      }else{
        ;
      }
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_2);
      }else{
       if(s_process_ID == 3 && slot_in_time >= 40){
          randNumber = random(2);
          if(randNumber == 0){
            wait = 1;
            action = set_action(CRITICAL_FINISH);
          }else{
            wait = 1;
            action = set_action(CRITICAL_FINISH_KAI);
          }
          s_process_ID = 0;
        }else{
          ;
        }
      }
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_2);
    }
  }else if(memcmp(before_state, OFF_ON_OFF, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      if(s_process_ID == 2 && slot_in_time >= 40){
        wait = 1;
        action = set_action(GENRE);
        s_process_ID = 0;
      }else{
        ;
      }
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_3);
      }else{
        if(s_process_ID == 2 && slot_in_time >= 40){
          wait = 1;
          action = set_action(GENRE);
          s_process_ID = 0;
        }else{
          ;
        }
      }
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_X);
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_3);
    }
  }else if(memcmp(before_state, OFF_OFF_ON, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_1);
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(CRITICAL_READY);
      }else{
        randNumber = random(2);
        if(randNumber == 0){
          wait = 1;
          action = set_action(CRITICAL_STRIKE);
        }else{
          wait = 1;
          action = set_action(CRITICAL_STRIKE_KAI);
        }
      }
      critical_mode_flag = !critical_mode_flag;
    }
  }else if(memcmp(before_state, ON_ON_OFF,  N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(DRIVER_CLOSE);
      }else{
        if(slot_in_time >= 40){
          randNumber = random(2);
          if(randNumber == 0){
            wait = 1;
            action = set_action(CRITICAL_FINISH);
          }else{
            wait = 1;
            action = set_action(CRITICAL_FINISH_KAI);
          }
        }else{
          s_process_ID = 3;
        }
      }
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(DRIVER_CLOSE);
      }else{
        if(slot_in_time >= 40){
          wait = 1;
          action = set_action(GENRE);
        }else{
          s_process_ID = 2;
        }
      }
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      if(s_process_ID >= 1 && slot_in_time >= 40){
        switch(s_process_ID){
          case 1:
            wait = 1;
            action = set_action(CRITICAL_READY);
            critical_mode_flag = !critical_mode_flag;
            break;
          case 2:
            wait = 1;
            action = set_action(GENRE);
            break;
          case 3:
            randNumber = random(2);
            if(randNumber == 0){
              wait = 1;
              action = set_action(CRITICAL_FINISH);
            }else{
              wait = 1;
              action = set_action(CRITICAL_FINISH_KAI);
            }
            break;     
        }
        s_process_ID = 0;
      }else{
        ;
      }
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(slot_in_time >= 40){
        if(critical_mode_flag == false){
          wait = 1;
          action = set_action(CRITICAL_READY);
        }else{
          randNumber = random(2);
          if(randNumber == 0){
            wait = 1;
            action = set_action(CRITICAL_STRIKE);
          }else{
            wait = 1;
            action = set_action(CRITICAL_STRIKE_KAI);
          }
        }
        critical_mode_flag = !critical_mode_flag;
      }else{
        s_process_ID = 1;
      }
    }
  }else if(memcmp(before_state, ON_OFF_ON,  N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_2);
      }else{
        ;
      }
    }
  }else if(memcmp(before_state, OFF_ON_ON,  N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_3);
     }else{
        ;
      }
    }
  }else if(memcmp(before_state, ON_ON_ON,   N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      randNumber = random(2);
      if(randNumber == 0){
        wait = 1;
        action = set_action(CRITICAL_FINISH);
      }else{
        wait = 1;
        action = set_action(CRITICAL_FINISH_KAI);
      }
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      wait = 1;
      action = set_action(GENRE);
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      randNumber = random(2);
      if(randNumber == 0){
        wait = 1;
        action = set_action(CRITICAL_FINISH);
      }else{
        wait = 1;
        action = set_action(CRITICAL_FINISH_KAI);
      }
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(GENRE);  
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(s_process_ID >= 1 && slot_in_time >= 40){
        switch(s_process_ID){
          case 1:
            wait = 1;
            action = set_action(CRITICAL_READY);
            critical_mode_flag = !critical_mode_flag;
            break;
          case 2:
            wait = 1;
            action = set_action(GENRE);
            break;
          case 3:
            randNumber = random(2);
            if(randNumber == 0){
              wait = 1;
              action = set_action(CRITICAL_FINISH);
            }else{
              wait = 1;
              action = set_action(CRITICAL_FINISH_KAI);
            }
            break;     
        }
        s_process_ID = 0;
      }else{
        ;
      }
    }
  }

  if(wait >= 1) {
    flash_led(action);
    wait = 0;
  }else{
    wait++;
  }

    before_state[0] = current_state[0];
    before_state[1] = current_state[1];
    before_state[2] = current_state[2];

  if(slot_in_flag == true){
    if(slot_in_time < 5000){
      slot_in_time++;
    }else{
      slot_in_time = 0;
    }
  }

  delay(50);
}
他の方が作製する際の参考になれば良いのですが…


ガシャットの個体差による認識率の問題はありますが、現時点での課題はほぼほぼ解決したので、次は音ネタ探しに移ります。
さてさて、何が良いでしょうかねぇ

その6に続きます。】

2017年8月27日日曜日

【音声改造】オリジナルガシャット作製その4 『動作確認とプログラム修正2』

土日はスケッチを弄ってました。
今回の改修箇所は、前回気付いたLED点灯間隔の改修とキメワザスロットや武器に挿入した際の挙動の改修です。

LED点灯間隔の改修

前回書いた通り、if文とカウンタを使用してループn回に1度の割合でflash_led(action)の処理をするようにしました。また、DX版のガシャットは最大22秒位点灯しているので、LEDの点灯データも25秒分に増やしました。


キメワザスロットや武器に挿入した際の挙動の改修

ガシャットを武器に挿入(①②③スイッチ同時押下)する際にガシャット挿入音~キメワザ待機音となるので、#define WEAPON_C_READY 17 で新しい処理を追加しました。

また、キメワザスロットや武器に挿入した際にガシャット挿入音が鳴るのですが、DX版のガシャットはガシャット挿入音が鳴っている約2秒の間にキメワザボタンあるいは武器のトリガーを操作しても、次の音は鳴らずにガシャット挿入音が鳴り終わるまでは次の処理を保留するので、それと同様の機構を追加しました。
この処理を流用すれば、ガシャット挿入音の再生完了後にキメワザ待機音を自動再生したり、クリティカルストライク(クリティカルフィニュッシュ)音の後にランダムで「会心の一発」音を再生させることもできそうですが、スケッチの殆どを作り直すことになり、処理も複雑になりそうなので別の機会へ持ち越しとします。


以上が今回の改修点です。
夜に作業していたため、スピーカーを接続せずにシリアルモニタで動作確認したのみですが、動作の方はいい感じに改修できていると思います。
おそらく次の土日になると思いますが、息子のゲーマドライバー等を借りて動作確認し、動作に問題なさそうであれば、現時点でのスケッチを載せてみようかと思います。

その5に続きます。】

2017年8月23日水曜日

【オリジナルガシャット】作製雑記2 『電源周りのトラブル』

オリジナルガシャット作製の際にやらかしてしまった電源周りのトラブルなどを書き残しておきます。
他の方が作製するときの参考になれば…

DFPlayerの電源はArduinoのVccから取らない

最初にブレッドボードでプロトタイピングした際、ArduinoのVccからDFPlayerの電源を取れば良いのではないかと考えて配線したのですが、うまく動いてくれませんでした。
調べたところ、ヒダカ ヒロジ様も同様の問題を経験されたらしく、過去の記事に記述があり、DFPlayerの電源はArduinoから直接取らない方が良いとのことです。
まぁ、回路図通りに作らなかった私が悪いのですが…
ちなみに、ブレッドボード用の電源モジュールから3.3Vを取った場合は正常に動いてくれました。


リチウム電池ではDFPlayerの再生が困難

スイッチサイエンスのリチウムイオン電池が売り切れだったため、ボタン電池のLR44と降圧型モジュールを組み合わせて、3.3Vでの駆動を考えていたのですが、一瞬しか再生してくれなかったり、不快なノイズ音が発生したりして、正常に動作させるのが困難でした。
何か良い方法がないか模索中です。

2017年8月20日日曜日

【音声改造】オリジナルガシャット作製その3 『動作確認とプログラム修正1』

今回はバグヴァイザー対応と武器への対応のため、スケッチを弄りました。

バグヴァイザー対応

レベル3関係のコード部分をコピー・改修してレベルX部分を追加しました。


武器への対応

まず、武器にガシャットを挿入した際の認識率の悪さに関してですが、スケッチ改修前のガシャットをゆっくりめに挿入した際に、割と認識率が高かったので、delay値を10に減らしてみました。
武器のトリガーを引くと変身音が鳴ってしまう件に関しては、武器に挿入した際にクリティカルモードのフラグが真になることを利用して、critical_mode_flag == falseの時にのみレベル2またはレベル3の処理をするように改修しました。


その他改修

DX版のガシャットは、ゲームクリア音とゲームオーバー音はランダムにどちらか一方が再生される仕様なので、ランダム再生にしてみました。
また、クリティカルフィニッシュ、クリティカルストライク時の会心の一発もランダム再生で発生するようにしてみました。


バグヴァイザー対応の動作検証

最初は音が鳴らなかったので、失敗したかと思いましたが、SDカードに音声ファイルを保存し忘れただけだったため、音声ファイル保存後は問題なく動作するようになりました。


武器対応の動作検証

スケッチ改修前は2割程度だった武器認識率が、ガシャコンブレイカーの認識率はほぼ10割、ガシャコンキースラッシャーは7~8割程度と向上しましたが、ブレイカーとスラッシャーの認識率に差が出てしまいました。
スラッシャーの右側スロットと左側スロットの刺し比べをしてみたところ、スラッシャーの右側スロットの方が認識率が悪く、左側スロットに他のガシャットを挿入している状態だと認識率が上がる謎の状況でした。
この辺りはガシャットの個体差や相性の影響もあるのかもしれません。


その他改修の動作検証

ランダム再生にしたので、動作検証にはリアルラックが必要となりましたが、問題なくランダムで再生されました。


新たな課題

前回の問題点はほぼほぼ解消したのですが、新たな課題が発生しました。
武器への認識率を向上させるため、delay値を10に減らしたのですが、LEDの点灯間隔もdelay値に影響されてしまうため、20秒間点灯するはずだったLEDが、2秒間で高速点灯するようになってしまいました。
この件に関しては、カウンタを入れれば制御できると思うので、次回対応時に挑戦してみます。

その4に続きます。】

2017年8月18日金曜日

【オリジナルガシャット】作製雑記1 『お蔵入り案集』

オリジナルガシャット作製に際し、ふと思いついてDFPlayerで色々実験してみたけど、結局お蔵入りした案を書き留めておきます。

案1

DFPlayerのADkey Modeで、抵抗値により再生できる音を選択できるみたいなので、スイッチと抵抗の組み合わせでなんとかできないか考えてみました…が、そもそもスイッチを押した時のみ反応するので、ガシャットを引き抜いた時のサウンド再生には対応できず早々にお蔵入りです。
しかし、一昔前のサウンドロップ的な使い方はできそうです。


案2

DFPlayerのI/O Modeで11番ピンがPre/Vol+の機能なので、SDカード内に2音のみ保存すれば、ボタンを押す度に交互に再生されるのではないかと考え、DFPlayerで確認してみたところ、問題なく動作しました。
ただし、1つ欠点があり、ボタンを長押しするとボリュームが大きくなってしまいます。
こちらも、サウンドロップ的な使い方ができそうですが、ボリュームの欠点をなんとかしないといけません。


案3

スピーカーとLEDを並列接続してLEDを点灯させる方法で、無音部分でもLEDを点灯させる方法が無いか考えてみました。
人間が認識できない周波数でも、音であることには違いはないので、超音波を再生すればLEDが点灯するのではないかと思い、DFPlayerで19,000Hzの音を再生してみたところ、無事LEDが点灯しました。
ですが、認識できなくても音は音、耳に良くなさそうですし、ペット等も嫌がると思うのでお蔵入りです。


案2と案3を合わせれば、ドライバ等には非対応になってしまいますが、単品遊び専用ガシャットくらいなら作れそうです。

2017年8月17日木曜日

【雑記】オリジナルガシャット作製の雑記1

雑記です。

オリジナルガシャットの作製を始めた2月の時点では、息子がまだプラレールやきかんしゃトーマスに興味を持っていた時期だったので、トーマスガシャットを作ったら喜ぶだろうなぁと考えて音源素材を探していたのですが、作製を放置していた期間中に息子のプラレールとトーマスの卒業宣言があり、現在、作製するネタが白紙となっている状況です。

トーマス用に食玩タドルクエストガシャットを購入したので、青い色を有効活用できるネタを探しているのですが、なかなか見つからないうえ、見つかっても音源素材の入手が困難だったりするのがなんとも…

2017年8月16日水曜日

【音声改造】オリジナルガシャット作製その2 『スイッチ遷移検証』

前回記事の武器認識について、息子のガシャコンキースラッシャーを弄っていて、少し分かったことがあるので記載します。

スイッチ説明画像
まず、ガシャットのスイッチですが、スケッチと合わせるため、画像の様に①②③として説明します。

武器にガシャットを挿入した際のスイッチの挙動は、スイッチ①②③がすべてOFFの状態(挿入前)から①②③全てがONの状態(武器のキメワザ待機音再生)になり、間を置かずに①②のみONの状態(挿入完了)になります。

また、武器のトリガーを引くとスイッチ①②ONの状態から①または②1ヶ所のみONの状態となり、トリガーを戻すと①②ONの状態に戻ることがわかりました。
そのため、トリガー操作時に本来クリティカルフィニッシュ音またはジャンル音が再生されるべきところで、レベルアップ系の音声が再生されていたみたいです。
この問題に関しては、キメワザ関係のフラグを使用して制御できると思うので挑戦してみます。

ガシャットが武器を認識しないことがある件に関しては難しいところです。
スケッチのガシャット挿入時のスイッチ処理には問題がないので、使用したガシャットと武器の相性が悪いのか、スイッチの検出間隔の関係で、上記変化を認識できないのかがはっきりしません。

いずれにせよ、色々とスケッチを弄ってみることにしますが、「夜中にガシャットを弄るの禁止令」が発令されてしまったので、次回検証はもう少し先になりそうです。

2017年8月15日火曜日

【音声改造】オリジナルガシャット作製その1 『試作と動作確認』

昨日記事にしたオリジナルガシャットの試作状況はこんな感じです。
試作状況画像
ベルト等に実際に刺してみた状況を確認するため、ガシャポン版ガシャット(フォーゼ)に犠牲となってもらいました。
以下は動作確認の結果です。


ゲーマドライバー

ガシャット抜き差し、レバー開閉に対して問題なく動作しました。


キメワザスロット

ガシャット抜き差し、キメワザ待機、クリティカルストライクいずれも問題なく動作しました。


ガシャコンブレイカー

武器のトリガーを操作すると変身音が鳴ってしまう点と、偶にガシャコンブレイカーと認識しない時がある点が問題として残りました。



ガシャコンキースラッシャー

ガシャコンブレイカーと同様の状況です。


バグルドライバー

スケッチ上でLvXに対応していないのが判明しているので今回は確認していません。


以上の結果から、バグルドライバーに対応させる改修と武器に対応させる改修を考えなければならないことが判明しました。
バグルドライバー対応はそれ程難しくない改修なのですが、武器への対応をどうするか考えないといけません。

2017年8月14日月曜日

【雑記】電子工作はじめました

少し古い話ですが…

昨年の末頃、おしゃべりディーゼル10を修理をするための情報をインターネットで調べていた時に、PICで音声を再生させる方法を記載したページを見つけ、その内容には凄く興味を引かれたのですが、「PICはハードルが高い」と諦めていました。

ところが、オリジナルガシャットの作製方法が記載されたページを今年の1月に偶然発見し、(息子が仮面ライダーに興味を持ち始めた頃でもあったので)ArduinoとDFPlayerがあれば色々作れるんじゃないかと思い、amazonで部品を注文してみました。
上記のページにあったスケッチを使用し、ブレッドボードでプロトタイピングして、何とか動作する所までは出来たのですが、電源周りの問題があったのと、4月から仕事が忙しくなったので、そのまま数ヶ月放置していました。

先日、少し時間が取れたので、色々試行錯誤してみたところ、電源周りの問題は何とかなりそうな感じでした。
ガワとして使用するための食玩版ガシャットも入手済みなので、後はオリジナルガシャット作製用の音素材集めと編集、スケッチの修正をし、部品を食玩版ガシャットに組み込めばオリジナルガシャットの完成…なのですが、なかなか作業時間が確保できない状況です。
今月でエグゼイドが終わってしまうので、(話題的には)今月中に完成させたいのですが、なかなか厳しそうです。

まぁ、のんびりやるしかないか…

2017年8月3日木曜日

【雑記】近況2

相変わらず仕事が忙しくて、ブログ更新がままならない状況が続いています。
また、息子のプラレール卒業宣言もあり、最近プラレールに接する機会も少なくなりました。

とはいえ、修理は完了したけどブログにアップしていない車両もあるので、折を見て更新できれば…と考えています。

2017年5月7日日曜日

【プラレール修理】C12(旧動力)の修理その2

その1からの続きの記事です。】

スイッチ稼働用部品作製

前回、黒ランナーで形出しした物を、ヒートペンで成形して作製しました。
※写真を撮り忘れました。


前部連結部品作製

ネットの画像を見ると、黒い連結用の部品が付くみたいですが、ヒートペンで代用部品を作製した場合、強度的な不安が残るため、通常の連結部品の一部を削って代用しました。
前部連結部品画像


組立

先程加工した前部連結部品を取付けて、
組立画像1

スイッチ稼働用部品を取付け、
組立画像2

スイッチ金具をΦ2mmのミニ四駆用ネジで取付けました。
組立画像3

取付け後はこんな感じになりました。
組立画像4


修理完了

C12(旧動力)の修理完了です。
修理完了画像


おまけ

旧動力と新動力の違いはありますが、C11のボディをそのまま取付けることもできました。
おまけ画像

【スイッチ稼働用部品が見つかったため、その3に続きます。】

2017年4月9日日曜日

【雑記】近況1

仕事が忙しくなり、プラレール修理に時間が取れないため更新が滞っていますが、前回更新から今日までに行った作業を載せておきます。


DD51(新動力)のギア修理


以前の修理で保留していたギアの割れを、部品取り用のC11から移植して修理しました。
作業内容は、車輪を金属製のピンから引き抜いてギアを取り換えただけです。
車輪画像



C12(旧動力)用のスイッチ稼働用部品の作製


プラモデルの黒いランナーを探し出して、ヒートペンで大まかな形を出しました。
細かい作業は次回以降へ持ち越しです。
新造部品画像

2017年3月11日土曜日

【プラレール修理】C12(旧動力)の修理その1

おしゃべりディーゼル10の修理に使用できそうな部品を探していたところ、ディーゼル10の修理には使えないけれど、別の車両の修理に使えそうな部品を発見したので、今回はプラレールC12(旧動力)の修理を行います。
このC12は、親戚から貰ってきたプラレールのうちのひとつですが、電池用の金具が紛失していたため保管していた車両です。
なお、修理に際しネットで色々調べたところ、スイッチ稼働用の部品および前面の連結用部品も紛失しているようですが、ヒートペンで部品を作る時間が取れないため、部品作製は次回以降の更新へ持ち越します。

シャーシの状況はこのような感じです。画像には写っていませんが、スイッチ用の金属部品は残っています。
シャーシ画像1 シャーシ画像2

今回の修理に使用する金属端子です。20年位前に貰った非常用ライトに使用されていました。
シャーシに取り付けるため、Φ2mm程の穴をあけました。
金属端子画像

シャーシに金属端子とスイッチ用の金属部品をネジで固定します。
シャーシ画像3 シャーシ画像4

無事通電し、モーターが動くようになりました。
修理完了画像

その2に続きます。】

2017年2月26日日曜日

【雑記】昔のミニ四駆?のパーツを発見

おしゃべりディーゼル10を修理するための部品は見つかりませんでしたが、懐かしいものを発見しました。

昔のミニ四駆?のギア等のパーツです。
ギア画像
ちなみに、車体は見つかりませんでした。おそらく、当時の自分が壊して捨ててしまったのだと思われます。
非公式のモーターとか色々買った記憶が…

気になったのでネットで調べたところ、現行のミニ四駆とは規格が異なるようです。
プラレールはとても息の長い商品ですが、ミニ四駆もかなり息の長い商品のようですね。

【雑記】プラレール おしゃべりディーゼル10の修理 番外

先週・今週と、おしゃべりディーゼル10の修理用に使えそうな部品を探すため、実家の押し入れや物置等を捜索していましたが、使えそうな物は見つかりませんでした。

仕方が無いので、折れた電池端子をはんだ付けできないか試してみましたが、はんだとの相性が悪く、実用に適さない強度でしか接合できませんでした。

電池端子の修理に使う部品は、元の形状に拘らずに部品を探すしかないようです。

2017年2月13日月曜日

【雑記】謎のレールなど

おしゃべりディーゼル10の電池ボックス金具の部品取り用として、ジャンク品を探しにリサイクルショップを何店舗か巡ってみたところ、変わったレールが売られていたので買ってきました。
変わったレール画像


スロープレール

ネットで調べたところ、新幹線こだまセットに付属していたもののようです。
スロープレール画像


スロープレール?

スロープレールのようですが、上記のものとは形や色合いが異なります。謎レールその1。
材質はポリプロピレンのような感じです。
謎レール画像1


片方が特殊な形状のレール

以前ネット上で、このレールについて記載されたページを見た記憶はあるのですが、再度検索してみても該当ページが見当たらないので詳細不明です。謎レールその2。
謎レール画像2


1/6直線レール

1/4レールよりも短いので微調整に便利なんですが、凹凸ジョイントのタイプが存在しないのが悔やまれます。凹-凹用のジョイントパーツはこのレール以上に手に入れにくいでしょうし。
1/6直線レール画像


結局のところ、面白レールが何点か手に入りましたが、素材取り用のジャンク品は手に入りませんでした。

2017年2月5日日曜日

【プラレール修理】おしゃべりディーゼル10の修理その1

今回はジャンク品に入っていたおしゃべりディーゼル10を修理しました。

分解・清掃

ジャンク品のページでも書きましたが、電池の液漏れ跡が酷く、分解してみたところ、液漏れにより電池ボックス内で断線が起きていました。
電池ボックス画像

ボディや車輪等の部品は、いつもの様に中性洗剤を混ぜたぬるま湯の中で洗浄しました。
電池ボックスは液漏れ跡が酷く、水で洗浄するのは危険なので、楊枝の先で液漏れの結晶を削り落とした後、綿棒で軽く汚れを落としました。
ネットで液漏れ跡の対処法を調べたところ、酸で中和させて対処すると記載されたページがあったため、台所から酢を少々拝借し、綿棒の先に染み込ませ中和していたのですが、液漏れによって腐食していたらしく、電池ボックスの金属端子が折れてしまいました。
仕方が無いので、ハトメ金具を取り去り、端子の裏側等も中和しました。
電池端子画像


電子回路の動作確認

おしゃべりディーゼル10は電子回路でモーターの回転と電子音を制御しており、4.5Vで動作するようなので、暫定的に4V程度の電圧をかけてみたところ電子回路は正常に動作するようでした。


今後の修理計画

動力系は問題がなかったので、電池ボックスまわりの修理ができれば再び動作しそうですが、電池ボックス内に謎の部品があったのでネットで調べたところ、細い線を用いたヒューズのようで、そのサイトではポリスイッチを使用して修理していました。
謎の部品画像
そのため、
  • ポリスイッチの入手
  • 電池端子の修復または代用品の入手

ができれば修理できそうです。
ポリスイッチは秋月電子通商等のネットショップで購入できますが、電池端子は近い形のものが無いようなので、100均で代用できそうなものがないか探してみます。

【その2に続きます。】

2017年1月28日土曜日

【プラレール修理】DD51(新動力)の修理

今日はジャンク品に入っていた新動力の方のDD51を修理しました。

分解・洗浄

いつもの様に分解し、各種部品を中性洗剤を混ぜたぬるま湯の中で洗浄しました。
分解した際に気付いたのですが、後輪のギアが割れており、動力がスムースに伝わらない状況でした。
ギア修理用の部品を持ち合わせていないため、今回はギアの修理は見送ります。


ボディ本体のツメ作製

今回はヒートペンでの作業記録を残しておいたので掲載しておきます。

1 ボディに近い色のプラモデルのランナーを用意します。

ボディとランナー画像

2 ヒートペンでランナーを薄くしていきます。

ランナー成形画像1

3 ヒートペンで柔らかくなったランナーを盛りつけたり削り取ったりしてツメの形状に近づけます。

ランナー成形画像2

4 ヤスリで削って整形します。

ランナー整形画像

5 ボディに接着剤で仮付け後、ヒートペンで溶接。ヤスリで溶接跡を平らにし、接着剤で表面を滑らかにして完了です。

ツメ修理後画像


修理完了

部品を組み立ててプラレールDD51の修理完了です。
修理完了画像

修理したツメも、少し削り過ぎた箇所はありますが、いい感じに仕上がりました。
修理後ツメ拡大画像

後輪ギアが割れているためカクカクとした走りですが、今回の修理はこれで良しとします。

2017年1月22日日曜日

【プラレール修理】C11 SL函館大沼号の修理

今回はジャンク品に入っていたC11 171 SL函館大沼号を修理しました。

分解・清掃

左右の除煙板にシールを貼った跡があったので、シール跡に古くなったリップクリームを塗布、1日放置した後、ティッシュや綿棒で拭き取りました。
シール跡をきれいに取り除いた後、ボディやシャーシ等の部品を中性洗剤を混ぜたぬるま湯の中で洗浄しました。


モーター修理

ギアボックスを分解し、モーターに直接1.5Vをかけてみましたが動かないので、3Vにしてみたところ回転し始めたので、1分ほど慣らし回転させました。
その後、再度1.5Vをかけてみたところ無事モーターが動くようになりました。


修理完了?

部品を組み立てている最中に違和感を感じてネットで画像を検索してみたのですが、シャーシがかなり壊れているようです。
破損画像1 破損画像2

一応、この状態でも走行はできるのですが、シャーシの復元は困難なので、部品取りの素材か改造用の素材にでもしようかと思います。
状態画像

2017年1月15日日曜日

【プラレール修理】シンカリオン(旧版)E5はやぶさの修理

息子が買ってもらった、シンカリオン(旧版)E5はやぶさの頭部パネルのフックが折れてしまったので修理しました。

頭部パネル修理

折れたフックを接着した後、ヒートペンで溶接し補強しました。
頭部パネル画像

シンカリオン(旧版)E5はやぶさの頭部パネルは外れやすい設計になっており、外れてしまった時に元に戻すための説明書が入ってるので、その説明通りに元に戻します。
修理中画像


修理完了

シンカリオン(旧版)E5はやぶさ修理完了です。
修理完了画像