Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Kelder/kruipruimte ventilatiesysteem

Componenten en benodigdheden

Arduino Nano R3
× 1
IO-uitbreiding
× 1
IO-uitbreidingsbundel
× 1

Apps en online services

Arduino IDE

Over dit project

Functielijst

  • Binnen/buiten temperatuur/vochtigheidssensor.
  • Slimme ventilatorregeling met vochtvergelijking
  • Verminder het vocht in uw kelder/kruipruimte
  • Help meeldauwgroei te verminderen
  • Slim ventileren bespaart energie

Onderdelen die nodig zijn om het ventilatiesysteem te bouwen

  • IO-uitbreiding
  • 1-draads naar I2C.
  • Arduino Nano.
  • 1-kanaals DC 5V-relais.
  • x2 SHT10-vochtigheidssensor.
  • I2C SSD1306 OLED 128x64-scherm.
  • x2 110V 172x150x38mm 0,34A 2400 RPM kogellagerventilatoren.
  • 158x90x65mm doorzichtige waterdichte plastic behuizing.
  • ip68 pg7 waterdichte nylon kabelwartel.
  • ip68 pg9 waterdichte nylon kabelwartel.
  • x2 RJ11 Keystone-schroefaansluiting.
  • x2 Keystone-behuizing.
  • x2 50ft 4C4P RJ11-draad.
  • 6" 4C4P RJ11-draad.
  • 100ft 110V draad.
  • AC-stekker.
  • 2,54 mm kopdraad.
  • 12VDC 1A wandadaptervoeding.

Bedradingsschema

OLED-scherm

Dus waarom de IO Expander gebruiken?

  • Eenvoudiger te ontwerpen
  • Verkrijgbare onderdelen
  • Geen 1-Wire driver om te schrijven
  • Geen relaisstuurprogramma om te schrijven
  • Geen OLED-beeldschermstuurprogramma om te schrijven
  • Geen weergavelettertypen om Arduino-coderuimte in te nemen
  • Geen stuurprogramma voor vochtigheidssensor om te schrijven
  • Bespaart coderuimte op Arduino; slechts 6106 bytes (19%)
  • Minder dan een dag om de code te schrijven
  • Eenvoudig aan te sluiten met standaard RJ11-telefoonkabel
  • Geen problemen met de lengte van de sensorkabel
  • Goedkoper om te bouwen dan commerciële systemen
  • Gemakkelijk wijzigingen aan te brengen om aan individuele vereisten aan te passen
  • Enkele voeding

Bouw het systeem

Sluit de Arduino Nano aan op de IO Expander en programmeer deze met de volgende code. De 6-pins header is de seriële debug-poort van de software en is niet nodig bij de uiteindelijke installatie.

Zorg ervoor dat u het door ONEWIRE_TO_I2C_ROM gedefinieerde adres wijzigt zodat het overeenkomt met uw 1-draads naar I2C-adres.

/* IO Expander
*
* Kelder-/kruipruimteventilatiesysteem 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 // Ventilator aan als absolute vochtigheidsdelta van binnen>=buiten
#define ABSOLUTE_DELTA_FAN_OFF 0,5 // Ventilator uit als absolute vochtigheidsdelta van binnen <=buiten
#define OUTSIDE_RELATIVE_FAN_ON 88 // Ventilator aan als relatieve vochtigheid buiten <=%
#define OUTSIDE_RELATIVE_FAN_OFF 90 // Ventilator uit als relatieve vochtigheid buiten>=%
#define MINIMUM_TEMPERATURE 15 // Cyclus ventilatie aan/uit als buitentemperatuur <=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 vertraging tussen DHT22-lezingen

#ifdef SERIAL_DEBUG
SoftwareSerial swSerial(8,7);
#endif

struct HS {
float temp;
float relatief;
float absoluut;
bool-fout;
};

int led =13;
bool init_oled =true;
lange 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 decimaal , char-fout)
{
Serial.print(str);
if (fout) Serial.print(F("NA"));
else Serial.print(decimaal) , 1);
}

float DewPoint(float temp, float vochtigheid)
{
float t =(17.625 * temp) / (243.04 + temp);
float l =log(luchtvochtigheid/100);
float b =l + t;
// Gebruik de Augus t-Roche-Magnus benadering
return (243.04*b)/(17.625-b);
}

#define MOLAR_MASS_OF_WATER 18.01534
#define UNIVERSAL_GAS_CONSTANT 8.21447215

float Absolute Humidity (float temp, float relatief)
{
// overgenomen van https://carnotcycle.wordpress.com/2012/08/04/how-to-convert- relatieve vochtigheid tot absolute vochtigheid/
//precisie is ongeveer 0,1°C in het bereik van -30 tot 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)
//referentie 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->dauwpunt =DewPoint(hs->temp, hs->relative);
hs->absolute =Absolute Vochtigheid(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 binnen, buiten;
statische bool fan =false;
static bool cycle =false;
static long last_time =-(60L * 1000L);

Serial.println();
if (SerialReadUntilDone()) {
// Lees de vochtigheidssensoren slechts één keer per minuut, anders worden ze warm als ze te snel worden gelezen
if (millis() - last_time> 60L * 1000L)
{
if (SerialCmdDone(HUMIDITY_SENSOR_INSIDE) )
ReadHumiditySensor(&inside);

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

i f (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();
}

Opmerking: Als u de USB-poort gebruikt om de Arduino Nano te programmeren, moet u deze loskoppelen van de IO Expander, aangezien deze ook dezelfde enkele seriële poort gebruikt. Als u in plaats daarvan fouten wilt opsporen, gebruikt u de ICSP-poort om de ATmega328P te programmeren. Om de software-foutopsporingspoort in te schakelen, verwijdert u de SERIAL_DEBUG-definitie.

Sluit de 110VAC-draad aan op beide ventilatoren.

Boor een gat van 7/16" en 9/16" aan weerszijden van de behuizing voor de PG7 en PG9. Gebruik een dremel gereedschap om de gaten iets groter te maken totdat de klier goed aansluit. De PG7 levert de 12VDC ingangsspanning en de PG9 voor de sensoren en ventilatoren.

Zoek een ventilatieopening die geopend en niet geblokkeerd is. Dit wordt onze uitlaat waar we de kelder/kruipruimte lucht uit zullen blazen. Zorg ervoor dat alle andere ventilatieopeningen aan de andere kant open zijn, aangezien deze uw luchtinlaat worden. Sluit de aangrenzende luchtroosters zodat je een regionale in plaats van een lokale luchtstroom over je hele kelder/kruipruimte creëert.

Monteer de ventilatoren aan de binnenkant van de ventilatieopening met behulp van tie-wraps. Zorg ervoor dat de ventilatoren in de juiste richting wijzen om lucht naar buiten te blazen.

Zoek een bestaand toegangspunt en steek de draad van de vochtigheidssensor aan de buitenkant in de binnenkant. Zorg ervoor dat de vochtigheidssensor ver genoeg van het huis en eventuele obstakels verwijderd is, zodat u de omgevingstemperatuur/-vochtigheid nauwkeurig kunt meten. Verifieer uw metingen met uw lokaal gepubliceerde weerberichten.

Sluit de externe vochtigheidssensor aan op de keystone-aansluiting en de behuizing en monteer deze aan de binnenkant.

Sluit de vochtigheidssensor aan de binnenkant aan op de keystone-aansluiting en de behuizing en monteer deze aan de binnenkant. Een centrale locatie of ruimte die extra vochtbeheersing nodig heeft, heeft de voorkeur.

Sluit de 50ft RJ11-draden aan op de vochtigheidssensoren en leid de draden met de ventilatordraad naar een beschikbaar toegangspunt waar de besturingsbehuizing zal worden geïnstalleerd.

Sluit alle draden aan en monteer/voer alle onderdelen in de besturingsbehuizing. Als uw 50 ft RJ11-draden worden geleverd met voorgekrompen connectoren, moet u deze afknippen om de draden door de wartel te voeren en nieuwe connectoren te krimpen.

Test het systeem en zorg ervoor dat alles correct werkt. Om het relais en de ventilatoren te testen, koppelt u de Arduino los van de IO Expander en sluit u deze rechtstreeks aan op uw computer om deze handmatig te bedienen. Nadat u hebt gecontroleerd of alles werkt, monteert u alle onderdelen in de behuizing met dubbelzijdig plakband en verpakkingsschuim om uw planken vast te zetten en profiteert u van de voordelen en besparingen van uw Smart Moisture Control Ventilation System

Update 20-3-2019

Na de afgelopen maanden het ventilatiesysteem in mijn kruipruimte te hebben gedraaid zonder vastlopers en met een piek relatieve vochtigheid van meer dan 95% na het lek van mijn warmwaterboiler, is de relatieve vochtigheid met succes gedaald tot minder dan 50%. Het ventilatiesysteem is een continu controlesysteem dat werkt!

Overgestapt van een SSD1306 0,96" OLED-display naar een SH1106 1,3" OLED-display. Het is veel groter en gemakkelijker te lezen. Het veranderen was een makkie met de IO Expander firmware-update. Verander gewoon 'ST10' in 'ST13' in je code.

Update 12-09-2019

Uitgebracht v1.1 die een probleem met koud opstarten heeft opgelost waarbij het OLED-scherm leeg was. Ik ben nog steeds bezig met het ontluchten van mijn kruipruimte!

Code

  • Kelder/kruipruimte ventilatiesysteem
Kelder/kruipruimte ventilatiesysteemC/C++
Gebruik de Arduino Nano om een ​​Smart Ventilation System te maken
/* IO Expander * * Kelder/kruipruimte-ventilatiesysteem 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" define FAN_OFF "r1f"#define ABSOLUTE_DELTA_FAN_ON 1 // Ventilator aan als absolute vochtigheidsdelta van binnen>=buiten #define ABSOLUTE_DELTA_FAN_OFF 0,5 // Ventilator uit als absolute vochtigheidsdelta van binnen <=buiten#define OUTSIDE_RELATIVE_FAN_ON 88 // Ventilator aan indien buiten relatief vochtigheid is <=%#define OUTSIDE_RELATIVE_FAN_OFF 90 // Ventilator uit als relatieve vochtigheid buiten>=%#define MINIMUM_TEMPERATURE 15 // Cyclusventilatie aan/uit als buitentemperatuur <=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 de lag tussen DHT22 leest #ifdef SERIAL_DEBUGSoftwareSerial swSerial(8,7);#endifstruct HS { float temp; drijven relatief; zweven absoluut; 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)#endifvoid SerialPrint(const char* str, float decimal, char error){ Serial.print(str); if (fout) Serial.print(F("NA")); else Serial.print(decimaal, 1);}float DewPoint(float temp, float vochtigheid){ float t =(17.625 * temp) / (243.04 + temp); vlotter l =log(vochtigheid/100); vlotter b =l + t; // Gebruik de benaderingsretour van August-Roche-Magnus (243.04*b)/(17.625-b);}#define MOLAR_MASS_OF_WATER 18.01534#define UNIVERSAL_GAS_CONSTANT 8.21447215float AbsoluteHumidity(float temp, float relative){ // overgenomen van https:// carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/ //precisie is ongeveer 0,1°C in het bereik van -30 tot 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) //referentie https://www.eas.ualberta.ca/jdwilson/ EAS372_13/Vomel_CIRES_satvpformulae.html // Gebruik Buck (1981) return (6.1121 * pow(2.718281828, (17.67 * temp) / (temp + 243.5)) * relatief * MOLAR_MASS_OF_WATER) / ((273.15 + temp) * UNIVERSAL_GAS_CONSTANT);}void ReadHumiditySensor(HS* hs){ SerialCmd("sr"); if (SerialReadFloat(&hs->temp) &&SerialReadFloat(&hs->relative)) { //hs->dauwpunt =DewPoint(hs->temp, hs->relative); hs->absoluut =Absolute Vochtigheid(hs->temp, hs->relatief); hs->fout =onwaar; } else hs->error =waar; 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 binnen, buiten; statische bool-fan =onwaar; statische bool-cyclus =onwaar; statisch lang last_time =-(60L * 1000L); Serieel.println(); if (SerialReadUntilDone()) {//if (init_oled) {// if (SerialCmdNoError(ONEWIRE_TO_I2C_ROM)) {// SerialCmdDone(INIT_OLED); // init_oled =onwaar; // } //} // Lees de vochtigheidssensoren slechts één keer per minuut of ze zullen zichzelf opwarmen als ze te snel worden gelezen 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) ? waar onwaar; if (fan) ontime =millis(); } } if (fan) SerialCmdDone(FAN_ON); anders SerialCmdDone (FAN_OFF); if (SerialCmdNoError (ONEWIRE_TO_I2C_ROM)) {if (init_oled) { SerialCmdDone (INIT_OLED); init_oled =onwaar; } 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 =waar; last_time =millis(); } vertraging (1000); } else { digitalWrite (led, HOOG); vertraging (500); digitalWrite (led, LAAG); vertraging (500); init_oled =waar; } wdt_reset();}

Schema's

Gebruik de Arduino Nano om een ​​Smart Ventilation System te maken.

Productieproces

  1. Aanwezigheidssysteem met Arduino en RFID met Python
  2. Human Detection Robotics System met Arduino Uno
  3. Arduino Spybot
  4. FlickMote
  5. Zelfgemaakte tv B-Gone
  6. Hoofdklok
  7. Arduino Alarmsysteem:SERENA
  8. Automatisch plantenwatersysteem met Arduino
  9. Bosbrandbewakings- en detectiesysteem (met sms-waarschuwingen)
  10. Aanwezigheidssysteem op basis van Arduino en Google Spreadsheet
  11. Wat is een ventilatiesysteem?