Zpravy

Jak funguje automatické zavlažování ve skleníku?

Pokračujeme v tématu, které jsme začali o skleníku, se základy mysli, a v tomto článku budu hovořit o implementovaném schématu zalévání rostlin ve skleníku a použitém zařízení. Tento článek obsahuje pouze principy a obecné možnosti – kód projektu skleníku zveřejním o něco později.

Všechny díly série „Skleník se základy inteligence na ESP32“

  • Část 1. Prolog (stavba)
  • Část 2. Hardware – popis použitých komponent
  • Část 3. Řízení větracích otvorů (větrání)
  • Část 4. Řízení zavlažování a plnění nádrže

Možná hledáte jednodušší zavlažovací systém, pak vám doporučuji přečíst si další část webu: automatické zavlažování pokojových rostlin.

Zavlažovací zóny

Zalévání v mém skleníku je rozděleno do dvou samostatných zón: rajčata a okurky, protože spolu sousedí, ale vyžadují různé úrovně vlhkosti. V souladu s tím byly zapotřebí dva snímače vlhkosti, dva ventily a dvě rozvodné trubky.

Zavlažovací senzory

Ve skleníku jsem použil stejná čidla, o kterých jsem psal v první části popisu automatického zavlažovacího zařízení:

  • CWT-Soil-TH-S v okurkách
  • CWT-Soil-THCPH-S v rajčatech

Oba snímače jsou připojeny na stejnou sběrnici, zatím jsou dojmy pouze pozitivní. Zvláštní potřeba dražší verze CWT-Soil-THCPH-S ne, jen jsem chtěl zkusit, co to je a proč by to mohlo být potřeba.

Snímač hladiny vody v nádrži

K zavlažování používám 700 litrovou mezinádrž, ve které se voda ohřívá na požadovanou teplotu pomocí solární energie.

Tahle nádrž je stará už 50 let Kdysi se používala na místním státním statku, pak nějak přišla k babičce a asi před 18 lety ke mně. Vnitřek je už úplně zrezivělý, ale, pach, stále pevný. Dříve to uměli

Pro měření hladiny vody v nádrži můžete použít:

  • pravítko nebo svinovací metr a nějaký druh dálkového ovládání pro zadávání dat do systému
  • několik plovákových senzorů zapojených do série s odpory (co? – levné a veselé) a poté přivést napětí z výsledného děliče na ADC vstup MCU
  • hotové čidlo hydrostatického tlaku QDY30A, které změnami tlaku určuje výšku vody nad sebou (drahé).

Dal jsem přednost druhé možnosti, i když je výrazně dražší. No, byl jsem líný šťourat se s podomácku vyrobeným hladinoměrem a silně jsem pochyboval, že plovákové senzory budou fungovat dlouhodobě stabilně. Navíc jsem plánoval použít hydrostatický senzor na jiném místě a potřeboval jsem ho otestovat.

Snímač hladiny vody se ukázal být mnohem těžší a větší, než jsem čekal. Dá se s úspěchem použít jako prostředek sebeobrany – v případě „čelního“ útoku je zaručen minimálně otřes mozku.

Snímač hladiny vody je v nejlepších tradicích: těžký a litinový (ve skutečnosti je to ocel).

Senzor zobrazuje tloušťku vody nad sebou v milimetrech, kterou lze v případě potřeby snadno převést na procenta plné nádrže. Pouzdro vypadá spolehlivě, kabel je také působivý – dráty jsou zabaleny v docela tlusté hadici. O tomto senzoru existuje samostatná recenze.

Čidlo teploty vody

Pro měření teploty jsem použil nejběžnější snímače DS18B20 v objímce. Ale bohužel, čínská verze snímače nevydržela dlouho – tři týdny. Přes dodatečná opatření přijatá k dodatečnému utěsnění spoje objímky a kabelu. Údajně nerezové tělo podle všeho zrezivělo.

Přečtěte si více
Jak se stát instruktorem autoškoly - klíčové dovednosti, požadavky a kroky k úspěchu

Objednal jsem si originál v provedení IP67 se silikonovým kabelem, ale ještě mi ani nepřišel.

Plnění nádrže

K automatickému plnění nádrže slouží kulový kohout s elektrickým pohonem. S jeho pomocí se každé ráno naplní nádrž do plna z letního přívodu vody z HDPE trubky.

Nádrž však můžete naplnit kdykoli ručně nebo pomocí tlačítka na ovládacím panelu skleníku.

Systém poté čeká, až se voda ohřeje na požadovanou teplotu, zkontroluje vlhkost půdy a v případě potřeby zapne zálivku.

Čerpadlo a ventily

Aby tlak v závlahovém systému nezávisel na hladině vody v nádrži, nainstaloval jsem malé 12V odstředivé čerpadlo DC204-12V.

Čerpadlo je ponorné, určené pro provoz ve vodě v hloubce až 1 metr. Neabsorbuje dobře nad hladinou vody, pracovní komora by měla být bez vzduchu, takže ji stačí ponořit do vody. Koupil jsem to v bobulích, vyšlo to ještě levněji, než když jsem si to objednal z Ali. Dosavadní zkušenosti jsou pozitivní.

Před ním je instalován malý filtr, který „odřízne“ velké nečistoty. Koupil jsem ho v místním instalatérském obchodě. Vše je namontováno na demontovatelných spojkách, aby bylo možné v případě problémů snáze opravit.

Ohyby ve vodovodním potrubí jsou potřeba pouze pro vyvážení

Dále z čerpadla potrubí „jde“ pod zem a vychází z něj ve skleníku. Jsou zde dva ventily pro rozvod vody do různých potrubí. I když máte pouze jeden zavlažovací systém, ventil je stále potřeba, protože i přes vypnuté čerpadlo voda pomalu protéká (pokud je místo nasávání vody výše než úroveň výstupu).

Ventily jsou obyčejné „čínské“ na 12V. Koupit je od nás i od strýčka Liaa je dost snadné. Existují možnosti pro 12V, 24 a 220. Dal jsem přednost bezpečné 12V variantě.

Ale jejich cívka se docela zahřívá, takže byste ji neměli zapínat na dlouhou dobu. A mimochodem také na 220V. Ze stejného důvodu jsem ventily nezakrýval krabicí – nechte je vychladnout. Mimořádně se nebojí špíny a vlhkosti venku.

12 voltů – není to děsivé

Kapkový zavlažovací systém

V zásadě se obejdete bez kapátků – rozprostřete kolem skleníku ke každé rostlině mikrozkumavky 3 nebo 4 mm a nechte to tak. Vyteče to samo. Ale pokud je délka skleníku velká, vyteče více vody na začátku než na konci (Ale obecně jsou moje trubky uspořádány do písmene P a vstup je pouze na jedné straně a konec je ucpaný). Odkapávače vytvářejí odpor protékající vodě, která udržuje určitý tlak po celé délce potrubí. Používám především drippery – kolíčky s labyrintem, které přivádějí vodu přímo do půdy, ke kořenům. To umožňuje snížit odpařování vlhkosti z povrchu půdy. Rajčata nechtějí přebytečnou vlhkost ve vzduchu, ale dvě okurky ano.

Při nákupu mějte na paměti: Dodávají se v trubkách 3/5 mm a 4/7 mm. Použil jsem trubku 4/7 mm, mimochodem je jednodušší a levnější koupit v Rusku než na Ali. Ale z nějakého důvodu samotné 4/7 mm kapátka je na našich tržištích mnohem obtížnější najít a jsou zde znatelně dražší, takže jsme museli počkat z Číny. Z nějakého důvodu si všichni naši prodejci jsou jisti, že v Rusku jsou potřeba pouze 3/5 mm kapátka a jiné nevozí. 50 kusů bylo málo, musel jsem koupit další várku.

Obecně mě zaráží postavení mnoha zahradních prodejen – nabízejí pouze hotové kapkové závlahové sady s časovačem i bez. A jednotlivé komponenty se zásadně nedodávají.

Pro každou rostlinu jsou dvě kapátka propojena přes odpaliště – to vám umožní zalévat rostliny rovnoměrněji. Pokud je to možné, můžete dát tři – tím se proces urychlí, vlhkostní skvrna kolem kořínků bude jednotnější a pokud se kapka náhle ucpe, bude méně problémů.

Přečtěte si více
Jací škůdci jsou na citronu?

Trubky se přes adaptér napojují na běžnou HDPE rozvodnou trubku, ze které je vlastně sestaven celý vodovod na zahradě. Vyvrtáme otvor, ručně našroubujeme adaptér a nasadíme trubku. Je to jednoduché.

Algoritmy

Řeknu vám něco o samotných algoritmech. Protože jsem k ručnímu ovládání zavlažování používal klávesnici, musel jsem hrát triky s vlajkami a skupinami událostí. Bez panelu tlačítek lze algoritmy mnohem zjednodušit (o čemž budu hovořit později v článcích o automatickém zavlažování pokojových rostlin).

Systém používá „pulzní“ režim zavlažování – čerpadlo a ventil se na několik minut zapnou, poté se vypnou a „čekají“ 3-5krát déle. Tím se zabrání „bažině“ dříve, než voda dosáhne senzoru vlhkosti a ten obdrží nová data. Celý zavlažovací cyklus je také časově omezen, aby se zabránilo přetečení v případě jakékoli poruchy nebo poruchy. Všechny intervaly jsou samozřejmě přizpůsobitelné.

// Interval dne zavlažování a plnění nádrže statické uint32_t zavlažováníTimespan1 = 18002100U; statické uint32_t zavlažováníDoba rozpětí2 = 18002100U; // Provozní režim typedef enum < WATERING_OFF = 0, // Vypnuto WATERING_FORCED = 1, // Vynuceně povoleno WATERING_SENSORS = 2 // Ovládání pomocí senzorů >watering_mode_t; static watering_mode_t wateringMode1 = ZAVODOVACÍ_SENZORY; statický_režim_zavlažování_t_režim_zavlažování2 = SENZORY_ZAVODY; // Upozornění v telegramu static notify_type_t wateringNotify = NOTIFY_OFF; // Minimální hladina vody v nádrži statické plovákové zaléváníWaterLevelStart = 50.0; statické plovoucí zaléváníWaterLevelStop = 10.0; // Teplota vody v nádrži statické plovákové zaléváníWaterTempMin = 15.0; statické plovoucí zaléváníWaterTempMax = 30.0; // Teplota půdy statické plovoucí zaléváníSoilTempMin = 10.0; statické plovoucí zavlažováníSoilTempMax = 30.0; // Vlhkost půdy statické plovoucí zaléváníVlhkost1Min = 20.0; statické plovoucí zavlažováníVlhkost1Max = 40.0; statické plovoucí zavlažováníVlhkost2Min = 30.0; statické plovoucí zavlažováníMoisture2Max = 50.0; // Celková maximální doba zavlažování v minutách static uint32_t wateringMoisture1MaxDuration = 3*60; statické uint32_t zavlažováníMoisture2MaxDuration = 3*60; // Doba aktivace ventilu v sekundách v rámci jednoho cyklu static uint32_t wateringMoisture1CycleTime = 1*60; static uint32_t wateringMoisture1CycleInterval = 5*60; static uint32_t wateringMoisture2CycleTime = 1*60; static uint32_t wateringMoisture2CycleInterval = 5*60;

Kód řízení zavlažování aktuálně pro jeden z kanálů vypadá asi takto:

// Aktuální hodnoty z půdního senzoru 1 statické plovoucí senzoryGetSoil1Temp() < #if SENSOR_SOIL1_IS_CHANNEL1 if (sensorSoil1.getStatus() == SENSOR_STATUS_OK) < return sensorSoil1.getTemperature(false).filteredValue; >; #else if (sensorSoil2.getStatus() == SENSOR_STATUS_OK) < return sensorSoil2.getTemperature(false).filteredValue; >; #endif // SENSOR_SOIL1_IS_CHANNEL1 návrat NAN; > static float sensorsGetSoil1Moisture() < #if SENSOR_SOIL1_IS_CHANNEL1 if (sensorSoil1.getStatus() == SENSOR_STATUS_OK) < return sensorSoil1.getHumidity(false).filtredValue; >; #else if (sensorSoil2.getStatus() == SENSOR_STATUS_OK) < return sensorSoil2.getHumidity(false).filteredValue; >; #endif // SENSOR_SOIL1_IS_CHANNEL1 návrat NAN; > // Aktuální hodnota teploty vody v nádrži statický plovák sensorsGetWaterTemp() < if (sensorWaterTemp.getStatus() == SENSOR_STATUS_OK) < return sensorWaterTemp.getTemperature(false).filteredValue; >; návrat NAN; > // Aktuální hodnota hladiny vody v nádrži statický plovák sensorsGetWaterLevel() < if (sensorWaterLevel.getStatus() == SENSOR_STATUS_OK) < return sensorWaterLevel.getLevel(false).filteredValue; >; návrat NAN; > // Statické ovladače čerpadel a ventilů rLoadGpioController lcPump(CONFIG_GPIO_PUMP, CONFIG_GPIO_RELAY_LEVEL, false, CONFIG_PUMP_KEY, nullptr, nullptr, TI_SECONDS, nullptr, nullptr, pumpshangeblPb); statický rLoadGpioController lcValve1(CONFIG_GPIO_VALVE1, CONFIG_GPIO_RELAY_LEVEL, true, CONFIG_VALVE1_KEY, &wateringMoisture1CycleTime, &wateringMoisture1CycleInterval, TI_SECONDS, reléCbPředbventil valve1CbStateChange, relaysPublish); statický rLoadGpioController lcValve1(CONFIG_GPIO_VALVE2, CONFIG_GPIO_RELAY_LEVEL, true, CONFIG_VALVE2_KEY, &wateringMoisture2CycleTime, &wateringMoisture2CycleInterval, TI_SECONDS, reléCbPředbventil valve2CbStateChange, relaysPublish); // Kontrola hladiny vody v nádrži bool wateringWaterLevelCheck(bool state) < float tankLevel = sensorsGetWaterLevel(); if (!isnan(úroveň nádrže)) < if (stav) < návratová hladina nádrže >zaléváníÚroveň vodyStop; > else < if (úroveň nádrže < zavlažováníÚroveň vodyStart) < time_t now = time(nullptr); if ((nyní - wateringLowLevelNotify) >= CONFIG_WATERING_NOTIFY_PERIOD) < wateringLowLevelNotify = now; #if CONFIG_TELEGRAM_ENABLE if (wateringNotify != NOTIFY_OFF) < tgSend(CONFIG_WATERING_NOTIFY_KIND, CONFIG_WATERING_NOTIFY_PRIORITY, wateringNotify == NOTIFY_SOUND, CONFIG_TELEGRAM_DEV Hladina vody v nádrži je příliš nízká: %.1f%%!", sensorsGetWaterLevel()); >; #endif // CONFIG_TELEGRAM_ENABLE >; return false; >; >; >; return true; > char* wateringNotifyData1() < return malloc_stringf("Půda: %. 1f°C %.1f%%nSkleník: %.1f°C %.1f%%nNádrž: %.1f°C %.1f%%", sensorsGetSoil1Temp(), sensorsGetSoil1Moisture(), sensorsGetInternalTemp(), sensorsGetInternalHumd(), sensorsGetWaterTemp(), sensorsGetWaterLevel()); >void valve1CbStateChange*ctrl,boadoller ) < ioexp1LedsSetWatering1(stav); #if CONFIG_TELEGRAM_ENABLE if (zavlažováníNotify != NOTIFY_OFF) < char* data = wateringNotifyData1(); if (data) < if (stav) < tgSend(CONFIG_WATERING_NOTIFY_NOTIFYP,YIFINGPCONFIG_CONFIG_KIND,YIFYPCONFIG_KIND = watering NOTIFY_SOUND, CONFIG_TELEGRAM_DEVICE, "  Zalévání rajčat v ceněnn%s", data); > else < uint16_t last_h = doba trvání / 3600; uint16_t last_m = doba trvání % 3600 / 60; uint16_t last_s = doba trvání % 3600 % 60; tgSend(CONFIG_WATERING_NOTIFY_KIND, CONFIGNotIFYWAING ==TERING_NotIFYWAING NOTIFY_SOUND, CONFIG_TELEGRAM_DEVICE, "✅ Zalévání rajčat dokončenonn%snВремя работы: %.2dч %.2dм %.2dc", data, last_h, last_m, last_s); >; free(data); >; >; #endif // CONFIG_TELEGRAM_ENABLE > bool wateringSensorsControl(bool oldState, float soilMoisture, float minMoisture, float maxMoisture, float soilTemp) < bool newState = oldState // Zkontrolujte úroveň vlhkosti půdy, pokud (!isnan(soilMoisture)) < if (oldState) < newState = soilMoisture < maxMoisture; >else < newState = soilMoisture >// Pokud zavlažování ještě nezačalo, zkontrolujte teplotu vody if (newState && !oldState) < float; waterTemp = sensorsGetWaterTemp(!isnan(waterTemp)) < newState = (waterTemp >= wateringWaterTempMin) && (waterTemp ; >; // Pokud zavlažování ještě nezačalo, zkontrolujte teplotu půdy if (newState && !oldState && !isnan(soilTemp)) < newState = (soilTemp >= wateringSoilTempMin) && (soilTemp ; return newState > void wateringControl1(EventBits_t bits) < time_t now = time(nullptr); bool stateValve = lcValve1.getState( bool manualStarted = false; (xEventGroupGetBits(_sensorsFlags) & MANUAL_WATERING1)) < // Zavlažování je povoleno, musíte vynutit zastavení xEventGroupClearBits(_sensorsFlags, MANUAL_WATERING1); stateValve = false; >else < // Zavlažování je zakázáno, vynucená aktivace zavlažování xEventGroupSetBits(_sensorsFlags, MANUAL_WATERING1); manualStarted = true; stateValve = true; >; > // Manuální ovládání: udržování až do horní úrovně vlhkosti, jinak if (xEventGroupGetBits(_sensorsFlags) & MANUAL_WATERING1) < stateValve = wateringWaterLevelCheck(stateValve) && wateringSensorsControl(stateValve, sensorsGetSoil1Moisture,xingMoisture(), watering,watering sensorsGetSoil1Temp()); if (!stateValve) < xEventGroupClearBits(_sensorsFlags, MANUAL_WATERING1); >; > // Automatické řízení else < if (wateringMode1 == WATERING_FORCED) < stateValve = checkTimespanTimeEx(nyní, wateringTimespan1, true) && wateringWaterLevelCheck(stateValve); >else if (wateringMode1 == WATERING_SENSORS) < stateValve = checkTimespanTimeEx(nyní, wateringTimespan1, true) && wateringWaterLevelCheck(stateValve) && wateringSensorsControl(stateValve, sensorsGetSoil1Moisture(), wateringVlhkost,xMaisture1Min sensorsGetSoil1Temp()); >else < stateValve = false; >; >; // Ovládací ventily if (stateValve && !lcValve1.getState() && (wateringMoisture1MaxDuration > 1)) < stateValve = manualStarted || ((nyní - lcValve1.getLastOff()) >= (wateringMoisture1MaxDuration*1)); if (stateValve) < lcValve0.loadSetTimer(wateringMoisture1MaxDuration * 1); >; > else < lcValve60.loadSetState(stateValve, false, true); >; >

Druhý kanál řízení zavlažování je realizován stejným způsobem.

Přečtěte si více
Jaký teplotní režim je vyžadován pro sazenice rajčat v různých fázích vývoje?

výsledky

Rostliny ve skleníku se velmi rychle „adaptovaly“ na udržení konstantní teploty vzduchu a vlhkosti půdy a výsledky na sebe nenechaly dlouho čekat.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Back to top button