0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Arduino MKR WiFi 1010 で Groveモジュールを使う 【その2】 (Arduino MKR Connector Carrier を利用、CO2濃度・温湿度センサーのお試し)

Last updated at Posted at 2021-10-25

以下の記事の続きになります。

●Arduino MKR WiFi 1010 で Groveモジュールを使う(Arduino MKR Connector Carrier を利用、Grove - Gesture のお試し) - Qiita
 https://qiita.com/youtoy/items/6f1cea34457d0dd547da

前回のジェスチャーセンサーに引き続き、以下のCO2濃度・温湿度センサーを試してみた話です。

●Grove - CO2 & Temperature & Humidity Sensor (SCD30) - Seeed Wiki
 https://wiki.seeedstudio.com/Grove-CO2_Temperature_Humidity_Sensor-SCD30/

下準備

まずは、Arduino MKR WiFi 1010 でサンプルの Blink などが実行できる状態にしておきます。
詳細については、前回の記事の「とりあえずの動作確認」の部分などをご参照ください。

「Grove - CO2 & Temperature & Humidity Sensor (SCD30) 」を動作させる

ライブラリの準備

以下のライブラリを利用すれば良さそうです。

●Seeed-Studio/Seeed_SCD30: carbon dioxide sensor
 https://github.com/Seeed-Studio/Seeed_SCD30

公式の以下の手順に従って、ライブラリを追加します。
ZIPファイルをダウンロードし、Arduino IDE上でファイル指定で読み込む、という流れです。

●How to install an Arduino library - Seeed Wiki
 https://wiki.seeedstudio.com/How_to_install_Arduino_Library/

Groveケーブルの接続

公式の Wiki を見ると I2C での接続になるようです。
Groveケーブルの接続

前回使った「Grove - Gesture」と同じように「TWI」と書かれたところに接続します。
Arduino MKR Connector Carrier の場合はあ、以下のような感じになりました。

プログラム

プログラムは、公式の Wiki のものを使います。
特に書きかえなどはせず、そのまま使ってみます。

#include "SCD30.h"
 
#if defined(ARDUINO_ARCH_AVR)
    #pragma message("Defined architecture for ARDUINO_ARCH_AVR.")
    #define SERIAL Serial
#elif defined(ARDUINO_ARCH_SAM)
    #pragma message("Defined architecture for ARDUINO_ARCH_SAM.")
    #define SERIAL SerialUSB
#elif defined(ARDUINO_ARCH_SAMD)
    #pragma message("Defined architecture for ARDUINO_ARCH_SAMD.")  
    #define SERIAL SerialUSB
#elif defined(ARDUINO_ARCH_STM32F4)
    #pragma message("Defined architecture for ARDUINO_ARCH_STM32F4.")
    #define SERIAL SerialUSB
#else
    #pragma message("Not found any architecture.")
    #define SERIAL Serial
#endif

void setup()
{
    Wire.begin();
    SERIAL.begin(115200);
    SERIAL.println("SCD30 Raw Data");
    scd30.initialize();
}
 
void loop()
{
    float result[3] = {0};
 
    if(scd30.isAvailable())
    {
        scd30.getCarbonDioxideConcentration(result);
        SERIAL.print("Carbon Dioxide Concentration is: ");
        SERIAL.print(result[0]);
        SERIAL.println(" ppm");
        SERIAL.println(" ");
        SERIAL.print("Temperature = ");
        SERIAL.print(result[1]);
        SERIAL.println(" ℃");
        SERIAL.println(" ");
        SERIAL.print("Humidity = ");
        SERIAL.print(result[2]);
        SERIAL.println(" %");
        SERIAL.println(" ");
        SERIAL.println(" ");
        SERIAL.println(" ");
    }
 
    delay(2000);
}

動作させた結果

公式のサンプルプログラムをそのまま動作させて、シリアルモニタの表示を確認してみます。
そうすると、以下のように二酸化炭素濃度と温湿度の値が表示されていました。

ググってみた情報によると、二酸化炭素濃度の値は 1000 ppm を下回っているので、良好ということらしいです。
そして、ふと「これってキャリブレーションとか必要ないのかな?」と思ってみたりなど(仕様や説明を、もう少し見てみなければ...)。

【追記】 キャリブレーションについて

「これってキャリブレーションとか必要ないのかな?」とツイートもしていたのですが、それについて自分で調べ始める前に、ツイートにコメントをいただきました。

おわりに

前回に引き続き、Arduino MKR Connector Carrier を使った Groveモジュール利用の軽いお試しをしてみました。

Groveモジュールを使うと、センサーとボードの接続も、プログラムの作成も楽に進められて良い感じです。

【追記】 他のモジュールを試した話

Grove - 3-Axis Digitial Compass v2.0

以下も試してみました。

●Grove - 3-Axis Digitial Compass v2.0 - Seeed Wiki
 https://wiki.seeedstudio.com/Grove-3-Axis_Digitial_Compass_v2.0/

ライブラリはこちらです。

●Seeed-Studio/Grove_3_Axis_Compass_V2.0_BMM150: Bosch BMM150 3 axis compass sensor Arduino library
 https://github.com/Seeed-Studio/Grove_3_Axis_Compass_V2.0_BMM150

プログラムは、公式の Wiki に書かれたものそのままです。

#include <Arduino.h>
#include <Wire.h>
// libraries
#include "bmm150.h"
#include "bmm150_defs.h"
 
BMM150 bmm = BMM150();
 
void setup()
{
  Serial.begin(9600);
 
  if(bmm.initialize() == BMM150_E_ID_NOT_CONFORM) {
    Serial.println("Chip ID can not read!");
    while(1);
  } else {
    Serial.println("Initialize done!");
  }
 
}
 
void loop()
{
  bmm150_mag_data value;
  bmm.read_mag_data();
 
  value.x = bmm.raw_mag_data.raw_datax;
  value.y = bmm.raw_mag_data.raw_datay;
  value.z = bmm.raw_mag_data.raw_dataz;
 
  float xyHeading = atan2(value.x, value.y);
  float zxHeading = atan2(value.z, value.x);
  float heading = xyHeading;
 
  if(heading < 0)
    heading += 2*PI;
  if(heading > 2*PI)
    heading -= 2*PI;
  float headingDegrees = heading * 180/M_PI;
  float xyHeadingDegrees = xyHeading * 180 / M_PI;
  float zxHeadingDegrees = zxHeading * 180 / M_PI;
 
  Serial.print("Heading: ");
  Serial.println(headingDegrees);
 
  delay(100);
}

動作させた結果は以下のとおりです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?