『昼夜逆転』工作室
[トップページへ戻る]

シリアルLED WS2812と加速度センサーを利用した迷路ゲーム

2019年3月
ひょんなことから入手したWS2812パネル。センサーと組み合わせてゲームを作りました。 WS2812の制御プログラムを自作することと、加速度センサーをアナログ入力デバイスとして利用してみることが目的です。 回路図とプログラムを公開しています。
【参考】 6軸センサーMPU-6050動作テスト

WS2812について

WS2812の詳細についてはデータシートで確認してください。 LEDを点灯させるにはHi/Loのパターンで0と1を表現し、RGB:24bitのデータを送ります。 ただしタイミング(Hi/Loの長さ)にクセがあり、注意が必要です。
0/1の表現についてそれぞれHi+Loの長さが違いながらも、どちらも1.25us+-600nsに収めろとのこと。 しかしそのようなプログラムを書いてもイマイチ上手く動作しなかったので(点いたり点かなかったり変な色だったり)、 データシートの値を参考に、実際に試しながら上手く動作する値を決めました。

タイミング

いずれにせよマイコンATmega328Pの内蔵8MHzでは遅いので16MHzのセラロックを使いました。
また、WS2812の電源電圧は仕様上5Vですが、3.3Vでも動作することが分かりました。その場合、緑が強く発色します。 例えばRGB=FF,FF,FFで緑っぽい白になります。緑成分を1/2にすると(RGB=FF,80,FF)、期待通りの白となります。その他の色も違和感ありません。
3.3V動作にすると、5V動作よりまぶしくない、消費電力が抑えられる、というメリットがあります。

開発中の様子 開発中の様子 開発中の様子

回路図と配線図

回路図

回路図

プログラム
ダウンロード LedGyroMaze.zip(プロジェクト一式)
開発環境: Windows10, AtmelStudio7

プログラムの大半はゲーム部分です。WS2812の制御部分はws2812lib.cです。
WS2812の制御について、タイマー・カウンタを使って厳密にタイミングを合わせようとするのは得策ではないと判断しました。 NOPを繰り返してタイミングを取る方法もありますが、それよりdelay_us()を使った方がスマートに思えます。
動作クロックに応じてHi/Loの長さを調整する場合も、delay_us()であれば簡単に対応できます。

MPU-6050については、X軸,Y軸を中心とした回転角が取得できればよく、また、高い精度は必要ありません。 本工作では加速度センサーの値を読み取っています。ジャイロセンサーに比べ処理が簡単です。

配線図
配線図 開発中の様子
配線図 開発中の様子

組み立て/完成

100円ショップで売っている、スマホゲーム用コントローラースタンドに収めました。 基板等を載せる台はプラ板、プラ棒、両面テープで作成しています。 LEDがまぶしいのでカバー兼用で塩ビ板をかぶせています。

MPU-6050と基板の接続
高さを抑えるためにロープロファイルのピンヘッダ、ピンソケットを使います。 入手が難しければ、基板側は1列ICソケット、モジュール側は細ピンヘッダでもよいです。

WS2812と基板の接続
WS2812の裏面にライトアングル型のピンヘッダを取り付けます。 基板側にも同じピンヘッダを取り付けます。それらを両端がQIコネクタのケーブルで接続します。

電池ボックスと基板の接続
電池ボックスと基板の接続はXHコネクタが定番です。 今回は手持ちがなかったのでロープロファイルのピンヘッダ、ピンソケットを使用しています。

開発中の様子 開発中の様子 開発中の様子 開発中の様子

動作の様子

【twitter】
【YouTube】

WS2812とMPU-6050を利用した迷路ゲーム。
シリアルLED(8x8のパネル)WS2812の動作テスト、兼、6軸センサーをアナログ入力デバイスとして使った例です。
基板を前後左右に傾けてプレイヤーを操作するダンジョン探索ゲーム。 最深部のお宝をゲットして元の位置に戻ってくればクリアー。 2階層目で動く赤い点は敵です。当たるとゲームオーバー。

※どちらも同じ動画です。

部品について

AE-XCL102
秋月オリジナルの昇圧型DC/DCモジュールはこれまでにいくつかありました。 しかし、いずれも比較的短期間で販売終了となっているようです。 代わりとしては、3V→3.3V、200mA程度取り出せるものなら何でもよいです。

WS2812
実はAliExpressでセンサー類を注文したら誤配送でこれが届きました。 返品する必要がなかったので、何か作ろうと考えて今回の作品になりました。 複数枚のパネルを接続して、より大きなパネルにすることもできます。
後に判明したのですが… WS2812Bという品種があり、電源電圧と0/1コードを表現するHi/Loのタイミングが違います。 もしかしたら本工作で使用しているものはWS2812Bかもしれません。

Xtal
16MHzのセラミック振動子(ムラタのセラロック)を使います。 内蔵負荷容量(15pFや30pFなどあり)は気にしなくてよいです。 本工作では30pFのものを使用しています。

迷路ゲーム 部品一覧  (回路図はここをクリック
部品名部品番号個数参考価格/備考
DC/DCモジュール U1 AE-XCL102 1 300円(秋月電子
AVR(マイコン) U2 ATmega328P 1 230円(秋月電子)
MPU-6050モジュール -- GY-521 1 AliExpress/Amazon
WS2812モジュール -- 8x8 1 AliExpress/Amazon
スライドスイッチ SW1 -- 1 数十円
タクトスイッチ SW2 -- 1 数十円
カーボン抵抗 R1 1kΩ [茶黒赤金] 1 100個100円
カーボン抵抗 R2,R3 10kΩ [茶黒橙金] 2 100個100円
LED D1 -- 1 数十円
積層セラミックコンデンサ C1 0.1uF [104] 1 10個100円
セラロック Xtal 16MHz 1 35円(秋月電子)
電池ボックス -- 単三用セパレート型 2 コード付きがよい
QIコネクタ -- 適宜 適宜 共立エレショップ、秋月電子
ピンヘッダ/ピンソケット -- 適宜 適宜 「配線図」「組み立て」の項を参照
ICソケット -- 適宜 適宜 「配線図」「組み立て」の項を参照
ゲーム用コントローラースタンド -- -- 1 100円(キャン・ドゥ

◆ ◆ ◆

ゲームコントローラーのガワがまさか100円ショップで買えるとは。これを見た瞬間に完成の形が決まりました。 何を作ろうとスマホの大きさに収めればこのケースが使えます。流行りそう!?
迷路生成のアルゴリズムを考えるのは面白いです。今回は10年前にケータイアプリ用に作ったプログラムを再利用(JavaからCへ移植)しました。


 
(C) 『昼夜逆転』工作室
[トップページへ戻る]