UNIVERZA V LJUBLJANI Fakulteta za elektrotehniko. Robert Urankar. Pametni rastlinjak DIPLOMSKO DELO VISOKOŠOLSKEGA STROKOVNEGA ŠTUDIJA

Similar documents
MODERIRANA RAZLIČICA

Uporaba razvojnega okolja Arduino za izdelavo merilnega vozlišča na modulu ESP8266

190V3.

226V3L.

PROGRAMSKO OKOLJE ZA NAČRTOVANJE PROGRAMIRLJIVIH VEZIJ S POMOČJO RAZVOJNE ENOTE

AXALJ-TT: 3-žilni SN kabel z aluminijastim ekranom, izboljšana vodotesnost in pričakovana daljša življenjska doba

Mestna občina Celje Komisija Mladi za Celje HIŠNA AVTOMATIKA RAZISKOVALNA NALOGA. AVTOR Jakob Jug. MENTOR: Gregor KRAMER, univ. dipl. ing.

Kaj je v škatli. Leto modela. Velikost zaslona (palci, po diagonali) Velikost zaslona (centimetri, po diagonali)

Tjaša Lemut Novak in Lea Sobočan

Barvni televizor LCD KDL-46V3000 KDL-40V3000

I, you, we, they + have + glagol v 3. obliki. He, she, it + has + glagol v 3. obliki

Tehnologija programirljivih vezij. Načrtovanje digitalnih el. sistemov. Programirljiva vezja (PLD) Programirljiva vezja (CPLD)

POVZETEK 7 ABSTRACT 9 1. UVOD OPREDELITEV PODROČJA IN OPIS PROBLEMA NAMEN, CILJI IN HIPOTEZE NALOGE 11

PROBLEM LONDONSKEGA STOLPA

Kazo Vision. 1. System Chart

Register your product and get support at Navodila 32PFL8404H 37PFL8404H 42PFL8404H 47PFL8404H

Navodila za uporabo ComBox.L. Nizkoenergijski Logger visokega dometa

1 Dodatek. Uporaba dvojnega zaslona za teletekst. Povečanje strani teleteksta

Časovni diagram Relejna shema Mnemonična koda Adresa Ukaz Podatek TIM0 #

1 Dodatek. Uporaba dvojnega zaslona za teletekst. Povečanje strani teleteksta

Avtomatsko videotestiranje opremljenosti plošč tiskanega vezja

Register your product and get support at.

Register your product and get support at Navodila 40PFL7664H

Načrtovanje vgrajenih sistemov na čipu Xilinx Zynq

LOGIČNI ANALIZATOR ZA VODILO CAN S SPLETNIM VMESNIKOM

Barvni televizor LCD KDL-70X3500 KDL-52X3500 KDL-46X3500/ KDL-46X3000 KDL-40X3500/ KDL-40X3000

"MAKING THE INSTRUMENTS ZITHER " OF MODEL A PUD-BJ»FROM IDEA TO PRODUCT«

Varnost... 4 Dogovorjene oznake... 4 Napajanje... 5 Namestitev... 6 Čiščenje... 7 Drugo... 8 Nastavitev... 9 Vsebina paketa... 9 Prilagajanje zornega

Navodila za uporabo LCD-monitorja

Barvni televizor LCD

Programirljiva logika

Uporabniški priročnik. Register your product and get support at

LCD TV. Navodila za uporabo (1) Začetni vodnik. Gledanje televizije. Uporaba izbirne opreme. Uporaba funkcij MENU. Dodatne informacije

E2770SD/E2770SHE/E2770PQU Q2770PQU G2770PQU M2770V/ M2870V/M2870VHE/M2870VQ I2770V/I2770VHE. (osvetlitev LED)

DNX5240BT DNX5240 DDX5024 DDX5054 DDX54R

ŠOLSKI CENTER ZA POŠTO, EKONOMIJO IN TELEKOMUNIKACIJE LJUBLJANA VIŠJA STROKOVNA ŠOLA DIPLOMSKA NALOGA ANA STRNIŠA

Univerza v Ljubljani Naravoslovnotehniška fakulteta MONITORJI. Seminarska naloga pri predmetu tehonologija grafičnih procesov

DNX8220BT DDX8022BT PRIROČNIK ZA UPORABO

Register your product and get support at Navodila 42PFL9664H 47PFL9664H

MODERIRANA RAZLIČICA

241P6 241B6. SL Uporabniški priročnik 1 Pomoč uporabnikom in garancija 42 Odpravljanje težav in pogosta vprašanja 47

Navodila za uporabo TH-70SF2HW

DOI: /elope Summary

Navodila za uporabo. Slovenščina Št. modela TH-55VF1HW

UNIT V 8051 Microcontroller based Systems Design

Analiza in primerjava storitvenih platform za internet stvari

196V4L.

VARTECH. User s Guide. VT420 Large Screen Series 42.0 Large Screen Series LCD Monitors VT420W, VT420C. Solutions for Demanding Applications

Optična spojka / Fiber Optic Closure 015Y1

60S / 60P (osvetlitev LED)

Model Serial

SLOVENŠČINA SOUNDBAR SISTEM DOMAČEGA KINA PRIROČNIK ZA UPORABO MODEL HT-SL70 HT-SL75

10-in-1 Remote Control


60S / 60P (osvetlitev LED)

OP5. Preprogrammed, configurable controller for simple applications

B. The specified product shall be manufactured by a firm whose quality system is in compliance with the I.S./ISO 9001/EN 29001, QUALITY SYSTEM.

Psevdonaključni podatkovni izvor z bitno hitrostjo 10 Gbit/s in dolžino zaporedja

Register your product and get support at

(AVTO)BIOGRAFIJA V POSTMEDIJSKEM SLIKARSTVU PRI NAS

Navodila 48PUS PUS PUS7600

Model Serial

224E5. SL Uporabniški priročnik 1 Pomoč uporabnikom in garancija 29 Odpravljanje težav in pogosta vprašanja 34

RAZVOJ SISTEMA VSEBIN NA ZAHTEVO NA PLATFORMI XBMC

DIGITALNA TELEVIZIJA V NAŠEM GOSPODINJSTVU

Alice EduPad Board. User s Guide Version /11/2017

288P6. SL Uporabniški priročnik 1 Pomoč uporabnikom in garancija 27 Odpravljanje težav in pogosta vprašanja 33

LC-32LD165E/LC-42LD265E/LC-46LD265E/LC-50LD265E

LCD MODULE SPECIFICATION


Register your product and get support at 65PUS PUS9809. Navodila

Item Symbol Absolute Maximum Rating Unit Remarks

Scanning Laser Range Finder Smart-URG mini UST-10LX (UUST003) Specification

Lecture (04) Arduino Microcontroller Programming and interfacing. By: Dr. Ahmed ElShafee

PS600 Digital Visualizer. User Manual. English - 0

Ocean Sensor Systems, Inc. Wave Staff, OSSI F, Water Level Sensor With 0-5V, RS232 & Alarm Outputs, 1 to 20 Meter Staff

TFT LCD MONITOR PRODUCT SPECIFICATION MODEL: KTS270DPE02 ISSUE DATE: Prepared by KORTEK R&D CENTER KORTEK CORPORATION

R1MS-GH3 BEFORE USE... POINTS OF CAUTION INSTRUCTION MANUAL THERMOCOUPLE & DC INPUT MODULE MODEL. (8 points; isolated)

236V4.

(1) LCD TV. Navodila za uporabo. KDL-55HX75x / 46HX75x / 46EX65x / 40HX75x / 40EX65x / 32HX75x / 32EX65x / 26EX55x KDL-22EX55x

RF4432 wireless transceiver module

FTS84/85 Feature Application Field. Temperature & Humidity / Flow Measuring Specialist. Monitor gas and flow for industrial process

FTS84/85 Feature Application Field. Temperature & Humidity / Flow Measuring Specialist. Monitor gas and flow for industrial process

26 Inch CGA/EGA/VGA/DVI to WXGA/1080p LCD - ID#703

DNA-STP-SYNC Synchronization and Screw Terminal Panel. User Manual

(1) LCD TV. Navodila za uporabo. KDL-55HX85x / 46HX85x / 40HX85x

Navodila za uporabo SiOL BOX-a S. box.siol.net

ANGLEŠKA SLOVNIČNA PRAVILA

AND-TFT-25XS-LED-KIT. 160 x 234 Pixels LCD Color Monitor AND-TFT-25XS-LED-KIT. Features

digitalno televizijo s»časovnimi TV funkcijami«- povsod po Sloveniji

15 Inch CGA EGA VGA to XGA LCD Wide Viewing Angle Panel ID# 833

-,.%'/,012)301#0)43(/15641.,/1'3##)0/15/!!!"#$%&%#'"()*+!,&()*, 78!"#$%&'" 9:;<8==99

DVI Converters: Installation & Operation Guide BDV BLACK DIAMOND VIDEO

UNIVERZA V NOVI GORICI FAKULTETA ZA PODIPLOMSKI ŠTUDIJ SAMOFORMIRANJE ETIČNEGA SUBJEKTA PRI NIETZSCHEJU IN FOUCAULTU DISERTACIJA.

USER MANUAL AL-Control 1 PRO

RF Mogul. Quick Start. Model: SDC1. Satellite Dish Controller

12.1 Inch CGA EGA VGA SVGA LCD Panel - ID #492

Quick Guide Book of Sending and receiving card

DEM A VMH-PW-N 5 TFT

16-CH Color Full Duplex Multiplexer Instruction Manual

Transcription:

UNIVERZA V LJUBLJANI Fakulteta za elektrotehniko Robert Urankar Pametni rastlinjak DIPLOMSKO DELO VISOKOŠOLSKEGA STROKOVNEGA ŠTUDIJA Mentor: doc. dr. Gorazd Karer Ljubljana, 2014

Zahvala Zahvaljujem se mentorju doc. dr. Gorazdu Karerju za vso pomoč in strokovne napotke, dr. Matevžu Bošnaku za strokovno pomoč, Borisu Zalokarju za pomoč pri opremi in podjetju Testing d.o.o. za praktično znanje. II

Kazalo Povzetek... 1 Abstract... 2 1 Uvod... 3 2 Seznam uporabljenih elementov... 5 2.1 Krmilnik PoKeys57E... 6 2.2 Relejsko vezje PoExtBus... 7 2.3 Senzor zemeljske vlažnosti... 8 2.4 Senzor osvetljenosti... 9 2.5 Senzor temperature... 9 2.6 Senzor zračne vlažnosti... 10 2.7 Elektromagnetni ventil... 11 2.8 Grelnik... 13 2.9 Motor za odpiranje okna... 14 3 Programska oprema... 15 3.1 PoKeys... 15 3.2 PoBlocks... 17 3.3 Microsoft Visual Studio C#... 19 4 Izvedba... 21 4.1 Izdelava programa za vodenje rastlinjaka... 21 4.1.1 Razsvetljava... 21 4.1.2 Temperatura... 23 4.1.3 Prezračevanje... 25 4.1.4 Zalivanje... 27 4.2 Izdelava naprave... 29 4.2.1 Ohišje (zunanji del)... 29 4.2.2 Notranji del... 30 4.3 Izdelava uporabniškega vmesnika... 31 4.3.1 Povezava z računalnikom... 31 4.1.2 Glavno okno uporabniškega vmesnika... 32 5 Zaključek... 46 Literatura... 47 Kazalo slik... 48 Priloge... 49 III

Seznam uporabljenih kratic in simbolov PC LED DHCP LCD AD EM I2C osebni računalnik (angl. Personal Computer) svetleča dioda (angl. Light Emitting Diode) omrežni protokol za dinamično nastavitev gostitelja (angl. Dynamic Host Configuration Protocol) zaslon s tekočimi kristali (angl. Liquid Cristal Display) analogno/digitalno (angl. Analog/Digital) elektromagnet (angl. Electro Magnet) komunikacijsko vodilo (angl. Inter-Integrated Circuit) IV

Povzetek V svojem diplomskem delu sem želel predstaviti svojo zasnovo sistema za vodenje in nadzor rastlinjaka. Namen dela je na razumljiv način opisati vse faze izgradnje, od ideje do izvedbe. Prav tako sta v diplomskem delu opisani strojna in programska oprema. Avtomatizacija rastlinjaka temelji na krmilniku podjetja PoLabs. Razmere v rastlinjaku merimo s štirimi različnimi senzorji (osvetljenost, temperatura, zračna in zemeljska vlažnost), izmerjene vrednosti pa uporabimo za vodenje luči, grelnika, motorja za odpiranje okna in elektromagnetnega ventila za dotok vode za zalivanje. Senzorje in naprave priklopimo na elektroomarico, ki vsebuje vse dele, pomembne za pravilno delovanje avtomatizacije. Z računalnikom se povežemo z mrežnim kablom preko vmesnika RJ45. Želene razmere v rastlinjaku nastavljamo s pomočjo uporabniškega vmesnika, zasnovanega v programskem okolju C#. Ta nam omogoča prikaz trenutnih izhodnih vrednosti senzorjev, preklop med avtomatskim in ročnim načinom ter ročno vklapljanje ali izklapljanje posameznih naprav. Ključne besede: avtomatsko vrtnarjenje, krmilnik PoKeys 1

Abstract In my thesis, I wanted to present my own design of a system for managing and controlling a greenhouse. The purpose of the work is to introduce all phases of construction, from idea to execution. Likewise, the thesis describes hardware and software needed for greenhouse automation. My greenhouse automation system is based on a controller, developed by Slovenian company PoLabs. Greenhouse conditions are measured by four different sensors (temperature, illuminance, air humidity and soil humidity), whose values are used to control the lights, the heater, the motor for opening the window and the electromagnetic valve. Sensors and devices are connected to an electrical box, which contains all the parts needed for successful automation. The device is connected to a computer with a network cable via the RJ45 interface. The desired conditions are set by the user interface designed in C# programming environment, which allows observation of the current sensor values, switching between automatic and manual modes and switching individual devices on or off. Key words: automatic gardening, PoKeys controller 2

1 Uvod Vrtnarjenje danes postaja vse bolj popularno. Svetovna kriza je zaradi želje po večjem zaslužku pri veliko kmetovalcih povzročila mnogo večjo uporabo pesticidov. Zelenjava, ki jo uživamo, je posledično lahko nezdrava, mnogokrat na meji s škodljivim. Zato se vedno več ljudi spoznava s pridelavo domače ekološko pridelane zelenjave. Težava pri vrtnarjenju je, da za uspešen in zdrav pridelek potrebujemo veliko časa, ki pa ga veliko ljudem zaradi prenatrpanih urnikov in časovno zahtevnih zaposlitev primanjkuje. Eno izmed rešitev časovne stiske sem skušal predstaviti v svojem diplomskem delu. Zamislil sem si pametni rastlinjak, ki najbolj pomembne procese pri vzgoji rastlin opravlja sam, poleg tega pa je cenovno dostopen vsem, tudi ljubiteljskim vrtnarjem. Trenutno v Sloveniji ni prav veliko podjetij, ki se ukvarjajo z avtomatizacijo rastlinjakov. Konkurenčnost v tej panogi je zato nizka. Podjetje, ki ga velja omeniti je Avtomatika Gašpirc d.o.o., ki je na tržišču že iz 80. let prejšnjega stoletja. Pri zasnovi naprave sem se najprej osredotočil na stvari, ki jih rastlina za rast najbolj potrebuje. To so svetloba, toplota in vlažnost. Pri svetlobi so za rast najbolj problematični oblačni dnevi, pozimi pa še prehiter prehod dneva v noč. Rešitev je dodatno osvetljevanje z umetnimi svetili, ki jih prižigamo ali ugašamo glede na informacijo iz senzorja svetlobe. Temperatura je predvsem problematična pozimi, pozno jeseni in zgodaj spomladi, ko se zunanje temperature spustijo pod ledišče, saj večina rastlin nizkih temperatur ne prenaša. V ta namen sem v napravo za vodenje rastlinjaka vgradil grelnik, ki je, ravno tako kot svetila, voden s pomočjo senzorja. Še bolj kot zgoraj omenjena dejavnika pa je za ugodno rast pomembna vlaga. Vlažnost v rastlinjaku merita dva senzorja. Prvi meri relativno zračno vlažnost in glede na želene parametre regulira odpiranje ali zapiranje oken. Drugi senzor se nahaja v zemlji, kjer meri njeno vlažnost. Z dobljenimi podatki vodi elektromagnetni ventil, preko katerega se voda iz rezervoarja prenese do vrtnin. 3

Diplomsko delo je sestavljeno iz petih delov. V uvodnem poglavju sta predstavljena problematika vsakdanjega vrtnarjenja in zasnova naprave. V drugem poglavju z naslovom»seznam uporabljenih elementov«so predstavljeni vitalni deli naprave. Podrobno so opisani krmilnik PoKeys57E, relejsko vezje PoExtBus, vsi štirje senzorji, elektromagnetni ventil, grelnik in motor za odpiranje okna. Tretje poglavje z naslovom»programska oprema«obsega opise uporabljenih programov. Predstavljeni so programi PoKeys, PoBlocks in Microsoft Visual Studio. Četrto poglavje z naslovom»izvedba«vsebuje tri podpoglavja. V prvem je podrobno opisan program za krmiljenje rastlinjaka, v drugem je prikazana izdelava naprave, v tretjem pa izdelava uporabniškega vmesnika. V zadnjem poglavju z naslovom»zaključek«je kratek opis diplomskega dela in končni rezultati. 4

2 Seznam uporabljenih elementov V tem poglavju bom opisal opremo, ki sem jo uporabil pri zasnovi rastlinjaka. Oprema je na voljo v vseh bolj založenih trgovinah z elektroniko. Pri nakupu sem bil pozoren na kar se da dobro razmerje med ceno in kakovostjo. Določene dele sem prav zaradi previsoke cene predelal iz podobnih, cenejših komponent (ventil EM, vtičnica RJ45). Glavni deli naprave: Krmilnik PoKeys57E podjetja PoLabs Relejsko vezje PoExtBus podjetja PoLabs Senzor zemeljske vlažnosti Senzor osvetljenosti Senzor temperature Senzor zračne vlažnosti Elektromagnetni ventil za zalivanje Grelnik Motor za odpiranje okna 5

2.1 Krmilnik PoKeys57E Najbolj pomembna komponenta celotne naprave je krmilnik PoKeys 57E (prikazan na sliki 1), ki ga proizvaja slovensko podjetje Polabs [1]. Krmilnik je zelo vsestranski in za osnovno uporabo ne zahteva veliko programerskega predznanja. Lastnosti: 55 digitalnih vhodov ali izhodov 7 12-bitnih analognih izhodov priključek ethernet 10/100 za povezavo z računalnikom litijeva baterija CR1220 3V statusne svetleče diode: rdeča luč: priklop naprave na napetost hitro utripajoča zelena luč: ob zagonu naprave v načinu obnovitve za namestitev nove programske opreme počasi utripajoča zelena luč: naprava čaka na nastavitve DHCP zelena luč: naprava deluje normalno Slika 1: Krmilnik PoKeys57E 6

2.2 Relejsko vezje PoExtBus Relejsko vezje PoExtBus (prikazano na sliki 2) [2] je dodatek krmilniku PoKeys, ki nam omogoča uporabo relejev. Na krmilnik ga povežemo preko konektorja PoExtBus ali neposredno preko sponk parallel input. Za delovanje potrebuje napajalno napetost 5 12 V, odvisno od zahtev relejev. Vezje je sestavljeno iz 8 relejev, vsakemu izmed njih pripada po ena sponka NO, NC in Vin. Vsak rele ima tudi pripadajočo svetlečo diodo, ki se prižge ob sklenitvi kontakta NO. Releje krmilimo s signali v velikosti od 3,3V do 5V, katere pošiljamo na sponke parallel input. Opis kontaktov: Vin priklop napajalne napetosti naprave, ki jo vodimo z relejem. Napetost se prenese na kontakta NO ali NC glede na signal na sponki parallel input Parallel input priklop signala od 3,3V do 5V NC kontakt je aktiven (dobi napetost Vin), ko na sponki parallel input ni napetosti. Rele je zaprt (angl. Normally Closed). NO kontakt je aktiven (dobi napetost Vin), ko je na sponki parallel input napetost od 3,3 do 5V. Rele je odprt (angl. Normally Open). Slika 2: Relejsko vezje PoExtBus 7

2.3 Senzor zemeljske vlažnosti Slika 3: Senzor vlažnosti v zemlji Vegetronix Za merjenje zemeljske vlažnosti sem uporabil Vegetronixov visokofrekvenčni senzor vlažnosti VH400 (prikazan na sliki 3) [3]. Omogoča nam cenovno dostopno, izredno natančno in zanesljivo merjenje zemeljske vlažnosti. Deluje tako, da meri dielektrično konstanto zemlje in ni občutljiv na slanost zemlje. To pomeni, da je neobčutljiv na korozijo, ki s časom postane velika težava za senzorje, ki vlažnost določajo z merjenjem prevodnosti. Velja omeniti, da je senzor zelo majhen in za svoje delovanje porabi manj kot 7 ma. Senzor se ne uporablja samo v zalivalnih sistemih, temveč tudi za merjenje vlage v razsutih živilih, za opazovanje vremena in zapadle količine dežja, v aplikacijah za varčevanje vode ipd. 8

2.4 Senzor osvetljenosti Za merjenje osvetljenosti sem uporabil digitalni senzor BH 1750 [7]. Senzor se pogosto uporablja v mobilnih telefonih, LCD televizijah in prenosnikih za nastavljanje svetlosti zaslona. Njegove prednosti so: Visok razpon merjenja (1-65535 lx) Majhna merska napaka Majhna poraba energije Zelo majhen Obratuje pri temperaturah od -40 do 85 C Ostali podatki so navedeni v tehničnem listu, ki je priložen v Prilogi 1 2.5 Senzor temperature Za merjenje temperature sem uporabil senzor LM75 [8]. Vsebuje delta-sigma AD pretvornik in digitalni detektor pregrevanja. Za svoje delovanje, prav tako kot senzor svetlosti, porabi zelo malo energije. Najpogosteje je uporabljen v računalnikih, testni opremi in napravah v pisarnah. Ostali podatki so navedeni v tehničnem listi, ki je priložen v Prilogi 2. 9

2.6 Senzor zračne vlažnosti Za merjenje zračne vlažnosti sem uporabil senzor SHT21 [9]. Senzor je zaščiten s posebno prevleko, ki ga ščiti pred zunanjimi vplivi (korozija), kar omogoča dolgotrajno stabilnost. Deluje pri temperaturah od -40 do 125 C, vrača pa vrednosti relativne zračne vlažnosti od 0 % do 100 %. Ostali podatki so navedeni v tehničnem listu, ki je priložen v Prilogi 3. Vsi trije zgoraj omenjeni senzorji so zbrani na senzorskem vezju PoSensors (prikazano na sliki 4) podjetja Polabs. Slika 4: Senzorsko vezje PoSensors 10

2.7 Elektromagnetni ventil Elektromagnetni ventil je zaporni ventil, ki je voden s pomočjo toka skozi tuljavo. Največkrat je uporabljen v napravah, ki za svoje delovanje uporabljajo tekočine. Njegova naloga je odpiranje ali zapiranje voda, po katerem teče tekočina. Zgradba elektromagnetnega ventila je prikazana na sliki 5. Slika 5: Zgradba elektromagnetnega ventila Sestavni deli: 1. Ogrodje ventila 2. Dovodna stran 3. Odvodna stran 4. Tuljava 5. Navitje 6. Bat 11

7. Vzmet 8. Odprtina Delovanje: Zaprt ventil: v navitju električni tok ne teče. Bat pritiska na odprtino in s tem onemogoča prehod tekočine. Odprt ventil: električni tok v navitju pozvroči dvig bata in posledično pretok tekočine skozi odprtino. Na naši napravi je uporabljen elektromagnetni ventil (prikazan na sliki 7), ki je bil prvotno vgrajen v digitalno uro proizvajalca ID Tools (prikazana na sliki 6) [4]. Slika 6: vrtna ura ID Tools Programiranje zalivanja bi bilo mogoče neposredno preko vrtne ure, vendar sem se zaradi pregledonosti odločil, da se prav tako vodi iz uporabniškega vmesnika. Pametni del vrtne ure sem zato odstranil in uporabil samo ventil. 12

Slika 7: Elektromagnetni ventil izločen iz vrtne ure ID Tools 2.8 Grelnik Grelnik je zelo pomemben del rastlinjaka, ki ob prenizkih temperaturah vzdržuje primerno temperaturo. Glede na velikost rastlinjaka moramo paziti na zadostno moč grelnika. V našem primeru je uporabljen kalorifer ISKRA NSB-200A (prikazan na sliki 8) [10] z možnostjo nastavljanja moči (1 2 kw). Slika 8: Kalorifer ISKRA NSB-200A 13

2.9 Motor za odpiranje okna Za odpiranje in zapiranje oken je uporabljen servomotor C 577, proizvajalca Graupner. Servomotor za svoje delovanje potrebuje tri žice. Dve priklopimo na napajalno napetost (5V), eno pa uporabimo za impulzni signal, ki določa želeni zasuk motorja. Servomotor pričakuje pulznoširinsko moduliran signal s periodo 20 ms, delovni cikel pa določa pozicijo, v katero se bo motor obrnil. Nepredelan motor se v večini primerov lahko obrne zgolj za 180. Na sliki 9 je prikazano delovanje servomotorja. Omeniti velja tudi njegove glavne tri pozicije in pripadajoče signale: delovni cikel 5 %: zasuk 0 delovni cikel 7,5 %: zasuk 90 delovni cikel 10 %: zasuk 180 Minimalni impulz širina impulza 1 ms 0 90 Nevtralna pozicija širina impulza 1.5 ms Maksimalni impulz širina impulza 2 ms Slika 9: Delovanje servomotorja 180 14

3 Programska oprema 3.1 PoKeys Slika 10: Uporabniški vmesnik programa PoKeys(vir: program PoKeys) Program PoKeys (uporabniški vmesnik je prikazan na sliki 10) proizvajalca PoLabs je potreben za inicializacijo vhodov in izhodov ter izbire senzorjev. Vsaki od 55 sponk lahko določimo eno izmed funkcij: Inactive sponka ni v uporabi Digital Input sponka inicializirana kot digitalni vhod Digital Output sponka inicializirana kot digitalni izhod Analog Input sponka inicializirana kot analogni vhod Analog Output sponka inicializirana kot analogni izhod V zavihku Peripherals>Sensors (prikazan na sliki 11) nastavljamo nastavitve senzorjev. Na enkrat lahko uporabljamo 10 senzorjev, izbiramo pa lahko med senzorji I2C, enožičnimi 15

senzorji in analognimi senzorji. Slika 11: Nastavitve senzorjev(vir: program PoKeys) Po priključitvi senzorjev na napravo PoKeys uporabimo gumb Scan for devices. Ta nam pove, kateri senzorji so trenutno v uporabi in na katerem naslovu jih najdemo. Te podatke uporabimo v poljih Address in Type glede na to, kateri senzor želimo uporabiti. V izbirnem polju Refresh period si izberemo čas osveževanja senzorja. Zavihek PoIL status je namenjen pregledu podatkov, ki so trenutno shranjeni v skupno rabo, program pa nam nudi tudi pregled trenutnih vrednosti senzorjev preko spletnega brskalnika. Ta v našem primeru sicer ni uporabljen, ker ga nadomešča prilagojeni uporabniški vmesnik. 16

3.2 PoBlocks Program PoBlocks je grafično programsko orodje za naprave PoKeys. Vsebuje preprost in pregleden grafični vmesnik, s pomočjo katerega ustvarjamo programe, ki jih izvajamo na napravi Pokeys. Program je zasnovan tako, da je preprost za uporabo, vendar kljub temu primeren tudi za zahtevnejše uporabnike. Programiranje v Poblocks je preprosto in ne zahteva veliko programerskega predznanja. Želene procese realiziramo s pomočjo blokov, ki so razdeljeni v smiselne zavihke glede na njihovo funkcionalnost. Za branje vhodnih vrednosti iz naprave uporabimo zavihek IO (prikazan na sliki 12). Tukaj si izberemo zahtevan vhod ali izhod in mu pripišemo ustrezno mesto na napravi Pokeys. Slika 12: Zavihek»IO«(vir: program PoBlocks) Za obdelavo podatkov med vhodi in izhodi uporabljamo zavihke Algebra, Logic, Trigger / timing in Memory. Zavihek Algebra (prikazan na sliki 13) vsebuje osnovne matematične izraze. Vhodi v bloke so lahko poljubno izbrana števila ali trenutni vhodi na napravi. Slika 13: Zavihek»Algebra«(vir: program PoBlocks) 17

Zavihek Logic (prikazan na sliki 14) vsebuje logične operatorje. Slika 14: Zavihek»Logic«(vir: program PoBlocks) NOT vrne negirano vrednost vhoda (primer: vhod = 0, izhod = 1). AND vrne logično vrednost 1, če so vse vrednosti na vhodu enake 1. OR vrne logično vrednost 1, če je vsaj ena vrednost na vhodu enaka 1. XOR - vrne logično vrednost 1, če se vhoda razlikujeta. Vhod Izhod A B 0 0 0 0 1 1 1 0 1 1 1 0 Tabela 1: XOR Zavihek Memory (prikazan na sliki 15) vsebuje spominske celice. Slika 15: Zavihek»Memory«(vir: program PoBlocks) Zavihek Trigger and timing (prikazan na sliki 16) vsebuje funkcije za proženje in različne vrste časovnikov. Slika 16: Zavihek»Trigger and timing«(vir: progrma PoBlocks) 18

3.3 Microsoft Visual Studio C# Microsoft Visual Studio je Microsoftovo integrirano razvojno okolje. Uporablja se za razvijanje računalniških aplikacij v operacijskem sistemu Windows. C# je objektno usmerjeni programski jezik, ki je namenjen ustvarjanju aplikacij, ki se izvajajo v.net ogrodju. Je nekakšna kombinacija jezikov C++ in Jave. Na sliki 17 je prikazan uporabniški vmesnik programa Microsoft Visual Studio. Slika 17: Uporabniški vmesnik programa Microsoft Visual Studio 19

20

4 Izvedba 4.1 Izdelava programa za vodenje rastlinjaka Programa za vodenje rastlinjaka sem zasnoval v orodju PoBlocks. Vsak del programa sem najprej zasnoval kot samostojnego enoto, na koncu pa sem vse dele združil v celoto. V poglavju so opisani posamezni deli programa in njim pripadajoči bloki. 4.1.1 Razsvetljava Slika 18: Vodenje osvetljenosti Trenutno osvetljenost rastlinjaka merimo s senzorjem svetlobe PoSensors. Na sliki 18 so prikazani potrebni bloki in povezave med njimi za pravilno delovanje krmiljenja razsvetljave. V programu PoBlocks izberemo bloke: 1x Sensor value poda izhodno vrednost senzorja. 1x Configurable schedule izbira terminov delovanja. 1x Compare(LE) primerja vrednosti Value in Reference. V primeru, da je Value manjša ali enaka, vrne logično 1, drugače logično 0. 1x Not vrne negirano vrednost vhoda. 21

1x And vrne logično vrednost 1, če so vse vrednosti na vhodu enake 1. 1x Or vrne logično vrednost 1, če je vsaj ena vrednost na vhodu enaka 1. 1x Digital output določanje stanj izhodov na napravi PoKeys. 3x Shared 32-bit spominski bloki za shranjevanje podatkov. Uporabimo jih v povezavi z uporabniškim vmesnikom, kjer jim uporabnik določi vrednosti. Luč v rastlinjaku lahko vklapljamo na dva načina, ročno ali avtomatsko. Za preklop med načinoma je odgovorna vrednost Avtomatsko Luc (S0). Če je njegova vrednost 0, pomeni, da je luč v avtomatskem načinu, drugače je v ročnem načinu. Vrednost z izhoda senzorja zapišemo v skupno rabo (S2) in jo v komparatorju (Compare (LE)) primerjamo s parametrom osvetljenosti (S16), ki ga uporabnik določi v uporabniškem vmesniku. Izhod komparatorja uporabimo skupaj z vrednostima blokov Configurable schedule in negirano Avtomatsko Luč, v bloku AND. Na koncu še v skupno rabo zapišemo trenutno stanje luči (S3). Luč v rastlinjaku se torej prižge dveh primerih: Izbran ročni način luč se prižge na željo uporabnika s pritiskom na tipko ON, ki postavi vrednost LucRocnoON (S1) na logično 1. Izbran avtomatski način luč se prižge samo v primeru, ko je osvetljenost manjša od želene in čas ustreza urniku. 22

4.1.2 Temperatura Slika 19: Vodenje ogrevanja Na sliki 19 so prikazani potrebni bloki in povezave med njimi za pravilno delovanje ogrevanja. V programu PoBlocks uporabimo bloke: 1x Sensor value 1x Compare(LE) 1x Compare(GE) primerja vrednosti Value in Reference. V primeru, da je Value večja ali enaka, vrne logično 1, drugače logično 0. 1x Not 1x And 1x Or 1x Set/Reset latch vsebuje 2 vhoda (S, R) in 1 izhod (Q). Izhod Q dobi logično vrednost 1, ko stanje vhoda S dobi logično vrednost 1, vrednost R pa je enaka 0. Vrednost izhoda Q ostaja nespremenjena dokler ne postavimo vhoda R. 1x Digital output 4x Shared 32-bit 23

Temperaturo v rastlinjaku merimo s senzorjem LM75. Vodimo jo lahko ročno ali avtomatsko, glede na izbiro v uporabniškem vmesniku (parameter S4). Prav tako si v uporabniškem vmesniku izberemo parametre Minimalna Temperatura (S17), Maksimalna Temperatura (S18) in GrelecRocnoON (5). Opis vodenja: Avtomatski način odčitek iz senzorja primerjamo z minimalno in maksimalno temperaturo. Če je temperatura manjša od minimalne, vhod S na vratih set/reset dobi logično vrednost 1, vhod R pa ima vrednost 0. To pomeni, da izhod Q dobi vrednost 1 in grelnik se prižge. Grelnik nato ostane prižgan toliko časa, dokler temperatura ne doseže maksimalne. Takrat vhod R dobi vrednost 0, kar povzroči izklop grelnika. Ročni način grelnik prižigamo in ugašamo s pomočjo gumbov na uporabniškem vmesniku 24

4.1.3 Prezračevanje Slika 20: Vodenje prezračevanja Na sliki 20 so prikazani potrebni bloki in povezave med njimi za pravilno delovanje prezračevanja. V programu PoBlocks uporabimo bloke: 1x Sensor value 5x Shared 32-bit 1x Not 1x Compare(LE) 1x Compare(GE) 2x And 1x Set/reset latch 1x Or 1x Falling edge postavi izhod takrat, ko se vhodni signal spremeni iz 1 v 0 1x Rising edge postavi izhod takrat, ko se vhodni signal spremeni iz 0 v 1 2x Off timer postavi izhod za izbran čas PT (ms), ko vhod IN preide iz vrednosti 0 v 1 2x Digital output 1x PWM output uporabljen za krmiljenje servomotorja 25

Zračno vlažnost v rastlinjaku merimo s senzorjem SHT21. Glede na izbiro parametra S8 jo lahko reguliramo ročno ali avtomatsko. Vrednost senzorja primerjamo z želenimi vrednostimi, izbranimi v uporabniškem vmesniku. Opis vodenja: Avtomatski način odčitek iz senzorja primerjamo z minimalno in maksimalno zračno vlažnostjo. Če je vlažnost večja od maksimalne, vhod S na vratih set/reset dobi logično vrednost 1, vhod R pa ima vrednost 0. To pomeni, da izhod Q dobi vrednost 1 in okno se odpre. Okno ostane odprto toliko časa, dokler zračna vlažnost ne doseže minimalne. Takrat vhod R dobi vrednost 0, kar povzroči zaprtje okna. Pred vsakim vklopom releja v programu določimo smer servomotorja s parametrom S30. Ročni način okno odpiramo in zapiramo s pomočjo gumbov na uporabniškem vmesniku. 26

4.1.4 Zalivanje Slika 21: Vodenje zalivanja Na sliki 21 so prikazani potrebni bloki in povezave med njimi za pravilno delovanje zalivanja. V programu PoBlocks uporabimo bloke: 1x Analog input 1x Re scale razpon vhodnega signala prilagodi v nam želenega 1x Configurable schedule 4x Shared 32-bit 1x Compare(LE) 1x Compare(GE) 3x And 1x Set/reset latch 1x Or 1x Falling edge 1x Rising edge 2x Off timer 2x Digital output 27

Vlažnost zemlje v rastlinjaku merimo s senzorjem Vegetronix VH400. Vrednost senzorja odčitamo s pomočjo bloka Analog input, katerega vrednost prilagodimo z blokom Re-scale tako, da dobimo vrednosti od 0 do 100 (%). Te primerjamo s parametroma Vlaga Min in Vlaga Max, ki ju uporabnik lahko določi v uporabniškem vmesniku. V primeru, da je trenutna vlaga manjša od vrednosti Vlaga min, čas ustreza urniku in je izbran avtomatski način, se postavijo vrata set/reset. Ta sprožijo blok Rising edge, ki postavi izhod Output 10 na vrednost 1 za 250ms. Elektromagnetni ventil zato dobi napetost 9 V, se odpre, in zalivanje se prične. Ko vlaga zemlje doseže vrednost»vlaga Max«, se na vratih set/reset postavi vhod R. Vrata se zaprejo, posledično se postavi blok Falling edge in elektromagnetni ventil dobi napetost -9 V ter se zapre. Na sliki 22 je prikazana vezava elektromagnetnega ventila. Output 9 Output 10 9V NO IN EM IN 9V NO NC GND GND NC Slika 22: Vezava EM ventila Zalivanje torej poteka v dveh primerih: Avtomatski način elektromagnetni ventil se odpre, ko je v zemlji premalo vlage in čas ustreza urniku Ročni način elektromagnetni ventil odpiramo in zapiramo s pomočjo gumbov v uporabniškem vmesniku 28

4.2 Izdelava naprave 4.2.1 Ohišje (zunanji del) Slika 23: Zunanji del naprave Zunanje ohišje naprave (prikazano na sliki 23) predstavlja omarica Dido S, proizvajalca ETI Elektroelement d.d. Vanjo sem vgradil 4 vrste vtičnic: 1x vgradni ženski konektor IEC, ki se uporablja za priklop naprave na omrežno napetost. 2x vgradni moški konektor IEC, ki se uporablja kot izhod za naprave, ki za svoje delovanje potrebujejo napetost 220 V. V našem primeru sta to luč in grelnik. 5x vgradna vtičnica NYS, 5-polna, ki se uporablja kot vhod za senzorje ali kot izhod za priklop motorja in elektromagnetnega ventila. 1x vtičnica RJ 45, ki služi za povezavo računalnika in naprave. 29

4.2.2 Notranji del Slika 24: Notranji del naprave Notranji del naprave (prikazan na sliki 24) je sestavljen iz: 3x avtomatska varovalka Etimat C10, ki varuje vodnike pred prevelikim električnim tokom in prepreči morebiten požar zaradi preobremenjenih električnih naprav. 1x sponka za ničelni vodnik. 1x sponka za ozemljitveni vodnik. 1x krmilnik PoKeys. 1x relejsko vezje PoExtBus. 2x napajalnik 5 V, 1300 ma. 30

4.3 Izdelava uporabniškega vmesnika Zasnova uporabniškega vmesnika temelji predvsem na preglednosti in preprostosti. Brez večjih težav ga lahko uporabljajo vsi, tudi tisti, ki se sicer ne ukvarjajo z računalniki. Na spodnji sliki je prikazana glavna stran uporabniškega vmesnika, ki se prikaže ob uspešni povezavi z računalnikom. Slika 25: Glavna stran uporabniškega vmesnika 4.3.1 Povezava z računalnikom Ko zaženemo uporabniški vmesnik se pojavi okno (prikazano na sliki 26), s katerim povežemo računalnik in napravo PoKeys. V tekstovno polje vnesemo serijsko številko, ki jo najdemo na napravi in z gumbom Connect vzpostavimo povezavo. Slika 26: Okno za vzpostavitev povezave z računalnikom 31

4.1.2 Glavno okno uporabniškega vmesnika Ob uspešni povezavi se nam odpre glavno okno uporabniškega vmesnika. Ta je razdeljen v tri dele: Sensors trenutne vrednosti izhodov senzorjev in stanja naprav; Automatic/manual settings izbiranje načina vodenja; Chart izris podatkov. 4.1.2.1 Sensors Slika 27: Okno s trenutnimi vrednostimi senzorjev Razdelek Sensors (prikazan na sliki 27) je namenjen prikazovanju trenutnih vrednosti izhodov senzorjev, stanja naprav in načina vodenja procesov. Razdeljen je v štiri dele: osvetljenost, temperatura, zračna vlažnost in vlažnost zemlje. Podatki v razdelku Sensors se osvežujejo s pomočjo časovnika refreshtimer, katerega izberemo iz nabora orodij. Parameter Interval mu nastavimo na 1000 ms, kar pomeni, da se podatki osvežijo vsako sekundo. Časovnik zaženemo ob pritisku tipke Connect s funkcijo refreshtimer.start(); 32

Branje podatkov iz naprave (senzorjev) omogoča funkcija ReadPoILsharedData_ALL(), ki je zapisana spodaj. public void ReadPoILsharedData_ALL() // Read from device function { for (uint s = 0; s < 64; s += 13) { uint slotcount = 64 - s; if (slotcount > 13) slotcount = 13; byte[] data = new byte[4 * 13]; mydevice.poilreadmemory(4, (ushort)(s * 4), 4 * slotcount, ref data); } } for (int i = 0; i < slotcount; i++) { PoILdata[s + i] = BitConverter.ToUInt32(data, i * 4); } Za osveževanje podatkov uporabimo funkcijo refreshtimer_tick, ki se izvede vsakič, ko preteče čas, določen v parametru Interval. V njej iz skupne rabe PoKeys beremo trenutne vrednosti senzorjev in stanja naprav. V primeru luči, če je PoILdata[3] (vrednost shranjena v skupno rabo, pod zaporedno številko 3) TRUE, pomeni, da luč v rastlinjaku gori. Stanje naprave se preveri s preprosto IF zanko. Za prikaz uporabimo orodje label, ki mu določimo lastnost label.text (npr. label7.text =»Light is ON«). Spodaj je zapisana funkcija refreshtimer_tick, ki omogoča prikaz trenutnih vrednosti izhodov senzorjev ter stanja naprav. void refreshtimer_tick(object sender, EventArgs e) // funkcija, ki se izvede ob koncu intervala { ReadPoILsharedData_ALL(); // branje vrednosti iz naprave PoKeys // Current device states if (PoILdata[3] == 1) // če je vrednost v skupni rabi enaka 1 label7.text = "Light is ON"; // spremeni tekst v Light is on else label7.text = "Light is OFF"; // če je vrednost 0, tekst je Light is off if (PoILdata[7] == 1) label8.text = "Heater is ON"; else label8.text = "Heater is OFF"; if (PoILdata[11] == 1) label9.text = "Window is OPENED"; else label9.text = "Window is CLOSED"; 33

if (PoILdata[15] == 0) label10.text = "EM valve is CLOSED"; else label10.text = "EM valve is OPENED"; // Labels for Auto/Manual state if (PoILdata[0] > 0) // Brightness label11.text = "Manual"; else label11.text = "Automatic"; if (PoILdata[4] > 0) // Temperature label12.text = "Manual"; else label12.text = "Automatic"; if (PoILdata[8] > 0) // Air Humidity label13.text = "Manual"; else label13.text = "Automatic"; if (PoILdata[12] > 0) // Soil Humidity label14.text = "Manual"; else label14.text = "Automatic"; } 34

4.1.2.2 Razdelek Automatic/Manual Settings Razdelek Automatic/Manual Settings (prikazan na sliki 28) služi prilagajanju avtomatskih ali ročnih nastavitev in je razdeljen v pet delov: Slika 28: Avtomatske/ročne nastavitve 1. Izbirni meni Tukaj si izberemo proces, katerega nastavitve želimo spreminjati. Na voljo imamo: Brightness (osvetljenost), Temperature (temperatura), Air Humidity (zračna vlažnost) in Soil Humidity (vlažnost zemlje). 2. Napis s trenutnim načinom vodenja procesa Ob potrditvi izbire procesa v izbirnem meniju, se napis spreminja glede na trenutni način vodenja. Možna sta dva napisa (primer za osvetljenost): Brightness is controlled manually, kar pomeni, da je osvetljenost vodena ročno. Brightness is controlled automaticly, kar pomeni, da je osvetljenost vodena avtomatsko 35

3. Gumb za preklop ročno avtomatskega načina S tem gumbom izberemo način vodenja za izbrani proces. Z njim prav tako vplivamo na izgled uporabniškega vmesnika. Mogoči so trije scenariji: Scenarij 1 (prikazan na sliki 29) vključen ročni način in naprava izbranega procesa je ugasnjena. Slika 29: Izgled uporabniškega vmesnika primer 1 Scenarij 2 (prikazan na sliki 30) vključen ročni način in naprava izbranega procesa je prižgana. Slika 30: Izgled uporabniškega vmesnika primer 2 36

Scenarij 3 (prikazan na sliki 31) vključen avtomatski način. Slika 31: Izgled uporabniškega vmesnika primer 3 4. Napis z navodili za gumbe ON, OFF in Settings Napis se spreminja glede na izbiro v izbirnem meniju in načinom vodenja procesa. Primer za luč: Press the button to turn ON the light (slov. Pritisnite gumb ON za vklop luči) Press the button to turn OFF the light (slov. Pritisnite gumb OFF za izklop luči) Use the Settings button to adjust automatic settings (slov. Uporabite gumb Settings za nastavljanje avtomatskih nastavitev) 5. Gumbi ON, OFF, Settings S pritiskom na gumb ON prižgemo napravo trenutno izbranega procesa, spremenimo napis z navodili, skrijemo gumb ON ter prikažemo gumb OFF. Vse to omogoča funkcija picturebox5_click(), opisana spodaj. private void picturebox5_click(object sender, EventArgs e) { picturebox5.visible = false; // skrijemo ON picturebox6.visible = true; // prikažemo OFF switch (combobox1.text) { case ("Brightness"): WritePoILsharedData(1, 1); // v skupno rabo na mestu 1 zapišemo 1 In na ta način prižgemo luč. label17.text = "Press the button to turn OFF the light."; break; 37

} } case ("Temperature"): WritePoILsharedData(5, 1); label17.text = "Press the button to turn OFF the heater."; break; case ("Air Humidity"): WritePoILsharedData(9, 1); label17.text = "Press the button to CLOSE the window."; break; case ("Soil Humidity"): WritePoILsharedData(13, 1); label17.text = "Press the button to CLOSE the EM valve."; break; public void WritePoILsharedData(int slot, uint value) // Funkcija za pisanje v napravo. { byte[] data = BitConverter.GetBytes(value); mydevice.poilwritememory(4, (ushort)(slot * 4), 4, ref data); } S pritiskom na gumb OFF ugasnemo napravo trenutno izbranega procesa, spremenimo napis z navodili, skrijemo gumb OFF ter prikažemo gumb ON. S pritiskom na gumb Settings se nam odpre novo okno Auto Setting (prikazano na sliki 32), v katerem nastavljamo parametre avtomatskega načina vodenja. Slika 32: Nastavitve avtomatskega načina vodenja Okno Auto Settings je razdeljeno v dva dela. V zgornjem delu okna nastavljamo parametre procesa, v spodnjem pa si izberemo urnik delovanja. Okna se glede na proces razlikujejo (npr. pri temperaturi izbira časovnega okvira delovanja ni možna). 38

Opis elementov okna: Min minimalna dovoljena vrednost parametra procesa Max maksimalna dovoljena vrednost parametra procesa OnTime čas, ko se naprava lahko vklopi OffTime čas, ko se naprava izklopi Gumbi za dneve izbira dni, ko se naprava lahko vklopi (neizbrani dnevi se obarvajo rdeče) Gumb Apply prenos izbranih podatkov na napravo in izhod iz okna Gumb Exit izhod iz okna brez prenosa podatkov na napravo 39

Nastavljanje urnikov delovanja: Urnike se v uporabniškem vmesniku nastavlja s pomočjo bloka Configurable schedule (prikazan na sliki 33), v programu PoBlocks. Slika 33: Blok Configurable schedule (vir: program PoBlocks) Za nastavljanje pravil moramo bloku preko skupne rabe podati ukaz, sestavljen iz 32 bitov. V uporabniškem priročniku programa sem našel pravilno zaporedje bitov in na podlagi tega zasnoval programsko kodo. Biti 0-5: minute ob vklopu Biti 6-10: ure ob vklopu Biti 11-16: minute ob izklopu Biti 17-21: ure ob izklopu Biti 22-28: dnevi v tednu Biti 29-31: neuporabljeni Primer: Če želimo, da se naša naprava vklopi vsak delovni dan ob 12:30 in izklopi ob 16:45, ukaz izgleda takole. Dec Bin 12 01100 30 011110 16 10000 45 101101 dnevi 0011111 Rešitev: 000 0011111 10000 101101 01100 011110 40

Koda za nastavljanje urnikov Za nastavljanje časov vklopa in izklopa sem uporabil štiri kombinirana polja (2 za ure, 2 za minute). Dneve v tednu si uporabnik izbere s pomočjo gumbov, ki se ob kliku nanje obarvajo rdeče, če niso na urniku, ali zeleno, če so. Koda za menjavo barve gumbov pri izbiranju dni: private void button7_click(object sender, EventArgs e) //ob kliku { if (button7.backcolor == System.Drawing.Color.Red) // če je barva gumba rdeča { button7.backcolor = System.Drawing.Color.LightGreen; // obarvaj zeleno } else { button7.backcolor = System.Drawing.Color.Red; // drugače obarvaj rdeče } } Koda, ki generira bite 22-28: if (button1.backcolor == System.Drawing.Color.Red) //če je gumb rdeč mon = 0; // ponedeljek je vrednost 0 else // drugače mon = 1; // ponedeljek je vrednost 1 if (button2.backcolor == System.Drawing.Color.Red) tue = 0 << 1; else tue = 1 << 1; if (button3.backcolor == System.Drawing.Color.Red) wed = 0 << 2; else wed = 1 << 2; if (button4.backcolor == System.Drawing.Color.Red) thu = 0 << 3; else thu = 1 << 3; if (button5.backcolor == System.Drawing.Color.Red) fri = 0 << 4; else fri = 1 << 4; if (button6.backcolor == System.Drawing.Color.Red) sat = 0 << 5; else sat = 1 << 5; if (button7.backcolor == System.Drawing.Color.Red) sun = 0 << 6; else sun = 1 << 6; 41

Koda, ki generira vrednost za nastavitev urnika: int temp, on, off; // deklaracija spremenljivk int onmin = int.parse(combobox2.text); // pridobi vrednosti iz polja int onhour = int.parse(combobox1.text); int offmin = int.parse(combobox4.text); int offhour = int.parse(combobox3.text); int days = mon + tue + wed + thu + fri + sat + sun; //sešteje dneve on = ((onhour & 0x1F) << 6) + (onmin & 0x3F); // postopoma primerja z maskami off = ((offhour & 0x1F) << 6) + (offmin & 0x3F); temp = ((days & 0x7F) << 22) + (off << 11) + on; // vse vrednosti združi v celoto 4.1.2.3 Grafični prikaz trenutnih vrednosti Zadnji razdelek uporabniškega vmesnika je namenjen grafičnemu prikazu podatkov (prikaz primera na sliki 34). Ves čas, ko je program zagnan, se izrisujejo štirje, eden od drugega neodvisni grafi (vsak za svoj proces). Trenutno prikazan graf je odvisen od izbire v izbirnem meniju. Slika 34: Grafični prikaz vrednosti 42

Koda za izris grafov Vrednosti se na grafu izrisujejo v dveh fazah: Prva faza 60 minut od pričetka programa V prvi fazi se vrednosti senzorjev izrisujejo na grafu vsako minuto in vsakih 15 minut se v seznam sensors zapiše vrednost posameznega senzorja. Druga faza 60 minut po pričetku programa V drugi fazi se trenutni graf izbriše in se nariše nov graf s 15 minutnimi vrednostmi iz seznama sensors. Prav tako se novi podatki vnašajo vsakih 15 minut. Spodaj je zapisana celotna programska koda za grafični prikaz podatkov. List<string> sensors = new List<string>(); // deklaracija novega seznama int stevec=0; private void timer1_tick(object sender, EventArgs e) { if((datetime.now.minute == 0 DateTime.Now.Minute == 15 DateTime.Now.Minute == 30 DateTime.Now.Minute == 45) && stevec < 4 && DateTime.Now.Second == 0 && stevec < 5) // ko je števec manjši od 4 vsakih 15 min dodamo vrednosti senzorjev in trenuten čas v seznam sensors ter povečamo števec za 1 { sensors.add(convert.tostring(poildata[2])); sensors.add(convert.tostring(poildata[6])); sensors.add(convert.tostring(poildata[10])); sensors.add(convert.tostring(poildata[14])); sensors.add(datetime.now.toshorttimestring()); stevec += 1; } if (DateTime.Now.Minute % 1 == 0 && DateTime.Now.Second == 0 && stevec < 4) { this.chart1.series["brightness"].points.addxy(datetime.now.toshorttimestring(), PoILdata[2]); this.chart1.series["temperature"].points.addxy(datetime.now.toshorttimestring(), PoILdata[6]); this.chart1.series["air Humidity"].Points.AddXY(DateTime.Now.ToShortTimeString(), PoILdata[10]); this.chart1.series["soil Humidity"].Points.AddXY(DateTime.Now.ToShortTimeString(), PoILdata[14]); // ko je števec manjši od 4, posodobimo graf vsako minuto } if (stevec == 4) { this.chart1.series["brightness"].points.clear(); this.chart1.series["temperature"].points.clear(); this.chart1.series["air Humidity"].Points.Clear(); 43

this.chart1.series["soil Humidity"].Points.Clear(); } for (int a = 0; 0 <= 15; a += 5) { this.chart1.series["brightness"].points.addxy(a,a+4); this.chart1.series["temperature"].points.addxy(a+1, a + 4); this.chart1.series["air Humidity"].Points.AddXY(a+2, a + 4); this.chart1.series["soil Humidity"].Points.AddXY(a+3, a + 4); } // ko je stevec enak 4, izbrišemo graf in vanj vnesemo 15 minutne vrednosti if ((DateTime.Now.Minute == 0 DateTime.Now.Minute == 15 DateTime.Now.Minute == 30 DateTime.Now.Minute == 45) && stevec < 4 && DateTime.Now.Second == 0 && stevec == 5) { this.chart1.series["brightness"].points.addxy(datetime.now.toshorttimestring(), PoILdata[2]); this.chart1.series["temperature"].points.addxy(datetime.now.toshorttimestring(), PoILdata[6]); this.chart1.series["air Humidity"].Points.AddXY(DateTime.Now.ToShortTimeString(), PoILdata[10]); this.chart1.series["soil Humidity"].Points.AddXY(DateTime.Now.ToShortTimeString(), PoILdata[14]); // ko je števec enak 5 vnašamo nove vrednosti vsakih 15min } if (this.chart1.series["brightness"].points.count > 100) { this.chart1.series["brightness"].points.removeat(0); } if (this.chart1.series["temperature"].points.count > 100) { this.chart1.series["temperature"].points.removeat(0); } if (this.chart1.series["air Humidity"].Points.Count > 100) { this.chart1.series["air Humidity"].Points.RemoveAt(0); } if (this.chart1.series["soil Humidity"].Points.Count > 100) { this.chart1.series["soil Humidity"].Points.RemoveAt(0); } // ko dosežemo 100 vnosov najstarejšega izbrišemo in dodamo novega var chartarea = chart1.chartareas["brightness"]; chartarea.recalculateaxesscale(); chartarea.axisy.isstartedfromzero = false; } label3.text = (String)(PoILdata[2] + " lx"); label4.text = (String)((PoILdata[6] / 100.00) + " C"); label5.text = (String)((PoILdata[10] / 100.00) + " %"); label6.text = (String)((PoILdata[14] / 1.00) + " %"); 44

Koda za izvoz podatkov v tekstovno datoteko Program vrednosti senzorjev izpisuje v tekstovno datoteko. Te podatke lahko uporabimo za natančnejšo analizo delovanja oz. izris podatkov iz daljšega obdobja. public static void ToText(string addtext) { string path = @"C:\Users\robert\Desktop\c#\PoIL_Access_Example\Log.txt"; // naslov, kjer se nahaja datoteka if (!File.Exists(path)) // če datoteka ne obstaja { using (StreamWriter sw = File.CreateText(path)) //jo ustvari na podanem naslovu { sw.writeline("greenhouse sensor readings:"); // prva vrstica v datoteki } } using (StreamWriter sw = File.AppendText(path)) // če datoteka obstaja { sw.writeline(addtext); / doda tekst } } private void timer1_tick(object sender, EventArgs e) { time += 1; if (time % 600 == 0) // vsake 15 minut, dopiše trenutne vrednosti senzorjev { ToText(DateTime.Now + ": " + Convert.ToString(PoILdata[2]) + " lx " + Convert.ToString(PoILdata[6] / 100) + " C " + Convert.ToString(PoILdata[10] / 100.00) + " % " + Convert.ToString(PoILdata[14]) + " %."); } } 45

5 Zaključek Cilj mojega diplomskega dela je bil predstavitev avtomatizacije rastlinjaka ter vsega potrebnega dela in opreme. Diplomsko delo sem razdelil na pet poglavij. V uvodnem delu sem na splošno opisal, zakaj sem se odločil za avtomatizacijo rastlinjaka in na kratko predstavil svojo idejo. V drugem delu sem opisal vse komponente, ki jih vsebuje avtomatizirani sistem. V tretjem delu sem opisal programsko opremo. V četrtem delu sem prikazal kako sem napravo sestavil, v zadnjem poglavju pa sem podal sklepne ugotovitve. Pri sami izvedbi sem naletel na kar nekaj težav, predvsem s področja programiranja uporabniškega vmesnika. Razlog za to je, da sem novinec v programskem jeziku C# in sem zato skoraj vsako novost iskal v ustrezni literaturi. Programiranje v programih PoKeys in PoBlocks mi ni povzročalo prevelikih težav, saj sta programa namenjena širšemu krogu uporabnikov, tudi tistim, ki niso vešči programiranja. Samo sestavljanje naprave tudi ni bilo preveč zahtevno, saj sem veliko znanja pridobil pri podjetju Testing d.o.o., kjer sem opravljal obvezno prakso. Naprava ima še veliko možnosti za nadgradnjo. Najpomembnejša bi bila uporaba vodotesnih komponent, ki bi bile nujne za delovanje v odprtih prostorih. Ostale ideje za nadgradnjo so: uporaba uporabniškega vmesnika na pametnem telefonu, vgradnja večjega števila senzorjev, zbiralnik deževnice, vodenje rastlinjaka preko spletne strani,... Rezultat diplomskega dela je delujoč sistem za nadzor in vodenje rastlinjaka. Naprava je po več dnevih testiranj na domačem vrtu delovala stabilno in zanesljivo. Nenazadnje se naprava lahko pohvali z nizko ceno, visoko kakovostjo in velikim številom funkcij, kar so glavne lastnosti, ki potrošnika prepričajo v nakup. Zato menim, da ima visok komercialni potencial. 46

Literatura [1] Krmilnik PoKeys. Dostopno na: http://www.poscope.com/pokeys57e [dostopano 10. 10. 2014]. [2] Relejsko vezje PoExtBus. Dostopno na: http://www.poscope.com/poextbusre [dostopano 10. 10. 2014]. [3] Senzor zemeljske vlažnosti Vegetronix. Dostopno na: http://vegetronix.com/products/vh400/ [dostopano 10. 10. 2014]. [4] Vrtna ura ID tools. Dostopno na: http://www.ceneje.si/izdelek/2875661/dom-in-vrt/vrtna-in-delovna-oprema-ternaprave/oprema-za-vrt-in-okolico/id-tools-digitalna-ura-vuvd [dostopano 10. 10. 2014]. [5] Delovanje elektromagnetnega ventila. Dostopno na: http://www.solenoid-valve-info.com/solenoid-valve-basics.html [dostopano 10. 10. 2014]. [6] Delovanje elektromagnetnega ventila. Dostopno na: http://en.wikipedia.org/wiki/solenoid_valve [dostopano 10. 10. 2014]. [7] Senzor svetlosti BH1750. Dostopno na: http://www.elechouse.com/elechouse/images/product/digital%20light%20sensor/bh1750fvie.pdf [dostopano 10. 10. 2014]. [8] Senzor temperature LM75. Dostopno na: http://datasheets.maximintegrated.com/en/ds/lm75.pdf [dostopano 10. 10. 2014]. [9] Senzor zračne vlažnosti SHT21. Dostopno na: http://www.sensirion.com/fileadmin/user_upload/customers/sensirion/dokumente/humidity/s ensirion_humidity_sht21_datasheet_v4.pdf [dostopano 10. 10. 2014]. [10] Kalorifer ISKRA NSB-200A. Dostopno na: http://www.ceneje.si/izdelek/2421403/dom-in-vrt/ogrevalno-hladilna-telesa/kaloriferji/iskraelektricni-kalorifer-nsb-200a [dostopano 10. 10. 2014]. 47

Kazalo slik Slika 1: Krmilnik PoKeys57E... - 3 - Slika 2: Relejsko vezje PoExtBus... - 4 - Slika 3: Senzor Vegetronix VH400... - 5 - Slika 4: Senzorsko vezje PoSensors... - 7 - Slika 5: Zgradba elektromagnetnega ventila... - 8 - Slika 6: ID Tools vrna ura... - 9 - Slika 7: Elektromagnetni ventil izločen iz ID Tools vrtne ure... - 9 - Slika 8: Uporabniški vmesnik programa PoKeys... - 12 - Slika 9: Nastavitve senzorjev... - 13 - Slika 10: Zavihek»IO«... - 14 - Slika 11: Zavihek»Algebra«... - 14 - Slika 12: Zavihek»Logic«... - 15 - Slika 13: Zavihek»Memory«... - 15 - Slika 14:Zavihek»Trigger and timing«... - 15 - Slika 15: Krmiljenje osvetljenosti... - 17 - Slika 16: Krmiljenje ogrevanja... - 19 - Slika 17: Krmiljenje prezračevanja... - 21 - Slika 18: Krmiljenje zalivanja... - 22 - Slika 19: Vezava EM ventila... - 23 - Slika 20: Zunanji del naprave... - 24 - Slika 21: Notranji del naprave... - 25 - Slika 22: Zamenji z ustrezno da bo cajt taprav... - 27 - Slika 23: Okno za vzpostavitev povezave z računalnikom... - 27 - Slika 24: Okno s trenutnimi vrednostimi senzorjev... - 28 - Slika 25: Avtomatske/ročne nastavitve... - 31 - Slika 26: Izgled uporabniškega vmesnika primer 1... - 32 - Slika 27: Izgled uporabniškega vmesnika primer 2... - 32 - Slika 28: Izgled uporabniškega vmesnika primer 3... - 33 - Slika 29: Nastavitve avtomatskega načina vodenja... - 34 - Slika 30: Blok Configurable schedule... - 35 - Slika 31: Tretji razdelek grafični prikaz vrednosti... - 38-48

Priloge Priloga 1: Tehnični list za senzor BH 1750 http://www.elechouse.com/elechouse/images/product/digital%20light%20sensor/bh1750fvie.pdf Priloga 2: Tehnični list za senzor LM75 http://datasheets.maximintegrated.com/en/ds/lm75.pdf Priloga 3: Tehnični list za senzor SHT21 http://www.sensirion.com/fileadmin/user_upload/customers/sensirion/dokumente/humidity/s ensirion_humidity_sht21_datasheet_v4.pdf Priloga 4: Električna shema naprave 49