Arduinoでガス中酸素濃度を測定


Groce Oxygen Sensor編

必要なもの

  • Arduino UNO
  • Grove Oxygen Sensor

Grove Oxygen Sensorはアナログ出力。RobotShopまたはSEEEDから入手可能。

配線

  • センサーは、基板、センサーそのもの、Groveケーブルの三点セットになっている。それらを組み立てる。
  • 以下のようにArduinoとセンサー(に取り付けられたGroveケーブル)に繋げる。
    • Arduinoの3.3Vまたは5V <--> センサーの赤色の線
    • ArduinoのGND <--> センサーの黒色の線
    • ArduinoのA0 <--> センサーの黄色の線
    • (センサーの白色の線は使わない。)

そのあとは

Arduinoの「01.Basics>AnalogReadSerial」で試すことができる。ただし、センサーはウォームアップするのに数分かかることがある。数分後、analogRead(A0)の値が安定したら、センサーに息を吹きかけてみる。値が一旦下がり、再び元のレベルに戻るはず。

トラブル

  • リスポンスが悪いことがあった。最近出たMIX8410を用いたセンサーは大丈夫かもしれない。
  • 水や硫化水素対策(必要な場合)
    • 結露を防ぐために加温することも考えられる。
    • 硫化水素による劣化を防ぐため、金属部を樹脂(エポキシやシリコン充填剤)で保護する。

LuminOx (SSTセンシング)編

必要なもの

  • Arduino UNO
  • LuminOx 酸素センサー(国内ではグローバル電子株式会社から入手可能)

配線

  • 以下のようにArduinoとセンサー(に取り付けられたGroveケーブル)に繋げる。
    • Arduinoの5V <--> センサーのピン1
    • ArduinoのGND <--> センサーのピン2
    • Arduinoの8 <--> センサーのピン3
    • Arduinoの9 <--> センサーのピン4

なお、上記接続はジャンプワイヤーのオス-メスを用いてもよいし、また、センサーをブレッドボードに挿して、ブレッドボードからArduinoにつなげてもよい。
なお、LuminOxのUARTは3.3Vなのに対して、Arduino UNOは5Vである。LuminOxのUARTは5Vには耐えられる仕様なので壊れることはないと思うが、もしかすると不具合が出ることがあるかもしれない。今のところは直接つないでもうまく動いている。

スケッチ

ライブラリSoftwareSerialはArduinoIDEにデフォルトで組み込まれているので新たにインストールする必要はない。

スケッチ1

#include <SoftwareSerial.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
SoftwareSerial mySerial =  SoftwareSerial(8, 9);//rx,tx

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
  mySerial.print("M 1");  //最初にモードを設定する。M 1でリクエスト時に測定。
  mySerial.print("\r\n");
  i=0;
  lcd.init();
  lcd.backlight();
}

void loop() {
  Serial.print(" ");
  mySerial.flush(); 
  mySerial.println("O");    //センサーに測定を指示する。"O" for ppO2 [mbar], "%" for O2 in [%], "A" で圧力や温度を含め全データ
  while (mySerial.available() == 0) {  //センサーからの返事を待つ。
    delay(10);
  }
  while (mySerial.available() > 0) {
    String text=mySerial.readString();
    Serial.print(text);
  }
  i++;
  delay(1000);
}

測定値を数字として得たいときは、

text = text.substring(3, 8);  //文字列の3文字目〜8文字目を得る
float result = text.toFloat(); //変数型を変換する

コメント

センサーは、起動してから安定するまでに5分〜10分くらいかかるようである。