2024年9月28日土曜日

微差圧センサでPCケース内外の圧力を測定する

  PCケースのエアフローを考えるとき,ケース内を正圧(ケース外より高い圧力)とするか,負圧(ケース外より低い圧力)とするかを考えることがあると思う。一般的には正圧の方が冷却能力が落ちるものの,ほこりを吸い込みにくいと言われる。

 自分はケース内にほこりを持ち込みたくないため,吸気ファン前面に2個,排気ファンを背面に1個取り付けて正圧になるようにしている。ただ,実際のところ正圧か負圧かを確かめたことがなかったので,今回微差圧センサによりケース内外の差圧を測定することにした。


1. 微差圧センサ

 使用したセンサはSensirionのSDP810-125Paで,±125Pa(±12.7mmAq)の範囲の差圧を測定できる。インターフェースはI2Cで,Arduinoなどを使用して測定値をPCへ転送できる。



2. Arduino R3 Unoとの接続

※以降はArduino IDEでの操作となる。

※R4 MinimaではなぜかSDP810がI2Cデバイスとして認識されなかったので,R3 Unoを使用している。

1) ライブラリのインストール

 Arduino IDEのライブラリマネージャから,Sensirion I2C SDPとSensirion Coreをインストールする。


2) SDP810とArduinoの配線

 SDP810のピンアウトは以下のようになっている。VDDは5Vか3Vをつなぐ。


 ピンのピッチはArduinoの2.54mmではなく2mmのため,2.54mm用のジャンパー線は使用できない。Groveケーブルのコネクタがうまくはまったのでこれを使用することにした。

 ただし,GroveのピンアサインとSDP810のピンアサインは異なるため,ArduinoにGroveハットなどを取り付けてそこに接続しても動作しない。自分はGroveケーブルに2.54mm用のジャンパーピンを半田でつないでArduinoの各ピンに接続した。


3.プログラム

 ライブラリと一緒にサンプルもインストールされる(Sensirion I2C SDP)ので,これを使用する。以下は今回使用したプログラムで,オリジナルから出力部分と測定間隔のカウント方法を変更している。

  1. #include <Arduino.h>

  2. #include <SensirionI2CSdp.h>

  3. #include <Wire.h>

  4. SensirionI2CSdp sdp;

  5. int loggingInterval;

  6. long nn;

  7. float ss;

  8. void setup() {

  9.     Serial.begin(115200);

  10.     while (!Serial) {

  11.         delay(100);

  12.     }

  13.     Wire.begin();

  14.     uint16_t error;

  15.     char errorMessage[256];

  16.     sdp.begin(Wire, SDP8XX_I2C_ADDRESS_0);

  17.     uint32_t productNumber;

  18.     uint8_t serialNumber[8];

  19.     uint8_t serialNumberSize = 8;

  20.     sdp.stopContinuousMeasurement();

  21.     error = sdp.readProductIdentifier(productNumber, serialNumber,

  22.                                       serialNumberSize);

  23.     if (error) {

  24.         Serial.print("Error trying to execute readProductIdentifier(): ");

  25.         errorToString(error, errorMessage, 256);

  26.         Serial.println(errorMessage);

  27.     } else {

  28.         Serial.print("ProductNumber:");

  29.         Serial.print(productNumber);

  30.         Serial.print("\t");

  31.         Serial.print("SerialNumber:");

  32.         Serial.print("0x");

  33.         for (size_t i = 0; i < serialNumberSize; i++) {

  34.             Serial.print(serialNumber[i], HEX);

  35.         }

  36.         Serial.println();

  37.     }

  38.     error = sdp.startContinuousMeasurementWithDiffPressureTCompAndAveraging();

  39.     if (error) {

  40.         Serial.print(

  41.             "Error trying to execute "

  42.             "startContinuousMeasurementWithDiffPressureTCompAndAveraging(): ");

  43.         errorToString(error, errorMessage, 256);

  44.         Serial.println(errorMessage);

  45.     }

  46.     //測定値送信間隔[ms]を設定.

  47.     //また,loop内処理時間がこれよりも長いと設定した間隔でデータ送信ができない.

  48.     loggingInterval = 500;

  49.     //グローバル変数初期化

  50.     nn = 0;

  51.     ss = 0;

  52. }

  53. void loop() {

  54.     uint16_t error;

  55.     char errorMessage[256];

  56.     long diff;

  57.     // Read Measurement

  58.     float differentialPressure;

  59.     float temperature;

  60.     diff = millis() - nn;

  61.     

  62.     if(diff >= loggingInterval){

  63.       nn += loggingInterval;

  64.       ss += diff;

  65.       error = sdp.readMeasurement(differentialPressure, temperature);

  66.       if (error) {

  67.         Serial.print("Error trying to execute readMeasurement(): ");

  68.         errorToString(error, errorMessage, 256);

  69.         Serial.println(errorMessage);

  70.       } else {

  71.         Serial.print("Time[sec] ifferentialPressure[Pa] Temperature[°C],");

  72.         Serial.print(ss*0.001);

  73.         Serial.print(",");

  74.         Serial.print(differentialPressure);

  75.         Serial.print(",");

  76.         Serial.print(temperature);

  77.         Serial.println();

  78.       }

  79.     }

  80. }


測定結果

 SDP810の一方にチューブをつなぎ,それをケース内に入れてケース内外の差圧を測定した。


測定条件は,

・PCケースのフロントパネルあり+アイドル時

・フロントパネルあり+Cinebenchを2回実行

・フロントパネルあり+Cinebenchを2回実行

とした。


 以下が結果である。まず,アイドル時はケース内外にほぼ差圧がない。


 フロントパネルがある状態でCinebenchR23を実行したときは差圧がマイナスに触れることが多く,ケース内がわずかに負圧気味になっている。


 フロントパネルを外すと最大4.5Pa(0.46mmAq)となり,一応正圧となった。


 正圧になるように吸気ファンを増やしたのに,負荷時はフロントパネルがあると若干だが負圧となってしまった。フロントファンの回転数を増やすか,何か対策しようと思う。


0 件のコメント:

コメントを投稿