様々なセンサを開発、販売しているオムロンから新しいセンサー評価ボード2JCIE-EV01-RP1が販売されました。Raspberry Piだけでなく、以下の3つのプラットフォームに対応しています。

  • Raspberry Pi
    2JCIE-EV01-RP1
  • Arduino
    2JCIE-EV01-AR1
  • Adafruit
    2JCIE-EV01-FT1

今回はこの中からRaspberry Pi向け(2JCIE-EV01-RP1)について試してみました。

2JCIE-EV01について

2JCIE-EV01には以下の6つのセンサが搭載されています。

  • 温湿度センサ
  • 周辺光センサ
  • MEMS絶対圧センサ
  • MEMSデジタルモーションセンサ
  • MEMSマイクロフォン

そして、さらに拡張センサもサポートされています。現在、以下のセンサを接続できます。

  • MEMS非接触温度センサ
  • MEMSフローセンサ
  • 限定反射形センサ
  • ダストセンサ

Qwiicコネクタも備わっていますので、様々なセンサとの接続も可能です。

詳しくはセンサ評価ボード – 2JCIE-EV | オムロン電子部品情報サイト – Japanをご覧ください。

デモコードを試す

MEMSデジタルモーションセンサ

モーションセンサーを使うことでX/Y/Z軸の加速度を測定できます。2jcieev01-raspberrypi/2jcieev01-accl.c at master · omron-devhub/2jcieev01-raspberrypi · GitHubの抜粋です。

#define LIS2DW_FIFO_SIZE   1
#define PIN_CSB 8

int lis2dw_read_and_avg(int16_t* accl) {
    uint8_t accbuf[1 + 3 * 2 * LIS2DW_FIFO_SIZE] = {0};
    int32_t accsum[3] = {0, 0, 0};

    accbuf[0] = LIS2DW_REG_OUT_X_L;
    digitalWrite(PIN_CSB, LOW);
    wiringPiSPIDataRW(0, accbuf, sizeof(accbuf));
    digitalWrite(PIN_CSB, HIGH);
    for (uint8_t i = 0; i < LIS2DW_FIFO_SIZE; i++) {
        int n = i * 6;
        accsum[0] += (int32_t)conv8s_s16_le(accbuf, n + 1);  // 1=skip addr.
        accsum[1] += (int32_t)conv8s_s16_le(accbuf, n + 3);
        accsum[2] += (int32_t)conv8s_s16_le(accbuf, n + 5);
    }
    accl[0] = (int16_t)(accsum[0] / LIS2DW_FIFO_SIZE);
    accl[1] = (int16_t)(accsum[1] / LIS2DW_FIFO_SIZE);
    accl[2] = (int16_t)(accsum[2] / LIS2DW_FIFO_SIZE);
    return 0;
}

上記のように取得することで、X/Y/Z軸の値を取得できます。

$ ./2jcieev01-accl 
 -825.2,   -71.8,  -545.4

MEMS絶対圧センサ

MEMS絶対圧センサのコードの抜粋です。

int baro_2smpb02e_read(uint32_t* pres, int16_t* temp,
                      uint32_t* dp, uint32_t* dt) {
    bool ret;
    uint8_t rbuf[6] = {0};
    uint32_t rawtemp, rawpres;

    ret = i2c_read_reg8(
            BARO_2SMPB02E_ADDRESS, BARO_2SMPB02E_REGI2C_PRES_TXD2,
            rbuf, sizeof(rbuf));
    if (ret) {
        return ret;
    }

    *dp = rawpres = conv8s_s24_be(rbuf[0], rbuf[1], rbuf[2]);
    *dt = rawtemp = conv8s_s24_be(rbuf[3], rbuf[4], rbuf[5]);
    return baro_2smpb02e_output_compensation(rawtemp, rawpres, pres, temp);
}

サンプルプログラムを実行すると、気圧や温度が取得できます。

$ ./2jcieev01-baro 
  100523.0,  31.680, a3acc3, 676ef0, retun code: 0

温湿度センサ

温湿度センサは絶対圧センサと同じく温度の取得、そして湿度が取得できます。コードはこちらです。

int32_t sht30_read_triggered_TRH_x100(int32_t *value_T, int32_t *value_RH) {
    int32_t result;
    uint16_t value_T_raw = 0;
    uint16_t value_RH_raw = 0;

    /* Measure the temperature value */
    result = sht30_read_triggered_value(&value_T_raw, &value_RH_raw);
    if (result) {
        return result;
    }

    /* Convert the value to centidegrees Celsius */
    *value_T = sht30_convert_temperature_value_x100(value_T_raw);
    *value_RH = sht30_convert_humidity_value_x100(value_RH_raw);
    return 0;
}

こちらは湿度、そして温度が取れます。

$ ./2jcieev01-humi 
58.16,    31.3, return code:0

周辺光センサ

いわゆる照度センサです。コードはこちらで確認できます。

uint32_t opt3001_read_data(uint16_t *light_x100) {
    uint32_t err_code = 0;
    uint16_t value_data;

    /* Measure the temperature value */
    err_code = opt3001_read_triggered_value(&value_data);
    if (err_code) {
        return err_code;
    }

    *light_x100 = (uint16_t)(opt3001_convert_lux_value_x100(value_data) / 100);
    return 0;
}

実行すると、照度がルクスで取得できます。この値は出力時に1/100されているようです。

$ ./2jcieev01-illm 
      0.82, return code: 0

注意点

2JCIE-EV01はあくまでもセンサの評価ボードであり、これを製品に組み込むことはできません。

まとめ

各種センサを手軽につないで検証、評価するのに2JCIE-EV01はぴったりです。IoTプロジェクトにおいてセンサの存在は必須と言えます。2JCIE-EV01を使えば元々実装されているセンサに拡張センサ、そしてQwiicコネクタと幅広いセンサーを手軽に試せるようになるでしょう。

センサ評価ボード – 2JCIE-EV | オムロン電子部品情報サイト – Japan


0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *