dev + delights

子供と楽しく電子工作・プログラミング + 親の勉強

"小学1年生"の付録パズルをATOM Mate for toioで遊び倒す!

本記事は、toio Advent Calendar 2022の参加記事です。クリスマスが近づいてきました。

ATOM Mate for toio™ — スイッチサイエンスの発売で toio熱が復活したところで

タイムラインを見ると 小学一年生 2022年 12月号 [雑誌] に 面白そうな付録が1

このパネルの形状は、その昔大流行したチクタクバンバンというゲームのパネルと全く同じです。この付録のパネルにストローを巻きつけたtoioに乗せると

こんな感じで軽快に動作します。

付録の内容は、予め決められた位置にパネルを配置し、ポケモンのキャラクターを目印にパズルを解くことで、「プログラミング的な思考」を学ぶ内容でした。

この付録のパネルとATOM Mate for toio を使って発展させてみます。

まずは紙工作でデコレーション開始

ポケモンの存在感があまりにも強いので、まずは以前作成した自前のキャラクターに着せ替えます。

toio.io

こんな感じでデコレーションしてみました。

この時点でtoioを走らせ、パズルっぽい動きをさせると以下のような感じです。今回の付録は8個のパネルですが、十分パズルっぽい動作は体験できました。

次にArduino & 電子工作でデコレーション

ATOM Mate for toioの紹介記事としては、UIFlow上で、内蔵の距離検出センサ(VL53L0X)やAtom MatrixのLEDを用いたサンプルが紹介されているようです。今回は、LEDが1個しか無いAtom LiteとSSD1306を搭載したI2C接続の液晶を接続してみます。

センサ・液晶の接続

Arduinoのライブラリをそのまま使わせてもらいました。

今回利用する二つのデバイスのうち、距離センサはATOM Mateに内蔵されているのですが、両方のデバイスと通信するために、I2Cを2系統設定する必要があります。ArduinoのESPのI2Cの実装は、

github.com

WireWire1として実装されています。それらにATOMのピン番号を割り当てます2

のように、26,25と26,32 をそれぞれセットすればよいのですが、ライブラリによってはWireインスタンスのみ前提のケースがあるので、その場合はWire1を設定するように書き換えてあげると良いと思います。今回のデバイスの場合、以下のように初期化すると動作させました。

#include <M5Atom.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <VL53L0X.h>

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire1, OLED_RESET);
VL53L0X sensor;

void setup() {
  M5.begin(true, true, true); 
  Wire1.begin(26,32);
  Wire.begin(21,25);

液晶をGROVE端子で接続

液晶に元々ついていたピンヘッダを外し、GROVE端子で直接接続します。 以下のような接続にしてみました。SCLとSDAの位置がGROVE端子の並びだと液晶のピンの位置と反対なのでケーブルをクロスする必要がありました。

パネル上でいざ走行

手を検出すると、走行停止・再開を繰り返し、画面上のキャラクターが目をつぶるようなスケッチを書いてみました。

最終的な動作はこちらです。子供の反応も上々でした。

ATOM Mate for toio の感想

ATOM Mate for toioを組み合わせることで、ただ走行するだけでなく手やパズルなどの障害物とのインタラクションが増えることで色々な発想が生まれてきそうです。引き続き他のデバイスとの組み合わせなどを模索してみたいと思います3

www.youtube.com


  1. この記事が公開される頃にはバックナンバーになっているかもしれません。
  2. https://docs.m5stack.com/en/core/atom_lite
  3. toioのキューブの中にあるハードウェアに物理的に直接アクセスできるピンとか、ATOM Liteをキューブに内蔵できるなど、より融合してくれると嬉しい気もします。