#はじめに
これまで、温度センサー(BME280)、水温センサー(DS18B20)などを、Raspberry piやArduinoなどと繋いでモニタリングしてきましたが、水質測定ができないものかと探しておりました。やはり、あるではないですか、Atlas Scientific https://www.atlas-scientific.com/
しかも、Arduinoのコード付きとはありがたい。早速試してみました。
#Arduino Unoとの接続方法
なにはともあれ、まずは接続方法。Arduino Unoとの接続方法は、Atlas Scientificのホームページを参考にしました。使用するのはSDL、SCL、GND、5Vの4つのピンだけ。
#コード
サンプルコードは、Atlas Scientificから提供されていますが、このような内容になっています。
SoftwareSerial myserial(rx, tx);
String inputstring = "";
String sensorstring = "";
boolean input_string_complete = false;
boolean sensor_string_complete = false;
float DO;
void setup() {
Serial.begin(9600);
myserial.begin(9600);
inputstring.reserve(10);
sensorstring.reserve(30);
}
void serialEvent() {
inputstring = Serial.readStringUntil(13);
input_string_complete = true;
}
void loop() {
if (input_string_complete){
myserial.print(inputstring);
myserial.print('\r');
inputstring = "";
input_string_complete = false;
}
if (myserial.available() > 0) {
char inchar = (char)myserial.read();
sensorstring += inchar;
if (inchar == '\r') {
sensor_string_complete = true;
}
}
if (sensor_string_complete== true) {
Serial.println(sensorstring);
/*
if (isdigit(sensorstring[0])) {
DO = sensorstring.toFloat();
if (DO >= 6.0) {
Serial.println("high");
}
if (DO <= 5.99) {
Serial.println("low");
}
}
*/
sensorstring = "";
sensor_string_complete = false;
}
}
#プログラム実行
さてさて、接続完了し、Arduinoスケッチから上記のプログラムをコンパイル後、ボードへ書き込ます。あとは、シリアルモニタを開くと、DOの値が返ってきます。
#数字の妥当性
出力されている値が適切かどうか、いちおう押さえておく必要がありますね。わたしは、以下のサイトを参考にしました。これによると水温29℃では7.64mg/Lとなっています。だいたい近い値か・・・これでよしとしよう。
■飽和溶存酸素量
蒸留水、一気圧下における各温度の飽和溶存酸素の表
https://www.rex-rental.jp/knowledge/sui/sui_007.html
#Raspberry piとの接続
今度はRaspiとの接続をやってみます。Arduinoとの連携は、わりとすんなりいきましたが、Raspiとはどうでしょう。これが、Atlas ScientificのサイトにはRaspiとの接続方法やサンプルコードが見当たらない・・・。しかたないので、このあたりのサイトを参考にしました。
https://raspberrypi.stackexchange.com/questions/56026/i2c-device-not-detected-by-raspberry-pi
基本的にはArduinoとほぼいっしょのようです。
#おわりに
次の課題は、温度センサー(BME280)、水温センサー(DS18B20)などのセンサーと、DO計を同時に繋げる方法にチャレンジしてみます。次の記事に投稿します。