こんにちはハードウェア開発担当の佐々木です。
前回に引き続き「ISP1807搭載BLEマルチセンサーボード」の小ネタをご紹介します。今回はISP1807搭載BLEマルチセンサーボードの消費電流を減らす方法です。
ISP1807搭載BLEマルチセンサーボードには6つのセンサが搭載されていますが、これらのセンサは動かしたままにしていると多くの電流を消費してしまいます(ジャイロセンサは電源オン後ノーマルモードで動作し数mA消費します!)。
例えば次のような「1秒間隔で何か処理する」Arduionのプログラム。センサを停止させなかった場合、消費電流は6mAほどになります。
void setup() {
// 何もしない
}
void loop() {
// 何か処理して1秒まつ
delay(1000);
}
次のようにすべてのセンサを停止させると消費電流は0.03mA程度まで抑えることができます。
#include <Wire.h>
const int LPS22HB = 0x5c;
const int HDC2010 = 0x40;
const int BMX055_ACC = 0x18;
const int BMX055_GYR = 0x68;
const int BMX055_MAG = 0x10;
void setup() {
Wire.begin();
regWrite(BMX055_GYR, 0x11, 0x20); // DEEP_SUSPEND mode
regWrite(BMX055_ACC, 0x11, 0x20); // DEEP_SUSPEND mode
regWrite(BMX055_MAG, 0x4B, 0x00); // Suspend mode
regWrite(HDC2010, 0x0e, 0x80); // Soft-Reset
regWrite(LPS22HB, 0x10, 0x00); // Power-down mode
Wire.end();
}
void loop() {
delay(1000);
}
void regWrite(int device, uint8_t addr, uint8_t dat)
{
Wire.beginTransmission(device);
Wire.write(addr);
Wire.write(dat);
Wire.endTransmission();
}
CircuitPythonの場合は次のようにプログラムを書いてください。Arduinoの場合と同様、消費電流を0.03mA程度まで抑えることができます。
import time
import board
import busio
from adafruit_bus_device.i2c_device import I2CDevice
with busio.I2C(board.SCL, board.SDA) as i2c:
with I2CDevice(i2c, 0x5c) as device:
device.write(bytes([0x10,0x00]))
with I2CDevice(i2c, 0x40) as device:
device.write(bytes([0x0e,0x80]))
with I2CDevice(i2c, 0x18) as device:
device.write(bytes([0x11,0x20]))
with I2CDevice(i2c, 0x68) as device:
device.write(bytes([0x11,0x20]))
with I2CDevice(i2c, 0x10) as device:
device.write(bytes([0x4B,0x00]))
while True:
time.sleep(1)
まとめ
いかがでしたか?使わないセンサは停止させ消費電流を抑えましょうというお話でした。本文に掲載したプログラムは商品ページからもダウンロードいただけます。ご活用ください。