かっぱの覚え書き

とりあえずなんかメモ書きとか

ネオディエンドライバー制作(DXディエンドライバー改造)

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本でスマホを充電するタイプのものです。これの中の基板を昇圧回路として使用します。
f:id:une-lettre-arrive:20190903192430p:plain
f:id:une-lettre-arrive:20190903224222j:plain

小型スライドスイッチ 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本
配線
ユニバーサル基板
ねじ(私はテンソウダーのを使いました)

■部品の加工
・まずはバーコード読み取り機の埋め込み場所を加工します。プラバンで高さを調整するので掘りすぎても大丈夫です。ただ平らにはしてください。
f:id:une-lettre-arrive:20190902222435j:plain

・バーコード読み取り機の基板加工です。今のままだと収まらないので両端を削ってこんな感じにします。
f:id:une-lettre-arrive:20190902222526j:plain
加工前です
f:id:une-lettre-arrive:20190902223214j:plain

・読み取りのフィルム部分です。フィルムに傷をつけないように注意してください。この部分に密着した状態で読み取るので傷が付くと安定した読み取りができません。
プラの部分ですが入りと戻りの端をRにしておかないとスライド時カードが引っかかって折れます。戻りの方はうまく削れなかったので0.3のプラバンを貼って引っかからないようにしています。
マスキングテープに線が2本書いてありますがフォトリフレクタの位置です。これを目安に読み取り位置を決めました。
下や横に色々な厚みのプラバンを入れての位置調整がやりやすいかと思います。
f:id:une-lettre-arrive:20190902222606j:plain
加工前です
f:id:une-lettre-arrive:20190902223249j:plain

・透明部の加工です。カードを戻した際に読み取り機に干渉しないよう削ります。硬く割れやすいので注意してください。
f:id:une-lettre-arrive:20190902222658j:plain

・カード収納部の加工です。
こちらも読み取り機に干渉しないように加工します。一部切断しプラバンを貼り付けてあります。これはCSM版を参考にしています。
f:id:une-lettre-arrive:20190902222729j:plain

・カード固定部です。これは元はナナメになっていました。このままスライドさせるとカード押し出し部が低い為、カードが滑って入っていきません。ですのでプラバンで高くしました。0.3ミリのプラバンを貼ったり角を落としたりして元の形状っぽくしてあります。
f:id:une-lettre-arrive:20190902222754j:plain
元画像です。
f:id:une-lettre-arrive:20190902223814j:plain

・スライド部加工です。読み取り機干渉部を切り落としプラバンを貼りました。
f:id:une-lettre-arrive:20190902223733j:plain

・よくわからない蓋の裏の加工。干渉部を削ります。
f:id:une-lettre-arrive:20190902223014j:plain

・スライド部下部、元基板のスイッチを押す出っ張りを削ります。
f:id:une-lettre-arrive:20190902223055j:plain

・電源スイッチ部。用意したスイッチが取り付けられるよう加工します。
f:id:une-lettre-arrive:20190902223126j:plain


■回路図
f:id:une-lettre-arrive:20190903225445j:plain
※AE-ATMEGA328-MINIはピンの位置が違います。注意してください。

回路図上でバーコード読み取り機は5Vに接続してあります。理由は試作の段階で5Vに繋げて問題なく動いていたため大丈夫だろうとそのまま制作したからです。ディケイドライバーを作り直している際に気づいたのですがラミネート加工のカードは3Vでは読めますが5Vでは読めません。直した方がいいとは思いますがカードは厚紙で自作している為、今のところ不便がないのでそのままししています。
それにディエンドライバーの方はバーコード読み取り機を移植してディケイドライバーと同じ条件ではない為、想定通りになるかわからなかったからというのもあります。
(本音は直すのめんどくさい直して動かなくなったらやだなです)

■ハードウェア
元基板は取り外し元基板以外はすべて利用します。
パーツを配線し基板裏にスライド用のディテクタスイッチを取り付け閉じた時に押しっぱなしになるようにプラバンを貼り付けます。
f:id:une-lettre-arrive:20190902230841j:plain
f:id:une-lettre-arrive:20190902232340j:plain

これが取り付けた状態になります。
f:id:une-lettre-arrive:20190902231546j:plain

次に音声関係です。
音声の流れですが

カード挿入音→スライド音→カメンライド→ライダー名→待機音→発動音→スライド音→カード引き抜き音

ネオディケイドライバーの方でも書きましたが再生にラグがあるので
カード挿入音→スライド音→カメンライドライダー名待機音→発動音→スライド音→カード引き抜き音
このように作成しました。

音声の分け方です
f:id:une-lettre-arrive:20191019223349j:plain
f:id:une-lettre-arrive:20191019223402j:plain
f:id:une-lettre-arrive:20191019223415j:plain
使うフォルダは番号が振ってあるものだけです。

これも分け方は同じでフォルダ1-20はクウガ-ジオウ、21はディエンド、22は使っていません。23がその他で分けています。
共通音声101.102.103.104(105.106はディエンドフォルダのみです)はすべてのフォルダに入っています。

ネオディケイドライバーの音声ルールはこちらでは使えないので(ディケイドはカード名後半読み上げ、ディエンドは前半読み上げの為)
なるべく管理しやすいように番号分けしてあります。

■ソフトウェア
しつこいようですがバーコード読み取りのプログラムは私が作ったものではありません。知恵袋に投稿して作っていただいたものです。
ご了承ください。
arduinoでDXディケイドライバーの読み取り部分を再現しようと... - Yahoo!知恵袋

注意点ですがディエンドライバーはバーコード読み取り方向が逆です。
キバのカードで説明すると
f:id:une-lettre-arrive:20190829001216j:plain
ディケイドライバー 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/

■塗装
簡単に説明しますが
ホワイトサーフェーサー 缶スプレー
ライトブルー      缶スプレー
ゴールド        ガンダムマーカーエアブラシシステム
シルバー        ガンダムマーカーエアブラシシステム
ブラック        アクリジョン筆塗り
クリアーつやあり    缶スプレー
エンブレム部 シルバーアクリジョン筆塗り
塗装後です。
f:id:une-lettre-arrive:20190903230426j:plain

これで解説は終了です。もう少し動作をスマートに再現出来ればかっこいいのですが今後の課題ということで。ここまで読んでいただいてありがとうございました。

何個かネオディエンドライバー関係の動画をあげていますのでよろしければご観覧ください。
www.youtube.com
www.youtube.com
www.youtube.com



■スケッチ

  1. //ネオディエンドライバー
  2. #define card_in 101 //カードIN
  3. #define card_unplug 102 //カード引き抜き
  4. #define gunshot_sound 103 //銃撃音
  5. #define opening_and_closing 104//スライド音
  6. #define bgm_on 105 //BGM再生
  7. int reading_sw;
  8. int ride_sw;
  9. #define reading_pin 3 //読み取り開始ピン3
  10. #define ride_pin 2 //カメンライドピン2
  11. #define slide_pin 11//スライドピン11
  12. int folder=21;
  13. int file;
  14. int card_off;
  15. int slide_on;
  16. int start_up;
  17. int rider_1,rider_2,rider_3;
  18. int another,kaijin;
  19. int open_clos=0;//バーコードデータ消す
  20. //長押し用
  21. #define PUSH_SHORT 300000
  22. //---------------------------バーコード読み取り---------------------------------------
  23. unsigned char bitcnt = 0;
  24. unsigned int bardat=0;
  25. #define bwhite 0
  26. #define bblack 1
  27. unsigned char ck_read( void ){
  28. if ( analogRead( A0 ) > 55 ){ return bblack; }//
  29. return bwhite;
  30. }
  31. unsigned char dat_read( void ){
  32. if ( analogRead( A1 ) > 55 ){ return bblack; }
  33. return bwhite;
  34. }
  35. void bardat_read( void ){ bardat = ( bardat<<1 ) + dat_read(); }
  36. void wb_read( void){
  37. while( ck_read() == bwhite ); // 白
  38. bardat_read();
  39. }
  40. void bw_read( void ){
  41. while( ck_read() == bblack ); // 黒
  42. bardat_read();
  43. }
  44. //------------------------------------------------------------------------
  45. //バーコード出力----------------------------------------------------------------------
  46. void barcode_read()
  47. {
  48. bardat = 0; bitcnt =0;
  49. while( ck_read() == bwhite ); // 白
  50. while( ck_read() == bblack ); // 黒
  51. bw_read(); // bit 0
  52. wb_read(); // bit 1
  53. bw_read(); // bit 2
  54. wb_read(); // bit 3
  55. bw_read(); // bit 4
  56. wb_read(); // bit 5
  57. bw_read(); // bit 6
  58. wb_read(); // bit 7
  59. bw_read(); // bit 8
  60. wb_read(); // bit 9
  61. bw_read(); // bit 10
  62. //Serial.println( bardat , BIN );
  63. //Serial.println( bardat );
  64. file=opening_and_closing;mp3();delay(700);//カード挿入音
  65. switch(bardat){//
  66. //カメンライド
  67.  case 994:{folder=1;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//クウガ
  68.  
  69.  case 1920:{folder=1;file=2;mp3();file=11;} break;//クウガアルティメット
  70.  case 400:{folder=1;file=3;mp3();file=11;} break;//クウガライジングアルティメット
  71.  case 972:{folder=2;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//アギト
  72.  case 1856:{folder=2;file=2;mp3();file=11;} break;//アギトシャイニング
  73.  case 1824:{folder=3;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//龍騎
  74.  case 448:{folder=3;file=2;mp3();file=11;} break;//龍騎サバイブ
  75.  case 1788:{folder=4;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ファイズ
  76.  case 1696:{folder=4;file=2;mp3();file=11;} break;//ファイズブラスター
  77.  case 112:{folder=5;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ブレイド
  78.  case 1632:{folder=5;file=2;mp3();file=11;} break;//ブレイドキング
  79.  case 38:{folder=6;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//響鬼
  80.  case 352:{folder=6;file=2;mp3();file=11;} break;//装甲響鬼
  81.  case 388:{folder=7;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//カブト
  82.  case 1808:{folder=7;file=2;mp3();file=11;} break;//カブトハイパー
  83.  case 494:{folder=8;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//電王
  84.  case 224:{folder=8;file=2;mp3();file=11;} break;//電王ライナー
  85.  case 336:{folder=8;file=3;mp3();file=11;} break;//電王超クライマックス
  86.  case 874:{folder=9;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//キバ
  87.  case 1680:{folder=9;file=2;mp3();file=11;} break;//キバエンペラー
  88.  case 748:{folder=10;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ディケイド
  89.  case 768:{folder=10;file=2;mp3();file=11;} break;//ディケイドコンプリート
  90.  case 1998:{folder=11;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//W
  91.  case 164:{folder=11;file=2;mp3();file=11;} break;//Wエクストリーム
  92.  case 1070:{folder=12;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//オーズ
  93.  case 1420:{folder=12;file=2;mp3();file=11;} break;//オーズプトティラ
  94.  case 814:{folder=13;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//フォーゼ
  95.  case 76:{folder=13;file=2;mp3();file=11;} break;//フォーゼコズミック
  96.  case 1966:{folder=14;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ウィザード
  97.  case 1324:{folder=14;file=2;mp3();file=11;} break;//ウィザードインフィニティ
  98.  case 670:{folder=15;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//鎧武
  99.  case 28:{folder=15;file=2;mp3();file=11;} break;//鎧武極
  100.  case 1758:{folder=16;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ドライブ
  101.  case 732:{folder=16;file=2;mp3();file=11;} break;//ドライブトライドロン
  102.  case 576:{folder=17;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ゴースト
  103.  case 194:{folder=17;file=2;mp3();file=11;} break;//ゴーストムゲン
  104.  case 1584:{folder=18;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//エグゼイド
  105.  case 98:{folder=18;file=2;mp3();file=11;} break;//エグゼイドムテキ
  106.  case 952:{folder=19;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ビルド
  107.  case 146:{folder=19;file=2;mp3();file=11;} break;//ビルドジーニアス
  108.  case 888:{folder=20;if(another == 1){file=9;mp3();}else{file=1;mp3();}file=11;} break;//ジオウ
  109.  case 1668:{folder=20;file=2;mp3();file=11;} break;//グランドジオウ
  110.  case 304:{folder=21;file=1;mp3();file=11;another=0;} break;//ディエンド
  111.  case 1392:{folder=21;file=1;mp3();file=12;} break;//ディエンドコンプリート
  112.  //オリジナルカメンライド
  113.  case 1110:{folder=23;file=1;mp3();file=11;} break;//モサチェンジャー
  114.  case 78:{folder=23;file=2;mp3();file=12;} break;//ルパンレンジャー
  115.  case 1502:{folder=23;file=3;mp3();file=13;} break;//パトレンジャー
  116.  case 1316:{folder=23;file=4;mp3();file=14;} break;//ゼロワン
  117.  //ファイナルアタックライド
  118. case 1190:{folder=1,file=4,mp3();file=13;} break;//ファイナルアタックライドクウガ
  119. case 84:{folder=2,file=3,mp3();file=13;} break;//ファイナルアタックライドアアアアギト
  120. case 984:{folder=3,file=3,mp3();file=13;} break;//ファイナルアタックライドリュリュリュ龍騎
  121. case 1202:{folder=4,file=3,mp3();file=13;} break;//ファイナルアタックライドファファファファイズ
  122. case 528:{folder=5,file=3,mp3();file=13;} break;//ファイナルアタックライドブブブブレイド
  123. case 1534:{folder=6,file=3,mp3();file=13;} break;//ファイナルアタックライドヒヒヒ響鬼
  124. case 1608:{folder=7,file=3,mp3();file=13;} break;//ファイナルアタックライドカカカカブト
  125. case 1794:{folder=8,file=4,mp3();file=13;} break;//ファイナルアタックライドデデデ電王
  126. case 1194:{folder=9,file=3,mp3();file=13;} break;//ファイナルアタックライドキキキキバ
  127. case 686:{folder=10,file=3,mp3();file=13;} break;//ファイナルアタックライドディディディディケイド
  128. case 882:{folder=11,file=3,mp3();file=13;} break;//ファイナルアタックライドダダダW
  129. case 1546:{folder=12,file=3,mp3();file=13;} break;//ファイナルアタックライドオオオオーズ
  130. case 1226:{folder=13,file=3,mp3();file=13;} break;//ファイナルアタックライドフォフォフォフォーゼ
  131. case 1178:{folder=14,file=3,mp3();file=13;} break;//ファイナルアタックライドウィウィウィウィザード
  132. case 1414:{folder=15,file=3,mp3();file=13;} break;//ファイナルアタックライドガガガ鎧武
  133. case 22:{folder=16,file=3,mp3();file=13;} break;//ファイナルアタックライドドドドドライブ
  134. case 1974:{folder=17,file=3,mp3();file=13;} break;//ファイナルアタックライドゴゴゴゴースト
  135. case 1782:{folder=18,file=3,mp3();file=13;} break;//ファイナルアタックライドエエエエグゼイド
  136. case 1166:{folder=19,file=3,mp3();file=13;} break;//ファイナルアタックライドビビビビルド
  137. case 1504:{folder=20,file=3,mp3();file=13;} break;//ファイナルアタックライドジジジジオウ
  138. case 176:{folder=21,file=8,mp3();file=13;} break;//ファイナルアタックライドディディディディエンド
  139. //アタックライド
  140. case 700:{folder=6,file=3;mp3();file=31;} break;//アタックライド音撃棒烈火
  141. case 1228:{folder=21,file=3;mp3();file=13;} break;//アタックライドイリュージョン
  142. case 1196:{folder=21,file=4;mp3();file=13;} break;//アタックライドブラスト
  143. case 1132:{folder=21,file=5;mp3();file=13;} break;//アタックライドインビジブル
  144. case 1250:{folder=21,file=6;mp3();file=13;} break;//アタックライドクロスアタック
  145. case 884:{folder=21,file=7;mp3();file=13;} break;//アタックライドバリア
  146. //カイジンライド
  147. case 1456:{folder=22;file=21;mp3();file=22;another=1;} break;//カイジンライドディエンド
  148. }
  149. reading_sw=1;
  150. delay(1000);
  151. }
  152. //カメンライド------------------------------------------------------------------------
  153. void kamen_ride()
  154. {
  155.  // Serial.println("カメンライド");
  156.    if(digitalRead(ride_pin) == LOW){
  157.     delay(50);
  158.  mp3();
  159.  delay(1000);
  160.  while(digitalRead(reading_pin) == HIGH){
  161.   //Serial.println("発動後スライド前");
  162.  if(digitalRead(ride_pin) == LOW){file=gunshot_sound;mp3();}//銃撃音
  163.  }
  164.  while(digitalRead(reading_pin) == LOW){
  165.   //Serial.println("発動後スライド後ろ");
  166.  if(slide_on == 0){if(digitalRead(slide_pin) == LOW){file=opening_and_closing;mp3();slide_on=1;}}//スライド音
  167.  if(digitalRead(ride_pin) == LOW){file=gunshot_sound;mp3();}//銃撃音
  168.  }
  169. file=card_unplug;mp3();
  170. //Serial.println("カード引き抜き");
  171. reading_sw=0;
  172. slide_on=0;
  173. }
  174. }
  175. //------------------------------------------------------------------------------------
  176. //----------------------------オールライダーモード----------------------------------------
  177. void all_rider(){
  178.   folder=1;
  179. while(rider_1 == 0){
  180.   while(rider_2 == 0){file=opening_and_closing;mp3();delay(700);file=1;mp3();rider_2=1;}
  181.   if(digitalRead(slide_pin) == LOW){ delay(700);if(digitalRead(slide_pin) == HIGH){folder++;rider_2=0;}}
  182.   if(digitalRead(ride_pin) == LOW){delay(50);file=11;mp3();}
  183.   if(folder > 21){folder=1;}
  184.   }
  185. }
  186. //----------------------------------------------------------------------------------------------
  187. //-----------------------------------------長押し判定------------------------------------------
  188. void nagaoshi(){
  189.   //int gauge = 0;
  190.   unsigned long gauge = 0;
  191.   while (!digitalRead(ride_pin))
  192.   {gauge++;}
  193.   //Serial.print(gauge);
  194.   if (gauge < PUSH_SHORT){
  195.     //Serial.println("ボタン単押し");
  196.     file=gunshot_sound;mp3();//銃撃音
  197.     }else{
  198.     //Serial.println("ボタン長押し");
  199.     folder=21;file=bgm_on;mp3();}//BGM音
  200.     //if(digitalRead(slide_pin) == HIGH){Serial.println("オールライダー");
  201.     //all_rider();
  202.     //}
  203.   }
  204. //---------------------------------------------------------------------------------------------
  205. //MP3再生---------------------------------------------------------------------------
  206. void mp3()
  207. {
  208.    //ファイル指定再生
  209.   Serial.write(0x7E);
  210.   Serial.write(0xFF);
  211.   Serial.write(0x06);
  212.   Serial.write(0x0F); //「フォルダ指定再生」コマンド
  213.   Serial.write((byte)0);
  214.   Serial.write(folder); //この例では、「folder」という変数が指定される
  215.   Serial.write(file); //この例では、「file.mp3」という変数のmp3が指定される
  216.   Serial.write(0xEF);
  217.   delay(10);
  218. }
  219. //----------------------------------------------------------------------------------
  220. void setup() {
  221. Serial.begin( 9600 );
  222. pinMode(reading_pin,INPUT_PULLUP); //読み取り開始ピン
  223. pinMode(ride_pin,INPUT_PULLUP); //カメンライドピン
  224. pinMode(slide_pin,INPUT_PULLUP); //スライドピン
  225. folder=21;file=106;mp3();//起動音
  226. }
  227. void loop() {
  228. //mode_sleep();
  229. if(reading_sw == 0){
  230. if(digitalRead(ride_pin) == LOW){nagaoshi();}//銃撃音
  231. }
  232. if(card_off == 0){
  233. if(digitalRead(reading_pin) == LOW){file=card_in;mp3();delay(700);card_off=1;}}//カード挿入音
  234. if(digitalRead(reading_pin) == HIGH){card_off=0;}
  235. if(reading_sw == 0){if(digitalRead(slide_pin) == HIGH){barcode_read();}}//バーコード読み取り
  236. if( reading_sw == 1){ kamen_ride();}//発動
  237. //Serial.println(digitalRead(reading_pin));//読み取り開始ピン
  238. //Serial.println(digitalRead(ride_pin));//カメンライドピン
  239. //Serial.println(digitalRead(slide_pin));//スライドピン
  240. }

ネオディケイドライバー制作(DXディケイドライバー改造)

ネオディケイドライバーを作ったので改造解説をしようと思います。

※改造は自己責任で行ってください

■必要な物
●DXディケイドライバー
今の所お店もネットオークションも高いのですがジオウが終わったのでレジェンド系もそろそろ値段的に落ち着くかなと。というか落ち着いて欲しい。

●ATTINY85-20PU
http://akizukidenshi.com/catalog/g/gI-09573/
小型化省電力化の為にこちらを使用しました。

●DFPlayer mini
http://akizukidenshi.com/catalog/g/gM-12544/
音声再生に使います。

●5V出力昇圧DCDCコンバーター
http://akizukidenshi.com/catalog/g/gK-13065/
乾電池2本3Vを5Vに昇圧する為に使用。

●PAM8012使用2ワットD級アンプモジュール
http://akizukidenshi.com/catalog/g/gK-08217/
こちらのアンプですが通常の使い方はしていません。LEDを音声と連動させる為、スピーカー出力に繋げているのですが光り方が弱いです。私の環境だけかもしれないですがmp3データの音量を上げるとなぜか音が止まってしまいます。ですのでLEDの出力だけ上げる為アンプを使用しています。本来はコンデンサか何かで出力を上げるのが普通だと思うのですがうまく使えなかったです…

●動作確認用
arduino uno
ブレッドボード
バーコードが正確に読めているかどうかをシリアルモニタで確認する為に使います。prominiやmicroでもいいんですが3.3v出力があるのでunoまたは互換品があるといいです。読み取り機は乾電池駆動に合わせるので3.3vに繋げます。

●その他
microSDカード
抵抗1K
ピンソケット8P
配線
ユニバーサル基板
10µFコンデンサ
ジャンパーケーブル

■ハードウェア
まずは基板を破壊します。
f:id:une-lettre-arrive:20190829222353j:plain

…正確にはスイッチとLEDと読み取り基板しか使わないので邪魔な部分を取っ払います。

まずはATTINY85-20PUをarduinoで使えるようセッティングします。

こちらのページを参考にしました。

ATtiny85を使えるようにする。
http://miraluna.hatenablog.com/entry/tiny85

注意点としてはブートローダは忘れず書き込んで8MHz駆動にしてください。これをしないとmp3モジュールがうまく動作しません。
毎回ブレッドボードで書き込むのは面倒くさいのでこれ用の書き込みシールドを作ると書き換えが楽になります。

私も作りました。
f:id:une-lettre-arrive:20190829222813j:plain


こちらのページを参考にしています。
https://ht-deko.com/arduino/atmega328p.html
元々atmega328用に作ったのでattiny85に書き込む時は変換アダプタを使用しています。

マイコンはピンソケットで外せるようにしています。外す専用の工具がないと足が破損したりするので用意しておいた方がいいです。

私が使っているのはこちらです。
エンジニアIC抜き SS-08
https://amzn.to/2zuwZEN
サンハヤト ピンそろった ICS-01
https://amzn.to/2N10ELp

マイコンについてですが私の以前の環境ではどうやってもうまく書き込めませんでした。今は別のパソコンに代えたら書き込めるようになったのですが相性などがあるのかもしれません。動かなかったら小型のarduinoやatmega328(8MHzクロック変更済み)などに置き換えてください。
実は一度作り直しており最初はatmega328を使っていました。こちらならどの環境でも動くと思います(arduino unoに乗っているマイコンの事です)
f:id:une-lettre-arrive:20190829223320j:plain
f:id:une-lettre-arrive:20190831025511j:plain
 

次にバーコード読み取り機の動作確認をします。
ディケイドライバーに取り付けた状態でarduinoに配線します。
PT1はA0
PT2はA1
COM+は3.3V
COM−はGND

そしてこのスケッチを使ってください。

  1. void setup() {
  2.   Serial.begin(9600);
  3. }
  4.  
  5. void loop() {
  6.  int pt_1 = analogRead(A0);
  7.  int pt_2 = analogRead(A1);
  8.   Serial.print("PT1_");
  9.   Serial.print(pt_1);
  10.   Serial.print(" ");
  11.   Serial.print("PT2_");
  12.   Serial.println(pt_2);
  13.   delay(100) ; // 100ms待つ
  14.   
  15. }
ゆっくり差し込んで白と黒の数値が変化しているか確認してください。
同時に白と黒はどのくらいの数値か調べておくと設定しやすくなります。


次に回路図です。
f:id:une-lettre-arrive:20190831021311j:plain
 
パーツイラストのフォトリフレクタ、アンプ、昇圧器は適当な物を当てはめていますので形が違います。
フォトリフレクタが2本、mp3モジュールが2本、スイッチ2個と合計6端子使います。
attiniy85の8本の内3本はリセット、VCC、GNDとなっており使える端子は5本です。
どのようにしたかというとmp3モジュールを1本にしました。
mp3はシリアル通信でやり取りするのですが送信受信で2本使います。
mp3から送信してる?何を?と思い1本外してみると普通に再生されたので空いた1本をスイッチに当てました。
ただsoftwareserial設定は2本で設定しておかないとmp3が鳴らないので注意してください。

バーコード読み取り機は昇圧前の3Vに繋げてください。5Vでも動作しますがラミネート加工してあるカードは読み取りできなくなります。

アンプは5Vの方が強く光ります。LEDに抵抗をつけるかですが光らせ方が点滅なので私はつけていません。mp3モジュール、アンプ、LEDの+-はちゃんと合わせてください。


レイアウトはこのようにしました。
f:id:une-lettre-arrive:20190831021608j:plain
 f:id:une-lettre-arrive:20190831021539j:plain
アンプは後付けなので裏面にグルーガンで固定してあります。


次に音声関係です。

基本的な音声の流れですが

回転音→カード挿入音→カメンライド読み上げ→待機音→回転音→発動音→回転音→カード引き抜き音

このようになっています。一つ一つ音声を並べていけばいいんですがmp3モジュールの特性上次が再生されるまで若干のラグがありテンポが悪いです。

ですので

回転音→カード挿入音カメンライド読み上げ待機音→回転音発動音→回転音→カード引き抜き音

このように一部の音声を繋げてなるべくラグが気にならないようにしています。

実際の音声の分け方です。
f:id:une-lettre-arrive:20191019222838j:plain
f:id:une-lettre-arrive:20191019222851j:plain
 フォルダ1-20はクウガ-ジオウ、21はディエンド、22はその他で分けています。
共通音声001.002.003.004.005.006.101.102.104(103はライド系の音声に繋げて1つにしていますので使っていません)はすべてのフォルダに入っています。
後記のスケッチをみてもらえばわかると思いますがカメンライドは10の位、フォームライドは50の位とルール付けをしたのですが結構崩れているものもありますw

 ■ソフトウェア
まずはじめにバーコード読み取りの重要な部分は私が作った物ではありません。
自分では出来ず知恵袋に投稿して作っていただいた物です。
それに肉付けしているだけなので私が作りました!って自慢できるものではありませんのでご了承ください。
リンクです。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10204064080


●50と54行目のフォトリフレクタの数値は自分の環境に合せて設定してください。
●92、93行目の//を外せばバーコードの数値がシリアルモニタで確認できますので利用してしてください。
●スケッチで音量の調整をできるようにしました。223行目にボリュームの項目がありますので1-30の間で調整できます。
●バーコードが登録してあるのは主要の一部です。
下記のサイトを参考にしネオディケイドライバー基準でバーコードの数値を登録しました。

DXディケイドライバーまとめ
https://sites.google.com/site/dxdikeidoraiba/tips

2進数→10進数変換ですが大量に変換したい場合は下記のサイトが便利です。
2~36進数から10進数へ進数変換(基数変換)
http://alphasis.info/2013/03/webapp-radix-converter-to10/

完成はこんな感じです。




なぜyoutubeにあげないのかというと色を塗り直したいのとクレストが一部欠けているのでちゃんと出来たらあげようと考えています。
いつになるかはわかりません。。

これでネオディケイドライバー制作記事は終わりです。作り替えは大変ですが好きな音声を追加できるのは楽しいと思いますのでよかったら参考にしてみてください。
スケッチは粗が多いので動作しなくなったら電源入れ直しでリセットかけています^^;

■スケッチ

  1. //ネオディケイドライバー再現attiny85用
  2. #include <SoftwareSerial.h>
  3. SoftwareSerial mySerial(1,0); // TX
  4. //黄色0 緑1
  5. int folder=1,file;//MP3用変数
  6. int reading_on; //カメンライド 1
  7.                    //ファイナルカメンライド 2
  8.                    //アタックライド 3
  9.                    //ファイナルアタックライド 4
  10.                    //フォームライド 5
  11.                    //ファイナルフォームライド 6
  12.                  
  13. int ride_on; //カメンライド音 11
  14.                    //ファイナルカメンライド音 21
  15.                    //アタックライド音 31
  16.                    //ファイナルアタックライド音 41
  17.                    //フォームライド音 51
  18.                    //ファイナルフォームライド音 61
  19. #define card_in 101 //カードIN
  20. #define card_unplug 102 //カード引き抜き
  21. #define reading_wait 103 //ライド待機音
  22. #define opening_and_closing 104//開閉
  23. #define bgm_on 105 //BGM再生
  24. int reading_sw;//読み取りスイッチ
  25. int ride_sw;//カメンライドスイッチ
  26. #define reading_pin 1 //読み取り開始ピン D1
  27. #define ride_pin 2 //カメンライドピン D2
  28. #define clock_pin 3 //A2/3ピン
  29. #define data_pin 2 //A3/2ピン
  30. int open_clos;
  31. int card_off;
  32. int start_sound;
  33. //バーコード読み取り(フォトリフレクタ)----------------------------------------------
  34. #define bwhite 0
  35. #define bblack 1
  36. unsigned int bardat=0;
  37. unsigned char bitcnt = 0;
  38. unsigned char ck_read( void ){
  39. if ( analogRead( clock_pin ) > 55){ return bblack; }
  40. return bwhite;
  41. }
  42. unsigned char dat_read( void ){
  43. if ( analogRead( data_pin ) > 55 ){ return bblack; }
  44. return bwhite;
  45. }
  46. void bardat_read( void ){ bardat = ( bardat<<1 ) + dat_read(); }
  47. void wb_read( void){
  48. while( ck_read() == bwhite ); // 白
  49. bardat_read();
  50. }
  51. void bw_read( void ){
  52. while( ck_read() == bblack ); // 黒
  53. bardat_read();
  54. }
  55. //----------------------------------------------------------------------------
  56. //バーコード出力----------------------------------------------------------------------
  57. void barcode_read()
  58. {
  59. bardat = 0; bitcnt =0;
  60. while( ck_read() == bwhite ); // 白
  61. while( ck_read() == bblack ); // 黒
  62. delay(10);
  63. bw_read(); // bit 0
  64. wb_read(); // bit 1
  65. bw_read(); // bit 2
  66. wb_read(); // bit 3
  67. bw_read(); // bit 4
  68. wb_read(); // bit 5
  69. bw_read(); // bit 6
  70. wb_read(); // bit 7
  71. bw_read(); // bit 8
  72. wb_read(); // bit 9
  73. bw_read(); // bit 10
  74. wb_read(); // bit 11
  75. bw_read(); // bit 12
  76. //mySerial.println( bardat , BIN );//2進数
  77. //mySerial.println( bardat );//10進数
  78. switch(bardat){//
  79. //カメンライド
  80. case 1149:{folder=1,reading_on=1,ride_on=11;} break;//カメンライドクウガ
  81. case 31:{folder=1,reading_on=1,ride_on=12;} break;//カメンライドクウガアルティメット
  82. case 153:{folder=1,reading_on=1,ride_on=13;} break;//カメンライドクウガライジングアルティメット
  83. case 829:{folder=2,reading_on=1,ride_on=11;} break;//カメンライドアギト
  84. case 47:{folder=2,reading_on=1,ride_on=12;} break;//カメンライドアギトシャイニング
  85. case 79:{folder=3,reading_on=1,ride_on=11;} break;//カメンライド龍騎
  86. case 57:{folder=3,reading_on=1,ride_on=12;} break;//カメンライド龍騎サバイブ
  87. case 1015:{folder=4,reading_on=1,ride_on=11;} break;//カメンライドファイズ
  88. case 87:{folder=4,reading_on=1,ride_on=12;} break;//カメンライドファイズブラスター
  89. case 225:{folder=5,reading_on=1,ride_on=11;} break;//カメンライドブレイド
  90. case 103:{folder=5,reading_on=1,ride_on=12;} break;//カメンライドブレイドキング
  91. case 1601:{folder=6,reading_on=1,ride_on=11;} break;//カメンライド響鬼
  92. case 105:{folder=6,reading_on=1,ride_on=12;} break;//カメンライド装甲響鬼
  93. case 537:{folder=7,reading_on=1,ride_on=11;} break;//カメンライドカブト
  94. case 143:{folder=7,reading_on=1,ride_on=12;} break;//カメンライドカブトハイパー
  95. case 1913:{folder=8,reading_on=1,ride_on=11;} break;//カメンライド電王
  96. case 113:{folder=8,reading_on=1,ride_on=12;} break;//カメンライド電王ライナー
  97. case 169:{folder=8,reading_on=1,ride_on=13;} break;//カメンライド電王超クライマックス
  98. case 1389:{folder=9,reading_on=1,ride_on=11;} break;//カメンライドキバ
  99. case 151:{folder=9,reading_on=1,ride_on=12;} break;//カメンライドキバエンペラー
  100. case 885:{folder=10,reading_on=1,ride_on=11;} break;//カメンライドディケイド
  101. case 13:{folder=10,reading_on=1,ride_on=12;} break;//カメンライドディケイドコンプリート
  102. case 1855:{folder=11,reading_on=1,ride_on=11;} break;//カメンライドW
  103. case 593:{folder=11,reading_on=1,ride_on=12;} break;//カメンライドWエクストリーム
  104. case 1859:{folder=12,reading_on=1,ride_on=11;} break;//カメンライドオーズ
  105. case 795:{folder=12,reading_on=1,ride_on=12;} break;//カメンライドオーズプトティラ
  106. case 1869:{folder=13,reading_on=1,ride_on=11;} break;//カメンライドフォーゼ
  107. case 801:{folder=13,reading_on=1,ride_on=12;} break;//カメンライドフォーゼコズミック
  108. case 1887:{folder=14,reading_on=1,ride_on=11;} break;//カメンライドウィザード
  109. case 843:{folder=14,reading_on=1,ride_on=12;} break;//カメンライドウィザードインフィニティ
  110. case 1941:{folder=15,reading_on=1,ride_on=11;} break;//カメンライド鎧武
  111. case 897:{folder=15,reading_on=1,ride_on=12;} break;//カメンライド鎧武極
  112. case 1975:{folder=16,reading_on=1,ride_on=11;} break;//カメンライドドライブ
  113. case 949:{folder=16,reading_on=1,ride_on=12;} break;//カメンライドドライブトライドロン
  114. case 37:{folder=17,reading_on=1,ride_on=11;} break;//カメンライドゴースト
  115. case 1073:{folder=17,reading_on=1,ride_on=12;} break;//カメンライドゴーストムゲン
  116. case 199:{folder=18,reading_on=1,ride_on=11;} break;//カメンライドエグゼイド
  117. case 1121:{folder=18,reading_on=1,ride_on=12;} break;//カメンライドエグゼイドムテキ
  118. case 477:{folder=19,reading_on=1,ride_on=11;} break;//カメンライドビルド
  119. case 1169:{folder=19,reading_on=1,ride_on=12;} break;//カメンライドビルドジーニアス
  120. case 493:{folder=20,reading_on=1,ride_on=11;} break;//カメンライドジオウ
  121. case 535:{folder=20,reading_on=7,ride_on=12;} break;//カメンライドグランドジオウ
  122. case 219:{folder=20,reading_on=1,ride_on=13;} break;//カメンライドオーマジオウ
  123. case 201:{folder=21,reading_on=1,ride_on=11;} break;//カメンライドディエンド
  124. case 235:{folder=21,reading_on=1,ride_on=12;} break;//カメンライドディエンドコンプリート
  125. //folder=22 オリジナル
  126. case 587:{folder=22,reading_on=1;ride_on=11;} break;//KAMEN RIDEゼロワン
  127. case 1825:{folder=22,reading_on=2;ride_on=12;} break;//KAMEN RIDEルパンレンジャー
  128. case 1979:{folder=22,reading_on=3;ride_on=13;} break;//KAMEN RIDEパトレンジャー
  129. //case :{folder=22,reading_on=1;ride_on=14;} break;//KAMEN RIDEゲイツ
  130. //case :{folder=22,reading_on=1;ride_on=15;} break;//KAMEN RIDEジョーカー
  131. //case :{folder=22,reading_on=1;ride_on=16;} break;//KAMEN RIDEスカル
  132. //ファイナルアタックライド
  133. case 1619:{folder=1,reading_on=4,ride_on=41;} break;//ファイナルアタックライドクウガ
  134. case 673:{folder=2,reading_on=4,ride_on=41;} break;//ファイナルアタックライドアアアアギト
  135. case 445:{folder=3,reading_on=4,ride_on=41;} break;//ファイナルアタックライドリュリュリュ龍騎
  136. case 1235:{folder=4,reading_on=4,ride_on=41;} break;//ファイナルアタックライドファファファファイズ
  137. case 133:{folder=5,reading_on=4,ride_on=41;} break;//ファイナルアタックライドブブブブレイド
  138. case 2043:{folder=6,reading_on=4,ride_on=41;} break;//ファイナルアタックライドヒヒヒ響鬼
  139. case 295:{folder=7,reading_on=4,ride_on=41;} break;//ファイナルアタックライドカカカカブト
  140. case 1039:{folder=8,reading_on=4,ride_on=41;} break;//ファイナルアタックライドデデデ電王
  141. case 1363:{folder=9,reading_on=4,ride_on=41;} break;//ファイナルアタックライドキキキキバ
  142. case 1877:{folder=10,reading_on=4,ride_on=41;} break;//ファイナルアタックライドディディディディケイド
  143. case 1261:{folder=11,reading_on=4,ride_on=41;} break;//ファイナルアタックライドダダダW
  144. case 1287:{folder=12,reading_on=4,ride_on=41;} break;//ファイナルアタックライドオオオオーズ
  145. case 1331:{folder=13,reading_on=4,ride_on=41;} break;//ファイナルアタックライドフォフォフォフォーゼ
  146. case 1427:{folder=14,reading_on=4,ride_on=41;} break;//ファイナルアタックライドウィウィウィウィザード
  147. case 1563:{folder=15,reading_on=4,ride_on=41;} break;//ファイナルアタックライドガガガ鎧武
  148. case 1665:{folder=16,reading_on=4,ride_on=41;} break;//ファイナルアタックライドドドドドライブ
  149. case 1759:{folder=17,reading_on=4,ride_on=41;} break;//ファイナルアタックライドゴゴゴゴースト
  150. case 1783:{folder=18,reading_on=4,ride_on=41;} break;//ファイナルアタックライドエエエエグゼイド
  151. case 1811:{folder=19,reading_on=4,ride_on=41;} break;//ファイナルアタックライドビビビビルド
  152. case 123:{folder=20,reading_on=4,ride_on=41;} break;//ファイナルアタックライドジジジジオウ
  153. //アタックライド
  154. case 981:{folder=6,reading_on=3;ride_on=31;} break;//ATTACK RIDE音撃棒烈火
  155. case 1017:{folder=7,reading_on=3;ride_on=31;} break;//ATTACK RIDEクロックアップ
  156. case 833:{folder=10,reading_on=3;ride_on=31;} break;//ATTACK RIDEスラッシュ
  157. case 851:{folder=10,reading_on=3;ride_on=32;} break;//ATTACK RIDEブラスト
  158. case 819:{folder=10,reading_on=3;ride_on=33;} break;//ATTACK RIDEイリュージョン
  159. case 867:{folder=10,reading_on=3;ride_on=34;} break;//ATTACK RIDEインビジブル
  160. case 749:{folder=10,reading_on=3;ride_on=35;} break;//ATTACK RIDE烈火大斬刀
  161. //フォームライド
  162. case 1307:{folder=4,reading_on=5;ride_on=51;} break;//FORM RIDEファイズアクセル
  163. //ファイナルフォームライド
  164. }
  165. file=reading_on;mp3();//カメンライド待機音ロング
  166. card_off=1;
  167. }
  168. //-------------------------------------------------------------------
  169. //カメンライド------------------------------------------------------------------------
  170. void kamen_ride()
  171. {
  172.    file=ride_on;mp3();//カメンライド発動
  173.    while(digitalRead(ride_pin) == LOW){}//開いたら抜け出す
  174.    file=opening_and_closing;mp3();//開閉音
  175.    while(digitalRead(reading_pin) == LOW){}//
  176.    file=card_unplug;mp3();delay(100);card_off=0;//カード引き抜き
  177. }
  178. //------------------------------------------------------------------------------------
  179. void mp3()
  180. {
  181.  //ファイル指定再生
  182.   mySerial.write(0x7E);
  183.   mySerial.write(0xFF);
  184.   mySerial.write(0x06);
  185.   mySerial.write(0x0F); //「フォルダ指定再生」コマンド
  186.   mySerial.write((byte)0);
  187.   mySerial.write(folder); //この例では、「folder」という変数が指定される
  188.   mySerial.write(file); //この例では、「file.mp3」という変数のmp3が指定される
  189.   mySerial.write(0xEF);
  190.   delay(10);
  191.  //音量指定
  192.   mySerial.write(0x7E);
  193.   mySerial.write(0xFF);
  194.   mySerial.write(0x06);
  195.   mySerial.write(0x06); //コマンド
  196.   mySerial.write((byte)0);
  197.   mySerial.write((byte)0); //
  198.   mySerial.write((byte)20); //ボリューム1〜30 //21
  199.   mySerial.write(0xEF);
  200.   //delay(10);
  201. }
  202. void setup() {
  203. mySerial.begin( 9600 );
  204. pinMode(reading_pin,INPUT_PULLUP); //読み取り開始ピン
  205. pinMode(ride_pin,INPUT_PULLUP); //カメンライドピン
  206. //file=101;mp3();//起動音
  207. //delay(10);
  208. }
  209. void loop() {
  210. if(open_clos == 1){
  211. if(digitalRead(ride_pin) == HIGH){file=opening_and_closing;mp3();open_clos=0;}//開閉音
  212. }
  213. if(digitalRead(ride_pin) == LOW){open_clos=1;}
  214.   if(card_off == 0){
  215.   //while(digitalRead(ride_pin) == LOW){}
  216. if(digitalRead(reading_pin) == LOW){barcode_read();}}//カードIN/バーコードリード
  217. //カードが入っていて閉じると発動
  218. if(digitalRead(ride_pin) == LOW && digitalRead(reading_pin) == LOW ){ kamen_ride();}//発動
  219. }
 

ディケイドカードの読み取り方法

ネオディケイドライバー、ネオディエンドライバー、バーコードを読み取る玩具(私が知ってるのはテンソウダーとブレイドの武器系)を作るにあたってまずはバーコードの識別方法、arduinoでの読み取り方を解説します。

まずはバーコード読み取り機の説明です。

f:id:une-lettre-arrive:20190829001112j:plain

f:id:une-lettre-arrive:20190829001138j:plain


この読み取り機はフォトリフレクタという部品が2個ついています。
フォトリフレクタとは光を出す、光を読み出す2つの部品で構成されており光が当たった場所の反射率を数値化するというものです。
白は数値が低く、黒は数値が高くなります。
例えば90以下は白、それ以上は黒と線引きして判別しているというわけです。


次にバーコードについて説明します。
キバのカードです。

f:id:une-lettre-arrive:20190829001216j:plain


このバーコードは黒が1、白が0となっており上段がデータ、下段がクロックとなります。
まずはデータ部分ですが2進数で識別の数値が書かれています。
ディケイドライバーの場合はカードの読み取り方向、右から左に読みます。
このカードだと10101101101となります。
ただこのままフォトリフレクタで読み取るとバーコードの幅までは識別できないので101010101と読み取ってしまいます。
それを防ぐ為に使用するのが等間隔に並んでいる下段のクロックです。
クロックの色が切り替わった時、上のデータは白か黒かを判断し、
画像でいうと赤い線のタイミングでデータ部を読み取っています。
こうする事によって同じ色が並んでいようが正確に読み取れるというわけです。

f:id:une-lettre-arrive:20190829001031j:plain


これらを理解するのに以下のサイトを参考にさせていただきました。

自動走行ロボットカー(ライントレースカー) [Arduino]
https://www.petitmonte.com/robot/line_trace_car.html
フォトリフレクタの使い方 [Arduino]
https://www.petitmonte.com/robot/howto_photo_reflector.html
名張市つつじが丘おもちゃ病院
http://tutujith.blog.fc2.com/blog-entry-36.html
じむの(とりあえず)やってみたの巻
http://rdstyle.cocolog-nifty.com/gm/2014/04/post-931a.html
Life with IT
https://l-w-i.net/t/arduino/sensor_003.txt

オリジナルライドウォッチ(オールインワン)

はじめまして。かっぱ次郎と申します。
ツイッターにアップしたライドウォッチの解説の為にブロクを開設しました。よろしくお願いします。

まず注意しなくてはいけないのがライドウォッチの改造のみでは完結しません。ジクウドライバーの方も改造します。安いものでもないですし最悪壊してしまう可能性もあります。(私はドライバーを一度壊しました…)それでも改造するという場合は自己責任でお願いします。

今回の変身ベルトの仕様はウォッチ側から音声、ドライバー側からは識別プレートに対応する液晶表示となっておりウォッチに複数音声を仕込んでも識別プレートが変わらないので表示はそのままです。

色々考えてたどり着いたのが赤外線送受信です。ベルトさん方式ですね。シフトブレスから送信、ベルトさんに受信とやってる事はまんまです。
私は高い玩具は現状復帰できる前提で改造するというこだわり?があるのでクリア素材を使ってて穴を空ける必要がないジクウドライバーにまさにぴったりの改造です。

それでは必要な材料を上げていきます。
■ライドウォッチ側
●ライドウォッチ本体
食玩版を使います。理由は色々ありますが
·DXより安い
·中身がスカスカなので仕込みやすい
·スロット両対応だと片方の竜頭が逆になるのが気になる
·劇中でやっていないのでDX版を再現する必要なしと判断した
·アーマータイムのみなのでプログラムを簡潔にできる
大まかにはこんな感じです。

arduino
·AVRマイコン ATMEGA328P-PU
·セラミック発振子(セラロックコンデンサー内蔵タイプ 16MHz
·丸ピンICソケット (28P) 300mil
or
·AE-ATMEGA328-MINI (Arduino Pro Mini上位互換)
私は今まで秋月電子のAE-ATMEGA328-MINI (Arduino Pro Mini上位互換)というものを使っていました。
780円と高くはないのですがそんなポンポン買えるような金額でもないので今回はAVRマイコン ATMEGA328P-PUというものを使用しています。ただこちらは扱うのに知識が必要なのではじめてarduinoに触るという方は普通のarduino pro miniを使ってください。その際ライドウォッチ内のレイアウトは変える必要があります。

●音声再生
·DFPlayer mini (MP3プレーヤー)
·microsdカード
·基板取付用小型ダイナミックスピーカー UGCM0903EPD(5.0)

●竜頭ボタン
·やわらかいタクトスイッチ
今回は壊れたガシャットのスイッチを使用しています

●バッテリー
·リチウムイオンポリマー電池 3.7V 400mAh【DTP502535(PHR)】
·USB接続リチウムイオン電池充電器【1304】
·DCジャック 内径1.3mm外径3.5mm 基板取付用 2DC-0033H102
·2.5mm標準DCプラグ(1A) MP-122M
·MDCプラグ変換プラグ 2.1mmメス⇔1.3mmオス
私が買った秋月電子では1.3のDCプラグがなかったので変換プラグも買いました

●音量調整
·半固定ボリューム 100Ω [101]
私が使っているボリュームは秋月電子で3個10円で売っている物なので正直何Ωかわかりません。多分このくらいでいいかなって感じで書いたので完全に信用はしないでください。スピーカーにセロテープでも調整はできますし。

●赤外線送信
·5mm赤外LED L12170 高出力・高速応答
·抵抗27Ω
高出力じゃなくても大丈夫だと思うのですが以前の工作で余っていたので

●その他
·ユニバーサル基板
·小ねじ
·ネオジム磁石
·基板用スライドスイッチ SS-12D00-G5
·プラパイプ
·プラバン
プラ棒
ネオジム磁石ダイソーの8個入りの物です


■ジクウドライバー
·AE-ATMEGA328-MINI (Arduino Pro Mini上位互換)
·リードスイッチMKA-10110(5個入)
·赤外線リモコン受信モジュール SPS-440-1(38kHz)

●共通
·FT232RQ USBシリアル変換キット
·分割ロングピンソケット 1x42 (42P)
·ピンヘッダ 1×40 (40P)
·耐熱電子ワイヤー 1m×10色 導体外径0.54mm(AWG24相当)
·ブレッドボード
·ブレッドボード用ワイヤー
·タクトスイッチ
·ワニ口クリップになっているワイヤー
配線の色を分けた方がわかりやすいです
ワニ口クリップワイヤーはダイソーのワニ口クリップを買って配線を取り付けた物を使っています


次は回路図です。
ライドウォッチ
f:id:une-lettre-arrive:20181206230156j:plain

ジクウドライバー
f:id:une-lettre-arrive:20181206225826j:plain

fritzingの使い方がいまいちで文字が欠けていますがご了承ください。


音声ですがフォルダ名は数字、ファイル名は001.mp3のようにします。
フォルダはSDカードのルートディレクトリに作ります。
f:id:une-lettre-arrive:20181208155952j:plain
ライダー毎にフォルダをわけ例えばジオウなら
フォルダ名01
ファイル名
001.mp3
002.mp3
003.mp3
004.mp3
005.mp3
f:id:une-lettre-arrive:20181208160008j:plain
ゲイツなら
f:id:une-lettre-arrive:20181208160020j:plain
そしてわかりやすいようタイトルに名前を書いています
ジオウ起動音
ジオウ説明音
ジオウ変身音
ジオウ必殺起動音
ジオウ必殺音
アーマータイム音
使うのはこの6個だけです。

次はスケッチです。
プログラムの基本を知らずにネットで調べたりして独学で作ったものなのでわかる人から見たらめちゃくちゃだと思います。
どうか生暖かい目で見てください。

と、言い訳をしたところで
実際のところは動けばいーんだよの精神でやってます。
それともう一つ。赤外線関係のプログラムは買った本の内容をまるっと引用しております(丸パクリともいう)一応手は加えていますがほぼ引用です。
購入した本はこちらです。
www.amazon.co.jp

ネットで調べてもいまいち理解できずに本屋で見つけ立ち読みしこれだ!って決めてヨドバシドットコムで購入したものです←ヲイ


それではライドウォッチのスケッチです

  1. // 赤外線送信回路
  2. // ライドウォッチ
  3. #include <SoftwareSerial.h>
  4. SoftwareSerial mySerial(5,6); // RX, TX //MP3用ソフトウェアシリアル
  5. //mp3ファイルナンバー
  6. //001/起動音
  7. //002/説明音
  8. //003/変身音
  9. //004/必殺起動音
  10. //005/必殺技音
  11. //110/アーマータイム音
  12. //長押し用
  13. #define PUSH_SHORT 40000
  14. #define LONG 10000
  15. #define AT_TAME 7000//アーマータイム開始時間
  16. int push_long;//
  17. int change_sw, change_sw1, change_sw2, change_sw3;//アーマータイム
  18. int rw_sw;//
  19. int hissatu;//
  20. int signal_on;
  21. int character_sw;//キャラクター選択
  22. int rw_on;//
  23. int folder;//MP3フォルダ名
  24. int file;//MP3ファイル名
  25. int led_ir;//赤外線LED
  26. int signal_sw;//赤外線送信ON
  27. #define character_pin 2 //竜頭ピン
  28. #define at_tame_pin 3 //ライドウォッチスイッチ2ピン/アーマータイム
  29. #define led_ir_pin 4 //赤外線LEDピン
  30. void setup() //初期設定
  31. {
  32.   pinMode(character_pin,INPUT_PULLUP); //竜頭ピン
  33.   pinMode(at_tame_pin,INPUT_PULLUP); //ライドウォッチスイッチ2ピン/アーマータイム
  34.   pinMode(led_ir_pin,OUTPUT); //赤外線LEDピン
  35.   
  36.   //Serial.begin(19200);
  37.   mySerial.begin (9600);
  38. }
  39. void loop() //メインの処理
  40. {
  41. if(digitalRead(character_pin) == LOW){
  42.   delay(200);
  43.    nagaoshi();//長押し関数
  44.   
  45.   if(push_long == 1){
  46.   Serial.println("ライダー説明音");
  47.   file=2, mp3();//ライダー説明音
  48.   file=0;
  49.   }else{
  50.   
  51.   character_sw++;//キャラクター選択
  52.   character_number();
  53.   folder=signal_sw;//mp3フォルダ選択
  54.  
  55.   Serial.println(signal_sw);
  56.   file=1, mp3();//ライドウォッチ起動音
  57.   Serial.println("ライドウォッチ起動音");
  58.   
  59.   hissatu=0;}
  60. }
  61. if(digitalRead(at_tame_pin) == LOW){
  62.    delay(100);
  63.    
  64.   if(hissatu == 0){
  65.   rw_sw=1;//rw_swループオン
  66.   Serial.println("ライドウォッチセット");
  67.   delay(250);
  68.   led_signal();//識別コード送信
  69.   Serial.println("識別コード送信");
  70.   }else{
  71.   if(digitalRead(character_pin) == LOW){
  72.   file=4, mp3();//フィニッシュタイム
  73.   Serial.println("タイムブレイク"), rw_sw=1;}}
  74.   
  75.   while(rw_sw == 1){//rw_swスタート
  76.   Serial.println("ライドウォッチループ中");
  77. //--------------------------ライダータイム/アーマータイム-----------------------------------------
  78. //--------------------------タイムブレイク/タイムバースト-----------------------------------------
  79.   if(change_sw == 0){
  80.   while(digitalRead(at_tame_pin) == LOW){Serial.println("スイッチ1回目"), change_sw=1;}//change_sw1回目
  81.   }//change_sw0
  82.   
  83.   if(change_sw == 1){
  84.   while(digitalRead(at_tame_pin) == LOW){Serial.println("スイッチ2回目"), change_sw=2, signal_on=1;}//change_sw2回目
  85.   }//change_sw1
  86.   
  87.   if(change_sw == 2){
  88.   if(digitalRead(at_tame_pin) == LOW){
  89.     if(hissatu == 0){delay(AT_TAME), file=110, mp3(),delay(2000), file=3, mp3(), Serial.println("変身"), rw_sw=0, hissatu=1, change_sw=0;}
  90.     else{delay(1500), file=5, mp3(), Serial.println("必殺"), rw_sw=0, hissatu=1, change_sw=0;}}
  91.   }//change_sw2
  92. //---------------------------------------------------------------------------------------------
  93.   }//rw_swストップ
  94.   Serial.println("ライドウォッチループ終了");
  95. }
  96. }
  97. void p1()
  98. {
  99.   int c=23;
  100.   while(1)
  101.   {
  102.     digitalWrite(led_ir_pin,LOW); //ピン6にLOW(0)を出力
  103.     delayMicroseconds(9); //タイマ(9μs)
  104.     digitalWrite(led_ir_pin,HIGH); //ピン6にHIGH(1)を出力
  105.     delayMicroseconds(9); //タイマ(9μs)
  106.     c--; //cのデクリメント(-1)
  107.     if(c==0) //c==0ならば、次へ行く
  108.       break; //break文でループ(2)を脱出
  109.   }
  110. }
  111. void p0()
  112. {
  113.   digitalWrite(led_ir_pin,HIGH); //ピン6にHIGH(1)を出力
  114.   delayMicroseconds(600); //タイマ(600μs)
  115. }
  116. //-----------------------------------------長押し判定------------------------------------------
  117. void nagaoshi(){
  118.   //int gauge = 0;
  119.   unsigned long gauge = 0;
  120.   while (!digitalRead(character_pin))
  121.   {gauge++;}
  122.   //Serial.print(gauge);
  123.   if (gauge < PUSH_SHORT){
  124.     Serial.println("ボタン単押し");
  125.     push_long=0;
  126.     }else{
  127.     Serial.println("ボタン長押し");
  128.     push_long=1;}
  129.   }
  130.   //-------------------------------------------MP3再生-------------------------------------------
  131. void mp3()
  132. {
  133.    //ファイル指定再生
  134.   mySerial.write(0x7E);
  135.   mySerial.write(0xFF);
  136.   mySerial.write(0x06);
  137.   mySerial.write(0x0F); //「フォルダ指定再生」コマンド
  138.   mySerial.write((byte)0);
  139.   mySerial.write(folder); //この例では、「folder」という変数が指定される
  140.   mySerial.write(file); //この例では、「file.mp3」という変数のmp3が指定される
  141.   mySerial.write(0xEF);
  142.   delay(10);
  143. }
  144. //---------------------------------------------------------------------------------------------
  145. //-------------------------キャラクター選択----------------------------------------------------
  146. void character_number(){
  147.   
  148. switch(character_sw){//
  149.   case 1:{signal_sw=1;} break;//ZI-O/2018
  150.   case 2:{signal_sw=12, character_sw=4;} break;//GEIZ/2068
  151.   case 3:{signal_sw=32;} break;//KUUGA/2000
  152.   case 4:{signal_sw=33;} break;//AGITO/2001
  153.   case 5:{signal_sw=34;} break;//RYUKI/2002
  154.   case 6:{signal_sw=35;} break;//FAIZ/2003
  155.   case 7:{signal_sw=36;} break;//BLADE/2004
  156.   case 8:{signal_sw=37;} break;//HIBIKI/2005
  157.   case 9:{signal_sw=38;} break;//KABUTO/2006
  158.   case 10:{signal_sw=39;} break;//DEN-O/2007
  159.   case 11:{signal_sw=40, character_sw=14;} break;//KIVA/2008
  160.   case 12:{signal_sw=41;} break;//DECADE/2009
  161.   case 13:{signal_sw=42;} break;//W/2009
  162.   case 14:{signal_sw=43;} break;//OOO/2010
  163.   case 15:{signal_sw=44;} break;//FOURZE/2011
  164.   case 16:{signal_sw=45, character_sw=17;} break;//WIZARD/2012
  165.   case 17:{signal_sw=46;} break;//GAIM/2013
  166.   case 18:{signal_sw=47;} break;//DRIVE/2014
  167.   case 19:{signal_sw=48;} break;//GHOST/2015
  168.   case 20:{signal_sw=49;} break;//EX-AID/2016
  169.   case 21:{signal_sw=50;} break;//BUILD/2017
  170.   case 22:{signal_sw=51;} break;//CROSS-Z/2017
  171.   case 23:{signal_sw=52;} break;//GREASE/2017
  172.   case 24:{signal_sw=53;} break;//ROGUE/2017
  173.   case 25:{signal_sw=76;} break;//EVOL2017
  174.   case 26:{signal_sw=54;} break;//BRAVE/2016
  175.   case 27:{signal_sw=55;} break;//SNIPE/2016
  176.   case 28:{signal_sw=56, character_sw=0;} break;//LAZER/2016
  177. }
  178. }
  179. //-----------------------------------------------------------------------------------------------
  180. void led_signal(){
  181. //----------------------------赤外線送信---------------------------------------------------------
  182.    p1();p0();p1();//スタートビット
  183.  
  184. switch(signal_sw){//識別コード送信
  185.   case 1:{p0();p0();p0();p0();p0();p0();p0();p0();p0();p1();} break;//ZI-O/2018
  186.   case 2:{p0();p0();p0();p0();p0();p0();p0();p0();p1();p0();} break;//ZI-O/2019
  187.   case 3:{p0();p0();p0();p0();p0();p0();p0();p0();p1();p1();} break;//ZI-O/2038
  188.   case 4:{p0();p0();p0();p0();p0();p0();p0();p1();p0();p0();} break;//ZI-O/2058
  189.   case 5:{p0();p0();p0();p0();p0();p0();p0();p1();p0();p1();} break;//ZI-O/****
  190.   case 6:{p0();p0();p0();p0();p0();p0();p0();p1();p1();p0();} break;//ZI-O/2000
  191.   case 7:{p0();p0();p0();p0();p0();p0();p0();p1();p1();p1();} break;//ZI-O/0
  192.   case 8:{p0();p0();p0();p0();p0();p0();p1();p0();p0();p0();} break;//ZI-O/1971
  193.   case 9:{p0();p0();p0();p0();p0();p0();p1();p0();p0();p1();} break;//ZI-O/1989
  194.   case 10:{p0();p0();p0();p0();p0();p0();p1();p0();p1();p0();} break;//RIDER/NEXT
  195.   case 11:{p0();p0();p0();p0();p0();p0();p1();p0();p1();p1();} break;//ZI-O/ライダー
  196.   case 12:{p0();p0();p0();p0();p0();p0();p1();p1();p0();p0();} break;//GEIZ/2068
  197.   case 13:{p0();p0();p0();p0();p0();p0();p1();p1();p0();p1();} break;//GEIZ/2019
  198.   case 14:{p0();p0();p0();p0();p0();p0();p1();p1();p1();p0();} break;//GEIZ/2038
  199.   case 15:{p0();p0();p0();p0();p0();p0();p1();p1();p1();p1();} break;//GEIZ/2058
  200.   case 16:{p0();p0();p0();p0();p0();p1();p0();p0();p0();p0();} break;//GEIZ/XXXX
  201.   case 17:{p0();p0();p0();p0();p0();p1();p0();p0();p0();p1();} break;//GEIZ/2000
  202.   case 18:{p0();p0();p0();p0();p0();p1();p0();p0();p1();p0();} break;//GEIZ/
  203.   case 19:{p0();p0();p0();p0();p0();p1();p0();p0();p1();p1();} break;//GEIZ/1971
  204.   case 20:{p0();p0();p0();p0();p0();p1();p0();p1();p0();p0();} break;//GEIZ/1989
  205.   case 21:{p0();p0();p0();p0();p0();p1();p0();p1();p0();p1();} break;//GEIZ/2020
  206.   case 22:{p0();p0();p0();p0();p0();p1();p0();p1();p1();p0();} break;//GEIZ/ライダー
  207.   case 23:{p0();p0();p0();p0();p0();p1();p0();p1();p1();p1();} break;//TUKUYOMI/2068
  208.   case 24:{p0();p0();p0();p0();p0();p1();p1();p0();p0();p0();} break;//RIDER/NEXT
  209.   case 25:{p0();p0();p0();p0();p0();p1();p1();p0();p0();p1();} break;//RIDER/XXXX
  210.   case 26:{p0();p0();p0();p0();p0();p1();p1();p0();p1();p0();} break;//RIDER/2019
  211.   case 27:{p0();p0();p0();p0();p0();p1();p1();p0();p1();p1();} break;//RIDER/ライダー
  212.   case 28:{p0();p0();p0();p0();p0();p1();p1();p1();p0();p0();} break;//RIDER/0
  213.   case 29:{p0();p0();p0();p0();p0();p1();p1();p1();p0();p1();} break;//NEXT/0
  214.   case 30:{p0();p0();p0();p0();p0();p1();p1();p1();p1();p0();} break;//FUTURE/0
  215.   case 31:{p0();p0();p0();p0();p0();p1();p1();p1();p1();p1();} break;//NEW/0
  216.   case 32:{p0();p0();p0();p0();p1();p0();p0();p0();p0();p0();} break;//KUUGA/2000
  217.   case 33:{p0();p0();p0();p0();p1();p0();p0();p0();p0();p1();} break;//AGITO/2001
  218.   case 34:{p0();p0();p0();p0();p1();p0();p0();p0();p1();p0();} break;//RYUKI/2002
  219.   case 35:{p0();p0();p0();p0();p1();p0();p0();p0();p1();p1();} break;//FAIZ/2003
  220.   case 36:{p0();p0();p0();p0();p1();p0();p0();p1();p0();p0();} break;//BLADE/2004
  221.   case 37:{p0();p0();p0();p0();p1();p0();p0();p1();p0();p1();} break;//HIBIKI/2005
  222.   case 38:{p0();p0();p0();p0();p1();p0();p0();p1();p1();p0();} break;//KABUTO/2006
  223.   case 39:{p0();p0();p0();p0();p1();p0();p0();p1();p1();p1();} break;//DEN-O/2007
  224.   case 40:{p0();p0();p0();p0();p1();p0();p1();p0();p0();p0();} break;//KIVA/2008
  225.   case 41:{p0();p0();p0();p0();p1();p0();p1();p0();p0();p1();} break;//DECADE/2009
  226.   case 42:{p0();p0();p0();p0();p1();p0();p1();p0();p1();p0();} break;//W/2009
  227.   case 43:{p0();p0();p0();p0();p1();p0();p1();p0();p1();p1();} break;//OOO/2010
  228.   case 44:{p0();p0();p0();p0();p1();p0();p1();p1();p0();p0();} break;//FOURZE/2011
  229.   case 45:{p0();p0();p0();p0();p1();p0();p1();p1();p0();p1();} break;//WIZARD/2012
  230.   case 46:{p0();p0();p0();p0();p1();p0();p1();p1();p1();p0();} break;//GAIM/2013
  231.   case 47:{p0();p0();p0();p0();p1();p0();p1();p1();p1();p1();} break;//DRIVE/2014
  232.   case 48:{p0();p0();p0();p0();p1();p1();p0();p0();p0();p0();} break;//GHOST/2015
  233.   case 49:{p0();p0();p0();p0();p1();p1();p0();p0();p0();p1();} break;//EX-AID/2016
  234.   case 50:{p0();p0();p0();p0();p1();p1();p0();p0();p1();p0();} break;//BUILD/2017
  235.   case 51:{p0();p0();p0();p0();p1();p1();p0();p0();p1();p1();} break;//CROSS-Z/2017
  236.   case 52:{p0();p0();p0();p0();p1();p1();p0();p1();p0();p0();} break;//GREASE/2017
  237.   case 53:{p0();p0();p0();p0();p1();p1();p0();p1();p0();p1();} break;//ROGUE/2017
  238.   case 54:{p0();p0();p0();p0();p1();p1();p0();p1();p1();p0();} break;//BRAVE/2016
  239.   case 55:{p0();p0();p0();p0();p1();p1();p0();p1();p1();p1();} break;//SNIPE/2016
  240.   case 56:{p0();p0();p0();p0();p1();p1();p1();p0();p0();p0();} break;//LAZER/2016
  241.   case 57:{p0();p0();p0();p0();p1();p1();p1();p0();p0();p1();} break;//PARA-DX/2016
  242.   case 58:{p0();p0();p0();p0();p1();p1();p1();p0();p1();p0();} break;//POPPY/2016
  243.   case 59:{p0();p0();p0();p0();p1();p1();p1();p0();p1();p1();} break;//RIDER1/1971
  244.   case 60:{p0();p0();p0();p0();p1();p1();p1();p1();p0();p0();} break;//RIDER2/1971
  245.   case 61:{p0();p0();p0();p0();p1();p1();p1();p1();p0();p1();} break;//V3/1973
  246.   case 62:{p0();p0();p0();p0();p1();p1();p1();p1();p1();p0();} break;//RIDERMAN/1973
  247.   case 63:{p0();p0();p0();p0();p1();p1();p1();p1();p1();p1();} break;//X/1974
  248.   case 64:{p0();p0();p0();p1();p0();p0();p0();p0();p0();p0();} break;//AMAZON/1974
  249.   case 65:{p0();p0();p0();p1();p0();p0();p0();p0();p0();p1();} break;//STRONGER/1975
  250.   case 66:{p0();p0();p0();p1();p0();p0();p0();p0();p1();p0();} break;//SKYRIDER/1979
  251.   case 67:{p0();p0();p0();p1();p0();p0();p0();p0();p1();p1();} break;//SUPER-1/1980
  252.   case 68:{p0();p0();p0();p1();p0();p0();p0();p1();p0();p0();} break;//ZX/1984
  253.   case 69:{p0();p0();p0();p1();p0();p0();p0();p1();p0();p1();} break;//BLACK/1987
  254.   case 70:{p0();p0();p0();p1();p0();p0();p0();p1();p1();p0();} break;//BLACK RX/1988
  255.   case 71:{p0();p0();p0();p1();p0();p0();p0();p1();p1();p1();} break;//SHIN/1992
  256.   case 72:{p0();p0();p0();p1();p0();p0();p1();p0();p0();p0();} break;//ZO/1993
  257.   case 73:{p0();p0();p0();p1();p0();p0();p1();p0();p0();p1();} break;//J/1994
  258.   case 74:{p0();p0();p0();p1();p0();p0();p1();p0();p1();p0();} break;//GENM/2016
  259.   case 75:{p0();p0();p0();p1();p0();p0();p1();p0();p1();p1();} break;//CRONUS/2016
  260.   case 76:{p0();p0();p0();p1();p0();p0();p1();p1();p0();p0();} break;//EVOL2017
  261.   case 77:{p0();p0();p0();p1();p0();p0();p1();p1();p0();p1();} break;//SHOCKER1971
  262.   case 78:{p0();p0();p0();p1();p0();p0();p1();p1();p1();p0();} break;//ALFA2016
  263.   case 79:{p0();p0();p0();p1();p0();p0();p1();p1();p1();p1();} break;//OMEGA2016
  264.   case 80:{p0();p0();p0();p1();p0();p1();p0();p0();p0();p0();} break;//NEO2017
  265.   case 81:{p0();p0();p0();p1();p0();p1();p0();p0();p0();p1();} break;//RIDE/STRIKER
  266.   case 82:{p0();p0();p0();p1();p0();p1();p0();p0();p1();p0();} break;//ALL RIDERS/ライダー
  267.   case 83:{p0();p0();p0();p1();p0();p1();p0();p0();p1();p1();} break;//SUPER SENTAI/-SS-
  268.   case 84:{p0();p0();p0();p1();p0();p1();p0();p1();p0();p0();} break;//HEISEI/-HR-
  269.   case 85:{p0();p0();p0();p1();p0();p1();p0();p1();p0();p1();} break;//SHOWA/-SR-
  270.   case 86:{p0();p0();p0();p1();p0();p1();p0();p1();p1();p0();} break;//KAMEN RIDER/ライダー
  271.   case 87:{p0();p0();p0();p1();p0();p1();p0();p1();p1();p1();} break;//EVIL/EVIL
  272.   case 88:{p0();p0();p0();p1();p0();p1();p1();p0();p0();p0();} break;//ANCIENT/0
  273.   case 89:{p0();p0();p0();p1();p0();p1();p1();p0();p0();p1();} break;//GAME/GAME
  274.   case 90:{p0();p0();p0();p1();p0();p1();p1();p0();p1();p0();} break;//FUTURE/0
  275.   case 91:{p0();p0();p0();p1();p0();p1();p1();p0();p1();p1();} break;//X MAS/1225
  276.   case 92:{p0();p0();p0();p1();p0();p1();p1();p1();p0();p0();} break;//SPECIAL/-SP-
  277.   case 93:{p0();p0();p0();p1();p0();p1();p1();p1();p0();p1();} break;//RIDER/0
  278.   case 94:{p0();p0();p0();p1();p0();p1();p1();p1();p1();p0();} break;//ZI-O/ライダー
  279.   case 95:{p0();p0();p0();p1();p0();p1();p1();p1();p1();p1();} break;//SINGULAR/0
  280.   case 96:{p0();p0();p0();p1();p1();p0();p0();p0();p0();p0();} break;//NOTHING/0
  281.   case 97:{p0();p0();p0();p1();p1();p0();p0();p0();p0();p1();} break;//MILLENNIUM/2000
  282.   case 98:{p0();p0();p0();p1();p1();p0();p0();p0();p1();p0();} break;//MAX/MAX
  283.   case 99:{p0();p0();p0();p1();p1();p0();p0();p0();p1();p1();} break;//DOEND/2009
  284.   case 100:{p0();p0();p0();p1();p1();p0();p0();p1();p0();p0();} break;//GENIUS/FIN.
  285.   case 101:{p0();p0();p0();p1();p1();p0();p0();p1();p0();p1();} break;//MUTEKI/FIN.
  286.   case 102:{p0();p0();p0();p1();p1();p0();p0();p1();p1();p0();} break;//MUGEN/FIN.
  287.   case 103:{p0();p0();p0();p1();p1();p0();p0();p1();p1();p1();} break;//TRIDORON/FIN.
  288.   case 104:{p0();p0();p0();p1();p1();p0();p1();p0();p0();p0();} break;//KIWAMI/FIN.
  289.   case 105:{p0();p0();p0();p1();p1();p0();p1();p0();p0();p1();} break;//INFINITY/FIN.
  290.   case 106:{p0();p0();p0();p1();p1();p0();p1();p0();p1();p0();} break;//COSMIC/FIN.
  291.   case 107:{p0();p0();p0();p1();p1();p0();p1();p0();p1();p1();} break;//PUTOTYRA/FIN.
  292.   case 108:{p0();p0();p0();p1();p1();p0();p1();p1();p0();p0();} break;//XTREME/FIN.
  293.   case 109:{p0();p0();p0();p1();p1();p0();p1();p1();p0();p1();} break;//CONPLETE/FIN.
  294.   case 110:{p0();p0();p0();p1();p1();p0();p1();p1();p1();p0();} break;//ENPEROR/FIN.
  295.   case 111:{p0();p0();p0();p1();p1();p0();p1();p1();p1();p1();} break;//LINER/FIN.
  296.   case 112:{p0();p0();p0();p1();p1();p1();p0();p0();p0();p0();} break;//HYPER/FIN.
  297.   case 113:{p0();p0();p0();p1();p1();p1();p0();p0();p0();p1();} break;//ARMED/FIN.
  298.   case 114:{p0();p0();p0();p1();p1();p1();p0();p0();p1();p0();} break;//KING/FIN.
  299.   case 115:{p0();p0();p0();p1();p1();p1();p0();p0();p1();p1();} break;//BLASTER/FIN.
  300.   case 116:{p0();p0();p0();p1();p1();p1();p0();p1();p0();p0();} break;//SURVIVE/FIN.
  301.   case 117:{p0();p0();p0();p1();p1();p1();p0();p1();p0();p1();} break;//SHINING/FIN.
  302.   case 118:{p0();p0();p0();p1();p1();p1();p0();p1();p1();p0();} break;//ULTIMATE/FIN.
  303.   case 119:{p0();p0();p0();p1();p1();p1();p0();p1();p1();p1();} break;//RIDE/GADGET
  304.   case 120:{signal_sw=0,p0();p0();p0();p1();p1();p1();p1();p0();p0();p0();} break;//RIDER/ライダー
  305. }
  306.    p0();p1();p0();p1();delay(20);//エンドビット
  307.    signal_sw=0;
  308. }

01-48
初期設定です。

49-
竜頭を押すとまず長押し判定の関数に飛びます。
出てきたら起動音か説明音に分岐します。

73-
at_tame_pinが押されると赤外線が送信されます。

87-
at_tame_pinが押された回数を制御しています。

110-
赤外線LED発光制御です。
詳しいことは調べていただきたいのですが簡単に説明すると決まった時間点滅、決まった時間消灯を繰り返しそれを信号として受信機側に送っています。
193からはじまる識別コード送信は例えばcase1の内容ですが0000000001と2進数で送信し受信側で10進数に直しています。
本当はちゃんと計算式でも作って変換したかったのですがうまくいかずに関数を並べる力技にしました。
動きゃいーんだよ。動けば!

144-
mp3再生の関数です。
なぜライブラリを使っていないかというと
前にオールインワンガシャットを作った時にライブラリでは255曲(250曲だったかも)以上の曲が扱えませんでした。
調べてみてもわからずシリアルコマンド制御でフォルダ分けがうまくいったのでずっとこのまま使っています。

...最近知ったのですがライブラリでもフォルダ分けできるみたいですね。

159-
キャラクターを選択します。

193-
ライドウォッチ番号を2進数で送信しています。


次はジクウドライバーのスケッチです。

  1. //赤外線リモコン受信回路
  2. //ジクウドライバー
  3. #define led_ir_pin 6 //赤外線LEDピン番号
  4. int led_ir; //
  5. int rider_number; //ライダーナンバー
  6. int bin[10]={1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; //2進数変数
  7. int bin_number; //2進数変数番号
  8. int beki_number; //べき乗変数番号
  9. //コード0 0xfb B11111011 //001
  10. //コード1 0xf7 B11110111 //010
  11. //コード2 0xef B11101111 //100
  12. //コード3 0xf3 B11110011 //011
  13. //コード4 0xe7 B11100111 //110
  14. //コード5 0xeb B11101011 //101
  15. //コード6 0xe3 B11100011 //111
  16. //コード7 0xff B11111111 //000
  17. // //1は2進数設定では0(LOWだから)
  18. //const unsigned char sw_code[] = {0xfb, 0xfc, 0xf7, 0xf3, 0xe3};
  19. const unsigned char sw_code[] = {0xfb, 0xf7, 0xef, 0xf3, 0xe7, 0xeb, 0xe3, 0xff};
  20. int code_1;//選別プレート1行目
  21. int code_2;//選別プレート2行目
  22. int code_3;//選別プレート3行目
  23. int code_in;//sw_code番号
  24. int code_on;//switch(rider_number)のif用
  25. void setup() // 初期設定
  26. {
  27.   DDRD = B00011100;
  28.   PORTD = B11111100;
  29.   Serial.begin(9600);
  30.   pinMode(5,INPUT_PULLUP);
  31. }
  32. void loop() // メインの処理
  33. {
  34.   if (digitalRead(5) == 1){PORTD = B11111100/*, Serial.println("ok")*/;}
  35.     while(1) // ループ(2)
  36.     {
  37.       rider_number=0;
  38.       bin[9]=1, bin[8]=1, bin[7]=1, bin[6]=1, bin[5]=1;
  39.       bin[4]=1, bin[3]=1, bin[2]=1, bin[1]=1, bin[0]=1;
  40. //----------------------------------スタートビットチェック-------------------------------
  41.       led_ir=digitalRead(led_ir_pin);
  42.       if(led_ir==0)
  43.         delayMicroseconds(400);
  44.       else
  45.         break;
  46.       led_ir=digitalRead(led_ir_pin);
  47.       if(led_ir==0)
  48.          delayMicroseconds(600);
  49.       else
  50.         break;
  51.  //----------------------------------デバイスコードチェック------------------------------
  52.       led_ir=digitalRead(led_ir_pin);
  53.       if(led_ir==1)
  54.          delayMicroseconds(600);
  55.       else
  56.         break;
  57.       led_ir=digitalRead(led_ir_pin);
  58.       if(led_ir==0)
  59.          delayMicroseconds(600);
  60.       else
  61.         break;
  62.  //------------------------------------識別コードチェック------------------------------
  63.       led_ir=digitalRead(led_ir_pin);
  64.       if(led_ir==1)
  65.          bin[9]=0;
  66.          delayMicroseconds(600);
  67.        led_ir=digitalRead(led_ir_pin);
  68.        if(led_ir==1)
  69.          bin[8]=0;
  70.          delayMicroseconds(600);
  71.        led_ir=digitalRead(led_ir_pin);
  72.        if(led_ir==1)
  73.          bin[7]=0;
  74.          delayMicroseconds(600);
  75.        led_ir=digitalRead(led_ir_pin);
  76.       if(led_ir==1)
  77.          bin[6]=0;
  78.          delayMicroseconds(600);
  79.        led_ir=digitalRead(led_ir_pin);
  80.        if(led_ir==1)
  81.          bin[5]=0;
  82.          delayMicroseconds(600);
  83.        led_ir=digitalRead(led_ir_pin);
  84.        if(led_ir==1)
  85.          bin[4]=0;
  86.          delayMicroseconds(600);
  87.        led_ir=digitalRead(led_ir_pin);
  88.       if(led_ir==1)
  89.          bin[3]=0;
  90.          delayMicroseconds(600);
  91.        led_ir=digitalRead(led_ir_pin);
  92.        if(led_ir==1)
  93.          bin[2]=0;
  94.          delayMicroseconds(600);
  95.        led_ir=digitalRead(led_ir_pin);
  96.        if(led_ir==1)
  97.          bin[1]=0;
  98.          delayMicroseconds(600);
  99.        led_ir=digitalRead(led_ir_pin);
  100.        if(led_ir==1)
  101.          bin[0]=0;
  102.          delayMicroseconds(600);
  103.            
  104. //-------------------------------ストップビットチェック-----------------------------------------------------------
  105.        led_ir=digitalRead(led_ir_pin);
  106.        if(led_ir==1)
  107.          delayMicroseconds(600);
  108.         else
  109.           break;
  110.         led_ir=digitalRead(led_ir_pin);
  111.         if(led_ir==0)
  112.          delayMicroseconds(600);
  113.         else
  114.           break;
  115.         led_ir=digitalRead(led_ir_pin);
  116.         if(led_ir==1)
  117.           delayMicroseconds(600);
  118.         else
  119.           break;
  120.         led_ir=digitalRead(led_ir_pin);
  121.         if(led_ir==0)
  122.          delayMicroseconds(600);
  123.         else
  124.           break;
  125.  //////////////////////////////////////////////////////////////////
  126.  
  127.        rider_number=rider_number+(bin[9]*pow(2,9));
  128.        Serial.print("10ケタ;");
  129.        Serial.println(rider_number);
  130.        rider_number=rider_number+(bin[8]*pow(2,8));
  131.        Serial.print("9ケタ;");
  132.        Serial.println(rider_number);
  133.        rider_number=rider_number+(bin[7]*pow(2,7));
  134.        Serial.print("8ケタ;");
  135.        Serial.println(rider_number);
  136.        rider_number=rider_number+(bin[6]*pow(2,6));
  137.        Serial.print("7ケタ;");
  138.        Serial.println(rider_number);
  139.        rider_number=rider_number+(bin[5]*pow(2,5));
  140.        Serial.print("6ケタ;");
  141.        Serial.println(rider_number);
  142.        rider_number=rider_number+(bin[4]*pow(2,4));
  143.        Serial.print("5ケタ;");
  144.        Serial.println(rider_number);
  145.        rider_number=rider_number+(bin[3]*pow(2,3));
  146.        Serial.print("4ケタ;");
  147.        Serial.println(rider_number);
  148.        rider_number=rider_number+(bin[2]*pow(2,2));
  149.        Serial.print("3ケタ;");
  150.        Serial.println(rider_number);
  151.        rider_number=rider_number+(bin[1]*pow(2,1));
  152.        Serial.print("2ケタ;");
  153.        Serial.println(rider_number);
  154.        rider_number=rider_number+(bin[0]*pow(2,0));
  155.        Serial.print("1ケタ;");
  156.        Serial.println(rider_number);
  157. //-----------------------------------------------------------------------------------
  158.      switch(rider_number){
  159. //-------------------------------------------ジクウドライバー表示用-----------------------------------------------------------
  160. case 1:{code_1=0, code_2=1, code_3=3, watch_code();} break;//ZI-O/2018
  161. case 2:{code_1=0, code_2=1, code_3=2, watch_code();} break;//ZI-O/2019
  162. case 3:{code_1=0, code_2=1, code_3=5, watch_code();} break;//ZI-O/2038
  163. case 4:{code_1=0, code_2=1, code_3=4, watch_code();} break;//ZI-O/2058
  164. case 5:{code_1=0, code_2=3, code_3=1, watch_code();} break;//ZI-O/****
  165. case 6:{code_1=0, code_2=3, code_3=2, watch_code();} break;//ZI-O/2000
  166. case 7:{code_1=0, code_2=3, code_3=5, watch_code();} break;//ZI-O/0
  167. case 8:{code_1=0, code_2=3, code_3=4, watch_code();} break;//ZI-O/1971
  168. case 9:{code_1=0, code_2=2, code_3=1, watch_code();} break;//ZI-O/1989
  169. case 10:{code_1=0, code_2=2, code_3=3, watch_code();} break;//RIDER/NEXT
  170. case 11:{code_1=0, code_2=2, code_3=5, watch_code();} break;//ZI-O/ライダー
  171. case 12:{code_1=0, code_2=2, code_3=4, watch_code();} break;//GEIZ/2068
  172. case 13:{code_1=0, code_2=5, code_3=1, watch_code();} break;//GEIZ/2019
  173. case 14:{code_1=0, code_2=5, code_3=3, watch_code();} break;//GEIZ/2038
  174. case 15:{code_1=0, code_2=5, code_3=2, watch_code();} break;//GEIZ/2058
  175. case 16:{code_1=0, code_2=5, code_3=4, watch_code();} break;//GEIZ/XXXX
  176. case 17:{code_1=0, code_2=4, code_3=1, watch_code();} break;//GEIZ/2000
  177. case 18:{code_1=0, code_2=4, code_3=3, watch_code();} break;//GEIZ/
  178. case 19:{code_1=0, code_2=4, code_3=2, watch_code();} break;//GEIZ/1971
  179. case 20:{code_1=0, code_2=4, code_3=5, watch_code();} break;//GEIZ/1989
  180. case 21:{code_1=1, code_2=0, code_3=3, watch_code();} break;//GEIZ/2020
  181. case 22:{code_1=1, code_2=0, code_3=2, watch_code();} break;//GEIZ/ライダー
  182. case 23:{code_1=1, code_2=0, code_3=5, watch_code();} break;//TUKUYOMI/2068
  183. case 24:{code_1=1, code_2=0, code_3=4, watch_code();} break;//RIDER/NEXT
  184. case 25:{code_1=1, code_2=3, code_3=0, watch_code();} break;//RIDER/XXXX
  185. case 26:{code_1=1, code_2=3, code_3=2, watch_code();} break;//RIDER/2019
  186. case 27:{code_1=1, code_2=3, code_3=5, watch_code();} break;//RIDER/ライダー
  187. case 28:{code_1=1, code_2=3, code_3=4, watch_code();} break;//RIDER/0
  188. case 29:{code_1=1, code_2=2, code_3=0, watch_code();} break;//NEXT/0
  189. case 30:{code_1=1, code_2=2, code_3=3, watch_code();} break;//FUTURE/0
  190. case 31:{code_1=1, code_2=2, code_3=5, watch_code();} break;//NEW/0
  191. case 32:{code_1=1, code_2=2, code_3=4, watch_code();} break;//KUUGA/2000
  192. case 33:{code_1=1, code_2=5, code_3=0, watch_code();} break;//AGITO/2001
  193. case 34:{code_1=1, code_2=5, code_3=3, watch_code();} break;//RYUKI/2002
  194. case 35:{code_1=1, code_2=5, code_3=2, watch_code();} break;//FAIZ/2003
  195. case 36:{code_1=1, code_2=5, code_3=4, watch_code();} break;//BLADE/2004
  196. case 37:{code_1=1, code_2=4, code_3=0, watch_code();} break;//HIBIKI/2005
  197. case 38:{code_1=1, code_2=4, code_3=3, watch_code();} break;//KABUTO/2006
  198. case 39:{code_1=1, code_2=4, code_3=2, watch_code();} break;//DEN-O/2007
  199. case 40:{code_1=1, code_2=4, code_3=5, watch_code();} break;//KIVA/2008
  200. case 41:{code_1=3, code_2=0, code_3=1, watch_code();} break;//DECADE/2009
  201. case 42:{code_1=3, code_2=0, code_3=2, watch_code();} break;//W/2009
  202. case 43:{code_1=3, code_2=0, code_3=5, watch_code();} break;//OOO/2010
  203. case 44:{code_1=3, code_2=0, code_3=4, watch_code();} break;//FOURZE/2011
  204. case 45:{code_1=3, code_2=1, code_3=0, watch_code();} break;//WIZARD/2012
  205. case 46:{code_1=3, code_2=1, code_3=2, watch_code();} break;//GAIM/2013
  206. case 47:{code_1=3, code_2=1, code_3=5, watch_code();} break;//DRIVE/2014
  207. case 48:{code_1=3, code_2=1, code_3=4, watch_code();} break;//GHOST/2015
  208. case 49:{code_1=3, code_2=2, code_3=0, watch_code();} break;//EX-AID/2016
  209. case 50:{code_1=3, code_2=2, code_3=1, watch_code();} break;//BUILD/2017
  210. case 51:{code_1=3, code_2=2, code_3=5, watch_code();} break;//CROSS-Z/2017
  211. case 52:{code_1=3, code_2=2, code_3=4, watch_code();} break;//GREASE/2017
  212. case 53:{code_1=3, code_2=5, code_3=0, watch_code();} break;//ROGUE/2017
  213. case 54:{code_1=3, code_2=5, code_3=1, watch_code();} break;//BRAVE/2016
  214. case 55:{code_1=3, code_2=5, code_3=2, watch_code();} break;//SNIPE/2016
  215. case 56:{code_1=3, code_2=5, code_3=4, watch_code();} break;//LAZER/2016
  216. case 57:{code_1=3, code_2=4, code_3=0, watch_code();} break;//PARA-DX/2016
  217. case 58:{code_1=3, code_2=4, code_3=1, watch_code();} break;//POPPY/2016
  218. case 59:{code_1=3, code_2=4, code_3=2, watch_code();} break;//RIDER1/1971
  219. case 60:{code_1=3, code_2=4, code_3=5, watch_code();} break;//RIDER2/1971
  220. case 61:{code_1=2, code_2=0, code_3=1, watch_code();} break;//V3/1973
  221. case 62:{code_1=2, code_2=0, code_3=3, watch_code();} break;//RIDERMAN/1973
  222. case 63:{code_1=2, code_2=0, code_3=5, watch_code();} break;//X/1974
  223. case 64:{code_1=2, code_2=0, code_3=4, watch_code();} break;//AMAZON/1974
  224. case 65:{code_1=2, code_2=1, code_3=0, watch_code();} break;//STRONGER/1975
  225. case 66:{code_1=2, code_2=1, code_3=3, watch_code();} break;//SKYRIDER/1979
  226. case 67:{code_1=2, code_2=1, code_3=5, watch_code();} break;//SUPER-1/1980
  227. case 68:{code_1=2, code_2=1, code_3=4, watch_code();} break;//ZX/1984
  228. case 69:{code_1=2, code_2=3, code_3=0, watch_code();} break;//BLACK/1987
  229. case 70:{code_1=2, code_2=3, code_3=1, watch_code();} break;//BLACK RX/1988
  230. case 71:{code_1=2, code_2=3, code_3=5, watch_code();} break;//SHIN/1992
  231. case 72:{code_1=2, code_2=3, code_3=4, watch_code();} break;//ZO/1993
  232. case 73:{code_1=2, code_2=5, code_3=0, watch_code();} break;//J/1994
  233. case 74:{code_1=2, code_2=5, code_3=1, watch_code();} break;//GENM/2016
  234. case 75:{code_1=2, code_2=5, code_3=3, watch_code();} break;//CRONUS/2016
  235. case 76:{code_1=2, code_2=5, code_3=4, watch_code();} break;//EVOL/2017
  236. case 77:{code_1=2, code_2=4, code_3=0, watch_code();} break;//SHOCKER/1971
  237. case 78:{code_1=2, code_2=4, code_3=1, watch_code();} break;//ALFA/2016
  238. case 79:{code_1=2, code_2=4, code_3=3, watch_code();} break;//OMEGA/2016
  239. case 80:{code_1=2, code_2=4, code_3=5, watch_code();} break;//NEO/2017
  240. case 81:{code_1=5, code_2=0, code_3=1, watch_code();} break;//RIDE/STRIKER
  241. case 82:{code_1=5, code_2=0, code_3=3, watch_code();} break;//ALL RIDERS/ライダー
  242. case 83:{code_1=5, code_2=0, code_3=2, watch_code();} break;//SUPER SENTAI/-SS-
  243. case 84:{code_1=5, code_2=0, code_3=4, watch_code();} break;//HEISEI/-HR-
  244. case 85:{code_1=5, code_2=1, code_3=0, watch_code();} break;//SHOWA/-SR-
  245. case 86:{code_1=5, code_2=1, code_3=3, watch_code();} break;//KAMEN RIDER/ライダー
  246. case 87:{code_1=5, code_2=1, code_3=2, watch_code();} break;//EVIL/EVIL
  247. case 88:{code_1=5, code_2=1, code_3=4, watch_code();} break;//ANCIENT/0
  248. case 89:{code_1=5, code_2=3, code_3=0, watch_code();} break;//GAME/GAME
  249. case 90:{code_1=5, code_2=3, code_3=1, watch_code();} break;//FUTURE/0
  250. case 91:{code_1=5, code_2=3, code_3=2, watch_code();} break;//X MAS/1225
  251. case 92:{code_1=5, code_2=3, code_3=4, watch_code();} break;//SPECIAL/-SP-
  252. case 93:{code_1=5, code_2=2, code_3=0, watch_code();} break;//RIDER/0
  253. case 94:{code_1=5, code_2=2, code_3=1, watch_code();} break;//ZI-O/ライダー
  254. case 95:{code_1=5, code_2=2, code_3=3, watch_code();} break;//SINGULAR/0
  255. case 96:{code_1=5, code_2=2, code_3=4, watch_code();} break;//NOTHING/0
  256. case 97:{code_1=5, code_2=4, code_3=0, watch_code();} break;//MILLENNIUM/2000
  257. case 98:{code_1=5, code_2=4, code_3=1, watch_code();} break;//MAX/MAX
  258. case 99:{code_1=5, code_2=4, code_3=3, watch_code();} break;//DOEND/2009
  259. case 100:{code_1=5, code_2=4, code_3=2, watch_code();} break;//GENIUS/FIN.
  260. case 101:{code_1=4, code_2=0, code_3=1, watch_code();} break;//MUTEKI/FIN.
  261. case 102:{code_1=4, code_2=0, code_3=3, watch_code();} break;//MUGEN/FIN.
  262. case 103:{code_1=4, code_2=0, code_3=2, watch_code();} break;//TRIDORON/FIN.
  263. case 104:{code_1=4, code_2=0, code_3=5, watch_code();} break;//KIWAMI/FIN.
  264. case 105:{code_1=4, code_2=1, code_3=0, watch_code();} break;//INFINITY/FIN.
  265. case 106:{code_1=4, code_2=1, code_3=3, watch_code();} break;//COSMIC/FIN.
  266. case 107:{code_1=4, code_2=1, code_3=2, watch_code();} break;//PUTOTYRA/FIN.
  267. case 108:{code_1=4, code_2=1, code_3=5, watch_code();} break;//XTREME/FIN.
  268. case 109:{code_1=4, code_2=3, code_3=0, watch_code();} break;//CONPLETE/FIN.
  269. case 110:{code_1=4, code_2=3, code_3=1, watch_code();} break;//ENPEROR/FIN.
  270. case 111:{code_1=4, code_2=3, code_3=2, watch_code();} break;//LINER/FIN.
  271. case 112:{code_1=4, code_2=3, code_3=5, watch_code();} break;//HYPER/FIN.
  272. case 113:{code_1=4, code_2=2, code_3=0, watch_code();} break;//ARMED/FIN.
  273. case 114:{code_1=4, code_2=2, code_3=1, watch_code();} break;//KING/FIN.
  274. case 115:{code_1=4, code_2=2, code_3=3, watch_code();} break;//BLASTER/FIN.
  275. case 116:{code_1=4, code_2=2, code_3=5, watch_code();} break;//SURVIVE/FIN.
  276. case 117:{code_1=4, code_2=5, code_3=0, watch_code();} break;//SHINING/FIN.
  277. case 118:{code_1=4, code_2=5, code_3=1, watch_code();} break;//ULTIMATE/FIN.
  278. case 119:{code_1=4, code_2=5, code_3=3, watch_code();} break;//RIDE/GADGET
  279. case 120:{code_1=4, code_2=5, code_3=2, watch_code();} break;//RIDER/ライダー
  280. //----------------------------------------------------------------------------------------------------------------------------
  281.   }//スイッチ終わり
  282.   }
  283. }
  284. void watch_code(){
  285.   delay(500);
  286. //------------------1行目-------------------------
  287. Serial.println("1行目");
  288. code_in = code_1;
  289. PORTD = sw_code[code_in];
  290. Serial.print("2:");
  291. Serial.println(digitalRead(2));
  292. Serial.print("3:");
  293. Serial.println(digitalRead(3));
  294. Serial.print("4:");
  295. Serial.println(digitalRead(4));
  296. delay(100);
  297. PORTD = sw_code[7];
  298. Serial.print("2:");
  299. Serial.println(digitalRead(2));
  300. Serial.print("3:");
  301. Serial.println(digitalRead(3));
  302. Serial.print("4:");
  303. Serial.println(digitalRead(4));
  304. //-------------------2行目------------------------
  305. Serial.println("2行目");
  306. code_in = code_2;
  307. PORTD = sw_code[code_in];
  308. Serial.print("2:");
  309. Serial.println(digitalRead(2));
  310. Serial.print("3:");
  311. Serial.println(digitalRead(3));
  312. Serial.print("4:");
  313. Serial.println(digitalRead(4));
  314. delay(100);
  315. PORTD = sw_code[7];
  316. Serial.print("2:");
  317. Serial.println(digitalRead(2));
  318. Serial.print("3:");
  319. Serial.println(digitalRead(3));
  320. Serial.print("4:");
  321. Serial.println(digitalRead(4));
  322. //--------------------3行目-----------------------
  323. Serial.println("3行目");
  324. code_in = code_3;
  325. PORTD = sw_code[code_in];
  326. Serial.print("2:");
  327. Serial.println(digitalRead(2));
  328. Serial.print("3:");
  329. Serial.println(digitalRead(3));
  330. Serial.print("4:");
  331. Serial.println(digitalRead(4));
  332. delay(100);
  333. PORTD = sw_code[7];
  334. Serial.print("2:");
  335. Serial.println(digitalRead(2));
  336. Serial.print("3:");
  337. Serial.println(digitalRead(3));
  338. Serial.print("4:");
  339. Serial.println(digitalRead(4));
  340. //--------------------4行目-----------------------
  341. Serial.println("4行目");
  342. PORTD = sw_code[6];
  343. Serial.print("2:");
  344. Serial.println(digitalRead(2));
  345. Serial.print("3:");
  346. Serial.println(digitalRead(3));
  347. Serial.print("4:");
  348. Serial.println(digitalRead(4));
  349. }

識別プレートを上から1行目2行目3行目4行目とし、ピンの並びのパターンを7種類に分けました。
これらを組み合わせ送信します。
f:id:une-lettre-arrive:20181211054223j:plain
※12/11画像がおかしかったので差し替えました。

DDRD = B00011100;
これはpinModeと同じ意味合いです。
右からD0,D1,D2...D7を指しておりD2,D3,D4をINPUTとして使いますと宣言しています。

PORTD = B11111100;
これはLOW,HIGH設定です。0がLOW,1がHIGHです。1行で済みますし同時に指示を出せるので今回使いました。

ちなみにこれらも買った本に書いてありました。


赤外線受信
正直本の内容まるっとパクってます。多少は変更していますが。

2進数を10進数に直す計算式
計算式自体は合っているのですが何ケタの数字は間違っています。最後の1ケタが直した10進数です。

ドライバー表示リスト
上記に書いたピンのパターンを組み合わせ指定しています。ピンパターンはクレーンの丈さんのブログの解析記事を参考にさせていただきました。すごく助かりました。ありがとうございます。

ドライバー送信
他のSerial.printは消しても問題ないのですがここの関数のSerial.printは消すと動かなくなります。
Serial.printは表示するのにコンマ何秒かかかっているらしくそのコンマ何秒がうまくかみ合ってしまい外せなくなってしまいました。
まあ動いてるからいいかなと。

これでスケッチは終了です。
余談ですが大量のswitch caseを作る際にエクセルを利用して作っています。フィルターでソートかけて同じのをぶわーって書き換えて最後に全部くっつけてコピペするんですけどあれ?もしかして邪道?

次は加工です。
写真はあまり撮ってないので文字の説明がメインとなります。

こちらがブレッドボード上で再現した物です。これらを組み込みます。

ライドウォッチは食玩版なので竜頭の改造から。
こんな風にプラバンやらプラ棒で受けを作ります。
f:id:une-lettre-arrive:20181208104336j:plain

入っている回路の全体像です。わかりにくいですがこんな感じです。8MHzとありますがなぜかうまく動かなかったので16MHzに変更してあります。ですので写真にはないですがセラロック16MHzをはんだ付けしてあります。
f:id:une-lettre-arrive:20181208105217j:plain

取り付けた際の全体像です。
マイコンの下に赤外線LEDが下を向いて設置してあります。穴位置やら向きは調整してください。私は調整段階で大穴を空けてしまったので裏を見られると大変不格好です。ついでにプレートの大穴も間違えて空けた穴です。透明だから埋められないし…
f:id:une-lettre-arrive:20181208110203j:plain
f:id:une-lettre-arrive:20181209160235j:plain
f:id:une-lettre-arrive:20181208151212j:plain

電池蓋を外すとボリュームと充電端子があります。
f:id:une-lettre-arrive:20181208111511j:plain

次はジクウドライバーです。
ジクウドライバーを開けると中央左部にSW4A,SW4AB,SW4C,SW4とありますがこれが識別ピンです。黒はGNDです。これらに配線をはんだ付けし、ワニ口クリップなどでブレッドボードで動作確認をするのが1番安全確実です。その際は絶対に電池を抜いておいてください。4本の線をarduinoに繋げた時点でジクウドライバーも通電します。ジクウドライバーと喋るのでわかりやすいです。(音がうるさいともいいます。夜中は気をつけて)電池を入れた状態だと5V+4.5Vの電流が流れるので壊れます。ってか壊しました…私は電池ボックス裏の抵抗が切れただけで済んだのでなんとか直りましたが絶対にやらないでください。
配線の色は合わせた方がわかりやすいです。といいながら違う色が混ざってるのは配線を再利用しているからです。
f:id:une-lettre-arrive:20181208113145j:plain

受信機はここのスペースに入れます。
f:id:une-lettre-arrive:20181208113724j:plain

リードスイッチはこのスペースです
f:id:une-lettre-arrive:20181208113951j:plain

表から見るとこうなります(見づらいですが)
このリードスイッチの位置に合うようにライドウォッチ側にネオジム磁石を取り付けてください。
f:id:une-lettre-arrive:20181208114459p:plain

全体像です。arduinoについている基板が短いのはまた再利用したからです。
マスキングテープは絶縁の代わりなのですが効果があるのかどうか…
電源をスイッチがオンになった時に通電するよう取り付けてください。
本体は電池ボックスのスペースに入れておきます。
f:id:une-lettre-arrive:20181208115542j:plain

うまく行けばこんな感じになります。



うまく動かなかったら取り敢えず電源入れ直しと作り込みが甘いのですがひとまず完成としました。
少しでも皆さんの電子工作のお役に立てれば嬉しいです。
と、書籍の締めくくりみたく書きましたが未だにトランジスタとかダイオードとかよく分かってない私でも時間をかければ何とか作れますのでもし挑戦したいという方は頑張ってください。