動作温度を細かく設定しようと思うと、やはりマイコン制御がやりたくなりますね。半固定抵抗の調整は、調整しろが案外狭い上に、実際の育苗箱に設置して屋外に出さないと、温度が合わせられない、という難点がありました。
WiFi接続を考えていたので、途中からWiFiモジュールが付いていて技適も取れているESPr developer 32 へ開発環境を移しました。Arduino互換(互換っていうのかな)で、スケッチをそのまま使えるのと、ArduinoIDEで開発できるのも良かったですね。今回はArduino UNOでマイコンでの温度制御を作るところまでです。
NTCサーミスタ

温度検知はNTCサーミスタ、NXFT15XH103FA2B050にしました。ちょっと型番長すぎですよね。育苗箱に乗せるペラペラの透明プラケースに設置するので、基板含めて出来るだけ軽くなるように、小さいものを選びました。小さいのは良かったですが、細すぎて電線に接続するのに少し苦戦しました。
スケッチ
既に作成から半年以上経過していて記憶が定かではありませんが、確か参考にしたのは試行錯誤な日々さんの記事です。
試行錯誤な日々: Arduino(ESP32)でサーミスタを使い温度を取得
内容はほぼそのままなので、改めて書くところはないですね。違う点は温度範囲が違うくらいです。NTCサーミスタの抵抗値を計算する時に使用するB定数は、温度範囲によって異なる数字が与えられています。
NXFT15XH103FA2B050|NTCサーミスタ_温度検知用|温度センサ|センサ|NTCサーミスタ_温度検知用|NTCサーミスタ|サーミスタ|村田製作所
今回は育苗箱の温度制御用で、50℃を超える環境では使わない、というか50℃を超えたら苗は必ず枯れているので、温度範囲が25-50℃のB定数、3380Kを使用しています。スケッチは下のような感じ。ArduinoUNOで作っていた時のものなので、電圧は5V、アナログ信号は1024段階です。
#include <math.h>
int AN0 = 0;
void setup() {
Serial.begin(9600);
pinMode(7, OUTPUT);
}
void loop() {
int B = 3380;
int R1 = 10000;
int T0 = 25;
int val;
float V0;
float THR;
float TEMP;
val = analogRead(AN0);
V0 = val*5.0/1024.0;
THR = 10000.0*V0/(5.0-V0);
TEMP = 1/(log(THR/R1)/B+1/(T0+273.15))-273.15;
if (TEMP > 29){
digitalWrite(7,HIGH);
} else if (TEMP < 27){
digitalWrite(7,LOW);
}
Serial.println(TEMP,1);
delay(1000);
}
B:B定数。3380を使います。
R1:既知の抵抗。サーミスタの抵抗が10kΩなので、10kΩを使います。
T0:抵抗値設定温度。この場合、25℃の時、サーミスタの抵抗値10kΩが基準です。
V0:アナログピンで測定した分圧。arduinoのanalogReadは0~1023の数字(全部で1024個の数字)で返されるので、1024で割って5Vを掛けることで電圧値に変換します。
THR:分圧V0、全体の電圧(5V)、既知の抵抗値(10kΩ)から計算される現在の温度でのサーミスタの抵抗値
TEMP:現在の抵抗値と設定温度での抵抗値から計算される現在温度。計算式は絶対温度表記なので、第一項では摂氏温度に273.15℃を足して絶対温度(単位はK)に変換しています。計算では絶対温度(K/ケルビン)単位で温度が計算されるので、そこから237.15Kを引いて(第二項)、摂氏温度(℃)へ変換しています。
回路
ArduinoUNO R3のA0にサーミスタからの信号線を繋ぎます。分圧を測定するので、繋ぐ位置は、GNDに接続した10kΩ抵抗とサーミスタの間ですね。D7にリレーモジュールの信号線、リレーの先に9V乾電池と5Vファンを繋いでいます。ノーマルオープン(NO)とノーマルクローズ(NC)がありますが、NOの方で接続します。それはそうと、今思えば、5Vファン1個に9V乾電池は良くないですね。妙に音が大きかったのは、電圧が高すぎたからですね。ArduinoUNO R3にはUSBで5Vを給電します。

動かしてみるとこんな感じ。カメラが近すぎてピンボケしていますが、最初右端くらいにある青い球(サーミスタの素子部分)を指でつまみます。体温で温度が上がって、最初の設定温度(>29℃)になると、中央ブレッドボード奥側のリレーモジュールがONになって、赤色LEDが点灯すると同時に、左側の5Vファンが稼働します。温度はシリアル表示されているので、温度を確認します。指を離すと冷えて行き、次の設定温度(<26℃)になってリレーOFF、ファンも停止します。
温調モジュールで構築した育苗箱温度調節機をArduinoUNOを使って再現することができました。そのまま入れ替えても良かったのですが、WiFi接続、Ambientを追加している間に気温が高くなってきてしまい、吸排気ファンだけでは日中の温度が下がりきらなくなってきました。そこで排熱窓の開閉を追加することにしましたが、ちょっと長くなりそうなので、とりあえずここまで。
次は、ESPr developer 32 type Cへの移行、WiFi接続、Ambientでのモニタリングとサーボモータを使った開閉窓追加かな。









コメントを残す