先日、「ATOM Lite」の動作確認を行いました(記事は こちら)が、今回は、それに引き続き「ATOM Matrix」の動作確認を行います。
「ATOM Matrix」は、「ATOM Lite」と同時に発売されたデバイスで、「ATOM Lite」ではLEDが1灯なのに対し、5 x 5のマトリックスLEDが搭載されています。
また、「M5StickC」に搭載されているのと同じ加速度センサ(MPU6886)も搭載されています。
左から「M5StickC」、「ATOM Matrix」、「ATOM Lite」です。
「M5StickC」よりも、さらに低価格でありながら、加速度センサが搭載されているので、振動データなどを取得するIoTデバイスを、より安価につくることができそうです。
環境構築方法は「ATOM Lite」の時と全く同じ(記事は こちら)で、今回新たに実施することは何もありませんでした。
それでは、サンプルスケッチを使って動作確認してみます。
「ファイル」>「スケッチ例」>「M5Atom」>「Basics」>「LEDSet」を選択します。
「→(マイコンボードに書き込む)」をクリックし、スケッチを「ATOM Matrix」に書き込みます。
「ATOM Matrix」のマトリックスLEDはボタンも兼ねています。このボタンを押すたびに、マトリックスの左上端のLED表示色が「緑」→「赤」→「青」→「白」と変化します。
次に、「ファイル」>「スケッチ例」>「M5Atom」>「Basics」>「Buttom」を開き、「ATOM Matrix」に書き込みます。
このスケッチでは、全てのLEDが発光し、ボタンを押すたびに色が変わります。
次に、「ファイル」>「スケッチ例」>「M5Atom」>「Basics」>「MPU6886」を開き、シリアルモニタに加速度データを出力する箇所のみを若干変更します。
#include "M5Atom.h"
float accX = 0, accY = 0, accZ = 0;
float gyroX = 0, gyroY = 0, gyroZ = 0;
float temp = 0;
bool IMU6886Flag = false;
void setup()
{
M5.begin(true, false, true);
if (M5.IMU.Init() != 0)
IMU6886Flag = false;
else
IMU6886Flag = true;
}
void loop()
{
if (IMU6886Flag == true)
{
M5.IMU.getGyroData(&gyroX, &gyroY, &gyroZ);
M5.IMU.getAccelData(&accX, &accY, &accZ);
M5.IMU.getTempData(&temp);
//Serial.printf("%.2f,%.2f,%.2f o/s \r\n", gyroX, gyroY, gyroZ); // 変更
Serial.printf("%.2f,%.2f,%.2f\r\n", accX * 1000, accY * 1000, accZ * 1000); // 変更
//Serial.printf("Temperature : %.2f C \r\n", temp); // 変更
}
delay(500);
M5.update();
}
スケッチを「ATOM Matrix」に書き込み、シリアルプロッタを開くと、「ATOM Matrix」の傾き情報がグラフ表示されます。
最後に、LEDを表示するための、簡単なスケッチをつくってみました。
LEDをひとつずつ順番に発光させ、全てが同じ色になったら、次はひとつずつ、違う色に変えていきます。
これを「緑」→「赤」→「青」→「黒」→「白」と繰り返します。
また、「白」の後は一旦、全てを消灯しています。
#include "M5Atom.h"
void setup() {
M5.begin(true, false, true);
delay(100);
}
void loop() {
for(int i=0; i<25; i++) {
M5.dis.drawpix(i, CRGB::Green);
delay(100);
}
for(int i=0; i<25; i++) {
M5.dis.drawpix(i, CRGB::Red);
delay(100);
}
for(int i=0; i<25; i++) {
M5.dis.drawpix(i, CRGB::Blue);
delay(100);
}
for(int i=0; i<25; i++) {
M5.dis.drawpix(i, CRGB::Black);
delay(100);
}
for(int i=0; i<25; i++) {
M5.dis.drawpix(i, CRGB::White);
delay(100);
}
M5.dis.clear();
}
問題なく動作しました。
「ATOM Matrix」にはLCDがありませんが、このマトリックスLEDを活用することで、デバイスの動作状況を把握することもできそうです。