先日、「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を活用することで、デバイスの動作状況を把握することもできそうです。