ボタンも配線もない、ただの板です。ところが、その板の「上」を叩くとゲームのキャラクターが上に進み、「右」を叩くと右に曲がります。板の裏に付いた小さなマイコン「M5StickS3」が、叩いたときの揺れだけで「どこを叩いたか」を当てているのです。判定するAIはネットにつながず、マイコンの中だけで動いています。
この記事は、YouTube チャンネル「ビーバーものづくり研究所」で 2026年10月22日に公開した動画「3Dプリントした板がゲーム機になる!マイコン単体で動くエッジAIの全手順 (M5StickS3 × Edge Impulse)」の記事版です。無料・ブラウザで使える「Edge Impulse」を使ったエッジAIの作り方の全手順を、文章で読み返せるようにまとめました。
![]()
ボタン0個の板が、なぜゲーム機になるのか
用意するものは、M5StickS3、叩く板、Edge Impulse の3つです。M5StickS3 は4,290円(2026年9月時点)の小さなマイコンで、揺れと回転を測るセンサー(IMU)が入っています。板は3Dプリンターで作り、裏に M5StickS3 を固定しました。
なぜAIが要るのでしょうか。上を叩いたときと右を叩いたときの揺れの波形を重ねてみると、ほとんど同じに見え、単純なルールでは決められません。そこで、正解付きの例をたくさん見せて、違いをAIに見つけてもらうことにしました。これが機械学習です。
Edge Impulse は、マイコンのような小さな機器で動くAIを作るためのサービスです。学習まではネットの向こうのコンピューターが担当し、できたAIはマイコンで動くプログラムとして書き出せます。今回の手順は全部無料でできました。流れは「集める」「覚えさせる」「確かめる」「M5に入れる」の4ステップです。

ステップ1 集める ― 板の工夫と、正解付きの揺れ集め
最初の工夫はデータではなく板のほうでした。ただの一枚板では、どこを叩いても板全体が揺れて、揺れ方がほとんど変わりません。そこで、矢印の印のまわりにU字の切れ込みを入れて、印の部分が外側だけでつながった「舌」の形にしました。舌の長さと厚さは上下左右で変えてあり、長くて薄い「上」は低く、短くて厚い「左」は高く響きます。
データの送り方にも工夫が要ります。叩いた揺れは1秒に800回も測る速いデータなので、ゆっくり変わる数字向けのデータフォワーダーではなく、M5StickS3 に収集用ファームウェアを入れて、公式ツール(edge-impulse-daemon)でつなぐ方法にしました。このファームは、叩いた瞬間を見つけて0.3秒ぶんの揺れを切り取り、10回ぶんをまとめて送ります。収集用ファームは Claude Code で書きました(プロンプト例は動画の概要欄にあります)。
集めたのは、上下左右を50回ずつと、板の端や近くの机を叩いた「その他」20回の、合わせて220回ぶんです。それとは別に、学習には一度も見せないテスト用60回も取っておきます。
ステップ2 覚えさせる ― 126個の手がかりと小さな網
学習の設定は「Impulse design」で3つの箱をつないで組みます。1つ目は、叩いた揺れを0.3秒ぶん切り取る箱。2つ目は、揺れから手がかりを取り出す「スペクトル分析」の箱で、揺れの強さや、速い揺れとゆっくりした揺れの混ざり具合を測ります。ステップ1の「舌ごとの響き方の違い」を数字にするのがこの箱で、1回の揺れから126個の手がかりができます。
3つ目の箱がニューラルネットワークです。126個の手がかりを20個、10個とまとめて、最後に上下左右と「その他」の5つの答えにします。重みは全部で2,805個しかありません。学習用データの一部で確かめた検証の数字は95%を超えましたが、これは勉強に使った問題での数字です。本当の実力は次のステップで分かります。
ステップ3 確かめる ― 「勉強したのに点数が下がる」事件
取っておいたテスト用60回で採点すると、60回中50回正解でした。上下左右はほとんど当たっていて、弱かったのは「その他」で、板の端を叩いたのに方向だと間違えてしまうのです。
そこで、もっと当てようと方向の例を80回ぶん足して学び直したところ、同じテストで50回正解が46回に下がりました。「その他」の正解は20回中10回まで減っていました。方向の例ばかり増えて、「その他」が手薄になったようです。このステップのコツは、点数だけでなく「どれをどれと間違えたか」の表を見て、苦手なところのデータを足すことです。
マイコンに入れる前の準備として、学習した重みを8ビットの整数に置きかえた「int8」版も作りました。大きさは約4分の1になり、テストの点数は元の版と同じでした。

ステップ4 M5に入れる ― マイコン単体で判定する
最後は、覚えたAIを M5StickS3 へ引っ越しさせます。メニュー一番下の「Deployment」で、C++ライブラリの形と8ビット版を選んでビルドします。M5StickS3 は Edge Impulse の公式対応ボードの一覧には入っていませんが、書き出されるのは普通のC++プログラムなので、M5でもそのまま動きました。
書き出したライブラリには、手がかりを取り出す計算と学習した重みがまとめて入っています。判定用ファームからは、切り取った0.3秒の揺れを渡して判定の関数(run_classifier)を1回呼ぶだけです。大事なのは、集めたときと同じ切り取り方で渡すこと。
実機で測ると、手がかりを取り出すのに52ミリ秒、判定は1ミリ秒でした。重みは8ビット版で3キロバイトもありません。パソコンは、M5StickS3 から届いた「右」「上」といった答えをゲームに渡すだけで、考えているのはマイコンのほうです。センサーのすぐそばで、その場で判断する。これがエッジAIです。完成した迷路ゲームは、最後まで M5StickS3 の判定だけでクリアできました。
まとめ
集める、覚えさせる、確かめる、M5に入れる。この4ステップで、ただの板がコントローラーになりました。ポイントは、集める前の板の工夫と、テストで「間違え方」を見てデータを足し直すことです。自分の M5 で作ってみたい方は、まず動画で全体の流れをどうぞ:3Dプリントした板がゲーム機になる!マイコン単体で動くエッジAIの全手順(YouTube)
関連記事:M5Stack が初めての方は、シリーズ全体を解説したこちらもどうぞ ― Arduino経験者のためのM5Stack入門 ― 配線を消す3機種 StopWatch/CoreS3/AtomS3R を解説
動画で紹介したもの(購入リンク)
購入リンクは、動画の概要欄のものをそのまま使っています。
