www.youtube.com
ネオディエンドライバーを制作しましたので制作の過程を紹介します。
今回はネオディケイドライバーと違いガワの加工、バーコード読み取り機の移植と難易度が跳ね上がっていますのでご注意ください。
ネオディケイドライバーは前回の記事にあります。
ネオディケイドライバー制作(DXディケイドライバー改造) - かっぱの覚え書き
※改造は自己責任でお願いします。
■必要な物
●DXディエンドライバーもしくはCSMディエンドライバー
私はメルカリで動かない物を1800円で買いましたが今は高いですね。
一つの案ですがCSM版を使う手もあります。こちらはバーコード読み取り機の移植が必要ないので楽なのですが値段が高いのでオススメできません。それに中が見たくて分解動画など探してみたのですが見つからなかったので本当に利用できるかは不明です。
●ゴセイパワー解放器 テンソウダー
必要なのはバーコード読み取り機のみです。近所のオフ系やプラネット系は300円以内で買えました。
同じメーカーのバーコードを使う玩具なら使えるとは思います。ラウザー系はバラしたことがないのでわからないですがディケイドライバーはネジ穴の位置が違うだけで作りは同じです。組み込む時は基板をギリギリまでカットするのでどれを使っても問題ないと思いますのでなるべく安いものをオススメします。失敗した時のダメージは最小にしたいですし。
●AE-ATMEGA328-MINI (Arduino Pro Mini上位互換)
http://akizukidenshi.com/catalog/g/gK-10347/
今回はこちらを組み込みました。スペースに余裕があるのとバーコード読み取り機を移植するので位置合わせなどで備え付けた状態でシリアルモニタを確認できるからです。
●FT-232RQ USBシリアル変換モジュール
http://akizukidenshi.com/catalog/g/gM-11007/
AE-ATMEGA328-MINIをパソコンに繋げる為に必要です。
●DFPlayer mini
http://akizukidenshi.com/catalog/g/gM-12544/
音声再生に使います。
●ダイソー モバイルバッテリー
単3電池2本でスマホを充電するタイプのものです。これの中の基板を昇圧回路として使用します。
小型スライドスイッチ 1回路2接点 SS12D01G4
http://akizukidenshi.com/catalog/g/gP-12723/
電源用スイッチです。元の電源スイッチは見てもらえればわかると思いますが特殊なので再利用しにくいです。色も赤ですしね。
●ディテクタスイッチESE22MH4XDK(10個入)
http://akizukidenshi.com/catalog/g/gP-05031/
スイッチを1個増やすので使用します。
●プラバン、プラ角、ピンバイスとかノコギリとかヤスリとか瞬着パテとか
プラモデルを作る一式プラスアルファみたいな感じです。ガワの加工に使用しました。
プラバンは0.3、0.5、1.0を使っています。どこにどの厚みを使ったかまでは正確に覚えていませんが一部切り落として蓋をしなきゃいけない部分もあるので0.3と1.0はあるといいと思います。0.3はバーコード読み取り機の配線がスライド時に干渉しないように貼り付けるのに使っています。ちなみに0.3ならダイソーでも取り扱っています。
瞬着パテは既製品でもいいですが瞬着とベビーパウダーでパテ代わりにしています。これに関してはネットで調べてください。
●その他
microSDカード
抵抗1K×2本
配線
ユニバーサル基板
ねじ(私はテンソウダーのを使いました)
■部品の加工
・まずはバーコード読み取り機の埋め込み場所を加工します。プラバンで高さを調整するので掘りすぎても大丈夫です。ただ平らにはしてください。
・バーコード読み取り機の基板加工です。今のままだと収まらないので両端を削ってこんな感じにします。
加工前です
・読み取りのフィルム部分です。フィルムに傷をつけないように注意してください。この部分に密着した状態で読み取るので傷が付くと安定した読み取りができません。
プラの部分ですが入りと戻りの端をRにしておかないとスライド時カードが引っかかって折れます。戻りの方はうまく削れなかったので0.3のプラバンを貼って引っかからないようにしています。
マスキングテープに線が2本書いてありますがフォトリフレクタの位置です。これを目安に読み取り位置を決めました。
下や横に色々な厚みのプラバンを入れての位置調整がやりやすいかと思います。
加工前です
・透明部の加工です。カードを戻した際に読み取り機に干渉しないよう削ります。硬く割れやすいので注意してください。
・カード収納部の加工です。
こちらも読み取り機に干渉しないように加工します。一部切断しプラバンを貼り付けてあります。これはCSM版を参考にしています。
・カード固定部です。これは元はナナメになっていました。このままスライドさせるとカード押し出し部が低い為、カードが滑って入っていきません。ですのでプラバンで高くしました。0.3ミリのプラバンを貼ったり角を落としたりして元の形状っぽくしてあります。
元画像です。
・スライド部加工です。読み取り機干渉部を切り落としプラバンを貼りました。
・よくわからない蓋の裏の加工。干渉部を削ります。
・スライド部下部、元基板のスイッチを押す出っ張りを削ります。
・電源スイッチ部。用意したスイッチが取り付けられるよう加工します。
■回路図
※AE-ATMEGA328-MINIはピンの位置が違います。注意してください。
回路図上でバーコード読み取り機は5Vに接続してあります。理由は試作の段階で5Vに繋げて問題なく動いていたため大丈夫だろうとそのまま制作したからです。ディケイドライバーを作り直している際に気づいたのですがラミネート加工のカードは3Vでは読めますが5Vでは読めません。直した方がいいとは思いますがカードは厚紙で自作している為、今のところ不便がないのでそのままししています。
それにディエンドライバーの方はバーコード読み取り機を移植してディケイドライバーと同じ条件ではない為、想定通りになるかわからなかったからというのもあります。
(本音は直すのめんどくさい直して動かなくなったらやだなです)
■ハードウェア
元基板は取り外し元基板以外はすべて利用します。
パーツを配線し基板裏にスライド用のディテクタスイッチを取り付け閉じた時に押しっぱなしになるようにプラバンを貼り付けます。
これが取り付けた状態になります。
次に音声関係です。
音声の流れですが
カード挿入音→スライド音→カメンライド→ライダー名→待機音→発動音→スライド音→カード引き抜き音
ネオディケイドライバーの方でも書きましたが再生にラグがあるので
カード挿入音→スライド音→カメンライドライダー名待機音→発動音→スライド音→カード引き抜き音
このように作成しました。
音声の分け方です
使うフォルダは番号が振ってあるものだけです。
これも分け方は同じでフォルダ1-20はクウガ-ジオウ、21はディエンド、22は使っていません。23がその他で分けています。
共通音声101.102.103.104(105.106はディエンドフォルダのみです)はすべてのフォルダに入っています。
ネオディケイドライバーの音声ルールはこちらでは使えないので(ディケイドはカード名後半読み上げ、ディエンドは前半読み上げの為)
なるべく管理しやすいように番号分けしてあります。
■ソフトウェア
しつこいようですがバーコード読み取りのプログラムは私が作ったものではありません。知恵袋に投稿して作っていただいたものです。
ご了承ください。
arduinoでDXディケイドライバーの読み取り部分を再現しようと... - Yahoo!知恵袋
注意点ですがディエンドライバーはバーコード読み取り方向が逆です。
キバのカードで説明すると
ディケイドライバー 2進数10101101101 10進数1389
ディエンドライバー 2進数01101101010 10進数874
※読み取り開始は下のクロックからなのでディエンドライバーの上のデータバーコードの一番左は飛ばしています。その分同じ桁数にする為最後を0にしています。
このようにまったく別物になります。
ですのでディケイドライバーの数値は利用できません。。
主要なものは入れておきましたがすべてではないので大変でしょうが追加する際はご自分でお願いします。
とはいえ2進数のリストさえあればエクセルで数字ひっくり返して一気にサイトで変換できると思います。
それではスケッチの中身の説明です。
はじめにですが今回のスケッチ決められた動作以外の動きをすると止まります。
例えば
カード挿入→前にスライド→トリガー→この間はトリガー連発ok→後ろにスライド→カード引き抜き
これが一連の動作になっておりこれ以外の動作を差し込むと止まります。
私の知識ではこれが限界です。。
●40と44行目のフォトリフレクタの数値は自分の環境に合せて設定してください。
●80、81行目の//を外せばバーコードの数値がシリアルモニタで確認できますので利用しバーコード読み取り機の位置を調整してください。
私はこんな感じでやりました。
●231、232行目は以前作ったポンプアクションモードを残したままです。カードがない状態でトリガーを押しながら前にスライドさせるとモードになります。//を外せば利用できます。
●カードが入っていない状態でトリガー長押しでBGM再生です。
●カイジンライドディエンドでレジェンドライダーアナザーモード、通常ディエンドで元に戻ります。
●バーコードが登録してあるのは主要の一部です。
●今回音量調整はつけていません。セロテープで調整しています。つけるのでしたらネオディケイドライバーのスケッチを参照してください。
下記のサイトを参考にしネオディケイドライバー基準でバーコードの数値を登録しました。
※ただしディエンドライバーは読む方向が逆です。
DXディケイドライバーまとめ
https://sites.google.com/site/dxdikeidoraiba/tips
2進数→10進数変換ですが大量に変換したい場合は下記のサイトが便利です。
2~36進数から10進数へ進数変換(基数変換)
http://alphasis.info/2013/03/webapp-radix-converter-to10/
■塗装
簡単に説明しますが
ホワイトサーフェーサー 缶スプレー
ライトブルー 缶スプレー
ゴールド ガンダムマーカーエアブラシシステム
シルバー ガンダムマーカーエアブラシシステム
ブラック アクリジョン筆塗り
クリアーつやあり 缶スプレー
エンブレム部 シルバーアクリジョン筆塗り
塗装後です。
これで解説は終了です。もう少し動作をスマートに再現出来ればかっこいいのですが今後の課題ということで。ここまで読んでいただいてありがとうございました。
何個かネオディエンドライバー関係の動画をあげていますのでよろしければご観覧ください。
www.youtube.com
www.youtube.com
www.youtube.com
■スケッチ
- //ネオディエンドライバー
- #define card_in 101 //カードIN
- #define card_unplug 102 //カード引き抜き
- #define gunshot_sound 103 //銃撃音
- #define opening_and_closing 104//スライド音
- #define bgm_on 105 //BGM再生
- int reading_sw;
- int ride_sw;
- #define reading_pin 3 //読み取り開始ピン3
- #define ride_pin 2 //カメンライドピン2
- #define slide_pin 11//スライドピン11
- int folder=21;
- int file;
- int card_off;
- int slide_on;
- int start_up;
- int rider_1,rider_2,rider_3;
- int another,kaijin;
- int open_clos=0;//バーコードデータ消す
- //長押し用
- #define PUSH_SHORT 300000
- //---------------------------バーコード読み取り---------------------------------------
- unsigned char bitcnt = 0;
- unsigned int bardat=0;
- #define bwhite 0
- #define bblack 1
- unsigned char ck_read( void ){
- if ( analogRead( A0 ) > 55 ){ return bblack; }//
- return bwhite;
- }
- unsigned char dat_read( void ){
- if ( analogRead( A1 ) > 55 ){ return bblack; }
- return bwhite;
- }
- void bardat_read( void ){ bardat = ( bardat<<1 ) + dat_read(); }
- void wb_read( void){
- while( ck_read() == bwhite ); // 白
- bardat_read();
- }
- void bw_read( void ){
- while( ck_read() == bblack ); // 黒
- bardat_read();
- }
- //------------------------------------------------------------------------
- //バーコード出力----------------------------------------------------------------------
- void barcode_read()
- {
- bardat = 0; bitcnt =0;
- while( ck_read() == bwhite ); // 白
- while( ck_read() == bblack ); // 黒
- bw_read(); // bit 0
- wb_read(); // bit 1
- bw_read(); // bit 2
- wb_read(); // bit 3
- bw_read(); // bit 4
- wb_read(); // bit 5
- bw_read(); // bit 6
- wb_read(); // bit 7
- bw_read(); // bit 8
- wb_read(); // bit 9
- bw_read(); // bit 10
- //Serial.println( bardat , BIN );
- //Serial.println( bardat );
- file=opening_and_closing;mp3();delay(700);//カード挿入音
- switch(bardat){//
- //カメンライド
- case 994:{folder=1;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//クウガ
-
- case 1920:{folder=1;file=2;mp3();file=11;} break;//クウガアルティメット
- case 400:{folder=1;file=3;mp3();file=11;} break;//クウガライジングアルティメット
- case 972:{folder=2;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//アギト
- case 1856:{folder=2;file=2;mp3();file=11;} break;//アギトシャイニング
- case 1824:{folder=3;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//龍騎
- case 448:{folder=3;file=2;mp3();file=11;} break;//龍騎サバイブ
- case 1788:{folder=4;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ファイズ
- case 1696:{folder=4;file=2;mp3();file=11;} break;//ファイズブラスター
- case 112:{folder=5;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ブレイド
- case 1632:{folder=5;file=2;mp3();file=11;} break;//ブレイドキング
- case 38:{folder=6;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//響鬼
- case 352:{folder=6;file=2;mp3();file=11;} break;//装甲響鬼
- case 388:{folder=7;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//カブト
- case 1808:{folder=7;file=2;mp3();file=11;} break;//カブトハイパー
- case 494:{folder=8;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//電王
- case 224:{folder=8;file=2;mp3();file=11;} break;//電王ライナー
- case 336:{folder=8;file=3;mp3();file=11;} break;//電王超クライマックス
- case 874:{folder=9;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//キバ
- case 1680:{folder=9;file=2;mp3();file=11;} break;//キバエンペラー
- case 748:{folder=10;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ディケイド
- case 768:{folder=10;file=2;mp3();file=11;} break;//ディケイドコンプリート
- case 1998:{folder=11;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//W
- case 164:{folder=11;file=2;mp3();file=11;} break;//Wエクストリーム
- case 1070:{folder=12;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//オーズ
- case 1420:{folder=12;file=2;mp3();file=11;} break;//オーズプトティラ
- case 814:{folder=13;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//フォーゼ
- case 76:{folder=13;file=2;mp3();file=11;} break;//フォーゼコズミック
- case 1966:{folder=14;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ウィザード
- case 1324:{folder=14;file=2;mp3();file=11;} break;//ウィザードインフィニティ
- case 670:{folder=15;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//鎧武
- case 28:{folder=15;file=2;mp3();file=11;} break;//鎧武極
- case 1758:{folder=16;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ドライブ
- case 732:{folder=16;file=2;mp3();file=11;} break;//ドライブトライドロン
- case 576:{folder=17;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ゴースト
- case 194:{folder=17;file=2;mp3();file=11;} break;//ゴーストムゲン
- case 1584:{folder=18;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//エグゼイド
- case 98:{folder=18;file=2;mp3();file=11;} break;//エグゼイドムテキ
- case 952:{folder=19;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ビルド
- case 146:{folder=19;file=2;mp3();file=11;} break;//ビルドジーニアス
- case 888:{folder=20;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ジオウ
- case 1668:{folder=20;file=2;mp3();file=11;} break;//グランドジオウ
- case 304:{folder=21;file=1;mp3();file=11;another=0;} break;//ディエンド
- case 1392:{folder=21;file=1;mp3();file=12;} break;//ディエンドコンプリート
- //オリジナルカメンライド
- case 1110:{folder=23;file=1;mp3();file=11;} break;//モサチェンジャー
- case 78:{folder=23;file=2;mp3();file=12;} break;//ルパンレンジャー
- case 1502:{folder=23;file=3;mp3();file=13;} break;//パトレンジャー
- case 1316:{folder=23;file=4;mp3();file=14;} break;//ゼロワン
- //ファイナルアタックライド
- case 1190:{folder=1,file=4,mp3();file=13;} break;//ファイナルアタックライドクウガ
- case 84:{folder=2,file=3,mp3();file=13;} break;//ファイナルアタックライドアアアアギト
- case 984:{folder=3,file=3,mp3();file=13;} break;//ファイナルアタックライドリュリュリュ龍騎
- case 1202:{folder=4,file=3,mp3();file=13;} break;//ファイナルアタックライドファファファファイズ
- case 528:{folder=5,file=3,mp3();file=13;} break;//ファイナルアタックライドブブブブレイド
- case 1534:{folder=6,file=3,mp3();file=13;} break;//ファイナルアタックライドヒヒヒ響鬼
- case 1608:{folder=7,file=3,mp3();file=13;} break;//ファイナルアタックライドカカカカブト
- case 1794:{folder=8,file=4,mp3();file=13;} break;//ファイナルアタックライドデデデ電王
- case 1194:{folder=9,file=3,mp3();file=13;} break;//ファイナルアタックライドキキキキバ
- case 686:{folder=10,file=3,mp3();file=13;} break;//ファイナルアタックライドディディディディケイド
- case 882:{folder=11,file=3,mp3();file=13;} break;//ファイナルアタックライドダダダW
- case 1546:{folder=12,file=3,mp3();file=13;} break;//ファイナルアタックライドオオオオーズ
- case 1226:{folder=13,file=3,mp3();file=13;} break;//ファイナルアタックライドフォフォフォフォーゼ
- case 1178:{folder=14,file=3,mp3();file=13;} break;//ファイナルアタックライドウィウィウィウィザード
- case 1414:{folder=15,file=3,mp3();file=13;} break;//ファイナルアタックライドガガガ鎧武
- case 22:{folder=16,file=3,mp3();file=13;} break;//ファイナルアタックライドドドドドライブ
- case 1974:{folder=17,file=3,mp3();file=13;} break;//ファイナルアタックライドゴゴゴゴースト
- case 1782:{folder=18,file=3,mp3();file=13;} break;//ファイナルアタックライドエエエエグゼイド
- case 1166:{folder=19,file=3,mp3();file=13;} break;//ファイナルアタックライドビビビビルド
- case 1504:{folder=20,file=3,mp3();file=13;} break;//ファイナルアタックライドジジジジオウ
- case 176:{folder=21,file=8,mp3();file=13;} break;//ファイナルアタックライドディディディディエンド
- //アタックライド
- case 700:{folder=6,file=3;mp3();file=31;} break;//アタックライド音撃棒烈火
- case 1228:{folder=21,file=3;mp3();file=13;} break;//アタックライドイリュージョン
- case 1196:{folder=21,file=4;mp3();file=13;} break;//アタックライドブラスト
- case 1132:{folder=21,file=5;mp3();file=13;} break;//アタックライドインビジブル
- case 1250:{folder=21,file=6;mp3();file=13;} break;//アタックライドクロスアタック
- case 884:{folder=21,file=7;mp3();file=13;} break;//アタックライドバリア
- //カイジンライド
- case 1456:{folder=22;file=21;mp3();file=22;another=1;} break;//カイジンライドディエンド
- }
- reading_sw=1;
- delay(1000);
- }
- //カメンライド------------------------------------------------------------------------
- void kamen_ride()
- {
- // Serial.println("カメンライド");
- if(digitalRead(ride_pin) == LOW){
- delay(50);
- mp3();
- delay(1000);
- while(digitalRead(reading_pin) == HIGH){
- //Serial.println("発動後スライド前");
- if(digitalRead(ride_pin) == LOW){file=gunshot_sound;mp3();}//銃撃音
- }
- while(digitalRead(reading_pin) == LOW){
- //Serial.println("発動後スライド後ろ");
- if(slide_on == 0){if(digitalRead(slide_pin) == LOW){file=opening_and_closing;mp3();slide_on=1;}}//スライド音
- if(digitalRead(ride_pin) == LOW){file=gunshot_sound;mp3();}//銃撃音
- }
- file=card_unplug;mp3();
- //Serial.println("カード引き抜き");
- reading_sw=0;
- slide_on=0;
- }
- }
- //------------------------------------------------------------------------------------
- //----------------------------オールライダーモード----------------------------------------
- void all_rider(){
- folder=1;
- while(rider_1 == 0){
- while(rider_2 == 0){file=opening_and_closing;mp3();delay(700);file=1;mp3();rider_2=1;}
- if(digitalRead(slide_pin) == LOW){ delay(700);if(digitalRead(slide_pin) == HIGH){folder++;rider_2=0;}}
- if(digitalRead(ride_pin) == LOW){delay(50);file=11;mp3();}
- if(folder > 21){folder=1;}
- }
- }
- //----------------------------------------------------------------------------------------------
- //-----------------------------------------長押し判定------------------------------------------
- void nagaoshi(){
- //int gauge = 0;
- unsigned long gauge = 0;
- while (!digitalRead(ride_pin))
- {gauge++;}
- //Serial.print(gauge);
- if (gauge < PUSH_SHORT){
- //Serial.println("ボタン単押し");
- file=gunshot_sound;mp3();//銃撃音
- }else{
- //Serial.println("ボタン長押し");
- folder=21;file=bgm_on;mp3();}//BGM音
- //if(digitalRead(slide_pin) == HIGH){Serial.println("オールライダー");
- //all_rider();
- //}
- }
- //---------------------------------------------------------------------------------------------
- //MP3再生---------------------------------------------------------------------------
- void mp3()
- {
- //ファイル指定再生
- Serial.write(0x7E);
- Serial.write(0xFF);
- Serial.write(0x06);
- Serial.write(0x0F); //「フォルダ指定再生」コマンド
- Serial.write((byte)0);
- Serial.write(folder); //この例では、「folder」という変数が指定される
- Serial.write(file); //この例では、「file.mp3」という変数のmp3が指定される
- Serial.write(0xEF);
- delay(10);
- }
- //----------------------------------------------------------------------------------
- void setup() {
- Serial.begin( 9600 );
- pinMode(reading_pin,INPUT_PULLUP); //読み取り開始ピン
- pinMode(ride_pin,INPUT_PULLUP); //カメンライドピン
- pinMode(slide_pin,INPUT_PULLUP); //スライドピン
- folder=21;file=106;mp3();//起動音
- }
- void loop() {
- //mode_sleep();
- if(reading_sw == 0){
- if(digitalRead(ride_pin) == LOW){nagaoshi();}//銃撃音
- }
- if(card_off == 0){
- if(digitalRead(reading_pin) == LOW){file=card_in;mp3();delay(700);card_off=1;}}//カード挿入音
- if(digitalRead(reading_pin) == HIGH){card_off=0;}
- if(reading_sw == 0){if(digitalRead(slide_pin) == HIGH){barcode_read();}}//バーコード読み取り
- if( reading_sw == 1){ kamen_ride();}//発動
- //Serial.println(digitalRead(reading_pin));//読み取り開始ピン
- //Serial.println(digitalRead(ride_pin));//カメンライドピン
- //Serial.println(digitalRead(slide_pin));//スライドピン
- }