Skip to content

M5StackのATOM Matrixを使ったかわいいいきもの。

License

Notifications You must be signed in to change notification settings

3110/atom-babies-arduino

Repository files navigation

Arduino 版 ATOM Babies

UiFlow で実装する場合はUiFlow 版 ATOM Babiesを参照してください。

ATOM Babies

ATOM Babies とは

ATOM Babies は M5Stack 社のATOM Matrixを顔とし,ATOM Mateを利用して M5Stick C シリーズで使用する Hat を胴体にしたかわいいいきものです。Hat だけでなく,M5Stack 用に用意されているユニットも使用できるので,それらの機能を活用してさまざまな能力を持つ ATOM Babies をつくることができます。

ちなみに,ATOM Babies の名付け親は M5Stack 社 CEO の Jimmy Lai さんです。

環境設定

Arduino IDEPlatformIO IDE for VSCode 環境に対応しています。動作確認は Windows 11 上で実施しています。

Arduino IDE

https://github.com/3110/atom-babies-arduino/archive/refs/tags/v0.1.0.zip をダウンロードし,メニューの「スケッチ」-「ライブラリをインクルード」-「.ZIP 形式のライブラリをインストール...」を選択して ZIP ファイルを読み込みます。読み込み後,念のために Arduino IDE を再起動してください。

サンプルはメニューの「ファイル」-「スケッチ例」にある「カスタムライブラリのスケッチ例」から「ATOM Babies」を選択し,「AllFaces」「Blink」「Bow」「Greeting」のいずれかを選びます。

PlatformIO IDE for VScode

GitHub からコードをクローンし,VS Code で開きます。VS Code からコンパイル・ファームウェアの書き込みをする場合は,platformio.inisrd_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を参照してください。

サンプルの説明

すべての向きですべての顔を表示する(AllFaces

ATOM Babies の顔の表示を一通り表示します。通常の向きから開始し,まばたきをした状態で始まります。ATOM Babies の顔(ボタン)を押すごとに右 → 逆さま → 左 → 通常と繰り返します。

まばたきする(Blink

ATOM Babies の顔(ボタン)を押すたびに,まばたきを始めたり止めたりします。 まばたきの設定はデフォルト(AtomBabies.cppDEFAULT_BLINK_PARAMを参照,2 回以下のランダムな回数でのまばたき,目を開けている時間が 500 ミリ秒,目を閉じている時間が 100 ミリ秒,次のまばたきを始めるまでの間隔が 1000 ミリ秒)です。

おじぎをする(Bow

ATOM Babies の顔(ボタン)を押すとおじぎをします。押すごとにおじぎをする回数が増えます。

数字を表示する(Digits)

ATOM Babies の顔(ボタン)を押すたびに 0 から順に数字が表示されます。2 桁以上の数字は各桁を順に表示します。

人が来たらあいさつをする(Greeting


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


ATOM Babies:なでると喜ぶ(YouTube)

頭をなでると喜びます。他にも同じHappyが動いている子がいれば,その子たちにも喜びを伝えます。PlatformIO 環境でコンパイルする場合は環境をenv:happyに変更してください。

試す場合は Hat を付けた状態で底面を固定しておいてください。

参考

About

M5StackのATOM Matrixを使ったかわいいいきもの。

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published