フルフルレジェンドライダーエボルボトルをつくる
前回は食玩のコブラエボルボトルの中に色々詰め込んで、プログラミングなしでビルド/エボルドライバーとの連動発光を実現しました。食玩ライダーエボルボトルも同じやり方で発光改造はできそうでしたが、基本的に同じことを2回やるのが好きではないので、もう少し手の込んだものを作ってみることにしました。
というわけで、今回作ってみたのが『フルフルレジェンドライダーエボルボトル』です。随分名前が長いですが、読んで字の如くで、フルフルすることでレジェンドライダーに変身できるアイテムです。フルフルして変身するレジェンドライダーを選択した後は、キャップを回して選択を確定させる仕組みにしています。これ一本で変身アイテムとして完結させるため、連動アイテムはトラン/ネビュラスチームガンを想定しています。
発想としては、ライダーエボルボトルをエボルドライバーに装填したときに「ライダーシステム!」なんて叫ぶものだから、「そんな大層な名前のシステムならレジェンドライダーにだって変身できるだろう」というところからきています。前に作ったジーニアスフルボトルは各レジェンドライダーの必殺技は繰り出せても変身はできなかった(←正確には、やろうと思えばできたけど盛り込み過ぎになるのでやめた)ので、それを補完する位置付けの敵方派生アイテム、みたいなものです。
今回の工作は、『狭いエボルボトルの中にいかに部品を詰め込むか』が全てです。
なにせこれだけの部品を小さなボトルに詰め込まなくてはならないのです。ブレッドボードは実際には入れないし、ジーニアスフルボトルのときに比べれば部品は少ないですが、それでもどう見たってギリギリです。何も考えずに適当に半田付けしていこうものなら、一発アウト確実。ジーニアスフルボトルのときもスペース的にはかなりギリギリでしたが、今回はそれを上回る余裕のなさです。
当然、何よりまず、部品選びが重要になります。今回使用した具材は以下になります。
毎度おなじみ、Arduino Pro Miniです。ジーニアスフルボトルの改造で使用したものと同じです。サイズ的にはTrinketを使う方が省スペースなのですが、Trinketだと必要なGPIOピンの数がギリギリ足りませんでした。。。
毎度おなじみ、MP3プレイヤーです。これ以外の選択肢は今のところないかと思います。
電源もおそらく、パワーと省スペースを両立できるのはこれ一択だと思います。ご利用の際は充電器も忘れずに。自分は以下のモジュールを使用しています。
これら以外に必要なのは、できるだけ小型のスピーカーと、適当な3mm LED+抵抗器、電源ON/OFF用のスライドスイッチ、それからキャップの回転認識とスチームガンへの装填認識に必要なディテクタスイッチと、あと「フルフル」ギミック実現に必要な振動(傾斜)スイッチです。
いつもなら、ここからハードウェアの改造手順を先に紹介して、最後にソフトウェア(プログラム)の全文紹介をするのですが、今回は先にプログラムの紹介を済ませてしまいます。今回のプログラムはとても短いので。たった150行、ジーニアスフルボトルのときのおよそ1/4です。
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
SoftwareSerial ss_mp3_player(2, 3); // RX, TX
#define LED_PIN 4
#define VIB_PIN 5
#define CAP_PIN 6
#define INSERT_PIN 7
#define BLINK_INTERVAL 200
#define RIDER_COUNTER_MAX 18
#define SOUND_OFFSET 18
DFRobotDFPlayerMini mp3_player;
uint8_t last_vib_state = HIGH;
uint8_t vib_state = HIGH;
uint8_t last_cap_state = HIGH;
uint8_t cap_state = HIGH;
uint8_t last_insert_state = HIGH;
uint8_t insert_state = HIGH;
uint8_t rider_counter = 0;
boolean is_ready_change = true;
boolean is_lighting = true;
unsigned long last_blink_time = 0;
unsigned long now = 0;
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
pinMode(VIB_PIN, INPUT_PULLUP);
pinMode(CAP_PIN, INPUT_PULLUP);
pinMode(INSERT_PIN, INPUT_PULLUP);
// ---------- MP3プレイヤーセットアップ ----------
ss_mp3_player.begin(9600);
if (!mp3_player.begin(ss_mp3_player)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin music_player:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true);
}
Serial.println(F("mp3_player online."));
mp3_player.setTimeOut(500); //Set serial communictaion time out 500ms
mp3_player.volume(27); //Set volume value (0~30).
// ---------- 起動エフェクト ----------
digitalWrite(LED_PIN, HIGH);
mp3_player.playMp3Folder(37); // 「ライダーシステム」
delay(1800);
digitalWrite(LED_PIN, LOW);
}
void loop() {
// ---------- ボトルを振ったときの処理 ----------
vib_state = digitalRead(VIB_PIN);
if(last_vib_state == HIGH && vib_state == LOW){
if(digitalRead(CAP_PIN) == LOW){
if(digitalRead(INSERT_PIN) == LOW){
// キャップがロックされて、スチームガンに装填されている状態で振られたとき
if(is_ready_change){
digitalWrite(LED_PIN, HIGH);
mp3_player.playMp3Folder(rider_counter + SOUND_OFFSET); // 「エボリューション」+ライダー名+変身音
delay(10000);
is_ready_change = false;
}else{
mp3_player.playMp3Folder(38); // 銃撃音
for(int i; i<2; i++){
digitalWrite(LED_PIN, LOW);
delay(100);
digitalWrite(LED_PIN, HIGH);
delay(100);
}
delay(1600);
}
}else{
// キャップがロックされて、スチームガンに装填されていない状態で振られたとき
;
}
}else{
if(digitalRead(INSERT_PIN) == LOW){
// キャップがロックされず、スチームガンに装填されている状態で振られたとき
;
}else{
// キャップがロックされず、スチームガンに装填されていない状態で振られたとき
rider_counter++;
if(rider_counter > RIDER_COUNTER_MAX){
rider_counter = 1;
}
mp3_player.playMp3Folder(rider_counter); // 振る音+ボトル名
for(int i; i<2; i++){
digitalWrite(LED_PIN, HIGH);
delay(100);
digitalWrite(LED_PIN, LOW);
delay(100);
}
delay(1600);
}
}
}
last_vib_state = last_vib_state;
// ---------- キャップを回したときの処理 ----------
cap_state = digitalRead(CAP_PIN);
if(last_cap_state == HIGH && cap_state == LOW){
digitalWrite(LED_PIN, HIGH);
mp3_player.playMp3Folder(39); // ロック音
delay(2000);
}else if(last_cap_state == LOW && cap_state == HIGH){
digitalWrite(LED_PIN, LOW);
mp3_player.playMp3Folder(40); // ロック解除音
delay(2000);
}
last_cap_state = cap_state;
// ---------- スチームガンに装填したときの処理 ----------
insert_state = digitalRead(INSERT_PIN);
if(last_insert_state == HIGH && insert_state == LOW){
if(rider_counter > 0){
digitalWrite(LED_PIN, HIGH);
mp3_player.playMp3Folder(41); // 装填音+「ライダーシステム」+待機音
delay(3500);
}
}else if(last_insert_state == LOW && insert_state == HIGH){
if(rider_counter > 0){
digitalWrite(LED_PIN, LOW);
mp3_player.playMp3Folder(42); // ボトル解除音
delay(2000);
}
is_ready_change = true;
}
last_insert_state = insert_state;
// ---------- 変身待機中の発光処理 ----------
if(digitalRead(INSERT_PIN) == LOW && is_ready_change){
now = millis();
if(now - last_blink_time >= BLINK_INTERVAL){
if(is_lighting){
digitalWrite(LED_PIN, LOW);
}else{
digitalWrite(LED_PIN, HIGH);
}
is_lighting = !is_lighting;
last_blink_time = now;
}
}
delay(10);
}
基本的には、振動スイッチが震えたときに「別のどのスイッチが押されているか」で挙動を変えているだけです。何も押されていない状態で震えればライダー選択、キャップのスイッチと装填認識のスイッチが両方押されているときに震えれば変身音再生、といった具合です。こういう仕組みにしておくと、トラン/ネビュラスチームガン側は無改造で変身遊びができるようになります。
それでは、ハードウェアの改造手順の紹介に入ります。
とにもかくにも分解しないと始まらない。。。のですが、今回はもう、本当にネジが固かった。誇張なしに、諦める寸前でギリギリ回ってくれた感じです。結局最後まで回せなかったネジもあったのですが、幸い、外せなくても問題ないところだったので大丈夫でした。
とりあえず、一番加工しやすそうなこの部分から。穴を貫通させて、
フロントパーツを外して、前から3mmLEDを通すと、
なんか良い感じにハマってくれました。
今回はとにかくスペースが足りないので、少しでもモノが入りそうなところにはどんどん押し込んでいきます。
認識ピンのプレート部分。まずここの縁を少し削って、振動スイッチを埋め込みました。
次に、上の方にディテクタスイッチを埋め込みます。これは、ボトルの装填認識用です。
ちょっと見にくいですが、こんな感じでトラン/ネビュラスチームガンに装填すると、スイッチが押し込まれた状態になります。
認識ピンのプレート部分に埋め込んだ部品からの配線をボトルの内側に通すため、ボトルの裏面に大きく開口部を設けます。
そしてここに電源用のスライドスイッチをはめ込みます。
認識ピンのプレートパーツをはめ込んで内側から見てみると、こんな感じ。なんとか収まってくれていますが、これに配線をした後も収まってくれているかどうかは未知数。
次にキャップの回転を認識するためのディテクタスイッチをはめこむための溝を作ります。
こんな感じでスイッチを設置すれば、キャップが回転したときだけスイッチが押されるハズです。
元々のスイッチの形状だと半回転ごとにスイッチが押されてしまうことになるので、内側の片方の面パーツを削っておきます。
さらに、キャップのラベルが正面を向いているときにスイッチがずっと押されている状態にしたいので、残した面パーツ側にプラ板を重ねて厚みを持たせます。
ここまではまあ、順調と言えば順調です。何せまだ配線をしていないので。ここからが本当の地獄だ。。。
今回の配線はこんな感じです。この程度であっても実際にやるとなるとなかなかに大変です。
これが、
こうなって。。。
こうなって。。。
こう。
さらっと書いてますが、とにかく一個間違えて半田付けしてしまうとやり直すのが大変なので、頭の中で都度最適解を考えながら半田付けをする、ということを繰り返していました。多分配線だけでトータル5時間ぐらいかかった気がします。
さて、とにもかくにも配線は済んだので、後はパーツが全部中に収まってくれるのを祈るのみ。。。
いの。。。
ギリギリ収まりきりませんでした。ネジを締め込むと無理やり閉めれないことはないのですが、そうすると配線が甘いせいかなんなのか、音が鳴らなくなってしまうという。。。ちょっと悔しいですが、やり直す気力もないので、ここで手打ちとしました。まあ、普通に遊べるし良いかなと。
というわけで、フルフルレジェンドライダーエボルボトル、とりあえず完成です。動作については、この記事トップの動画をご確認くださいませ。
発光が結構良い感じで気に入っています。
トランスチームガンに装填したところ。この状態で銃口を上に向けると、ボトルの振動(傾斜)スイッチが反応して変身音が発動する、という仕組みです。そのため、トランスチームガン側は電源を入れておく必要がありません。というか、入れてしまうとトランスチームガン側の音声と重複してしまってワケのわからないことになります。
動画では銃口を上に傾けるときに一緒にトリガーを引いていますが、あの操作に電子回路的な意味はありません。ああすることで、「トリガーを引くことで変身している」という気分が味わえるというだけです。
ということで、フルフルレジェンドライダーエボルボトルでした。これが、私のビルド関連の最後の工作になります。
最後ということで、記念(?)に自分が手を加えたビルドのアイテムを全部並べて写真を撮ってみました。大から小、ピンからキリまで全部並べてみましたが、結構色々やったなあ。。。
- フタを回すと発光するゴリラフルボトルとダイヤモンドフルボトル
- どんなフルボトルも簡単に発光させることができるフルボトル専用発光台座
- レジェンドライダーフルボトルを本家とは別アプローチで実現してみたオリジナルフルボトル
- メーター部分を綺麗に発光できるようにしたハザードトリガー
- 自分で好きなベストマッチを作り出すことができるトランスチームガン・カスタム
- Be The Oneを再生させたり全フルボトルの音声を読み上げたりレジェンドライダーの必殺技を発動させたり、とにかく色々詰め込んだジーニアスフルボトル
- ビルド/エボルドライバーと連動して目を発光できるようにしたコブラエボルボトル
- レジェンドライダーへの変身遊びをできるようにしたフルフルレジェンドライダーエボルボトル
- 中身がスカスカで寂しかったので中身を入れてフルフル遊びができるようにしたモモタロスフルボトルとクローズマグマフルボトル
- 「磁石で中身を常に浮かしておくとどんな感じになるんだろう」という興味だけで作ってみたロボットフルボトル(←結局あんまり変わらなかったので没ネタにした)
これだけ色々なことができたのは、とにもかくにも素材が、『仮面ライダービルド』という番組が良かったからに他ならないと思います。科学を扱うというテーマも、自分に合っていたのだと思います。この一年、本当に楽しませてもらいました。製作してくださったスタッフの方々にお礼申し上げます。ありがとうございました。
次回作の『仮面ライダージオウ』ですが、これはもう、バンダイ様も相当気合が入っているようで、玩具はすごく出来が良さげですし、そもそもレジェンドライダーが題材なので、自分があれこれカスタマイズしてどうこうする必要がそもそもなさそうです。というわけで、『ジオウ』については、とりあえずただのいち視聴者として、長男と一緒に観て楽しもうかなと思っています。ワクワク。
。。。あ、すみません。一個完全に忘れていました。やっつけ仕事でこんなんも作ってました。現物も写真も残っていないので動画だけ。
しょうがない、思いついてしまったんですもの。
ディスカッション
コメント一覧
まだ、コメントがありません