Arduino駆動の住宅用エアフローメーター: 構築と監視
必要な部品と材料
![]() |
Arduino UNO | × | 1 |
![]() |
ジャンパーワイヤー (汎用) - 合計25本 | × | 25 |
![]() |
ブレッドボード (汎用) | × | 1 |
![]() |
ロータリーポテンショメータ 10kΩ | × | 1 |
![]() |
Adafruit RGBバックライトLCD - 16x2 | × | 1 |
![]() |
スルーホール抵抗 220kΩ | × | 1 |
| Diymall 電圧センサー DC 0-25V | × | 1 | |
| DROK 信号増幅器 AD620 | × | 1 | |
![]() |
カップブレード風速計 | × | 1 |
必要な工具
![]() |
はんだごて (汎用) |
このプロジェクトについて
背景
住宅環境で使用できるエアフローフローメーターの作成を課せられました。残念ながら、現在のHVAC業界では、産業用途向けに設計されたシステムの風量検知デバイスしか市場にありません。産業用レジスタの風量計算に現在使用されているデバイスは、住宅用レジスタには大きすぎるか、住宅用HVACシステムの少ない風量出力では風量計算ができません。
仕組み
風から信号を生成するために、カップ風速計を使用して空気を捕捉しました。Autodesk Inventorでカスタム3Dプリントブレードを作成し、ファンブレードの空気捕捉性能を最適化しました。また、風速計を収納するエンクロージャーも3Dプリントしました。


風速計が出力する信号を読み取るために電圧センサーを選択。センサーからの信号は、電圧センサーでより正確な読み取りを得るために増幅する必要がありました。増幅器は風速計の出力電圧を10倍に増幅します。この倍率は入力電圧に基づいて1.5倍〜1000倍の間で調整可能です。
Arduino Unoを使用して電圧センサーからのアナログ信号を読み取り、LCD画面に表示する内容を制御しました。この特定の問題では風速をCFM (立方フィート/分) で表示したかったため、画面にCFMとして表示しています。
構築
電子部品
構築の第一歩は風速計から始めます。以下はデバイスの写真です。


「風速計上面図」とラベル付けされた画像を見てください。ブレードが風速計に接続している部分はL字型で非常に薄いため、高速では耐久性に問題があります。ここで新しいブレードを設計しました。より厚いブレードと頑丈なハンドル設計を目指しました。大きなブレードの目的は、ブレードとハウジングユニット (ファンが設置される場所) の断面積ギャップを減らし、スクープが捕捉する空気量とモーターが発生させる電圧を増やすことです。以下はブレードが風速計に取り付く部分の写真です。

これで大きな違いが出るのか? 素晴らしい質問です。これを確認するため、Autodesk Inventorで応力解析テストを実施し、新設計がどれだけ頑丈かを検証しました。以下が結果です。


新しいブレードは高速域で非常に効果的であることがわかります。ブレードのSTLファイルはファイルセクションに添付されています。まだ新しいブレードを取り付けないでください。
次に、改造した風速計をハウジングユニットに設置します。ハウジングユニットのSTLファイルもファイルセクションにあります。ブレードなしの状態で、風速計をハウジング底部の穴から上にスライドさせます。風速計の底部を薄い木の円盤2枚 (ホビーロビー製) でゴリラグルーで固定。円盤とABSプラスチックハウジングに4つの小さな穴を開けます。1つはワイヤー通し用、残り3つはネジ用です。以下のようになります。

次に風速計を増幅器に配線します。以下は増幅器の写真です。

*注: 増幅器に接続されたワイヤーはすべてオス-オス
オス-オスワイヤー2本を用意 (色は問わないが、プロジェクトで使用した色で説明)。赤色ワイヤーを右側の+Sサークルにはんだ付けし、もう一方を風速計から出ている赤色ワイヤーにはんだ付け。黒色ワイヤーを右側の-Sサークルにはんだ付けし、もう一方を風速計から出ている黄色ワイヤーにはんだ付け。絶縁テープで固定すると良いでしょう。


次に増幅器を電池電源に配線。黄色ワイヤーを右側のGNDにはんだ付けし、もう一方を電池ボックスコネクターの黒色ワイヤーにはんだ付け。白色ワイヤーを右側のVinサークルにはんだ付けし、もう一方を電池ボックスコネクターの赤色ワイヤーにはんだ付け。
次に増幅器を電圧センサーに配線。青色ワイヤーを増幅器のGNDに、もう一方を電圧センサーのVCCに。緑色ワイヤーを増幅器のVoutに、もう一方を電圧センサーのGNDに。


次に電圧センサーをArduinoに配線して配線完了。回路図セクションの配線図を参照してください。
仕上げ
難しい部分は完了しました! すべて配線できたら、エレクトロニクスをフローメーターに設置します。フォームボードをファンハウジングの天井として使用し、ゴリラグルーで固定。その上にエレクトロニクスを置き、さらにフォームボードでエレクトロニクスを覆います。以下の写真でフォームの使い方がわかります。

また、Arduinoと増幅器がそれぞれの9V電池電源にアクセスできるよう、フォームに穴を開けました。以下の写真で確認できます。

次にファネルを製作。PVC素材で台形の板4枚を使用。ゴリラグルーとコーキングで板同士を接合し、同じ方法でファネルをファンハウジングに接続。ファネルの大口径側には周囲にウェザーストリッピングを配置し、ベントに押し当てたときにシールを形成します。ファネル大口径側の断面は14インチ×14インチです。以下はファネル正面図です。
キャリブレーション
すべて組み上がったらフローメーターをキャリブレーションしました。正確な風量が既知のデバイスでテストを行いました。最初のコードではセンサーが読み取った電圧をLCDに表示。収集したデータからLCDにCFMを表示するための方程式を作成しました。以下がキャリブレーションデータです。


グラフには2つの曲線があります: 初期風量と実際の風量。ファネルで絞り込む際に速度がわずかに低下するため異なります。ここでは実際の風量の最適フィット方程式、
y = 1.1409x² + 44.958x
をArduinoコードで使用します。コードは3つの部分に分かれます: 風速ゼロの領域、小〜中風速の領域、大風速の領域。上記の最適フィット方程式で全風速域をモデル化することもできますが、小〜中風速域により適した方程式を見つけました。各領域は以下の方程式で表現されます:
大CFM: y = 1.1409x² + 44.958x
中〜小CFM: y = 40x + 20
ゼロCFM: y = 0
コードは後のセクションにあります。
コードをArduinoにアップロードすればフローメーターの完成です!
自分でキャリブレーションする場合 (オプション)
自分でキャリブレーションしたい場合、例えば風速をm/sやmphで測定したい場合、以下の手順で行えます。
ステップ1: 実際の流量を測定する方法を見つける。最も安いのは市販の風速計を購入すること。こちら が適しています。
ステップ2: 風速計を複数の速度設定を持つファンの前に置く。以下の写真のようなファン。

ステップ3: 各速度設定での風速計の読み値を記録。
ステップ4: フローメーターでファンの出力電圧を読み取る。そのために「電圧センサーコード」をArduinoにアップロード。
ステップ5: フローメーターが電圧を読み取れるようになったら、各ファン速度設定での電圧を記録。
ステップ6: Excelで「風速 vs 電圧」の散布図を作成。
ステップ7: 近似曲線機能を使って「風速 vs 電圧」を正確にモデル化する方程式を求める。
ステップ8: 近似曲線があまり線形でないと感じたら、グラフの下部と上部で別々の方程式を求める。
ステップ9: 自分の方程式を「フローメーターコード」の方程式に置き換える。Arduinoにアップロードすれば完了!
コード
フローメーターコード C/C++
1. #include <LiquidCrystal.h>
2.
3. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
4. // 使用するピン
5.
6. // センサー内の抵抗値
7. float R1 = 30000;
8. float R2 = 7500;
9.
10. void setup()
11. {
12. Serial.begin(9600);
13. lcd.begin(16, 2);
14. // LCD画面を使用可能に
15. }
16.
17. void loop()
18. {
19. int sensorValue = analogRead(A0);
20. // センサー値読み取り
21.
22. float voltage = ((5 * sensorValue * (R1 + R2)) / (1024 * R2));
23. // 実電圧の計算式
24.
25. //*********************************************************//
26. // CFMの方程式は電圧の区分関数なので、
27. // if文で各領域に分割
28. //*********************************************************//
29.
30. if (voltage > 1)
31. // 大CFM領域
32. {
33. float cfm = (1.1409 * voltage * voltage) + 44.258 * voltage;
34. Serial.println(cfm);
35. lcd.print("CFM = ");
36. lcd.setCursor(0, 1);
37. lcd.print(cfm);
38. delay(1000);
39. lcd.clear();
40. delay(1000);
41. }
42.
43. else if (voltage > 0.01 && voltage < 1)
44. // 中〜小CFM領域
45. {
46. float cfm = (40 * voltage + 20);
47. Serial.println(cfm);
48. lcd.print("CFM = ");
49. lcd.setCursor(0, 1);
50. lcd.print(cfm);
51. delay(1000);
52. lcd.clear();
53. delay(1000);
54. }
55.
56. else
57. // ファンが回っていない場合、CFMはゼロ
58. {
59. float cfm = 0;
60. Serial.println(cfm);
61. lcd.print("CFM = ");
62. lcd.setCursor(0, 1);
63. lcd.print(cfm);
64. delay(1000);
65. lcd.clear();
66. delay(1000);
67. }
68. }
電圧センサーコード C/C++
自分でキャリブレーションする場合に電圧を読み取るコード
// センサー内の抵抗値
float R1 = 30000;
float R2 = 7500;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
float voltage = ((5 * sensorValue * (R1 + R2)) / (1024 * R2));
Serial.println(voltage);
delay(1000);
}
電圧センサーコード (LCD表示版) C/C++
フローメーターを自分でキャリブレーションする際に使用するコード
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// 使用するピン
// センサー内の抵抗値
float R1 = 30000;
float R2 = 7500;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
int sensorValue = analogRead(A0);
float voltage = ((5 * sensorValue * (R1 + R2)) / (1024 * R2));
Serial.println(voltage);
lcd.print("V = ");
lcd.setCursor(0, 1);
lcd.print(voltage);
delay(1000);
lcd.clear();
delay(1000);
}
カスタムパーツとエンクロージャ
回路図
製造プロセス
- 空気清浄機:設計、歴史、将来のトレンド
- 酸素タンク製造:原材料から品質保証まで
- 芳香剤:古代の香りから現代のプラグイン技術へ
- 酸素:古代の発見から現代産業の動力源へ
- エアコンシステム:設計、製造、将来動向
- 熱気球:モンゴルフィエ兄弟から現代フライトまで
- エアバッグシステム:設計、歴史、未来の革新
- Arduino UNOとMAX7219で作るUFOアタックゲーム – レトロなドットマトリクスシューティング
- 3D RGB アルドゥクロック:Bluetooth対応LED時計(RTC内蔵)
- 川の健康を見守る:Arduinoベース水質監視システム「MyRiver」
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド






