工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoチルドミラー湿度計

コンポーネントと消耗品

>
Arduino UNO
× 1
12V10A電源
× 1
12V40mm高出力ファン
× 1
12V 40mm TEC
× 1
40mmヒートシンク
× 1
小さな鏡
× 1
熱伝導性接着剤
× 1
サーマルペースト
× 1
BTS7960モータードライバー
× 1
3 mm LED:黄色
× 1
OPT101光センサー
× 1
IRF520MOSFETモジュール
× 1
>
マキシムインテグレーテッドDS18B20プログラマブル解像度1-Wireデジタル温度計
× 1
SparkFun湿度および温度センサーのブレイクアウト-Si7021
× 1

必要なツールとマシン

>
ホットグルーガン(汎用)

アプリとオンラインサービス

>
Arduino IDE

このプロジェクトについて

湿度の測定は、さまざまな方法で行うことができます。最も一般的な方法は、静電容量式湿度センサーを使用することです。残念ながら、これらのセンサーは、非常に湿度の高い環境で継続的に操作すると、すぐに精度が低下します。チルドミラー湿度計はこの問題に悩まされることはなく、特に高湿度範囲でははるかに正確です。残念ながら、市販のチルドミラー湿度計は文字通り数千ドルの費用がかかりました。基本的な操作はとても簡単なので、自分で作ることも可能です。市販のデバイスと同じ0.1度の精度はありませんが、ほとんどの目的で十分に優れており、静電容量センサーよりも確かに正確です。

このプロジェクトは概念実証であり、決して生産の準備ができているわけではありません。多くの改善を行うことができますが、それが機能するという事実を証明しています。

仕組み

チルドミラー湿度計は、ペルチェ(TEC)を使用して、凝縮が現れるまで反射面を冷却します。凝縮は、光源と光学センサーで検出されます。凝縮が現れた瞬間にミラー表面温度が記録されます。この温度は露点に相当します。次に、露点と周囲温度を使用して相対湿度を計算できます。

簡略化

このDIYチルドミラー湿度計には、市販のユニットと比較していくつかの違いがあります。

市販のチルドミラー湿度計は、従来のミラーを使用していません。これは、熱の伝導と分散が不十分であり、精度と効率が低下するためです。これらのデバイスは、主にプラチナまたはロジウムメッキ銅をミラーとして使用します。それは簡単に入手できず、費用効果も高くないため、このDIYチルドミラー湿度計では通常のミラーが使用されています。小さな四角い鏡は丸い鏡よりはましですが、見つかりませんでした。別の方法として、ステンレス鋼の磨かれたスラブがさらに良いでしょう。

市販のチルドミラー湿度計は、ミラーの表面に取り付けられたSMD温度計の代わりに、ミラーの下に埋め込まれたプラチナ測温抵抗体(PRT)を使用します。 PRTには追加の電子機器が必要であり、ペルチェとミラーの間に取り付けると同時に、良好な熱伝導率を提供することには問題があります。ミラー表面に温度計を取り付けることの欠点は、熱分布特性が変更され、精度が低下することです。しかし、表面に取り付けられた温度計は、構築がはるかに簡単で、十分に正確です。

市販のチルドミラー湿度計は、4cmではなく約5mmのはるかに小さいミラーを使用しています。必要な電力が少なく、フォームファクタが小さいためです。ただし、小さなミラーとそれに対応するペルチェは、大きなバリアントほど簡単には入手できません。さらに、小さなペルチェには非常に低い電圧が必要であり、カスタムドライバが必要です。また、SMD温度計を小さな鏡面に取り付けて、光を反射するのに十分なスペースを残しておくのは困難です。

現在のバージョンには、遮光エンクロージャーがありません。これは簡単に3D印刷できますが、外部光源からの干渉を遮断するために強くお勧めします。また、光源と光センサーを所定の位置に保持するために使用することもできます。 3D印刷されたエンクロージャーを作成する場合は、十分に換気されていることを確認してください。換気にはペルチェファンを使用できますが、エンクロージャーに空気を吹き込むのではなく、必ず空気を取り入れてください。ミラーのクリーニングのために、内部にも簡単にアクセスできる必要があります。

現在の実装では、氷の粒子と水滴を区別する必要があるため、霜点を測定できません。これには、散乱光を測定するための2番目の光学センサーが必要です。

構築方法

ペルチェを取り、両面をきれいにし、熱伝導性接着剤を高温側に置きます。均等に分散されていることを確認してください。熱伝導性接着剤がない場合は、エッジの近くに数滴の瞬間接着剤を塗布したサーマルペーストを使用できます。これも同様に機能します。ヒートシンクの表面を掃除し、ヒートシンクとペルチェを一緒に押して、接着剤を乾かします。

ヒートシンクをペルチェに取り付け、接着剤が乾いたら、同じ方法でミラーを取り付けます。最初に底面をきれいにしてください。サーマルペーストが均一に分散され、エアギャップが存在しないことが重要です。そうしないと、ミラー上の熱分布が不均一になります。

すべての接着剤が乾いたら、ファンを取り付けます。ヒートシンクはかなり熱くなるので、ヒートシンクを冷却するのに十分強力なファンを使用してください。ファンをヒートシンクに取り付ける方法は、使用するヒートシンクのタイプによって異なります。ホットグルーガンを使用して2つを接着しました。

<図>

ファンの電源を入れてから、ペルチェを起動して、ミラー上に凝縮が同時に現れる領域が少なくとも2つあるかどうかを確認します。ペルチェに長時間電力を供給しないでください。これにより、確実に均一な凝縮プロファイルが作成されます。凝縮がちょうど見えるようになったとき、それがどのように見えるかを見たいと思います。結果に満足できない場合は、新しいペルチェ、ミラー、ヒートシンクを試してみてください。部品を取り外して滑らかな表面を復元できる可能性は低いためです。

<図>

<図>

上の写真にあるように、サーマルペーストを均一に分散させなかったため、凝縮プロファイルが不規則になりました。

ミラー表面温度センサーを取り付け、ミラーで反射する光の量を測定する必要がある領域であるため、写真を作成するか、凝縮が同時に現れる領域にマークを付けることが重要です。

このプロジェクトでは、低ノイズ出力が得られるため、Si7021を使用してミラー温度を測定します。残念ながら、I2Cアドレスはハードコーディングされているため、これらのセンサーの1つしか使用できません。周囲温度にはDS18B20温度センサーを使用していますが、精度はあまり高くありません。私がこれらのセンサーを使用する唯一の理由は、たまたまそれらを利用できるようにしたからです。

Si7021(またはPCBベースの温度センサー)をミラーに取り付けるには、まず、温度センサーに非導電性のサーマルペーストを大量に滴下します。電子機器への凝縮を防ぐために、PCBもサーマルペーストで覆う必要があります。次に、PCBの各コーナーにホットグルーの4つの大きな塊を配置します。あなたは速く動く必要があります。凝縮が均一に現れた場所で、センサーをミラーに押し付けます。センサーを水平に置き、センサーをミラーにしっかりと押し付けてください。ホットグルーは、ミラーに触れるとすぐに固化します。センサーの位置を変える必要がある場合は、カッターナイフでセンサーを簡単にこすり落とし、接着剤をはがして、もう一度やり直してください。 PCBに凝縮がある場合は、ホットグルーまたはスプレー式プラスチックで絶縁してください。

<図>

ファンはIRF520MOSFETモジュールによって制御されます。

使用している光センサーは、感度が高く、出力ノイズが少なく、使いやすいOPT101です。

光源には、低出力レーザーダイオードまたは通常のLEDのいずれかを使用できます。私は両方を試しましたが、どちらも正常に機能します。レーザーには応答性が良いという利点がありますが、整列するのは困難です。より多くの光が散乱するため、LEDの応答はフラットになりますが、位置合わせが容易になります。 LEDを使用する場合は、集束ビームを出力することを確認してください。

LEDとレーザーの光出力が高すぎる可能性があり、PWMを使用して出力を減らすことは、光センサーに干渉を引き起こすため、オプションではありません。代わりに、LEDまたはレーザーと直列に抵抗を配置して出力を減らします。

LEDまたはレーザーとOPT101光センサーを取り付けるために、私はそれをより剛性にするためにロッキングワイヤーにねじれた銅線を使用しました。両端をホットグルーで固定しました。これは概念実証には適していますが、ラボ(または地下室)の設定から使用するには非常に壊れやすいものでもあります。ただし、センサーと光源の位置合わせは簡単です。より良い方法は、これらのデバイス用のホルダーを3D印刷することです。これは、3D印刷されたエンクロージャーが、外光からの干渉を防ぐために必須であるためです。

<図>

ペルチェを制御するために、BTS7960モータードライバーが使用されます。ペルチェを駆動する最も効率的な方法は、PWMを使用するのではなく、電流を変更することです。ただし、ペルチェコントローラはBTS7960モータードライバほど簡単には入手できず、この概念実証では、消費電力は要因ではありません。

<図>

組み立てたら、コードをArduinoにアップロードし、ポテンショメータでOPT101の感度範囲を調整します。より高い抵抗は、同じ量の光に対してより高い電圧出力を意味します。 OPT101データシートの図3-電圧応答性と放射照度を参照してください。デバッグでは、ミラーを吹き飛ばして凝縮を作成するか、センサーの前にオブジェクトを配置します。エアコンをお持ちの場合は、電源を入れて(または切って)待ってください。湿度の変化を見ることができます。

下のグラフでは、温度(青)、光学読み取り値(赤)、および測定された露点(緑)を確認できます。エアコンの電源を切ったところ、露点が上がっているのがわかります。

<図>

安全性

提供されているコードはこれをサポートしていませんが、ハードウェアはミラーを冷却するだけでなく加熱することもできます。これは、ペルチェの極性を元に戻すだけで実行できます。ミラー加熱を使用すると、凝縮をすばやく取り除き、応答時間を改善できます。さらに、フラッシュ蒸発凝縮は小さな汚染物質を取り除きます。ただし、ミラーの表面にはヒートシンクがないため、これは潜在的な安全上のリスクももたらします。コードがペルチェの加熱で動かなくなった場合、せいぜい温度計を固定しているホットグルーが溶け、最悪の場合、ワイヤーが溶けて短絡が発生し、火災が発生します。

精度

測定された露点温度は絶対値であるため、校正は容量性または抵抗性湿度計の場合ほど重要ではありません。ただし、ミラー表面温度センサー領域と光検知領域の間には、少なくともある程度の温度差があります。読み取り値の精度を確認する必要がある場合は、校正済みの市販のチルドミラー湿度計を使用してデバイスを校正できます。

ミラーの汚染に関しては、これは部分的にのみ問題になります。反射光の読み取り値は絶対的なものではなく、冷却サイクルの開始に関連しています。冷却サイクルが開始されると、ミラーは凝縮しなくなります。反射光量を測定し、凝縮を検出するための基準として使用します。ミラーが汚染されていて、反射される光が少ない場合は、凝縮検出に影響を与えないはずです。ただし、一部の汚染物質は、凝縮が発生する温度を下げたり上げたりするため、最高の精度を得るには、ミラーの表面を時々清掃してください。

ミラーおよび周囲温度センサーは、高い校正精度を持つ必要はありませんが、解像度は高くなければなりません。たとえば、実際の温度が24.0度であるが、測定値が24.5度である場合、ミラーと周囲温度計の両方が24.5(正規化可能)を測定し、数値が小数点以下1桁でジッターする限り、これは問題ありません。多くの温度計には、0.2度または0.3度のジッターがあります。 TSYS01温度センサーは、0.1度のプラチナ測温抵抗体と同じ精度を提供するため、ミラー表面温度と周囲温度の両方の測定に使用することをお勧めします。

温度センサーがミラー表面と良好に接触することが重要です。非導電性のサーマルペーストの使用は必須です。

温度計の応答時間よりも速くミラーを冷却しないでください。そうしないと、検出された露点が不正確になります。

温度センサーは、光感知領域の凝縮が同時に現れるミラーの場所に配置する必要があります。

ミラー表面に温度センサーを取り付けると、熱分布が変化し、精度が低下します。代わりに赤外線温度計ユニットを使用したくなるかもしれませんが、残念ながら、ミラーはある程度の熱放射を反射するため、測定は周囲の影響を受けます。

<図>

技術的には、湿度の読み取り値も気圧に依存しますが、周囲環境ではその影響は非常に小さくなります。ドアを閉めることによって引き起こされる圧力変化、および建物内に差圧を引き起こす外風が吹くと、その価値よりも多くの問題が発生する可能性があります。

ペルチェヒートシンクからの熱風を鏡の上に引き込まないでください。

温度がゆっくり低下すると、より正確な測定値が得られますが、応答時間も短くなります。ただし、露点近くの温度を振動させることで応答時間を改善できます。

コード

  • チルドミラー湿度計
チルドミラー湿度計 C / C ++
Arduinoコード
 #include  #include  //ウォッチドッグクラッシュ検出//これらはカスタムライブラリです。#include "Si7021.h" //ヒーター付き湿度センサー#include  // DS18B20一時センサー#include  // DS18B20一時センサー//タイマーライブラリ:https://github.com/brunocalou/Timer#include "timer.h" #include "timerManager.h" // Arduinoボードのハードウェアピンを定義します。 TECの状態。#defineCOOLING 0#define HEATING 1#define OFF 2 // TimersTimer timerMainLoop; Timer timerTecCooling; Timer timerSampleNoise; //温度センサー(湿度は使用されていません)。 Si7021 si7021; // DS18B20温度センサーOneWireoneWire(oneWireBus); DallasTemperatureセンサー(&oneWire);フロート湿度=0;フロートアンビエントテンプ=0;フロートオプティカルデューポイント=0; //これらを初期の高い値に設定して、シリアルプロッターの範囲を正しくします。フロートミラーテンプ=30;フロートオプティカル=30; float dewPoint =15; //初期値はミラーよりも低くする必要がありますtemp.floatrelativeHumidity =30; int tecState =OFF; bool Cooling =false; int intervalTecCooling =200; // TECタイマーがms.floatで更新される頻度opticThreshold =0.5f; //0.5 //凝縮検出にフラグを立てるために、光学読み取り値が基準を下回る必要がある摂氏C度の量。これは、信号のノイズよりも大きい数値である必要があります。intpwmIncrement=1; int startPwm =100; int maxPwm =255; int intervalMainLoop =200; int tecPwm =0; int noiseSampleIndex =0; int noiseSampleAmount =10; float noiseSampleHighest =0; float noiseSampleLowest =10000; bool noiseSampling =false; floatcalculateHumidity(float TD、float T){//露点は温度。 if(TD> T){TD =T; } // August-Roche-Magnus近似。 float rh =100 *(exp((17.625 * TD)/(243.04 + TD))/ exp((17.625 * T)/(243.04 + T))); return rh;} // TECを加熱、冷却、またはオフに設定します。voidSetTEC(int state、int amount){tecState =state; //加熱と冷却の両方で、加熱と冷却のピンを高く設定する必要があることに注意してください。 PCB設計者に理由を尋ねてください。 // TECの制御に使用されるドライバー:BTS7960モータードライバーボード。 TECを駆動するPWMは効率的ではないため、可変電流源を使用することをお勧めします。 switch(state){case COOLING:digitalWrite(HeatingEnable、HIGH); analogWrite(HeatingPWM、0); digitalWrite(coolingEnable、HIGH); analogWrite(coolingPWM、amount);壊す;ケース加熱:digitalWrite(coolingEnable、HIGH); analogWrite(coolingPWM、0); digitalWrite(HeatingEnable、HIGH); analogWrite(加熱PWM、量);壊す;ケースOFF:digitalWrite(coolingEnable、LOW); analogWrite(coolingPWM、0); digitalWrite(HeatingEnable、LOW); analogWrite(HeatingPWM、0);壊す;デフォルト:digitalWrite(coolingEnable、LOW); analogWrite(coolingPWM、0); digitalWrite(HeatingEnable、LOW); analogWrite(HeatingPWM、0); }} void setup(){//ウォッチドッグクラッシュの検出。これは、TECが加熱モードでスタックしないようにするための安全のためです。 wdt_enable(WDTO_2S); // WDTO_500MS // WDTO_1S Serial.begin(9600); // 9600 // 57600 pinMode(coolingPWM、OUTPUT); pinMode(HeatingPWM、OUTPUT); pinMode(coolingEnable、OUTPUT); pinMode(HeatingEnable、OUTPUT); pinMode(tecFan、OUTPUT); pinMode(opticSensor、INPUT); //タイマーを設定しますtimerMainLoop.setInterval(intervalMainLoop); timerMainLoop.setCallback(mainLoop); timerMainLoop.start(); timerTecCooling.setInterval(intervalTecCooling); timerTecCooling.setCallback(tecCoolingCallback); timerSampleNoise.setInterval(intervalTecCooling); timerSampleNoise.setCallback(sampleNoiseCallback); // si7021温度センサーのセットアップ。 uint64_t serialNumber =0ULL; si7021.begin(); serialNumber =si7021.getSerialNumber(); // DS18B20 onewire温度センサーsensors.begin(); //グラフを正しく機能させるために、温度センサーのデバッグログを無効にします。 / * Serial.print( "Si7021シリアル番号:"); Serial.print((uint32_t)(serialNumber>> 32)、HEX); Serial.println((uint32_t)(serialNumber)、HEX); //ファームウェアバージョンSerial.print( "Si7021ファームウェアバージョン:"); Serial.println(si7021.getFirmwareVersion()、HEX); * / startNoiseSampling(); } //光学センサーの読み取り値を取得します。floatgetOptical(){int opt =analogRead(opticSensor); float optFactored =(float)opt / 30.0f; return optFactored;} //タイマーcallback.voidtecCoolingCallback(){digitalWrite(tecFan、HIGH); // TECの出力をゆっくりと上げます。 tecPwm + =pwmIncrement; //クランプif(tecPwm> maxPwm){tecPwm =maxPwm; } // TEC冷却量を設定しますSetTEC(COOLING、tecPwm); //凝縮は検出されましたか? if(optic <=(noiseSampleLowest --opticThreshold)){//露点を記録します; dewPoint =mirrorTemp; OpticalDewpoint =オプティカル; stopTec(); }} void startNoiseSampling(){noiseSampling =true; noiseSampleHighest =0; noiseSampleLowest =10000; timerSampleNoise.start();} void sampleNoiseReset(){timerSampleNoise.stop(); noiseSampleIndex =0; noiseSampling =false;} void sampleNoiseCallback(){if(noiseSampleIndex> noiseSampleAmount){sampleNoiseReset(); startTecCooling(); } else {if(optic> noiseSampleHighest){noiseSampleHighest =オプティカル; } if(optic  =noiseSampleLowest)){startNoiseSampling(); }} void loop(){//ウォッチドッグクラッシュ検出wdt_reset(); //すべてのタイマーを更新します。 TimerManager ::instance()。update();} 

回路図


製造プロセス

  1. Arduino Spybot
  2. FlickMote
  3. 自家製テレビB-Gone
  4. 万華鏡インフィニティミラー
  5. マスタークロック
  6. Find Me
  7. Arduino Power
  8. Tech-TicTacToe
  9. Arduino Quadruped
  10. Arduinoジョイスティック