Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Sistem Ventilasi Basement/Crawlspace

Komponen dan persediaan

Arduino Nano R3
× 1
IO Expander
× 1
Io Expander Bundle
× 1

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Daftar Fitur

  • Sensor suhu/kelembaban di dalam/luar.
  • Kontrol kipas ventilasi pintar dengan perbandingan kelembapan
  • Kurangi kelembapan di ruang bawah tanah/ruang merangkak
  • Membantu mengurangi pertumbuhan jamur
  • Ventilasi cerdas menghemat daya

Bagian yang Dibutuhkan untuk Membangun Sistem Ventilasi

  • Pengembang IO
  • 1-Kabel ke I2C.
  • Arduino Nano.
  • Relai 1 Saluran DC 5V.
  • Sensor Kelembaban x2 SHT10.
  • Layar I2C SSD1306 OLED 128x64.
  • x2 110V 172x150x38mm 0.34A 2400 RPM Kipas Bantalan Bola.
  • Penutup Plastik Tahan Air 158x90x65mm Bening.
  • ip68 pg7 Kelenjar Kabel Nilon Tahan Air.
  • ip68 pg9 Kelenjar Kabel Nilon Tahan Air.
  • Soket Terminal Sekrup Keystone RJ11 x2.
  • Enklosur Keystone x2.
  • Kawat x2 50ft 4C4P RJ11.
  • 6" 4C4P RJ11 Kawat.
  • Kabel 100 kaki 110V.
  • Konektor AC.
  • Kabel Header 2.54mm.
  • Catu Daya Adaptor Dinding 12VDC 1A.

Diagram Pengkabelan

Tampilan OLED

Jadi Mengapa Menggunakan IO Expander?

  • Desain lebih sederhana
  • Suku cadang siap pakai
  • Tidak ada driver 1-Wire untuk ditulis
  • Tidak ada driver relai untuk ditulis
  • Tidak ada driver tampilan OLED untuk ditulis
  • Tidak ada font tampilan untuk mengambil ruang kode Arduino
  • Tidak ada driver sensor kelembaban untuk ditulis
  • Menghemat ruang kode di Arduino; hanya 6106 byte (19%)
  • Kurang dari sehari untuk menulis kode
  • Mudah disambungkan menggunakan kabel telepon RJ11 standar
  • Tidak ada masalah panjang kabel sensor
  • Lebih murah untuk dibuat daripada sistem komersial
  • Mudah membuat perubahan untuk beradaptasi dengan kebutuhan individu
  • Sumber daya tunggal

Bangun Sistem

Hubungkan Arduino Nano ke IO Expander dan program dengan kode berikut. Header 6 pin adalah port debug serial perangkat lunak dan tidak diperlukan dalam instalasi akhir.

Pastikan Anda mengubah alamat yang ditentukan ONEWIRE_TO_I2C_ROM agar sesuai dengan alamat 1-Wire ke I2C Anda.

/* IO Expander
*
* Sistem Ventilasi Basement/Crawlspace 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 "s #define FAN_ON "r1o"
#define FAN_OFF "r1f"
#define ABSOLUTE_DELTA_FAN_ON 1 // Kipas menyala jika delta kelembaban mutlak dalam>=luar
#define ABSOLUTE_DELTA_FAN_OFF 0.5 // Kipas mati jika delta kelembaban mutlak dalam <=luar
#define OUTSIDE_RELATIVE_FAN_ON 88 // Kipas menyala jika kelembaban relatif luar <=%
#define OUTSIDE_RELATIVE_FAN_OFF 90 // Kipas mati jika kelembaban relatif luar>=%
#define MINIMUM_TEMPERATURE 15 // Siklus ventilasi hidup/mati jika suhu luar <=15C/59F
#define FAN_ON_TIME (20*60*1000L) // 20 menit
#define FAN_OFF_TIME (20*60*1000L) // 20 menit

//#define SERIAL_DEBUG
#define SERIAL_TIMEOUT 5000 // Penundaan 5 detik antara pembacaan DHT22

#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;
ontime lama, 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 desimal , char error)
{
Serial.print(str);
if (error) Serial.print(F("NA"));
else Serial.print(desimal , 1);
}

float DewPoint(suhu mengambang, kelembaban mengambang)
{
float t =(17,625 * suhu) / (243,04 + suhu);
float l =log(kelembaban/100);
float b =l + t;
// Gunakan Augus t-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(suhu mengambang, relatif mengambang)
{
//diambil dari https://carnotcycle.wordpress.com/2012/08/04/how-to-convert- relative-hu midity-to-absolute-humidity/
//presisi sekitar 0,1°C dalam kisaran -30 hingga 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)
//referensi https://www.eas.ualberta.ca/jdwilson/EAS372_13 /Vomel_CIRES_satvpformulae.html // Gunakan 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 =milis() - FAN_OFF_TIME;
}

void loop() {
HS di dalam, di luar;
static bool fan =false;
static bool cycle =false;
static long last_time =-(60L * 1000L);

Serial.println();
if (SerialReadUntilDone()) {
// Membaca sensor kelembapan hanya satu menit sekali atau sensor akan memanas sendiri jika dibaca terlalu cepat
if (millis() - last_time> 60L * 1000L)
{
if (SerialCmdDone(HUMIDITY_SENSOR_INSIDE) )
ReadHumiditySensor(&inside);

if (SerialCmdDone(HUMIDITY_SENSOR_OUTSIDE))
ReadHumiditySensor(&outside);

i f (di dalam.kesalahan || 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 =milis();
}
}

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 (kipas) Serial.print("FAN");
else Serial.print("v1.1");
Serial.println("\";sd");
SerialReadUntilDone();
}
else init_oled =true;

last_time =milis();
}

delay(1000);
}
else {
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
init_oled =true;
}
wdt_reset();
}

Catatan: Jika Anda menggunakan port USB untuk memprogram Arduino Nano, Anda harus melepaskannya dari IO Expander karena port ini juga menggunakan port serial tunggal yang sama, sebaliknya jika Anda ingin men-debug gunakan port ICSP untuk memprogram ATmega328P. Untuk mengaktifkan port debug perangkat lunak, batalkan komentar pada definisi SERIAL_DEBUG.

Hubungkan kabel 110VAC ke kedua kipas.

Bor lubang 7/16" dan 9/16" di kedua sisi enklosur untuk PG7 dan PG9. Gunakan alat dremel untuk memperbesar lubang sedikit sampai kelenjar pas. PG7 akan memasukkan tegangan input 12VDC, dan PG9 untuk sensor dan kipas.

Cari ventilasi yang terbuka dan tidak terhalang. Ini akan menjadi knalpot kami yang akan kami tiup keluar dari ruang bawah tanah / ruang perayapan. Pastikan semua ventilasi lain di sisi lain terbuka karena ini akan menjadi asupan udara Anda. Tutup ventilasi udara yang berdekatan sehingga Anda menciptakan aliran udara regional alih-alih lokal di seluruh ruang bawah tanah/ruang merangkak Anda.

Pasang kipas di bagian dalam ventilasi udara menggunakan pembungkus dasi. Pastikan Anda memiliki kipas yang menunjukkan arah yang benar untuk mengeluarkan udara.

Temukan titik akses yang ada dan masukkan kabel sensor kelembaban luar ke dalam. Pastikan sensor kelembaban cukup jauh dari rumah dan penghalang apa pun sehingga Anda dapat mengukur suhu/kelembaban lingkungan secara akurat. Verifikasi pembacaan Anda terhadap laporan cuaca yang dipublikasikan secara lokal.

Pasang sensor kelembaban luar ke soket keystone dan penutup, lalu pasang di bagian dalam.

Pasang sensor kelembaban bagian dalam ke jack keystone dan penutup dan pasang di bagian dalam. Lokasi sentral atau area yang membutuhkan kontrol kelembapan tambahan lebih disukai.

Sambungkan kabel RJ11 setinggi 50 kaki ke sensor kelembaban dan jalankan kabel dengan kabel kipas ke titik akses yang tersedia tempat kandang kontrol akan dipasang..

Hubungkan semua kabel dan rakit/masukkan semua bagian ke dalam selungkup kontrol. Jika kabel RJ11 berukuran 50 kaki dilengkapi dengan konektor yang telah dikerutkan sebelumnya, Anda harus memotongnya untuk mengalirkan kabel melalui kelenjar dan menyambungkan konektor baru.

Uji sistem dan pastikan semuanya beroperasi dengan benar. Untuk menguji relai dan kipas, lepaskan Arduino dari IO Expander dan sambungkan langsung ke komputer Anda untuk mengontrolnya secara manual. Setelah Anda memverifikasi bahwa semuanya beroperasi, rakit semua bagian ke dalam enklosur menggunakan selotip dua sisi dan busa pengemas untuk mengamankan papan Anda, dan nikmati manfaat dan penghematan Sistem Ventilasi Kontrol Kelembaban Cerdas Anda

Pembaruan 20/3/2019

Setelah menjalankan sistem ventilasi di crawlspace saya selama beberapa bulan terakhir dengan nol hang dan dengan kelembaban relatif puncak lebih dari 95% setelah kebocoran dari pemanas air panas saya telah berhasil menurunkan kelembaban relatif menjadi kurang dari 50%. Sistem ventilasi adalah sistem kontrol yang bekerja!

Beralih dari layar OLED SSD1306 0,96" ke layar OLED SH1106 1,3". Ini jauh lebih besar dan lebih mudah dibaca. Mengubahnya sangat mudah dengan pembaruan firmware IO Expander. Cukup ubah 'ST10' menjadi 'ST13' di kode Anda.

Perbarui 9/12/2019

Dirilis v1.1 yang memperbaiki masalah boot dingin di mana tampilan OLED kosong. Masih bekerja melampiaskan ruang perayapan saya!

Kode

  • Sistem Ventilasi Ruang Bawah Tanah/Ruang Perayapan
Sistem Ventilasi Basement/Ruang PerayapanC/C++
Gunakan Arduino Nano untuk membuat Sistem Ventilasi Cerdas
/* IO Expander * * Sistem Ventilasi Basement/Crawlspace 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_SENS define FAN_OFF "r1f"#define ABSOLUTE_DELTA_FAN_ON 1 // Kipas menyala jika delta kelembaban mutlak di dalam>=di luar #define ABSOLUTE_DELTA_FAN_OFF 0.5 // Kipas mati jika delta kelembaban mutlak di dalam <=di luar#define OUTSIDE_RELATIVE_FAN_ON 88 // Kipas hidup jika di luar relatif kelembaban <=%#define OUTSIDE_RELATIVE_FAN_OFF 90 // Kipas mati jika kelembaban relatif di luar>=%#define MINIMUM_TEMPERATURE 15 // Ventilasi siklus hidup/mati jika suhu luar <=15C/59F#define FAN_ON_TIME (20*60*1000L) // 20 menit#menentukan FAN_OFF_TIME (20*60*1000L) // 20 menit//#menentukan SERIAL_DEBUG#menentukan SERIAL_TIMEOUT 5000 // 5 detik de terletak di antara pembacaan DHT22#ifdef SERIAL_DEBUGSSoftwareSerial swSerial(8,7);#endifstruct HS { float temp; mengapung relatif; mengambang mutlak; bool error;};int led =13;bool init_oled =true;ontime lama, offtime;#ifdef FAHRENHEIT#menentukan C2F(temp) CelsiusToFahrenheit(temp)float CelsiusToFahrenheit(float celsius){ return ((celsius*9)/5) +32;}#else#define C2F(temp) (temp)#endifvoid SerialPrint(const char* str, float desimal, char error){ Serial.print(str); if (kesalahan) Serial.print(F("NA")); else Serial.print(desimal, 1);}float DewPoint(float temp, float kelembaban){ float t =(17,625 * temp) / (243,04 + temp); float l =log(kelembaban/100); mengapung b =l + t; // Gunakan pengembalian perkiraan August-Roche-Magnus (243.04*b)/(17.625-b);}#define MOLAR_MASS_OF_WATER 18.01534#define UNIVERSAL_GAS_CONSTANT 8.21447215float AbsoluteHumidity(suhu mengambang, relatif mengambang){ //diambil dari https:// carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/ //presisi sekitar 0,1°C dalam kisaran -30 hingga 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) //referensi https://www.eas.ualberta.ca/jdwilson/ EAS372_13/Vomel_CIRES_satvpformulae.html // Gunakan 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); 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->kesalahan =salah; } else hs->error =true; SerialReadUntilDone();}pengaturan batal() { Serial.begin(115200);#ifdef SERIAL_DEBUG swSerial.begin(115200); //swSerialEcho =&swSerial;#endif pinMode(led, OUTPUT); wdt_enable(WDTO_8S); offtime =milis() - FAN_OFF_TIME;}void loop() { HS di dalam, di luar; kipas bool statis =salah; siklus bool statis =salah; static long last_time =-(60L * 1000L); Serial.println(); if (SerialReadUntilDone()) { //if (init_oled) { // if (SerialCmdNoError(ONEWIRE_TO_I2C_ROM)) { // SerialCmdDone(INIT_OLED); // init_oled =salah; // } //} // Membaca sensor kelembapan hanya satu menit sekali atau sensor akan memanas sendiri jika dibaca terlalu cepat if (millis() - last_time> 60L * 1000L) { if (SerialCmdDone(HUMIDITY_SENSOR_INSIDE)) ReadHumiditySensor(&inside); if (SerialCmdDone(HUMIDITY_SENSOR_OUTSIDE)) ReadHumiditySensor(&di luar); if (inside.error || outside.error) fan =false; else { if (kipas) { if (outside.relative>=OUTSIDE_RELATIVE_FAN_OFF || inside.absolute - outside.absolute <=ABSOLUTE_DELTA_FAN_OFF) cycle =fan =false; else { if (siklus &&luar.temp <=MINIMUM_TEMPERATURE &&milis() - tepat waktu> FAN_ON_TIME) fan =false; } if (!fan) offtime =milis(); } else { if (outside.relative <=OUTSIDE_RELATIVE_FAN_ON &&inside.absolute - outside.absolute>=ABSOLUTE_DELTA_FAN_ON) cycle =fan =true; jika (siklus &&luar.temp <=MINIMUM_TEMPERATURE) fan =(milis() - offtime> FAN_OFF_TIME) ? benar salah; if (penggemar) tepat waktu =milis(); } } if (kipas) SerialCmdDone(FAN_ON); lain SerialCmdDone(FAN_OFF); if (SerialCmdNoError(ONEWIRE_TO_I2C_ROM)) { if (init_oled) { SerialCmdDone(INIT_OLED); init_oled =salah; } 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 (kipas) Serial.print("FAN"); else Serial.print("v1.1"); Serial.println("\";sd"); SerialReadSampai Selesai(); } else init_oled =benar; last_time =milis(); } penundaan(1000); } else { digitalWrite(led, HIGH); penundaan (500); digitalWrite (dipimpin, RENDAH); penundaan (500); init_oled =benar; } wdt_reset();}

Skema

Gunakan Arduino Nano untuk membuat Sistem Ventilasi Cerdas.

Proses manufaktur

  1. Sistem Kehadiran Menggunakan Arduino dan RFID dengan Python
  2. Sistem Robotika Deteksi Manusia Menggunakan Arduino Uno
  3. Arduino Spybot
  4. FlickMote
  5. TV Buatan Sendiri B-Gone
  6. Jam Master
  7. Sistem Alarm Arduino:SERENA
  8. Sistem Penyiraman Tanaman Otomatis dengan Arduino
  9. Sistem Pemantauan &Deteksi Kebakaran Hutan (dengan Peringatan SMS)
  10. Apa itu Sistem Ventilasi?