資料介紹
描述
功能列表
構建通風系統所需的零件
- IO 擴展器
- 1線到I2C。
- 阿杜諾納米。
- 1 通道直流 5V 繼電器。
- x2 SHT10 濕度傳感器。
- I2C SSD1306 OLED 128x64 顯示器。
- x2 110V 172x150x38mm 0.34A 2400 RPM 滾珠軸承風扇。
- 158x90x65mm 透明防水塑料外殼。
- ip68 pg7 防水尼龍電纜接頭。
- ip68 pg9 防水尼龍電纜接頭。
- x2 RJ11 Keystone 螺絲端子插孔。
- x2 Keystone 機箱。
- x2 50 英尺 4C4P RJ11 線。
- 6" 4C4P RJ11 線。
- 100 英尺 110V 電線。
- 交流插頭。
- 2.54 毫米頭線。
- 12VDC 1A 墻壁適配器電源。
接線圖
OLED顯示器
那么為什么要使用 IO 擴展器呢?
- 設計更簡單
- 現成的零件
- 無需編寫 1-Wire 驅動程序
- 無需編寫繼電器驅動程序
- 無需編寫 OLED 顯示驅動程序
- 沒有顯示字體占用 Arduino 代碼空間
- 無需編寫濕度傳感器驅動程序
- 節省 Arduino 上的代碼空間;僅 6106 字節 (19%)
- 寫代碼不到一天
- 使用標準 RJ11 電話線輕松接線
- 沒有傳感器電纜長度問題
- 比商業系統更便宜
- 易于更改以適應個性化需求
- 單電源
構建系統
將 Arduino Nano 連接到IO 擴展器并使用以下代碼對其進行編程。6 針接頭是軟件串行調試端口,最終安裝時不需要。
確保更改 ONEWIRE_TO_I2C_ROM 定義的地址以匹配您的1-Wire 到 I2C地址。
/* IO Expander
*
* Basement/Crawlspace Ventilation System v1.1
*
*/
#include
#include
#include
#include "IOExpander.h"
#define FAHRENHEIT
#define ONEWIRE_TO_I2C_ROM "i4s71"
#define INIT_OLED "st13;si;sc;sd"
#define HUMIDITY_SENSOR_INSIDE "s6t1"
#define HUMIDITY_SENSOR_OUTSIDE "s8t1"
#define FAN_ON "r1o"
#define FAN_OFF "r1f"
#define ABSOLUTE_DELTA_FAN_ON 1 // Fan on if absolute humidity delta of inside >= outside
#define ABSOLUTE_DELTA_FAN_OFF 0.5 // Fan off if absolute humidity delta of inside <= outside
#define OUTSIDE_RELATIVE_FAN_ON 88 // Fan on if outside relative humidity is <= %
#define OUTSIDE_RELATIVE_FAN_OFF 90 // Fan off if outside relative humidity is >= %
#define MINIMUM_TEMPERATURE 15 // Cycle vent on/off if outside temperature <= 15C/59F
#define FAN_ON_TIME (20*60*1000L) // 20 min
#define FAN_OFF_TIME (20*60*1000L) // 20 min
//#define SERIAL_DEBUG
#define SERIAL_TIMEOUT 5000 // 5 sec delay between DHT22 reads
#ifdef SERIAL_DEBUG
SoftwareSerial swSerial(8,7);
#endif
struct HS {
float temp;
float relative;
float absolute;
bool error;
};
int led = 13;
bool init_oled = true;
long ontime, offtime;
#ifdef FAHRENHEIT
#define C2F(temp) CelsiusToFahrenheit(temp)
float CelsiusToFahrenheit(float celsius)
{
return ((celsius*9)/5)+32;
}
#else
#define C2F(temp) (temp)
#endif
void SerialPrint(const char* str, float decimal, char error)
{
Serial.print(str);
if (error) Serial.print(F("NA"));
else Serial.print(decimal, 1);
}
float DewPoint(float temp, float humidity)
{
float t = (17.625 * temp) / (243.04 + temp);
float l = log(humidity/100);
float b = l + t;
// Use the August-Roche-Magnus approximation
return (243.04*b)/(17.625-b);
}
#define MOLAR_MASS_OF_WATER 18.01534
#define UNIVERSAL_GAS_CONSTANT 8.21447215
float AbsoluteHumidity(float temp, float relative)
{
//taken from https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-hu midity-to-absolute-humidity/
//precision is about 0.1°C in range -30 to 35°C
//August-Roche-Magnus 6.1094 exp(17.625 x T)/(T + 243.04)
//Buck (1981) 6.1121 exp(17.502 x T)/(T + 240.97)
//reference https://www.eas.ualberta.ca/jdwilson/EAS372_13/Vomel_CIRES_satvpformulae.html // Use Buck (1981)
return (6.1121 * pow(2.718281828, (17.67 * temp) / (temp + 243.5)) * relative * MOLAR_MASS_OF_WATER) / ((273.15 + temp) * UNIVERSAL_GAS_CONSTANT);
}
void ReadHumiditySensor(HS* hs)
{
SerialCmd("sr");
if (SerialReadFloat(&hs->temp) &&
SerialReadFloat(&hs->relative)) {
//hs->dewpoint = DewPoint(hs->temp, hs->relative);
hs->absolute = AbsoluteHumidity(hs->temp, hs->relative);
hs->error = false;
}
else hs->error = true;
SerialReadUntilDone();
}
void setup() {
Serial.begin(115200);
#ifdef SERIAL_DEBUG
swSerial.begin(115200);
//swSerialEcho = &swSerial;
#endif
pinMode(led, OUTPUT);
wdt_enable(WDTO_8S);
offtime = millis() - FAN_OFF_TIME;
}
void loop() {
HS inside, outside;
static bool fan = false;
static bool cycle = false;
static long last_time = -(60L * 1000L);
Serial.println();
if (SerialReadUntilDone()) {
// Read the humidity sensors only once a minute or they will self heat if read too quickly
if (millis() - last_time > 60L * 1000L)
{
if (SerialCmdDone(HUMIDITY_SENSOR_INSIDE))
ReadHumiditySensor(&inside);
if (SerialCmdDone(HUMIDITY_SENSOR_OUTSIDE))
ReadHumiditySensor(&outside);
if (inside.error || outside.error) fan = false;
else {
if (fan) {
if (outside.relative >= OUTSIDE_RELATIVE_FAN_OFF || inside.absolute - outside.absolute <= ABSOLUTE_DELTA_FAN_OFF)
cycle = fan = false;
else {
if (cycle && outside.temp <= MINIMUM_TEMPERATURE &&
millis() - ontime > FAN_ON_TIME) fan = false;
}
if (!fan) offtime = millis();
}
else {
if (outside.relative <= OUTSIDE_RELATIVE_FAN_ON && inside.absolute - outside.absolute >= ABSOLUTE_DELTA_FAN_ON)
cycle = fan = true;
if (cycle && outside.temp <= MINIMUM_TEMPERATURE)
fan = (millis() - offtime > FAN_OFF_TIME) ? true : false;
if (fan) ontime = millis();
}
}
if (fan) SerialCmdDone(FAN_ON);
else SerialCmdDone(FAN_OFF);
if (SerialCmdNoError(ONEWIRE_TO_I2C_ROM)) {
if (init_oled) {
SerialCmdDone(INIT_OLED);
init_oled = false;
}
SerialCmdDone("st13;sc;sf0;sa1;sd70,0,"INSIDE";sd127,0,"OUTSIDE";sf1;sa0;sd0,12,248,""
#ifdef FAHRENHEIT
"F"
#else
"C"
#endif
"";sd0,30,"%";sf0;sd0,50,"g/m";sd20,46,"3";");
SerialPrint("sf1;sa1;sd70,12,"", C2F(inside.temp), inside.error);
SerialPrint("";sd70,30,"", inside.relative, inside.error);
SerialPrint("";sd70,48,"", inside.absolute, inside.error);
SerialPrint("";sd127,12,"", C2F(outside.temp), outside.error);
SerialPrint("";sd127,30,"", outside.relative, outside.error);
SerialPrint("";sd127,48,"", outside.absolute, outside.error);
Serial.print("";");
Serial.print("sf0;sa0;sd0,0,"");
if (fan) Serial.print("FAN");
else Serial.print("v1.1");
Serial.println("";sd");
SerialReadUntilDone();
}
else init_oled = true;
last_time = millis();
}
delay(1000);
}
else {
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
init_oled = true;
}
wdt_reset();
}
注意:如果您使用 USB 端口對 Arduino Nano 進行編程,則必須將其與IO 擴展器斷開,因為它也使用相同的單個串行端口,而不是如果您想調試使用 ICSP 端口對 ATmega328P 進行編程。要啟用軟件調試端口,請取消注釋 SERIAL_DEBUG 定義。
將 110VAC 線連接到兩個風扇。
在 PG7 和 PG9 外殼的任一側鉆一個 7/16" 和 9/16" 孔。使用 dremel 工具稍微擴大孔,直到壓蓋貼合。PG7 將輸入 12VDC 輸入電壓,PG9 將輸入傳感器和風扇。
找到一個打開且未堵塞的通風口。這將是我們的排氣,我們將把地下室/爬行空間的空氣吹出。確保另一側的所有其他通風口都打開,因為這些通風口將成為您的進氣口。關閉相鄰的通風口,以便在整個地下室/爬行空間中創建區域而不是局部氣流。
使用扎帶將風扇安裝在通風口的內側。確保風扇指向正確的方向以吹出空氣。
找到一個現有的接入點并將外部濕度傳感器線穿入內部。確保濕度傳感器距離房屋和任何障礙物足夠遠,以便準確測量環境溫度/濕度。根據當地發布的天氣報告驗證您的讀數。
將外部濕度傳感器連接到梯形插孔和外殼并將其安裝在內部。
將內部濕度傳感器連接到梯形插孔和外殼并將其安裝在內部。需要額外濕度控制的中心位置或區域是首選。
將 50 英尺 RJ11 電線連接到濕度傳感器,并將帶有風扇線的電線連接到將安裝控制外殼的可用接入點。
連接所有電線并將所有部件組裝/送入控制柜。如果您的 50 英尺 RJ11 電線帶有預先壓接的連接器,您必須將它們切斷以將電線穿過壓蓋并壓接新的連接器。
測試系統并確保一切正常。要測試繼電器和風扇,請斷開 Arduino 與IO 擴展器的連接,并將其直接連接到您的計算機以手動控制它。確認一切正常后,使用雙面膠帶和包裝泡沫將所有部件組裝到外殼中以固定您的電路板,并享受智能濕度控制通風系統的好處和節省
2019 年 3 月 20 日更新
在過去幾個月在我的爬行空間中運行通風系統后,在我的熱水器泄漏后,零掛起和峰值相對濕度大于 95% 后,它已成功將相對濕度降至 50% 以下。通風系統是一個有效的控制系統!
從 SSD1306 0.96" OLED 顯示屏切換到 SH1106 1.3" OLED 顯示屏。它更大,更容易閱讀。使用 IO Expander 固件更新可以輕而易舉地改變它。只需在您的代碼中將“ST10”更改為“ST13”。
2019 年 9 月 12 日更新
發布了 v1.1,修復了 OLED 顯示屏供電空白的冷啟動問題。還在為我的爬行空間發泄!
- 基于Arduino Nano R3的地下室狹小空隙通風系統 0次下載
- 基于Arduino Nano R3的地下室狹小空隙通風系統 0次下載
- 人民防空地下室設計規范 2次下載
- 地下車庫通風變頻調節的原理與應用 12次下載
- 基于IDL的地下工程通風系統設計 26次下載
- 無風管型誘導通風系統自控設計說明 68次下載
- 基于ARM的通風柜控制系統
- 通風系統煤礦通風監控系統示意圖
- 地下室防水工程監理質量措施
- 地下室內設置燃氣空調機組的思考
- 三剛一柔復合型深基礎圍護的設計和施工
- 超深六層地下室堵漏防水綜合技術
- 混凝土墻體出現裂縫怎么辦
- 通風設計技術交流
- 基于PLC的隧道通風監控系統
- 變配電室使用要求 2049次閱讀
- 基于STM32單片機的CO(一氧化碳)氣體檢測報警通風系統仿真設計 2786次閱讀
- 基于CMOS的簡易水位報警電路 799次閱讀
- 壓縮空氣在發電廠暖通設計中的拓展應用探討 1381次閱讀
- 城市地下管廊智能監測系統設計方案 1248次閱讀
- 基于P87C591單片機和P87C591數模轉換器實現機車通風機控制系統設計 1540次閱讀
- 基于物聯網與無線網絡技術實現地下水監測系統的設計 1970次閱讀
- 地下管網的管理如何利用rfid技術 700次閱讀
- 智慧地下水表解決方案如何實現 1119次閱讀
- 如何基于現有站址資源合理規劃部署NB-IoT 900 MHz基站 8405次閱讀
- NB-IoT是怎么工作的,是否支持基站定位? 3.2w次閱讀
- 淺析紅外線感應開關原理和安裝要求 1.4w次閱讀
- 海為PLC在智能通風系統的內部測試中的應用 915次閱讀
- 一文看懂空調座椅半導體獨立制冷和原車冷氣通風系統的區別 1.2w次閱讀
- 中繼臺的作用和安裝以及對講機頻率修改 1.4w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多