水温を計測する

シェアする

arduinoを使って、水温を計測します。

方法はいろいろなブログで紹介されているので、借用させていただくことに。

温度センサからの値を.txtに保存しよう!

結果としては、このようなファイルを自動で作成してくれます。

arduinoのプログラムを書き込んで、パソコンでprocessingというアプリを使ってテキストファイルに保存するような形にしました。

arduinoのコード

#include <OneWire.h>
#include <DallasTemperature.h>
// 温度計測
#define ONE_WIRE_BUS 5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup(void)
{
  Serial.begin(115200);
  sensors.begin();
}
void loop(void)
{ 
  // call sensors.requestTemperatures() to issue a global temperature 
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.print(sensors.getTempCByIndex(0));
//  output.print(sensors.getTempCByIndex(0));    // 温度の書き込み
//  output.println();     // 改行のみ
  delay(1000);      // msec
}
arduinoのシリアルモニターだとこんな感じで表示されます。(パソコンで保存するとき用に改行してないです。)

processingのコード

import processing.serial.*;
Serial myPort;  // myPortのところは好きな名前でOK
String datastr;  // datastrという名前の文字列型変数を宣言(この記事の下の方で出てきます)
PrintWriter output;  // PrintWriter型のオブジェクトを宣言
int count = 1;  // カウンタを宣言して初期化
 
void setup()
{
  println(Serial.list());  // 使えるポート一覧
  myPort = new Serial(this, Serial.list()[0], 115200); // myPortを最初のシリアルポート、9600bpsに設定
  myPort.clear();
  output = createWriter("log.txt");  // ファイル名log.txtでファイルを開く
  output.println("time" + "," + "Temp");
}
 
void draw() {
  if (count>60) {  // ### 取得したいデータの数 ###
    output.flush();  // 出力バッファに残っているデータを全て書き出し
    output.close();  // ファイルを閉じる
    exit();
  }
 
  if ( myPort.available() > 0) {    // arduinoが数値を更新したら以下を実行
    delay(10);        // arduinoでdelayかけているので不要 / 出力データが安定するように。
    count++; // カウントアップ
    datastr = myPort.readString();
    
    println(hour() +":"+ minute() +":"+ second() + "," + datastr);
    output.println(hour() +":"+ minute() +":"+ second() + "," + datastr);
  }
}

void draw() {
if (count>60) { // ### 取得したいデータの数 ###
の60のところで取得できるデータの数が変更できるようになっています。(1秒に一回、温度の値を取得するようにしているので、60だと1分間温度データを保存してくれます)

また、試作用のブレッドボードだと水槽の近くで使うのに不便だったのでボードも作りました。

https://jp.mercari.com/item/m34305930989

https://akiya1.booth.pm/items/3461911

よかったら買ってね。