arduinoを使って、水温を計測します。
方法はいろいろなブログで紹介されているので、借用させていただくことに。
結果としては、このようなファイルを自動で作成してくれます。
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
}
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
よかったら買ってね。