サンプレベルモニター
コンポーネントと消耗品
> | | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| コンデンサ1uf、.01uf、470pfすべてのSMD | | × | 1 | |
| プラスチック製の透明なプロジェクトボックス110mm * 85mm | | × | 1 | |
| | × | 1 | |
このプロジェクトについて
サンプレベルモニターは、娘の家またはホームモニタープロジェクトにあるEcobeeRSM-01入力ボードで動作するように構築されています。スタンドアロンにするためにリレーを追加しました。超音波センサーよりも信頼性が高く、取り付けが簡単だと感じたものが欲しかったのです。この目的のために、私は圧力センサーを調べ始め、ついにFreescaleMPXV5010DPに出くわしました。 0〜10kPaの場合は0-5vdcの出力があり、これはウォーターヘッドの約1020mmになります。
<図> <図>
ローカル表示が欲しかったので、デザインに使用するOLEDモジュールを選びました。安くて明るく、これは2色の画面でした。インターフェイスを提供するために、ドライ接点出力用のリレーを追加しました。 MPXV5010DPセンサーよりも強力な0-5vdc出力用のDAC(デジタル-アナログコンバーター)を追加しました。これにより、センサーが配線の損傷から保護されます。私はI2C通信を使用しているので、必要なのは別のArduinoにデータを供給するためのソフトウェアの変更だけです。
<図>
接続しやすいようにカスタムボードを設計して作成しました。さまざまな構成に十分な柔軟性を提供します。
センサーは、タイゴンチューブによって、サンプに送られる銅パイプに接続されています。これにより、モニターをどこに取り付けるかについてある程度の裁量が可能になり、水自体からモニターを遠ざけることができます。
コード
サンプレベルモニター C / C ++
必要に応じて解析し、このバージョンの余分なゴミを処理して、必要に応じてクリーンアップします。 #include #include #include #include #include #include #define OLED_RESET 4Adafruit_SSD1306 display(OLED_RESET); #if(SSD1306_LCDHEIGHT!=64)#error( "高さが正しくありません。Adafruit_SSD1306.hを修正してください!");#endifAdafruit_MCP47; intrelayPin =5; //リレーアラーム出力の場合intanalogPin =0; // dac出力電圧を測定しますintv1 =0; // MPXV5010からのADC出力intv2 =0; // dac入力のスケーリングはPS入力からdacinputint v3 =0に変換します。 // PSからのmm変換の場合inputintv4 =0; // PSからの深さのパーセンテージinputintv5 =0; // arduinoint v6 =0によって読み取られたdacの出力; // PS inputfloat v7 =0からのmV変換の場合; // mmからinchsintに変換v8 =0; //表示をゴミにするインチの小数を削除しますintoffSet =40; // arduinoint maxSet =1015で測定された0kPa出力; // arduinoint maxHeight =1020で測定された10kPa出力; //通常の水位から蓋までのサンプの深さ(mmint範囲)=(maxHeight * 0.8)+ offSet; int alarmHeight =12; //アラームの高さ(インチ)// MPXV5010DP差圧センサーの場合intanalogPin2 =1; float divisor =25.4; //表示をインチに変換する場合voidsetup(){Serial.begin(9600); Serial.println( "DPセンサーを使用したDACテスト"); //デフォルトでは、3.3vラインから内部で高電圧を生成します! (きちんと!)display.begin(SSD1306_SWITCHCAPVCC、0x3C); // I2C addr 0x3D(128x64の場合)で初期化します// init done //バッファをクリアします。 display.clearDisplay(); // MCP4725A0の場合、アドレスは0x60または0x61です。dac.begin(0x60); pinMode(relayPin、OUTPUT); digitalWrite(relayPin、HIGH);} void loop(){v1 =analogRead(analogPin2);遅延(1000); if(v1 alarmHeight){display.invertDisplay(true); digitalWrite(relayPin、LOW);} else {display.invertDisplay(false); digitalWrite(relayPin、HIGH);} display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,0); display.println( "SUMP LEVEL"); //display.setTextColor(BLACK、WHITE); // '反転'テキストdisplay.setTextSize(4); display.setTextColor(WHITE); display.print(v8); display.setTextSize(2); display.println( "inches"); display.display(); delay(500); } void serial(){//デバッグとキャリブレーション用Serial.print( "PSアナログ入力:"); Serial.print(v1); Serial.print( "高さ:"); Serial.print(v3); Serial.print( "mm"); Serial.print(v4); Serial.print( "%"); Serial.print( "変換された電圧:"); Serial.print(v6); Serial.println( "mV");} // end
回路図
Eagle 6.5.0 を使用 sump%20level.sch