※UiFlow で実装する場合はUiFlow 版 ATOM Babiesを参照してください。
ATOM Babies は M5Stack 社のATOM Matrixを顔とし,ATOM Mateを利用して M5Stick C シリーズで使用する Hat を胴体にしたかわいいいきものです。Hat だけでなく,M5Stack 用に用意されているユニットも使用できるので,それらの機能を活用してさまざまな能力を持つ ATOM Babies をつくることができます。
ちなみに,ATOM Babies の名付け親は M5Stack 社 CEO の Jimmy Lai さんです。
Arduino IDEとPlatformIO IDE for VSCode 環境に対応しています。動作確認は Windows 11 上で実施しています。
https://github.com/3110/atom-babies-arduino/archive/refs/tags/v0.1.0.zip をダウンロードし,メニューの「スケッチ」-「ライブラリをインクルード」-「.ZIP 形式のライブラリをインストール...」を選択して ZIP ファイルを読み込みます。読み込み後,念のために Arduino IDE を再起動してください。
サンプルはメニューの「ファイル」-「スケッチ例」にある「カスタムライブラリのスケッチ例」から「ATOM Babies」を選択し,「AllFaces」「Blink」「Bow」「Greeting」のいずれかを選びます。
GitHub からコードをクローンし,VS Code で開きます。VS Code からコンパイル・ファームウェアの書き込みをする場合は,platformio.ini
のsrd_dir
にコンパイルしたいサンプルのフォルダを指定し,PlatformIO:Upload ボタンを押します。
src_dir = examples/AllFaces
; src_dir = examples/Blink
; src_dir = examples/Bow
; src_dir = examples/Greeting
PlatformIO のターミナルからコンパイル・ファームウェアの書き込みをする場合は以下を実行します。
git clone https://github.com/3110/atom-babies-arduino
cd atom-babies-arduino
platformio run --target=upload
顔の向きは USB-C の口を下にした向きを基準として以下のように定義しています。
顔の位置は顔の向きがどの方向でも以下のように定義しています。
通常の顔の向きで顔を表示するための最低限の実装は以下のようになります。
M5.begin()
とM5.update()
はそれぞれbabies.begin()
とbabies.update()
の中で呼んでいるので,改めて呼ぶ必要はありません。
#include "AtomBabies.h"
using namespace M5Stack_AtomBabies;
AtomBabies babies;
void setup(void) {
babies.begin();
babies.display();
}
void loop(void) {
babies.update();
}
Hat や Unit の機能を使って実装するために,プラグインの機構を用意しました。
plugins/AbstractAtomBabiesPlugin.h
をインクルードし,AbstractAtomBabiesPlugin
を継承したクラスを実装してください。
実装例:SamplePlugin.h
#pragma once
#include "plugins/AbstractAtomBabiesPlugin.h"
namespace M5Stack_AtomBabies {
class SamplePlugin : public AbstractAtomBabiesPlugin {
public:
SamplePlugin(void) {
}
virtual ~SamplePlugin(void) {
}
// babies.setup()から呼び出される
virtual bool begin(AtomBabies& babies) {
return true;
}
// babies.update()から呼び出される
virtual bool update(AtomBabies& babies) {
return true;
}
virtual const char* getName(void) const {
return "Sample";
}
};
} // namespace M5Stack_AtomBabies
実装したプラグインはAtomBabies::begin()
を呼び出す前にAtomBabies::addPlugin()
に渡します。追加できるプラグインの数は今のところ 10(AtomBabies::MAX_PLUGINS
)で,追加した順に呼び出されます。
#include "AtomBabies.h"
#include "SamplePlugin.h"
using namespace M5Stack_AtomBabies;
AtomBabies babies;
SamplePlugin sample;
void setup(void) {
babies.addPlugin(sample);
babies.begin(); // sample.begin(babies)が呼ばれる
}
void loop(void) {
babies.update(); // sample.update(babies)が呼ばれる
}
具体的な実装例はplugins/PIR.[h|cpp]
や,これらを使ったサンプルGreeting
を参照してください。
ATOM Babies の顔の表示を一通り表示します。通常の向きから開始し,まばたきをした状態で始まります。ATOM Babies の顔(ボタン)を押すごとに右 → 逆さま → 左 → 通常と繰り返します。
ATOM Babies の顔(ボタン)を押すたびに,まばたきを始めたり止めたりします。
まばたきの設定はデフォルト(AtomBabies.cpp
のDEFAULT_BLINK_PARAM
を参照,2 回以下のランダムな回数でのまばたき,目を開けている時間が 500 ミリ秒,目を閉じている時間が 100 ミリ秒,次のまばたきを始めるまでの間隔が 1000 ミリ秒)です。
ATOM Babies の顔(ボタン)を押すとおじぎをします。押すごとにおじぎをする回数が増えます。
ATOM Babies の顔(ボタン)を押すたびに 0 から順に数字が表示されます。2 桁以上の数字は各桁を順に表示します。
ATOM Babies:人が来るとあいさつをする(YouTube)
人が目の前に来ると顔を出しておじぎをします。PlatformIO 環境でコンパイルする場合は環境をenv:greeting
に変更してください。
ATOM MatrixにATOM MateとPIR Hatを接続
ATOM Mateを使用してPIR Hatを接続して利用します。
PIR Hat が胴体となるため,顔の向きはOrientationUpsideDown
にします。
PIR は Passive pyroelectric infrared detector(受動焦電型赤外線検出器)の略で,人間が発する赤外線を検知し,目の前にいるかを判断します。 PIR Hat の仕様で,いったん検知した後,次に検知するまでに 2 秒間の遅れがあります。
頭をなでると喜びます。他にも同じHappy
が動いている子がいれば,その子たちにも喜びを伝えます。PlatformIO 環境でコンパイルする場合は環境をenv:happy
に変更してください。
試す場合は Hat を付けた状態で底面を固定しておいてください。