2026年2月9日月曜日

micro:bit 始める(4) ArduinoIDEでプログラミング3

 加速度センサを使う

 micro:bit V2には、STマイクロエレクトロニクス社の「LSM303」という3軸加速度センサ、3軸地磁気センサのセンサが載っています。LSM303用のArduinoライブラリを追加し、サンプル「X_NUCLEO_IKS01A2_LSM303AGR_DataLog_Terminal」を実行させてみます。

 実行させ、シリアルモニタを見ると、何か数値が表示されています。しかし、micro:bitを動かしても、値は変化しません。

 I2Cの場合に、必ずデバイスのアドレスが設定されています。回路図を見ると、加速度センサが「0x19」、磁気センサが「0x1E」となっています。

 このI2Cデバイスが認識されているのかをチェックするときに、「i2c_checker」というプログラムが使われます。検索してプログラムを書き込むと、シリアルモニタに結果が表示されます。

 結果を見るとデバイスがありません。この状態では、いくらプログラムがあっていても、デバイスとの通信ができないため動作しません。

I2Cの接続されている端子が原因

 回路図を見ると「I2C_INT_SCL」、「I2C_INT_SDA」と、「I2C_EXT_SCL」、「I2C_EXT_SDA」という2系統のI2Cがあることが分かりました。前者はmicro:bitに組み込まれているデバイス用、後者は外部端子に接続され、拡張用のI2Cです。
 複数ある場合には、標準で使えるI2Cと、SCL、SDA端子の設定をしてから使用するI2Cの違いがあります。この端子の設定は、「Wire.begin(SDA,SCL);」のように、初期化の時に変更できるのですが、この命令ではエラーとなりました。
 そこで、Arduinoのフォルダをみて、I2C関連を探しました。すると、次のファイルを見つけました。
 「hardware\nRF5\0.8.0\libraries\Wire\Wire_nRF52.cpp」
このファイルとみると、
TwoWire::TwoWire(NRF_TWIM_Type * p_twim, NRF_TWIS_Type * p_twis, IRQn_Type IRQn, uint8_t pinSDA, uint8_t pinSCL)
 これは、I2C(TwoWire)インターフェースを初期化するためのコンストラクタです。この命令を見ると、次のようになっており、「pinSDA」、「pinSCL」の引数を内部の変数に設定しています。
TwoWire::TwoWire(NRF_TWIM_Type * p_twim, NRF_TWIS_Type * p_twis, IRQn_Type IRQn, uint8_t pinSDA, uint8_t pinSCL)
{
  this->_p_twim = p_twim;
  this->_p_twis = p_twis;
  this->_IRQn = IRQn;
  this->_uc_pinSDA = pinSDA;
  this->_uc_pinSCL = pinSCL;
  transmissionBegun = false;
}
 この命令で設定出来たら、I2Cの接続先を変更できるのです。しかし、このコンストラクタの他の設定が分かりません。
 検索をしているときに、GoogleAIが答えを示してくれました。
TwoWire WireM(NRF_TWIM0, NULL, SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQn, SDA, SCL);
 これを組み込み、まずはI2Cスキャナを動作させます。変更点はコンストラクタで作成されるインスタンス名が「WireM」となっているので、プログラムの「Wire」を「WireM」に変更します。

 動作させると、I2Cアドレスが表示されました。つまり、I2Cデバイスとして認識できているということです。
 また、設定の通り、加速度センサが「0x19」、磁気センサが「0x1E」として接続されています。
 結果を見ると、「0x70」、「0x72」のデバイスも接続されているようです。調べると、インターフェースMCU「MKL27Z256」が該当します。USBやDACなどコントローラのようです。

加速度センサが動く

 このコンストラクタの変更を、サンプルプログラムに追加、変更します。この時コンストラクタの定義の前に「#include<Wire.h>」が必要です。
変更して書き込みます。

 結果は、右図のシリアルモニタです。
 micro:bitを動かすと、値も変化しました。

 これで、加速度センサ、地磁気センサ、温度センサが使えるようになりました。


0 件のコメント:

コメントを投稿

LEDマトリックス表示装置の設計・製作 9(画像表示)

  LEDマトリックスに画像を表示させるには、いろいろな画像形式を知る必要があります。現在、よく使われるJPG形式やPNG形式は圧縮処理されて保存されています。これに対して、BMP形式やTIFF形式は非圧縮形式で、画像データがそのまま保存されています。このため、ファイルは大きくな...