何年もの間、私の妻はサボテンの繁殖が好きでしたが、それでも彼女は彼らのために正しい冬を組織することができませんでした。 事実は、サボテンにとって、彼らが5〜15°Cの温度で冬を生き抜くことが非常に重要であるということです-低くならないように、死なないように、そして高くないように、それが春であると決定しないように。
Dropboxを介したオンライン制御で
Arduinoに温度制御システムを作成することができたということを、非常に手頃な価格で提供できることを皆さんと共有したいと思います。
原材料
- ブレッドボード付きArduino Uno
- 温度センサーチップLM35
- ヒータータイプ
- 中国の延長コード
- メカニカルリレー(220 V回路制御用のコイルあたり5 V)
- 古いノートパソコン
ヒーターとリレー
冬の道路は、太陽が落ちないバルコニーに配置されているため、常に涼しいです。 温度が所定のしきい値を下回った場合、ヒーターがオンになり、機械式リレーを介して
Arduinoに接続します。 ヒーターを分解しないように、中国の延長コードを変更しました。
- 未使用のアース線を両側から切断して剥ぎ取ります
- 「アクティブな」ワイヤの1つではなく、このワイヤをバスに接続しました
- 彼は両方のワイヤの端を内側の穴に通し、延長コードの前面のリレーに接続しました
- リレーへの便利な端子で制御線を接続
Arduinoは、延長コードを介して接続されたヒーターを制御できるようになりました!
回路図
Arduino Unoボードは、USBを介して古いラップトップに接続されています。 温度センサーとして、周囲温度を電圧で直線的に表示する
LM35チップを使用しました。
110 mAの定格コイル電流は
Arduino Unoの最大出力電流に近いため、リレーに電力を供給するために別個の電源が必要です。 初めて
Arduino Unoの電源を使用しましたが、リレーがオンになるたびに温度計が混乱していたため、別のUSB接続で電源を整理しました。
ヒーターは延長コードに接続され、延長コードは電源に接続されます。 リレーがオンになると、ヒーターはすぐに温まり始めますが、温度が急激に変化してもサボテンが怖がらないように、低電力です。
プログラム
Arduinoプログラムは、温度センサーを1秒に1回ポーリングし、シリアルインターフェイスを介して温度値を提供します。 瞬時温度値に加えて、プログラムは平均値と状態ベクトルを提供します:ヒーター制御モード(常にオン/常にオフ/自動)および自動モードの温度範囲。 このモードでは、プログラムは温度が最初に設定されたしきい値を下回るとヒーターをオンにし、2番目に設定されたしきい値を超えるとヒーターをオフにします。
Arduino用プログラム/////////////////////////////////////////////////////////////////////////////// // Cactus Tracker v1.0.1 / December 8, 2014 // by Maksym Ganenko <buratin.barabanus at Google Mail> /////////////////////////////////////////////////////////////////////////////// const int PIN_HEATER = 10; const int DELAY_MS = 1000; const int MAGIC = 10101; const float TEMP_MAX = 20.0; enum { OFF = 0, ON, AUTO }; int mode = AUTO; float tempAverage = NAN; bool heater = false; float heaterFrom = 5.f; float heaterTo = 10.f; void startHeater() { digitalWrite(PIN_HEATER, HIGH); heater = true; } void stopHeater() { digitalWrite(PIN_HEATER, LOW); heater = false; } void setup() { Serial.begin(9600); digitalWrite(PIN_HEATER, LOW); pinMode(PIN_HEATER, OUTPUT); analogReference(INTERNAL); for (int i = 0; i < 100; ++i) { analogRead(A0); } } void loop() { float tempMV = float(analogRead(A0)) / 1024 * 1.1; float tempCurrent = tempMV / 10e-3; if (isnan(tempAverage)) { tempAverage = tempCurrent; } else { tempAverage = tempAverage * 0.95f + tempCurrent * 0.05f; } if (Serial.available()) { if (Serial.parseInt() == MAGIC) { int newMode = Serial.parseInt(); float newHeaterFrom = Serial.parseFloat(); float newHeaterTo = Serial.parseFloat(); if (newMode >= OFF && newMode <= AUTO && newHeaterFrom < newHeaterTo) { mode = newMode; heaterFrom = newHeaterFrom; heaterTo = newHeaterTo; stopHeater(); } } } bool overheat = tempAverage >= TEMP_MAX; if (!overheat && (mode == ON || (mode == AUTO && tempAverage <= heaterFrom))) { startHeater(); } if (overheat || mode == OFF || (mode == AUTO && tempAverage >= heaterTo)) { stopHeater(); } Serial.print("mode = "); Serial.print(mode); Serial.print(", tempCurrent = "); Serial.print(tempCurrent); Serial.print(", tempAverage = "); Serial.print(tempAverage); Serial.print(", heater = "); Serial.print(heater); Serial.print(", heaterFrom = "); Serial.print(heaterFrom); Serial.print(", heaterTo = "); Serial.println(heaterTo); delay(DELAY_MS); } ///////////////////////////////////////////////////////////////////////////////
Pythonは、
pySerialライブラリがインストールされた古いラップトップに
インストールされます。 Pythonプログラムはシリアルインターフェイスを介して
Arduinoに接続し、10分ごとに平均温度とデバイス状態ベクトルを
cactuslog.txtファイルに
追加します。 ログには、ヒーターのオン/オフの正確な時刻も含まれます。 プログラムがバッチファイル
cactuscmd.txtを検出すると、このファイルの内容がシリアルインターフェイスを介して
Arduinoに数回送信され、ファイル自体の名前が
cactusini.txtに変更され
ます 。 このバッチファイルはプログラムの開始時に1回実行されるため、停電やシステムの再起動が発生した場合、このファイルを介して元の状態に戻ります。
視覚化とDropbox
プロジェクト全体が
Dropboxに追加された1つのフォルダーに収まります。 1つのPythonプログラムは、
Arduinoに接続された古いラップトップで実行され、ローカルファイルとしてログとコマンドを処理します。 別のPythonプログラムが任意のコンピューターの同じフォルダーから実行され、指定されたアドレスとポートで単純なHTTPサーバーを作成します。 Python用のいくつかのライブラリ
SciPyと
dateutilをインストールする必要があります。
2番目のプログラムを実行すると、冬の小屋の温度をブラウザから直接監視できます! 生成されたページが表示されます:
- 過去3日間の平滑化された温度チャート
- 先週の温度制限
- ヒーター作動期間
- 変更可能なシステムの現在のモード
Dropboxのおかげで、このプロジェクトは自宅だけでなく、たとえば国内でも開始できます。
Dropbox自体がすべてのファイルを同期し、プログラムはローカルファイルのみを扱うかのように記述されます。 唯一のことは、停電の可能性に注意し、コンピューターを再起動する必要があるということです。
冬を表示および管理するためのPythonプログラム 参照資料
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / \
更新
- プロジェクトをArduino Nanoに移行し、アセンブリの美観と簡潔さが大幅に向上しました
- デジタル湿度センサーDHT-22を追加しました。 同時に、センサーで測定された温度は、メインの温度センサーであるLM35の測定値とほぼ等しいと確信しました
- ヒーターがオンになったときに温度センサーが混乱する理由を発見しました。リレー電流がセンサーのグランドを持ち上げました。 リレーとセンサーのコントローラーアースの2つの異なる入力を使用して修正しました。 二度目の食事はもう必要ありません!
- 大幅に改善されたチャート平滑化アルゴリズム