
爆走兄弟ごっこがやりたくて
概要
主人公(あなた)の掛け声にミニ四駆が応え、限界突破したり技を繰り出したりしてくれるようにしたい。
作った物:音声(音圧)認識できるミニ四駆
主な材料:ミニ四駆、マイコン(Obniz)、音圧マイク(VKLSVAN LM393)、モバイルバッテリー
予算:1.3万円程度。マイコンとモバイルバッテリーで合計1万円位
ストーリー
昔々ある所に「爆走兄弟レッツ&ゴー!!」という漫画があった。
そこでは、主人公とミニ四駆は友達でした。ミニ四駆には特殊なチップが搭載され、心を通わせた主人公が指示や声援を送ると、それに応えて加速したり、技を繰り出したり、急に逆走したりしていた。
〇ンボン派の自分でさえ、興味を持たざるを得ず、ハイパーヨーヨー並みに没頭した。
当時自分はそれにあこがれ、夢中になってミニ四駆を作り、漫画の主人公のように「マグナーム!」と叫んでみたりしたものだが、当然の如く、特に何も起こらずマシンは淡々と走るだけだった。
幼心に、少々がっかりしたものだ。
そして現代、インターネットと無線LANの普及により、対象と遠隔でつながる事が可能になった。また、IoTや関連素材も容易かつ安価に手に入るようになったので、子供の頃の夢を実現すべく発明をした。

やった事
ミニ四駆を作る(簡単?)
マイコンとマイクの接続(やや難)
マイコンとモーターの接続(簡単)
マイコンを制御するJavaScriptの作成(難)
ミニ四駆の機嫌回復を待つ(超難)
1.ミニ四駆を作成。
これは説明書を見ながら作ればOK。モーターの回転数が可変のためか、ギアが空回りする事もあるので注意。ギアがしっかり回るよう、強化パーツ(数百円)を使ったら安定した。

2.マイコンとマイクの接続
専用のマイクが無いため、別のマイコン用のマイクを接続。デジタル音源であれば認識できた。
Obnizは元々Webブラウザやスマホからの信号も受け取れるので、そちらのマイクでもOK。ただ、主人公がスマホを見続ける事になり、それもどこかおかしいので、今回は搭載型にしている。
(0番ピン:VCC、1番ピン:GND、2番ピン:OUT)

3.マイコンとモーターの接続
接続はワニグリップにて、マイコンとモーターを直接接続。JavaScriptによって、モーターへの電力供給を制御し、回転数を上げたり下げたりしている。
4.マイコンを制御するJavaScriptの作成
音圧が高い時と低い時でモーターの回転数を変えている。マイクの信号を取得するコードを作成するのが少々大変だった。
LEDはマイコンが反応しているかを確認するためなので、あっても無くてもOK。
// Obnizの初期設定
const Obniz = require('obniz');
const obniz = new Obniz('あなたのObnizID'); // obnizIDに自分のIDを入れます
obniz.onconnect = async () => {
//VKLSVAN LM393(青い方)を使用。初期不良も多いので注意。点滅が多いのは不自然
// 0番ピンをVCCに設定
let vccPin = obniz.io0;
vccPin.output(true); // HIGH (VCC)
// 1番ピンをGNDに設定
let gndPin = obniz.io1;
gndPin.output(false); // LOW (GND)
// 2番ピンをデジタル入力ピンとして使用
let digitalInput = obniz.io2;
digitalInput.input();
var motor = obniz.wired("DCMotor", {forward:10, back:11}); //モーターの出入り
const led = obniz.wired("LED", {anode:5, cathode:6}); // LEDの設定
// 音量を測定する関数
const measureVolume = async () => {
//デジタル信号の状態を読み取る
let digitalValue = digitalInput.value;
console.log(digitalValue); // 測定した音量を出力 + true(HIGH)またはfalse(LOW)を出力
//ディスプレイ表示
obniz.display.clear(); // 一旦クリアする
obniz.display.print("Volume " + digitalValue); //日本語は表示できない。
//powerの差が大きいと調子が悪くなる
if(digitalValue){
motor.power(35); //0~100で制御。高すぎたり低すぎたりすると動かない。
motor.move(true);
led.on(); // LEDをつける
await obniz.wait(300); //0.3秒待つ
led.off(); // LEDを消す
}else{
motor.power(15); //0~100で制御。高すぎたり低すぎたりすると動かない。
motor.move(true);
}
};
// 0.3秒ごとに音量を測定
setInterval(measureVolume, 300);
};
全て接続するとこんな感じになる。
固定はガムテープを使用。モバイルバッテリーがかなり幅を取っているので、車載電池で代替できるともっとすっきりした作りに出来そう。

5.ミニ四駆の機嫌回復を待つ
接続が完了していても、機嫌によって動かない時がある。何度かリトライし、根気よく待った方が良い。
最終的なものと軌跡はこうなった👇。
(音量注意)
— ITi (@ITi517285481901) September 8, 2023
声援を送ると走るミニ四駆「くまモンガーDX」が完成。
室内なので元々モーターを弱めているのに加え積載量オーバーなので遅め。
速度が安定しないためかギア部分が空回りするなど物理面での調整も多かった。
インホイールモーター化のためにジャンボ四駆を作るのも手か?#Obniz#ミニ四駆 pic.twitter.com/xiBvdGA0iw
開発を終えて
ちゃんと声に反応して動いてくれて良かったし、とても嬉しかった。
また、出来上がった物を他の人に見せたりネット公開したところ、思いの外反響があって驚いた。
子供の頃の夢ではあるが、車体は積載量オーバーでスピードは出ないし、留め具もガムテープ。見た目は幸いにもミニ四駆の車体を乗せられたため見られるものではあったが、耐久度はとても低い。コードも前述のとおり、それほど高度なものでもない。
また、曲がったり限度を超えたスピードなど、柔軟な動きも出来ない。音声認識でもないので、曲がらせる事も技を出すことも出来ないし、持ち主以外の音でも反応してしまう。完成品と言えるのかという疑問さえある。
しかし、皆さんは私の夢に共感していただいたのか、とても評判が良かった。技術力もさる事ながら、稚拙なもの、技術、アイデアであっても、夢を実現する事、そして世に見せる事が大事なのだなと感じた。
今後の発展
ここから先はIoT基盤の開発や車体の開発も含めて、トータルで行う方が良い物が作れるだろう。
今回は電源をモバイルバッテリーにしたが、ミニ四駆搭載の電池や別の小型電池を使うと車体への収まりもいいだろう。配線もワニグリップを使ったが、金具化したい。
またマイコンはObnizを使ったが、元々汎用性のあるマイコンのため、爆走兄弟ごっこにおいては機能が冗長である。必要な機能に特化したマイコンが作れれば、車体に収まるだろう。ミニ四駆を拡張子、モーターを2個にすれば自律的なカーブも出来るようになりそうだ。
個人では難しそうだが、なんらかの方法で叶えてみたい。