Arduino Nano R4の活用 ⑭ I2C LEDバー
前回、Arduino Nano R4に動きセンサLSM6DSOXをつなぎました。このセンサをつないだまま、Arduino Modulinoの一つであるModulino Pixelsボードをつなぎます。このボードには8個のRGB LEDが搭載されていて、利用するのインターフェースはI2Cバスです。
●環境
- Arduino IDE;2.3.7
- Windows11;25H2
- Arduino Nano R4 1.5.1 PCはマザーボードのUSBポートから直接つなぐ。
●Modulino Pixelsの主なスペック
- デバイスの名称 Eight LC8822-2020
- コントローラ STM32C011F4
- 動作電圧 2.0~3.6V
- 消費電流 33mA @ 3.3 V * 8 + 3.4 mA
- 分解能 12ビット ADC
- インターフェース I2C(0x44)、USART, SPI, I2S
●RGB LED Modulino Pixelsのボード
利用したModulino PixelsのボードはArduinoの製品で、HS3003、VL53L4CD、LSM6DSOXTRと同じくスイッチサイエンスから入手しました。
Arduino Modulinシリーズの中の一つです。I2CバスなどをサポートするためにArm Cortex-M0+の32ビット・マイコンが搭載されています。
●接続
Arduino Nano R4のQWIICコネクタにつなぎます。
●ライブラリの導入
ライブラリでModulinoを検索して、見つけてきたArduino_Modulinoをインストールをします。
すべてをインストールします。
●サンプルの実行
スケッチ例 - Arduino_Modulino - Modulino_Pixels - Pixels_Basicを選択します。
実行すると、全てのLEDが青色に点灯します。
もう一つのサンプルSimple_Animationは7色の表示ができますが、これを修正して、赤いバーが伸びるような表示のスケッチを作りました。
●スケッチ
#include <Arduino_Modulino.h>
// Create a ModulinoPixels object for the LED array
ModulinoPixels leds;
// Define a custom color for turning off LEDs
ModulinoColor OFF(0, 0, 0);
int brightness = 5;
void setup() {
// Initialize Modulino I2C communication
Modulino.begin();
// Detect and connect to pixels module
leds.begin();
}
void loop() {
// Light up LEDs in different colors
// Available colors: RED, BLUE, GREEN, VIOLET, WHITE
for (int i = 0; i < 8; i++) {
setPixel(i, RED);
delay(100);
}
// Turn off all LEDs one by one
for (int i = 0; i < 8; i++) {
setPixel(i, OFF);
delay(25);
}
}
void setPixel(int pixel, ModulinoColor color) {
leds.set(pixel, color, brightness);
leds.show();
}
実行中の様子です。
●加速度の値をLEDバーに反映させる
動きセンサLSM6DSOXの三つの軸の値を合計して、LEDのバーの値に変換します。
それぞれの軸の加速度は2gほどなので、測定値に0.5を加算して整数にすれば、四捨五入して整数値が得られます。
int LEDi = int(x+0.5) + int(y+0.5) + int(z+0.5) ;
スケッチです。
#include <Arduino_Modulino.h>
// Create a ModulinoPixels object for the LED array
ModulinoPixels leds;
// Create a ModulinoMovement
ModulinoMovement movement;
// Define a custom color for turning off LEDs
ModulinoColor OFF(0, 0, 0);
int brightness = 5;
float x, y, z;
void setup() {
// Initialize Modulino I2C communication
Modulino.begin();
// Detect and connect to pixels module
leds.begin();
// Detect and connect to movement sensor module
movement.begin();
}
void loop() {
// Read new movement data from the sensor
movement.update();
// Get acceleration and gyroscope values
x = movement.getX();
y = movement.getY();
z = movement.getZ();
// Print acceleration values
Serial.print("A: ");
Serial.print(x, 3);
Serial.print(", ");
Serial.print(y, 3);
Serial.print(", ");
Serial.println(z, 3);
// Light up LEDs in different colors
// Available colors: RED, BLUE, GREEN, VIOLET, WHITE
for (int i = 0; i < 8; i++) {
int LEDi = int(x+0.5) + int(y+0.5) + int(z+0.5) ;
Serial.println(LEDi, 3);
for (int i=0 ; i< LEDi; i++ ){
setPixel(i, RED);
delay(100);
}
}
// Turn off all LEDs one by one
for (int i = 0; i < 8; i++) {
setPixel(i, OFF);
delay(15);
}
}
void setPixel(int pixel, ModulinoColor color) {
leds.set(pixel, color, brightness);
leds.show();
}