Nazad
Klijent iz hortikulture · 2026 – aktivno

PoC zasad borovnice od 8.000 m² koji se sam zaliva

Priča

Klijentu je trebao PoC autonomnog sistema koji sam zaliva parcelu, uz infrastrukturu spremnu da sutra prikuplja podatke.

Raspberry Pi u zaptivenom ormanu na ivici parcele otvara tri elektromagnetna ventila po rasporedu, zaliva 2.400 žbunova borovnice sekciju po sekciju i beleži sve što je uradio.

Vredno pomena

  • · Tri ventila, po osam redova, optimizovano
  • · Veb proces je uvek bez privilegija
  • · Svaka neizvesnost zatvara sve ventile

Problem

PoC zasad ima 8.000 m²: 24 reda po 100 m, 2.400 žbunova borovnice, dva kapajuća creva po redu sa 499 kapaljki od 2,2 L/h — oko 1.100 litara na sat da bi se jedan red zalio kako treba. Klijent vodi firmu iz hortikulture i drži eksperimentalnu parcelu na kojoj traži optimalnu potrošnju vode; ova je pod borovnicom, a u redovnom poslu uglavnom radi sa travom i žbunjem.

Šta smo napravili

Sistem se gradi u dve faze — prvo upravljanje i ventili, pa senzori vlažnosti zemljišta u Fazi 2 — jer voda mora pouzdano da se pušta i zaustavlja pre nego što išta pametnije ima smisla graditi iznad toga. Parcela je podeljena na tri sekcije od po osam redova, sa po jednim elektromagnetnim ventilom, a taj broj je došao poslednji: prvo rešenje je imalo ventil na svakom redu (24 izlaza, daleko preskupo), drugo je koristilo šest, a kada je klijent potvrdio da pumpa bez problema nosi punu sekciju od osam redova pri 8,8 m³/h, tri su bila dovoljna. Tri ventila staju direktno na portove samog Raspberry Pi računara, pa je proširivač portova izašao iz specifikacije i sa sobom odneo svoje načine otkazivanja. Sve stoji u jednom IP65 ormanu na ivici parcele: Raspberry Pi 4, osmokanalna optoizolovana relejna ploča, transformator 230 na 24 V AC, mali UPS na dve 18650 ćelije i automatski osigurač. Ventili su normalno zatvoreni i rade na 24 V AC, pa nestanak napajanja znači da nema vode, a ne ventil zaglavljen u otvorenom položaju. Provereno je da se sistem sam oporavlja od svih otkazivanja koja nisu fizička.

Moduli i celine

  • Upravljački procesPetlja na jednu sekundu: otkucaj srca, hitno zaustavljanje, aktivno zalivanje, traženje stavke rasporeda, pa portovi. To je jedini proces koji odlučuje šta se dešava na parceli.
  • Vlasništvo nad portovimaJedan dugotrajan gpioset drži sve tri linije i menja se samo kada se ciljno stanje promeni. Traženje stanja koje se već drži ne radi ništa.
  • RaspoređivačStavke po sekciji — dani u nedelji, vreme početka, trajanje. Kada dve dospeju istovremeno, pobeđuje niži broj sekcije, a druga se upisuje kao preskočena umesto da tiho nestane.
  • Upravljački ormanRaspberry Pi, relejna ploča, transformator 230 na 24 V AC, UPS i osigurač na DIN šini u IP65 kućištu, sa tri ventila na 50 m kabla za spoljnu upotrebu.
  • Panel za operateraPet ekrana: živo stanje sa otkazivanjem i +15 min, brzo ručno zalivanje, raspored, istorija sa graficima i stanje sistema. Stanje se osvežava svake dve sekunde.
  • EvidencijaPet tabela i petnaest tipova događaja. Svako zalivanje i svaka odluka su zapisani, pa istorija odgovara na pitanja umesto da otvara rasprave.
  • Oporavak posle restartaPri podizanju sistema zalivanja koja su ostala otvorena označavaju se kao prekinuta, svi ventili se zatvaraju i ništa se ne nastavlja samo od sebe. SIGTERM zatvara ventile pre nego što se proces ugasi.

Kako smo pristupili

Dve stvari su oblikovale implementaciju. Prva je libgpiod verzije 2: gpioset ne postavlja port i ne izlazi, nego drži linije i blokira dok ne bude ugašen, a jezgro ih oslobađa tek tada — pa ispali-pa-zaboravi ne postoji kao opcija, jer sledeći poziv dobija grešku da je uređaj zauzet, a vrednost se ionako ne bi zadržala. Tačno jedan dugotrajan proces drži željeno stanje sva tri porta i menja se samo kada se ciljno stanje zaista promeni, a svaki upis definiše sva tri izlaza, pa ne postoji putanja kroz kod koja otvara ventil 2 a da ne kaže šta rade ventili 1 i 3. Druga je pravilo: svaka neizvesnost zatvara sve ventile. Podizanje sistema, neuspeo upis, upravljački proces koji se nije javio 30 sekundi, greška bilo gde u petlji — sve to završava u istom stanju, sa sva tri ventila zatvorena. Zalivanje se posle restarta nikada ne nastavlja samo; između zatvaranja jednog i otvaranja sledećeg ventila stoji pauza od pet sekundi u kojoj je sve zatvoreno, jer se otvaranjem dva ventila u isti razvod dobija hidraulični udar; a ručno zalivanje ima gornju granicu koja se proverava na serveru, a ne samo u formi. Pumpa nije povezana ni sa čim od toga — klijentova je, ima sopstveni prekidač pritiska i sama sobom upravlja.

Rezultat

Zasad se sam zalivao kroz sezonu 2026. U evidenciji stoji 211 zalivanja, a reprezentativna nedelja je 25 zalivanja i 42 sata i 32 minuta otvorenih ventila na tri sekcije, sve pokrenuto rasporedom. Svako zalivanje je red u bazi — koja sekcija, raspored ili ručno, kada je počelo, kada je trebalo da se završi, kada se stvarno završilo i zašto — a petnaest tipova događaja pokriva ostatak: podizanje sistema, preskakanja, preticanja, testovi releja, greške na portovima, hitna zaustavljanja.

U upotrebi