KRMILJENJE MIKROKRMILNIŠKEGA MODULA ARDUINO IN NJEGOVA UPORABA PRI KOMUNIKACIJI Z OSTALIMI NAPRAVAMI

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "KRMILJENJE MIKROKRMILNIŠKEGA MODULA ARDUINO IN NJEGOVA UPORABA PRI KOMUNIKACIJI Z OSTALIMI NAPRAVAMI"

Transcript

1 Matej Ekart KRMILJENJE MIKROKRMILNIŠKEGA MODULA ARDUINO IN NJEGOVA UPORABA PRI KOMUNIKACIJI Z OSTALIMI NAPRAVAMI Diplomsko delo Maribor, december 2012

2

3 I Diplomsko delo univerzitetnega študijskega programa Računalništvo in informatika KRMILJENJE MIKROKRMILNIŠKEGA MODULA ARDUINO IN NJEGOVA UPORABA PRI KOMUNIKACIJI Z OSTALIMI NAPRAVAMI Študent Študijski program Smer Mentor Matej Ekart UN ŠP Računalništvo in informatika Informatika red. prof. dr. Matjaž Colnarič, univ. dipl. inž. el. Maribor, december 2012

4 II

5 III

6 IV

7 V ZAHVALA Zahvaljujem se svoji družini, ki mi je stala ob strani ter mi omogočala brezskrben študij in nepozabna študentska leta. Zahvaljujem se mentorju, dr. Matjažu Colnariču za strokovno pomoč in napotke pri izdelavi diplomskega dela. Hvala vsem sošolcem za neštete trenutke, ki smo jih doživeli skupaj.

8 VI

9 VII KRMILJENJE MIKROKRMILNIŠKEGA MODULA ARDUINO IN NJEGOVA UPORABA PRI KOMUNIKACIJI Z OSTALIMI NAPRAVAMI Ključne besede: Arduino, mikrokrmilnik, vgrajeni sistemi, senzor vlažnosti zemlje, zalivalni sistem, bluetooth UDK: :521.7(043.2) Povzetek V diplomskem delu smo obravnavali mikrokrmilniški modul Arduino. Opisali smo strojno opremo modela Uno, ki ga uporabljamo v praktičnem delu, ter predstavili osnovne karakteristike ostalih modelov. V nadaljevanju smo spoznali odprtokodno razvojno okolje Arduino in Arduino programski jezik. V praktičnem delu smo preverili, kako se odprtokodna platforma Arduino izkaže v praksi. Razvili smo avtomatski sistem za samodejno zalivanje, pri čemer smo uporabili številne dodatne komponente, ki smo jih tudi predstavili. Prav tako smo izdelali lasten senzor vlažnosti zemlje, ki nam pomaga pri odločanju. Posamezne korake razvoja smo podrobno opisali in razložili vezalno shemo elementov.

10 VIII

11 IX CONTROL OF MICROCONTROLLER MODULE ARDUINO AND ITS APPLICATION IN COMMUNICATION WITH PERIPHERAL UNITS Key words: Arduino, microcontroller, embedded systems, soil moisture sensor, watering system, bluetooth UDK: :521.7(043.2) Abstract The thesis focuses on a microcontroller module Arduino. We describe the hardware of Arduino Uno model that is used in the practical part of the thesis and we also show some characteristics of other Arduino modules. Afterwards we introduce Arduino open source development environment and Arduino programming language. In practical part we examine how Arduino open source platform can be used in real projects. We develop an automatic system for plant watering with many different components. To measure moisture we create our own soil moisture sensor which is used in the system. Each developing step is described well and includes a wiring diagram.

12 X

13 XI VSEBINA 1 Uvod Predstavitev mikrokrmilniškega modula Arduino Nastanek in razvoj Strojna oprema modula Osnovni podatki modela Uno Pomnilniški prostor Napajanje Priključki Digitalni priključki Analogni priključki Napajalni priključki Ostali priključki Različice Arduino modula Arduino Mega Arduino LilyPad Arduino Mini Arduino Nano Arduino Due Dodatki za Arduino modul Programsko okolje Arduino razvojno okolje Vzpostavitev okolja Osnovne funkcionalnosti Monitor serijske povezave Arduino programski jezik Pravilna struktura programa Osnovne funkcije in konstante Knjižnice Izpisovanje informacij Prevajanje programov... 33

14 XII Več datotečni program Proces tvorbe programa Razvoj avtomatiziranega zalivanja Cilj projekta Delovanje avtomatike Komunikacija z uporabnikom Uporabljene komponente Razvoj realno časovne ure Razvoj senzorja vlage Implementacija avtomatike zalivanja Razvoj temperaturnega senzorja Uporaba LCD zaslona Razvoj bluetooth komunikacije Glavna datoteka programa Vezalna shema Testiranje sistema Beleženje delovanja sistema Zaključek Viri... 79

15 XIII KAZALO SLIK Slika 2.1: Primer izdelanega modula Arduino... 4 Slika 2.2: Prvi prototip plošče narejen leta Slika 2.3: Arduino logotip... 7 Slika 2.4: Člani jedra Arduino ekipe leta Slika 3.1: Model Arduino Uno s priključki s prednje strani Slika 3.2: Arduino Mega Slika 3.3: Arduino LilyPad Slika 3.4: Arduino Mini Slika 3.5: Arduino Nano Slika 3.6: Arduino Due Slika 3.7: Arduino vmesnik z brezžičnim internetom ter režo za SD kartico Slika 4.1: Različice Arduino modulov, ki jih Arduino razvojno okolje podpira Slika 4.2: Arduino razvojno okolje Slika 4.3: Monitor serijske povezave Slika 5.1: DS1307 RTC modul Slika 5.2: Vezalna shema senzorja vlažnosti zemlje Slika 5.3: DS18B20 temperaturni senzor Slika 5.4: Vezalna shema temperaturnega senzorja Slika 5.5: LCD zaslon WH1602B Slika 5.6: BT modul JY-MCU Slika 5.7: Vezalna shema BT modula Slika 5.8: Vezalna shema elementov Slika 5.9: Arduino vmesnik s podporo za internet in micro SD kartice... 74

16 XIV KAZALO TABEL Tabela 3.1: Tehnične karakteristike modela Uno Tabela 3.2: Specifikacije modela Arduino Mega Tabela 3.3: Specifikacije modela Ardino LilyPad Tabela 3.4: Specifikacije modela Arduino Mini Tabela 3.5: Specifikacije modela Arduino Nano Tabela 3.6: Specifikacije modela Arduino Due Tabela 5.1: Vezava priključkov LCD zaslona Tabela 5.2: Definicija kode znaka za stopinjo KAZALO DIAGRAMOV Diagram 5.1: Diagram komunikacije komponent... 38

17 XV KAZALO IZVORNE KODE Izvorna koda 3.1: Shranjevanje teksta v pomnilnik Izvorna koda 4.1: Uporaba serijske komunikacije Izvorna koda 5.1: Definicija razreda Ura Izvorna koda 5.2: Implementacija ure Izvorna koda 5.3: Inicializacija ure v glavni datoteki programa Izvorna koda 5.4: Definicija razreda SenzorVlaznostiZemlje Izvorna koda 5.5: Preverjanje pogojev za izvajanje merjenja vlažnosti Izvorna koda 5.6: Koraki merjenja vlažnosti Izvorna koda 5.7: Priključevanje in branje napetosti senzorja Izvorna koda 5.8: Učenje in računanje vlažnosti Izvorna koda 5.9: Definicija razreda Avtomatika (1. del) Izvorna koda 5.10: Definicija razreda Avtomatika (2. del) Izvorna koda 5.11: Preverjanje stanja zalivanja Izvorna koda 5.12: Preverjanje pogojev za vklop zalivanja Izvorna koda 5.13: Preverjanje pogojev za izklop zalivanja Izvorna koda 5.14: Varnostno preverjanje vlažnosti Izvorna koda 5.15: Vklop in izklop učenja avtomatike Izvorna koda 5.16: Implementacija temperaturnega senzorja Izvorna koda 5.17: Inicializacija LCD zaslona Izvorna koda 5.18: Izpis podatkov na LCD zaslon Izvorna koda 5.19: Uporaba knjižnice MeetAndroid Izvorna koda 5.20: Obdelava prejetih podatkov preko BT modula Izvorna koda 5.21: Dopolnitev MeetAndroid knjižnice Izvorna koda 5.22: Pošiljanje informacij o stanju sistema Izvorna koda 5.23: Glavna datoteka programa Izvorna koda 5.24: Preverjanje količine prostega pomnilnika Izvorna koda 5.25: Pisanje na SD kartico... 75

18 XVI SEZNAM UPORABLJENIH KRATIC ADK AREF BASIC BT EEPROM GCC DAC DC GPIO I 2 C ICSP IDE IOREF LCD LED MIT OS RTC SCL SD SDA SPI SRAM UART Accessory Development Kit Analog Reference Beginner's All-purpose Symbolic Instruction Code Bluetooth Electrically Erasable Programmable Read-Only Memory GNU Compiler Collection Digital-to-Analog Converter Direct Current General Purpose Input/Output Inter-Integrated Circuit In Circuit Serial Programming Integrated Development Environment Input/Output Reference Liquid Crystal Display Light-Emitting Diode Massachusetts Institute of Technology Operacijski Sistem Real Time Clock Serial Clock Secure Digital Serial Data Signal Serial Peripheral Interface Static Random-Access Memory Universal Asynchronous Receiver/Transmitter

19 XVII USB V/I VIN Universal Serial Bus Vhod/Izhod Input Voltage

20

21 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 1 1 UVOD V zadnjem času Arduino platforma vedno bolj pridobiva na priljubljenosti. Več različnih vrst modelov ter odprtokodna zasnova nam omogoča številne možnosti uporabe. Veliko število projektov, ki so nastali zaradi enostavnosti uporabe in nizkih stroškov investicije, odpirajo številne možnosti uporabe Arduino modulov. Uporabimo jih lahko namreč za enostavnejša opravila, kot je na primer krmiljenje določene naprave, ali pa se lotimo izdelave kompleksnega sistema, ki temelji na komunikaciji med številnimi napravami [1] [2] [3]. Da bi lahko prikazali praktično uporabo Arduino modula, se bomo lotili projekta za avtomatizirano zalivanje rož. Uporabili bomo Arduino Uno model, s katerim bomo izvajali razne meritve, krmilili naprave ter komunicirali s telefonom. Na ta način bomo ustvarili sistem, ki bo samodejno izvajal zalivanje glede na pogoje, ki mu jih bomo določili. Celoten razvoj rešitve bomo poskusili čim bolje opisati ter podati znanje, ki ga bomo pridobili. V poglavju ki sledi, se bomo najprej posvetili nastanku in razvoju mikrokrmilniškega modula Arduino. Predstavili bomo zgodovino modula, kako je nastal ter kateri so bili glavni dejavniki, ki so vplivali na razvoj. Omenili bomo tudi ekipo, ki stoji za celotnim projektom. Tretje poglavje je namenjeno predstavitvi strojne opreme Arduino modula. Osredotočili se bomo predvsem na model Uno, ki ga uporabljamo v tem diplomskem delu. Opisali bomo posamezne priključke in komponente, ki jih uporablja. Ker je na trgu na voljo več različnih modelov, bomo nekaj izmed teh tudi predstavili. Prikazali bomo karakteristike posameznih modulov, kot so na primer količina pomnilnika, delovna napetost, število priključkov ter določene posebnosti. V četrtem poglavju se bomo osredotočili na programsko opremo. Predstavili bomo Arduino razvojno okolje z vsemi funkcionalnostmi ter opisali postopek vzpostavitve okolja. Nato bomo pozornost posvetili Arduino programskemu jeziku, saj bomo predstavili strukturo jezika, najbolj pogoste funkcije ter razložili proces prevajanja programov.

22 Stran 2 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Peto poglavje bomo izkoristili za opis projekta izdelave avtomatike za zalivanje rož. Najprej bomo predstavili, kako avtomatika deluje in katere komponente uporablja. Posvetili se bomo vsakemu koraku razvoja posebej ter omenili težave, na katere smo naleteli. Opisali bomo delovanje posameznih komponent, pri čemer bomo predstavili vse elemente in naprave, ki so uporabljene v strojni opremi. Razložili bomo celotno vezalno shemo ter kako je izvedena implementacija delovanja avtomatike.

23 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 3 2 PREDSTAVITEV MIKROKRMILNIŠKEGA MODULA ARDUINO Arduino je odprtokodna prototipna platforma, ki temelji na fleksibilni in enostavni uporabi strojne ter programske opreme. Namenjena je umetnikom, hobi navdušencem in vsem, ki jih zanima ustvarjanje interaktivnih objektov ter okolij [4]. Ti tipi uporabnikov so na uradni spletni strani Arduino ekipe napisani namenoma. Arduino platforma je namreč nastala ravno z razlogom, da lahko naprave enostavno povezujejo in upravljajo tudi tisti brez znanja o strojni in programski opremi mikrokrmilnikov [5]. Arduino projekti so lahko samostojni ali pa komunicirajo z ostalo programsko opremo v različnih programskih jezikih, ki se izvaja na drugih napravah. Mikrokrmilnik na plošči se programira v Arduino programskem jeziku, kateri je implementacija Wiring jezika, ki temelji na Processing programskem okolju. Arduino modul nam tako omogoča zaznavanje zunanjega sveta preko vhodov s pomočjo različnih senzorjev in se preko izhodov nanj tudi odzvati. Kot je na primer kontroliranje luči, motorja in ostalih naprav [6]. Srce strojne opreme predstavlja Atmelov ATMEGA mikrokrmilnik. Vhodi in izhodi (v nadaljevanju V/I) na modulu so analogni ter digitalni. Število teh in tip mikrokrmilnika pa se razlikuje med različnimi modeli Arduino modula. Večina modelov vsebuje USB (angl. Universal Serial Bus) priključek za napajanje ter nalaganje programske kode z ustreznim razvojnim okoljem. Na voljo imamo uradno razvojno okolje, ki je brezplačno in na voljo za Windows, Linux in Mac OS X operacijske sisteme (v nadaljevanju OS). Lahko pa izberemo tudi katero drugo okolje (Visual Studio, Eclipse, ), ki ga je potrebno dodatno prilagoditi [6] [7] [8]. Mikrokrmilniški modul Arduino lahko kupimo že sestavljen ali pa si ga sestavimo sami (Slika 2.1 [9]), saj je celotna strojna in programska oprema pod odprtokodno licenco. Zaradi tega lahko na trgu najdemo veliko različic tega modula, ki niso prišle iz proizvodnih linij uradnih tovarn v Italiji in Združenih državah Amerike [10].

24 Stran 4 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Slika 2.1: Primer izdelanega modula Arduino Edina omejitev pri prodaji neuradnih plošč je v uporabi imena. Prepovedano je uporabljati besedo»arduino«, ki je blagovna znamka Arduino ekipe. Je pa dovoljena uporaba pripone»duino«ali katerokoli drugo ime. Spodaj lahko vidimo primere prepovedane in dovoljene uporabe besede»arduino«, pri čemer»xxxxxx«predstavlja besedno zvezo v imenu [10]. Prepovedana oblika uporabe besede: Arduino Xxxxxx Xxxxxx Arduino Arduino kompatibilen Xxxxxx Dovoljena oblika uporabe besede: Xxxxxx za Arduino Xxxxxx (Arduino kompatibilen) 2.1 Nastanek in razvoj Mikrokrmilniški modul Arduino je nastal zaradi težavnega izziva, kako čim hitreje naučiti študente, da se bodo lahko lotili ustvarjanja projektov z elektroniko. Pisalo se je leto 2002, ko se je programski inženir Massimo Banzi kot izredni profesor zaposlil na Interakcijskem dizajnerskem inštitutu Ivrea v Italiji. Kot pri večini njegovih kolegov, je tudi njegovo poučevanje temeljilo na mikrokrmilniku BASIC Stamp. Tega je razvilo podjetje Parallax iz

25 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 5 Kalifornije in se ga programira v programskem jeziku BASIC 1. Ampak Banzija sta pri tem mikrokrmilniku motili dve lastnosti: imel je premalo računske moči za projekte, ki so jih želeli izvesti njegovi študentje, in bil je malo predrag. Potreboval je nekaj, kar bi bilo mogoče programirati tudi na Macintosh računalnikih, ki so bili na inštitutu zelo priljubljeni. Zato je prišel do ideje, zakaj ne bi naredili lastne mikrokrmilniške ploščice, ki bi ustrezala njihovim željam [11]. V tistem času je sunkovito pridobival na popularnosti odprtokodni programski jezik Processing, saj je omogočal kompleksne vizualizacije podatkov tudi neizkušenim programerjem. Razvila sta ga Casey Roas in Benjamin Fry iz MIT (Massachusetts Institute of Technology) leta Temelji na Java programskem jeziku, ampak uporablja enostavnejšo sintakso. Programi napisani v Processing programskem jeziku se prevedejo v Java jezik in se izvajajo kot Java aplikacije. Eden izmed glavnih razlogov za izjemen uspeh je bilo tudi izredno enostavno okolje za razvoj (angl. Integrated development environment ali IDE) [11] [12]. Banzi se je spraševal, če bi lahko razvili podobno orodje za programiranje mikrokrmilnikov namesto grafike na zaslonu. Njegov študent Hernando Barragán je naredil prvi korak v tej smeri. Razvil je prototipno platformo imenovano Wiring z uporabniku prijaznim IDE in tiskano vezje (angl. Circuit board) pripravljeno za uporabo. Klub temu je Banzi želel še več, želel je platformo, ki bi bila preprostejša, cenejša in še enostavnejša za uporabo. Eno izmed prvih razvojnih različic lahko vidimo na Slika 2.2 [11]. 1 kratica za Beginner's All-purpose Symbolic Instruction Code - jezik za začetnike, ki je bil razvit leta 1963 [79].

26 Stran 6 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Slika 2.2: Prvi prototip plošče narejen leta 2005 Skupaj z ostalimi kolaboranti je verjel v odprtokodno programsko opremo. Glede na to, da je bil njihov cilj ustvariti enostavno platformo, so se odločili, da je bolje omogočiti vpogled v projekt širši javnosti, kot pa ga pred njo skrivati. Odprtokodni model se je že dolgo časa uporabljal za poganjanje inovacij v programski opremi, ampak ne za strojno opremo. Da bi lahko uporabljali odprtokodno licenco, so se morali domisliti rešitve, kako licencirati njihovo ploščo. Do rešitve so prišli z drugačnim pogledom na projekt. Uporabili so licenco neprofitne skupine Creative Commons, katere sporazumi se večinoma uporabljajo za kulturna dela, kot so glasba in knjige. Banzi je dejal:»strojno opremo si lahko predstavljaš kot del kulture, ki jo želiš deliti z ostalimi ljudmi.«[11] Za izdelavo plošče je imela skupina za cilj študentom prijazno ceno, ki bi bila nekaj čez 20. Želeli so tudi, da bi izgledala malce čudaško in bi s tem izstopala ter imela atraktiven videz. Če so bile ostale plošče po navadi zelene, so njihovo odločili narediti modro. Kot dodatek so na zadnjo stran ploščice dodali tudi zemljevid Italije, od koder Arduino izvira. Izdelek ki ga je ekipa ustvarila, je bil sestavljen iz poceni delov, katere je možno enostavno pridobiti, če bi si uporabniki želeli ploščo sestaviti sami [11]. Ena izmed pomembnejših odločitev je bilo zagotovilo, da bo naprava omogočala»vklopi in poženi«(angl. Plug and Play). Uporabnik bi napravo vzel iz škatle, jo priključil na računalnik in jo lahko nemudoma pričel uporabljati. Član ekipe David Cuartielles je dejal:

27 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 7»Filozofija v ozadju Arduino platforme je: če se želiš naučiti elektronike, se jo moraš začeti učiti z dnem ko začneš, namesto da najprej začneš z učenjem algebre.«[11] To njihovo filozofijo so kmalu preizkusili na študentih. Pripravili so 300 tiskanih vezij ter jim dali nalogo, naj na spletu pogledajo navodila za sestavljanje, izdelajo svojo ploščo in jo uporabijo za nek projekt. Eden izmed prvih takšnih projektov je bila doma narejena budilka, ki je visela s stropa. Vsakič ko si na budilki pritisnil gumb za dremež, se je ta premaknila nekoliko višje v zrak, dokler ni prišla tako visoko, da si se bil prisiljen vstati s postelje [11]. Kmalu je zanimanje po tej platformi pokazalo še več ljudi in projekt je bil pripravljen na lansiranje, ampak manjkala je ena ključna komponenta: ime. Tako so nekega večera v lokalnem baru prišli do ideje, da projekt poimenujejo po lokalu in zgodovinski osebnosti tega mesta. Arduino iz mesta Ivrea ( ) je bil v letih od 1002 do 1014 kralj Italije, njegovo ime Arduino pa v italijanščini pomeni»močan prijatelj«. Nazivu so nato dodali še razpoznaven logotip (Slika 2.3 [4]), ki krasi vse Arduino produkte [11] [13] [14]. Slika 2.3: Arduino logotip Vest o Arduinu se je po internetu hitro razširila brez marketinga in oglaševanja. Tako je kmalu vzbudila zanimanje profesorja Toma Igoe na Univerzi v New Yorku in sedanjemu članu Arduino ekipe. Impresioniralo ga je predvsem dejstvo, da so s platformo Arduino predpostavljali, da nimaš znanja o elektroniki, niti o programiranju ter si pred pričetkom uporabe ne želiš konfigurirati celotnega sistema. Potrebno je samo priklopiti napravo, napisati enostaven program, ga naložiti na mikrokrmilniški modul in zadeva deluje [11]. Zahvalo za uspeh Arduino dolguje predhodno razvitemu programskemu jeziku Processing in platformi Wiring. Ta dva projekta sta mu dala eno najpomembnejših moči: uporabniku prijazno razvojno okolje. Pred prihodom Arduina je programiranje mikrokrmilnikov zahtevalo težaven proces učenja, sedaj pa lahko tudi ljudje brez izkušenj in znanja o

28 Stran 8 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami elektroniki pridobijo dostop do krmiljenja strojne opreme, kar je bilo še pred nedavnim zanje težko dostopno. Začetnikom se tako ni potrebno naučiti veliko novega, preden začnejo razvijati prototipe, ki dejansko delujejo [11]. Razvoj mikrokrmilniškega modula Arduino ni bil usmerjen samo v izboljšanje platforme, ampak so se posvetili tudi razvoju več različnih verzij modula. Tako lahko trenutno na trgu poleg najbolj priljubljenega Arduino Uno modela najdemo tudi močnejši modul Arduino Mega, kompaktno ploščico Arduino Nano ali recimo majhno prenosno in vodoodporno ploščico Arduino LilyPad. Podrobneje bomo te in še ostale modele predstavili v poglavju 3.5 [11] [7]. Arduino je dodaten zagon dobil leta 2011, ko je Google izdal Android ADK (Accessory Development Kit), s katerim lahko naprava z Android OS verzije ali več komunicira z Arduino modulom preko USB vmesnika. S primerno Android napravo lahko tako preko priključkov na mikrokrmilniškem modulu Arduino direktno krmilimo naprave. Z Android aplikacijo imamo tako možnost pripraviti uporabniku prijazen uporabniški vmesnik za naš poljuben Arduino projekt [11] [15]. Trenutno jedro Arduino ekipe šteje 5 članov, ki jih lahko vidimo na Slika 2.4 [11]. Od leve proti desni si sledijo: David Cuartielles iz Švedske, Gianluca Martino iz Italije, Tom Igoe ter David Mellis iz ZDA in Massimo Banzi iz Italije [11] [16]. Slika 2.4: Člani jedra Arduino ekipe leta 2012

29 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 9 3 STROJNA OPREMA MODULA Arduino modul je sestavljen iz več različnih komponent in priključkov. Predstavili bomo strojno opremo modela Arduino Uno, katerega smo uporabljali skozi celotno diplomsko delo. Glavne komponente so: mikrokrmilnik ATMEL ATmega328, 14 digitalnih V/I priključkov, 6 analognih vhodov, 16 MHz kristalni oscilator, USB priklop, gumb za resetiranje in priključek za napajanje preko enosmernega toka (angl. Direct Current ali DC) [17]. Ime»Uno«v italijanščini pomeni»ena«. Od svojih predhodnikov se modul razlikuje po tem, da ne uporablja FTDI-jevega čipa za pretvarjanje med USB in serijsko vezavo (angl. USB-to-serial converter). Namesto tega je dodan dodaten mikrokrmilnik Atmega16U2 oz. Atmega8U2, ki je programiran za pretvarjanje povezave. Trenutno je na tržišču tretja verzija tega modela z oznako»arduino Uno R3«. Tega bomo tudi opisali, čeprav smo mi uporabljali prvo različico. Razlika med njima ni velika. Spremembe so zgolj te [17]: Atmega16U2 mikrokrmilnik za USB povezavo zamenja prejšnjega Atmega8U2 močnejša RESET povezava dodana SDA (Serial Data Signal) in SCL (Serial Clock) priklopa zraven AREF (Analog Reference) priključka dodan IOREF (Input/Output Reference) in prazen priklop zraven RESET priključka spremenjena pozicija RESET gumba 3.1 Osnovni podatki modela Uno V Tabela 3.1 [17] [18] [19] bomo prikazali nekaj glavnih tehničnih podatkov modela Arduino Uno, ki so potrebni, da jih pri delu poznamo. Predvsem je pomembno vedeti podatke o napetosti in električnem toku ter velikosti pomnilnika, ki nam je na voljo. Pri

30 Stran 10 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami programiranju moramo biti namreč pazljivi, da med izvajanjem programa ne prekoračimo pomnilniškega prostora [17] [5]. Tabela 3.1: Tehnične karakteristike modela Uno Mikrokrmilnik Napajanje Operativna napetost Priporočljiva vhodna napetost Omejitve vhodne napetosti ATmega328 USB vhod ali zunanji vir 5 V 7-12 V 6-20 V Število digitalnih V/I 14 Število analognih vhodov 6 Tok v V/I priključkih Tok v 3.3 V priključku Flash spomin Velikost statičnega bralno-pisalnega pomnilnika (angl. Static Random Access Memory ali SRAM) Velikost električno izbrisljivega programabilno bralnega pomnilnika (angl. Electrically Erasable Programmable Read- Only Memory ali EEPROM) Hitrost ure Velikost 40 ma 50 ma 32 KB (ATmega328) od tega 0.5 KB zasede sistemski zaganjalnik (angl. Bootloader) 2 KB (ATmega328) 1 KB (ATmega 328) 16 MHz 68,6 mm x 53,3 mm

31 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran Pomnilniški prostor Pri pisanju programov za Arduino sisteme moramo biti pozorni na porabo pomnilnika, saj lahko pri prekoračitvi sistemskih virov pride do napak pri delovanju. Velikost spomina je odvisna od mikrokrmilnika, ki ga modul uporablja. Ta ima 3 vrste pomnilnikov [20]: flash: prostor, kjer je naložen Arduino program SRAM: prostor, kamor program shranjuje spremenljivke med izvajanjem EEPROM: prostor, kamor lahko uporabniki shranjujejo podatke za dlje časa Podatki shranjeni v flash in EEPROM pomnilniku so trajni, saj ostanejo tudi, ko zmanjka elektrike. SRAM pomnilnik pa se ob izpadu električne energije izbriše. Zavedati se je potrebno predvsem velikosti SRAM pomnilnika, saj ga lahko ob manjši nepazljivosti hitro presežemo. Mikrokrmilnik ATmega328 ga ima namreč zgolj 2048 B [17]. Na primer naslednji tekst v Izvorna koda 3.1, v pomnilniku SRAM zasede 100 B (vsak znak zasede 1 B). To morda ne zgleda veliko, vendar ne traja dolgo, da se zasede celoten prostor, sploh če uporabljamo veliko tekstov ali v tabele shranjujemo večje število podatkov [20]. char message[] = "Krmiljenje mikrokrmilniskega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami"; Izvorna koda 3.1: Shranjevanje teksta v pomnilnik Če nam zmanjka pomnilnika SRAM, lahko izvajanje programa spodleti na različne načine. Program se bo uspešno naložil na mikrokrmilnik, a se morda ne bo zagnal ali pa se bo začel čudno obnašati. Temu se lahko izognemo z različnimi pristopi [20]: Če Arduino modul komunicira z računalnikom ali katero drugo napravo, izvajajmo zahtevna preračunavanja na drugi napravi. Predvsem pri delu s tabelami uporabljamo podatkovne tipe, ki zasedejo čim manj prostora. Namesto tipa»int«, ki zasede 2 B, lahko večkrat uporabimo tip»byte«(shrani lahko manjše vrednosti), ki zasede 1 B. Če določenih podatkov ali tekstov ni potrebno spreminjati, jih lahko shranimo na flash pomnilnik, namesto na SRAM.

32 Stran 12 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami 3.3 Napajanje Arduino modul lahko napajamo preko USB priklopa ali preko zunanjega vira energije. Če imamo napravo hkrati priključeno na zunanje napajanje in USB, se samodejno izbere primeren vir. USB priklop ima za napajanje najnižjo prioriteto in se uporablja, kadar ni druge možnosti [17] [5]. Zunanji vir napajanja lahko prihaja iz adapterja ali iz baterije. Adapter je lahko na ploščo priklopljen z 2.1 mm centralno pozitivnim priključkom (angl. center-positive plug). Če se odločimo za napajanje preko baterije, moramo pozitiven vir priključiti na Vin, negativnega pa na Gnd priključek, ki se nahajata spodaj na ploščici med priklopi označenimi s POWER [17]. Plošča lahko deluje pri zunanji napetosti od 6 do 20 V. Če je napetost manjša od 7 V, lahko 5 V priključek na ploščici dostavlja manjšo napetost od petih voltov, kar lahko povzroči nestabilnost. Pri napajanju z več kot 12 V pa se lahko regulator napetosti pregreje in poškoduje Arduino modul. Priporočljiva napetost je tako med 7 in 12 V [17]. Arduino modul vsebuje na USB priklopu tudi posebno varovalko, ki varuje pred električnimi sunki ali preveliko napetostjo. Čeprav ima večina računalnikov lastno varovanje, je to kot dodatna zaščita. Če je električni tok preko USB povezave večji od 500 ma, varovalka prekine povezavo dokler ta ni spet varna [17]. 3.4 Priključki Na Arduino modulu je veliko priključkov. V tem odseku jih bomo predstavili in zapisali za kaj se namenjeni. Področno so na ploščici priključki ločeni na digitalne zgoraj, analogne spodaj desno, napajalne spodaj levo in ICSP (In Circuit Serial Programming) na desni strani. Navezovali se bomo na tiste, ki jih uporablja model Arduino Uno (Slika 3.1) [17].

33 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 13 Slika 3.1: Model Arduino Uno s priključki s prednje strani Digitalni priključki Vsak izmed digitalnih priključkov od 0 do 13 je lahko uporabljen kot vhod ali izhod. Delujejo pri napetosti 5 V in lahko zavzemajo vrednosti HIGH ali LOW. Vrednost HIGH ima takrat, kadar je napetost v bližini maksimalne vrednosti 5 V, vrednost LOW pa kadar je napetost v bližini 0 V. Vsak lahko sprejme ali oddaja električni tok maksimalne vrednosti 40 ma in ima vgrajen upor za dvig nivoja (angl. pull-up resistor) velikosti 20 do 50 KΩ, ki je privzeto izključen. Določeni priključki imajo poleg digitalnega vhoda in izhoda tudi druge funkcionalnosti [17] [21]: 0 RX in 1 TX: za sprejemanje (RX) in oddajanje (TX) serijskih podatkov. Ta dva priključka sta povezana z istoimenskima priključkoma na ATmega8U2 oz. ATmega16U2 mikrokrmilniku, ki skrbi za USB povezavo. 2 in 3: omogočata zunanjo prekinitev (angl. External interrupt). Lahko sta konfigurirana tako, da sprožita prekinitev (npr. ob LOW vrednosti, spremembi stanja, ). 3, 5, 6, 9, 10, 11: omogočajo pulzno širinsko modulacijo (angl. Pulse Width Modulation ali PWM) pri frekvenci 490 Hz. 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK): ti priključki omogočajo komunikacijo preko serijskega sinhronskega vmesnika (angl. Serial Peripheral Interface ali SPI).

34 Stran 14 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami 13: na ta priključek je povezana LED (Light-Emitting Diode) lučka (na Slika 3.1 označena z L). Ko je ta priključek pod napetostjo, lučka gori, drugače je ugasnjena. Se po navadi ne uporablja kot digitalni vhod zaradi dodane LED lučke in upora Analogni priključki Na voljo imamo 6 analognih vhodnih priključkov z oznakami od A0 do A5, ki so namenjeni za zaznavanje napetosti. Vsak Atmega mikrokrmilnik, ki ga uporabljajo Arduino moduli, ima 6 kanalni analogno digitalni pretvornik (angl. analog-to-digital converter). Pretvornik deluje z 10 bitno resolucijo, ki vrača celoštevilčno vrednost od 0 do 1023, kar je merilna lestvica za napetost med 0 V in maksimalno napetostjo (5 V oziroma 3.3 V ali druga vrednost, če uporabimo in nastavimo AREF priklop) [22]. Čeprav je glavna uporabna vrednost analognih vhodov za večino uporabnikov branje analognih vrednosti različnih senzorjev, jih lahko uporabimo tudi kot digitalni V/I, kar imenujemo GPIO (General Purpose Input/Output) funkcionalnost. Pri tem je uporaba povsem enaka kot pri digitalnih, saj uporabljamo vrednosti HIGH in LOW. Za pretvorbo analognega priklopa v digitalnega se po navadi odločimo, če nam zmanjka digitalnih. Vgrajen imajo tudi upor za dvig nivoja, ki ga lahko po potrebi vključimo [22]. Dodatni funkcionalnosti imata priključka A4 kot SDA in A5 kot SCL, saj omogočata TWI (Two Wire Interface) komunikacijo [17] Napajalni priključki Napajalni priključki se uporabljajo za zajemanje in dostavljanje električne energije. Imamo jih več vrst in se uporabljajo za različne namene. Predstavili bomo vsakega izmed njih od desne proti levi [17]: VIN (Input Voltage): se uporablja za dovajanje napetosti v Arduino modul, kadar uporabljamo zunanji vir električne energije (npr. baterija). Uporabljamo ga lahko tudi kot izhodno napetost, kadar je modul priključen na napajanje preko adapterja. GND: 2 priključka za priklop povratnega toka oz. skupne ničle. 5 V: izhodna 5 V napetost iz regulatorja na plošči za priklop ostalih naprav. 3.3 V: izhodna 3.3 V napetost iz regulatorja na plošči.

35 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 15 RESET: nastavitev LOW vrednosti na ta priključek povzroči resetiranje modula. Uporabno kadar želimo dodati zunanji gumb za reset. IOREF (samo Uno verzije 3): omogoča Arduino vmesniku, da se prilagodi napetosti, ki jo uporablja plošča pri V/I priključkih. Lahko dovajajo 5 ali 3.3 V. neimenovan priključek: ni povezan nikamor. Je rezerviran za prihodnje namene Ostali priključki Zraven digitalnih priključkov sta na levi strani dodana še Gnd za povezavo skupne ničle in AREF priklop. Preko AREF priključka lahko dovajamo napetost od 0 do 5 V. Ob ustrezni konfiguraciji v kodi je lahko napetost v AREF referenca za maksimalno napetost pri branju analognih vrednosti. Privzeto je namreč maksimalna vrednost 5 V oz. 3.3 V (odvisno od modela) [17] [23]. V tretji verziji modela Uno sta zraven AREF priklopa dodana še SDA in SCL priključka za TWI komunikacijo, pod njima pa ICSP priključek za programiranje ATmega8U2 oz. ATmega16U2 mikrokrmilnika [17]. Dodana sta še dva ICSP priklopa. Namenjena sta programiranju mikrokrmilnikov. Tisti na desni se uporablja za centralni mikrokrmilnik ATmega 328. Drugega ima na voljo Uno verzije 3 in se nahaja zraven digitalnih V/I pod SDA, SCL in AREF priključki [17]. 3.5 Različice Arduino modula Trenutno je na trgu poleg Arduino Uno modela tudi nekaj drugih uradnih Arduino modulov, ki se razlikujejo med seboj večinoma v številu priključkov, tipu mikrokrmilnika, velikosti in izgledu. Predstavili bomo zgolj nekaj modelov. Obstaja še več drugih produktov, ki pa se bistveno ne razlikujejo [7] [18] [19] Arduino Mega 2560 Arduino Mega 2560 modul (Slika 3.2 [24]) je model Arduina z največ digitalnimi in analognimi priključki ter je naslednik modela Arduino Mega. Ponuja enak tip priključkov kot model Uno, s tem da imajo prvi štirje digitalni priklopi (od 0 do 4) dodatno funkcionalnost za univerzalno asinhrono sprejemanje / oddajne podatkov (angl. Universal

36 Stran 16 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Asynchronous Receiver/Transmitter ali UART), kar omogoča serijsko komunikacijo (na primer z računalnikom preko COM vrat) [24]. Slika 3.2: Arduino Mega 2560 Ostale specifikacije modela Mega 2560 so zapisane v Tabela 3.2 [18] [19] [24]: Tabela 3.2: Specifikacije modela Arduino Mega 2560 Mikrokrmilnik Operativna napetost Številno digitalnih V/I ATmega V 54 (15 jih omogoča PWM) Število analognih vhodov 16 Flash spomin SRAM spomin EEPROM spomin Hitrost ure Velikost 256 KB (od tega 8KB za sistemski zaganjalnik) 8 KB 4 KB 16 MHz 101,6 mm x 53,3 mm Na voljo je tudi model Arduino Mega ADK, ki je nadgradnja tega modula. Razlikuje se samo v tem, da ima dodaten USB priključek za komunikacijo s telefonom, ki ima nameščen Android OS [25].

37 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran Arduino LilyPad Ta model Arduino modula je bil izdelan za prenosljivost in uporabo na elektronskih oblačilih (angl. e-textiles). Lahko je prišit na blago ali druge izdelke z virom energije. Ploščica temelji na ATmega168V ali ATmega328V mikrokrmilniku. Izdelala in oblikovala sta ga Leah Buechley in podjetje SparkFun Electronics, ki prodaja tudi mnoge druge komponente in dodatke za Arduino plošče [26] [27]. Arduino LilyPad je edini uraden model, ki je okrogle oblike in ni modre barve. Na Slika 3.3 lahko opazimo, da ta modul nima USB priklopa. Da ga lahko programirano in priključimo na računalnik, potrebujemo poseben vmesnik (SparkFun FTDI Basic Breakout). Priklopimo ga na 6 moških priključkov, kot lahko vidimo v desnem delu Slika 3.3 [7] [28]. Slika 3.3: Arduino LilyPad Druga posebnost tega modula je vodoodpornost. Lahko ga namreč umivamo pod tekočo vodo. Potrebno je le poskrbeti, da smo ga odklopili od električne energije. Priporočajo umivanje z roko z možnostjo uporabe detergenta. Pred uporabo ga je seveda potrebno dobro posušiti. Kljub temu je vsakršen stik z vodo na našo lastno odgovornost, saj ne zagotavljajo popolne zanesljivosti [26]. Za napajanje z električno energijo imamo na voljo dva priključka označena s»+«in»-«. Pri čemer moramo biti posebno pazljivi, saj ga lahko z napetostjo več kot 5.5 V ali z obratnim priklopom (pozitivno na negativno in negativno na pozitivno) hitro uničimo. Prav tako moramo biti zaradi krhkega in lomljivega materiala pazljivi tudi pri sami uporabi. Če

38 Stran 18 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami poškodujemo ali uničimo mikrokrmilnik, ki je pritrjen na ploščici, ga ne moremo zamenjati, temveč je potreben nakup novega modula [28]. Ostale specifikacije modela LilyPad so zapisane v Tabela 3.3 [18] [26]: Tabela 3.3: Specifikacije modela Ardino LilyPad Mikrokrmilnik Operativna napetost Številno digitalnih V/I ATmega168V ali ATmega328V 2,7 5,5 V 14 (6 jih omogoča PWM) Število analognih vhodov 6 Flash spomin SRAM spomin EEPROM spomin Hitrost ure Velikost 16 KB (od tega 2KB za sistemski zaganjalnik) 1 KB 512 B 8 MHz 50 mm premer, 3 mm debelina Arduino Mini Arduino Mini je najmanjši Arduino predstavnik in je namenjen delu v prostorsko zahtevnih okoljih. Trenutno je na trgu peta verzija modela. Prve verzije so uporabljale mikrokrmilnik ATmega168, sedaj pa je vgrajen ATmega328. Ta je fizično manjši od enakega mikrokrmilnika, ki je vgrajen v ostalih Arduino modulih. Razlikuje se tudi po tem, da ima 8 analognih vhodov. Štirje od teh analognih vhodov na mikrokrmilniku niso povezani z vhodi na Arduino modulu in jih moramo povezati sami. Za programiranje mikrokrmilnika in priklop na računalnik potrebujemo poseben vmesnik (USB Serial adapter), ki ima USB priklop [29] [30]. Napajanje lahko poteka preko USB vmesnika ali pa na +5 V priključek priklopimo regulirano napetost 5 V. Če želimo uporabiti drug zunanji vir energije, lahko na +9V priključek priklopimo ustrezno baterijo z napetostjo 9 V [30].

39 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 19 Tudi ta model je zelo krhek in ga lahko hitro zlomimo, zato je potrebno biti previden. Prav tako ni možno zamenjati mikrokrmilnika na ploščici, če se le ta uniči. Potreben je nakup novega modula. Možna sta 2 modela: z nožicami za priklop ali brez (Slika 3.4) [29] [30]. Slika 3.4: Arduino Mini Ostale specifikacije modula Mini so zapisane v Tabela 3.4 [18] [29]: Tabela 3.4: Specifikacije modela Arduino Mini Mikrokrmilnik Operativna napetost Številno digitalnih V/I Število analognih vhodov Flash spomin SRAM spomin EEPROM spomin Hitrost ure Velikost ATmega328 5 V 14 (6 jih omogoča PWM) 8 (od tega 4 niso povezani) 32 KB (od tega 2KB za sistemski zaganjalnik) 2 KB 1 KB 16 MHz 18 x 33 mm Arduino Nano Arduino Nano je majhen, kompakten modul, ki temelji na ATmega328 (trenutna verzija 3) oziroma ATmega168 (do verzije 2.x) mikrokrmilniku. Ima podobno funkcionalnost kot ostali večji moduli. Razlika je v tem, da zaradi drugačnega USB priključka potrebuje Mini-

40 Stran 20 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami B USB kabel za povezavo. Prav tako nima vgrajenega priključka za napajanje preko električnega adapterja. Na Slika 3.5 [31] je to lepo razvidno [32]. Slika 3.5: Arduino Nano Napajamo ga lahko preko USB priklopa s 6 20 V ne regulirano zunanjo napetostjo ali z regulirano 5 V napetostjo. Napajanje se izbere samodejno glede na vir z višjo vrednostjo napetosti. 3.3 V izhod na plošči deluje samo takrat, ko napajanje poteka preko USB priklopa. To napetost namreč zagotavlja FTDI čip, ki skrbi za USB komunikacijo [32]. Ostale specifikacije modula Nano so zapisane v Tabela 3.5 [32]: Tabela 3.5: Specifikacije modela Arduino Nano Mikrokrmilnik Operativna napetost Številno digitalnih V/I ATmega328 5 V 14 (6 jih omogoča PWM) Število analognih vhodov 8 Flash spomin SRAM spomin EEPROM spomin Hitrost ure Velikost 32 KB (od tega 2KB za sistemski zaganjalnik) 2 KB 1 KB 16 MHz 43 x 18 mm

41 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran Arduino Due Arduino Due (Slika 3.6) je trenutno najnovejši Arduino modul ter je prvi, ki uporablja 32 bitni ARM mikrokrmilnik. Razlikuje se tudi po delovni napetosti, saj deluje pri napetosti 3.3 V, kar je tudi maksimalna vrednost, ki jo tolerirajo V/I priključki. Ob višji napetosti lahko poškodujemo modul [33]. Slika 3.6: Arduino Due Glavni prednosti tega modela sta zmogljivost ter pomnilnik. Povečano zmogljivost omogoča 32 bitni mikrokrmilnik s hitrostjo 84 MHz, kar je velik napredek glede na 8 bitnega s hitrostjo 20 MHz, ki ga vsebuje model Uno. Pomnilnik je prav tako mnogo večji. Bistven podatek je velikost delovnega pomnilnika, ki je 96 KB (model Uno ima 2 KB), kar je velika prednost med samim delovanjem [33]. Vsebuje tudi dva prava pretvornika signala iz digitalnega v analogen signal (angl. Digitalto-Analog Converter ali DAC) z 12 bitno resolucijo (4096 nivojev). S to dodatno funkcionalnostjo lahko predvajamo glasbo ob uporabi namenske Audio knjižnice [33]. Ostale specifikacije modula Nano so zapisane Tabela 3.6 [33]:

42 Stran 22 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Tabela 3.6: Specifikacije modela Arduino Due Mikrokrmilnik Operativna napetost Številno digitalnih V/I AT91SAM3X8E 3,3 V 54 (12 jih omogoča PWM) Število analognih vhodov 12 Število analognih izhodov Flash spomin SRAM spomin Hitrost ure Velikost 2 (DAC priključka) 512 KB 96 KB 84 MHz 101,6 mm x 53,3 mm 3.6 Dodatki za Arduino modul Arduino moduli v osnovi ponujajo določeno število digitalnih in analognih priključkov ter imajo vgrajene različne tipe mikrokrmilnikov. Kakšno drugo komponento redko zasledimo. Določeni modeli imajo sicer nekatere dodatke, kot so internetni priključek, dodaten USB priklop (npr. ADK) ali recimo bluetooth povezavo. Podobne ter številne druge komponente lahko kupimo tudi posebej in jih povežemo z Arduino modulom. Na voljo je ogromno dodatkov namenjenih za različne vrste komunikacij, za interakcijo z uporabnikom ali za krmiljenje različnih naprav [34] [35]. Pri uporabi dodatkov načeloma nismo omejeni, potrebno je le, da imamo na Arduino modulu na voljo dovolj prostih priključkov za krmiljenje komponente. Zelo razširjeni dodatki imajo recimo že na voljo knjižnice v Arduino razvojnem okolju: uporaba LCD (angl. Liquid Crystal Display) zaslona, interneta, pisanje na SD (angl. Secure Digital) kartico, Pred uporabo je vedno potrebno preveriti, če je posamezna komponenta kompatibilna s knjižnico, ki jo želimo uporabiti.

43 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 23 Določeni modeli Arduino modulov (predvsem Uno ter Mega) imajo možnost namestitve tako imenovanega Arduino vmesnika (angl. Arduino shield), ki ga nataknemo na Arduino modul. Ta je še vedno polno funkcionalen, pri povezovanju z ostalimi napravami pa uporabljamo priključke, ki se nahajajo na vmesniku, saj so le ti zgolj podaljšek obstoječih priključkov na modulu. Modela Uno in Mega imata priključke razporejene tako, da so vmesniki kompatibilni za oba modela. Primer uporabe Arduino vmesnika za brezžično internetno povezavo ter pisanje na SD kartico je viden na Slika 3.7 [36]. Slika 3.7: Arduino vmesnik z brezžičnim internetom ter režo za SD kartico Na voljo je veliko število različnih vmesnikov, ki pa se med seboj razlikujejo po priključkih, ki jih zasedajo. S tem ne mislimo na priključke na katere je vmesnik priključen, ampak na tiste, ki jih potrebuje za delovanje. Dodatne funkcionalnosti, ki jih vmesnik ponuja, namreč krmilimo preko priključkov. Tako vsak vmesnik zasede določeno število priključkov, ki jih potrebuje za komunikacijo. Vmesnik na Slika 3.7 uporablja za delovanje brezžičnega interneta in pisanje na SD kartico priključke od 10 do 13 ter priključek 4 (te vrednosti veljajo za model Uno). Skupno torej 5 priključkov, ki jih moramo pustiti nepovezane. Teoretično lahko te priključke še vedno uporabljamo za druge namene, če ne izkoriščamo funkcionalnosti, ki jih vmesnik ponuja [37].

44 Stran 24 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami 4 PROGRAMSKO OKOLJE V tem poglavju bomo predstavili programsko okolje, ki nam je na voljo za razvoj programov in nalaganje le teh na poljuben Arduino modul. Osredotočili se bomo na odprtokodno Arduino razvojno okolje, ki smo ga uporabljali v našem diplomskem delu. Prikazali bomo kako se uporablja ter katere funkcionalnosti ponuja. V nadaljevanju bomo predstavili osnove Arduino programskega jezika. Razložili bomo, kako mora biti izvorna koda zgrajena ter katere osnovne funkcije jezik ponuja. Prav tako bomo opisali tudi proces prevajanja programov. Potrebno se je zavedati, da Arduino razvojno okolje ni edino okolje, ki ga lahko uporabimo. Na voljo nam je tudi nekaj drugih okolij, kot so na primer Eclipse, Visual Studio in NetBeans. Vzpostavitev okolja v teh orodjih sicer zahteva nekaj več dodatnega dela z namestitvijo potrebnih dodatkov [8]. 4.1 Arduino razvojno okolje Arduino razvojno okolje lahko brezplačno prenesemo s spletnega naslova Na voljo nam je za več operacijskih sistemov, in sicer za Windows, Mac OS X ter Linux. Mi smo ga uporabljali na Windows 7 operacijskem sistemu. Verzija programa, ki smo ga namestili je bila 1.0.1, uporabljali pa smo ga v angleškem jeziku (na voljo je tudi slovenščina) Vzpostavitev okolja Vzpostavitev okolja zahteva nekaj dodatnega dela. Po prenosu Arduino razvojnega okolja na računalnik je potrebno vsebino odpakirati. Znotraj te vsebine lahko vidimo več map. V eni izmed teh map imenovani»drivers«, se nahajajo gonilniki za več različnih Arduino modulov. Ob priklopu Arduino modula na računalnik preko USB kabla je za pravilno delovanje naprave potrebno namestiti ustrezen gonilnik.

45 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 25 Po uspešni inštalaciji gonilnikov poženemo Arduino razvojno okolje. Čeprav bomo že lahko začeli pisati kodo, je za nalaganje programa na naš modul potrebno postoriti še dva koraka. V zgornjem meniju gremo pod Tools Board, kjer izberemo tip Arduino modula (Slika 4.1) na katerega se bo napisan program naložil. Izbira ustreznega modula je potrebna zaradi različnih mikrokrmilnikov in sistemskih zaganjalnikov (angl. bootloader), ki jih moduli uporabljajo. Zaradi teh lastnosti se prevajanje kode za posamezen modul razlikuje [38] [39]. Slika 4.1: Različice Arduino modulov, ki jih Arduino razvojno okolje podpira Naslednja nastavitev, ki jo je potrebno nastaviti se nahaja v meniju pod Tools Serial port. Izbrati je potrebno serijski priključek na katerega je priključen Arduino modul. Ta je po navadi COM3 ali višje vrednosti. Ustrezen priključek lahko ugotovimo na dva načina. Prvi in enostavnejši je, da izklopimo modul iz računalnika in preverimo kateri priključki so na izbiro. Nato ponovno priklopimo modul in izberemo tistega, ki se je pojavil na novo. Drugi način je ta, da gremo pravilen priključek poiskati pod strojno opremo v operacijskem sistemu [38] Osnovne funkcionalnosti Arduino razvojno okolje vsebuje preprost urejevalnik besedila, v katerega lahko pišemo programsko kodo, konzolno okno na dnu ter orodno vrstico in meni na vrhu (Slika 4.2).

46 Stran 26 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Hkrati imamo lahko odprtih več zavihkov izvorne kode programa. Datoteke, ki so v zavihku prikazane z imenom brez končnice, se na računalnik shranijo s končnico».ino«2. Podprti formati, ki so lahko odprti v zavihkih, so».c«,».cpp«,».h«ali brez končnice (ne vidimo je v zavihku, ampak se shrani s končnico».ino«) [39]. Slika 4.2: Arduino razvojno okolje Prvi gumb v orodni vrstici, ki je predstavljen s kljukico, požene preverjanje kode programa (angl. verify). Tako lahko sproti preverjamo, če koda vsebuje kakšne sintaktične napake, še preden jo poizkusimo naložiti na Arduino modul. Tej funkcionalnosti je namenjen naslednji gumb predstavljen s puščico. Izvede se prevajanje in nalaganje programa na izbran Arduino modul. Informacije o morebitnih napakah pri prevajanju ali nalaganju programa ter poročilo o zaključku operacije je izpisano v konzolnem oknu. Na Slika 4.2 lahko vidimo primer takšnega poročila o zaključku preverjanja kode programa [39]. Arduino razvojno okolje uporablja koncept knjige skic (angl. sketchbook), kamor shranjujemo napisane programe oziramo skice (angl. sketch). Programi napisani v Arduino programskem jeziku se namreč imenujejo skice. Ko prvič poženemo Arduino razvojno 2 Od verzije programa 1.0 naprej. Pred tem so se datoteke shranjevale s končnico».pde«[39].

47 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 27 okolje, se določi mapa (knjiga skic), kamor se bodo shranjevali programi (skice). Lokacijo lahko kadarkoli kasneje spremenimo preko nastavitev [39]. Dodatna uporabna funkcionalnost, ki jo vsebuje Arduino razvojno okolje, so primeri uporabe. Do njih dostopamo v meniju preko File Examples. Primeri so ločeni na dva sklopa. Prvi sklop so primeri, ki jih ponuja Arduino knjižnica in so namenjeni spoznavanju Arduino programskega jezika. Shranjeni so znotraj mape Arduino razvojnega okolja v podmapi examples. Drugi sklop so primeri uporabe dodatnih knjižnic. Privzeto dobimo zraven razvojnega okolja že nekaj knjižnic z napisanimi primeri uporabe. Knjižnice se nahajajo v podmapi libraries znotraj Arduino razvojnega okolja ali v mapi libraries znotraj knjige skic Monitor serijske povezave Arduino razvojno okolje nam omogoča tudi delo s serijsko povezavo. Preko serijskega monitorja lahko enostavno beremo podatke, ki jih Arduino modul pošlje s serijsko povezavo preko USB priključka. Na vrhu okna se nahaja vnosno polje za pisanje vsebine, ki jo želimo z računalnika poslati Arduino modulu (Slika 4.3). Do tega okna lahko dostopamo preko menija Tools Serial Monitor ali s pritiskom na gumb s povečevalnim steklom, je na desni strani orodne vrstice Arduino razvojnega okolja (Slika 4.2). Da monitor serijske povezave deluje, je potrebno izbrati ustrezno frekvenco prenosa podatkov, ki se nahaja v spodnjem desnem kotu okna. Vrednost mora biti enaka tisti, ki je nastavljena v izvorni kodi programa Arduino modula. Slika 4.3: Monitor serijske povezave

48 Stran 28 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami 4.2 Arduino programski jezik Arduino programski jezik temelji na programskem jeziku C, ki so ga razvili na začetku 70ih let prejšnjega stoletja za uporabo na UNIX operacijskem sistemu. Jezik C je za začetnike in tiste, ki ga niso navajeni, težko berljiv in razumljiv. Zaradi teh razlogov je Arduino ekipa pripravila standardno Arduino knjižnico, ki vsebuje nabor enostavnih in uporabno naravnanih funkcij. Na ta način je mogoče programirati Arduino modul kolikor se le da enostavno. Arduino knjižnice so same po sebi napisane v programskem jeziku C++. Pri tem se je potrebno zavedati, da čeprav uporabljamo funkcije iz Arduino knjižnic, bodo sintaksa, struktura programa, funkcije in operatorji funkcionirali enako kot v jeziku C [40]. Arduino knjižnica je avtomatsko vključena v vsak program, ki ga napišemo, in je ni potrebno dodatno dodajati v kodi. Arduino knjižnice nam omogočajo le pisanje programov na enostavnejši način, kar pa ni pogoj. Še vedno lahko namreč celotno kodo napišemo v C/C++ jeziku, če želimo. Takšno kodo lahko brez težav prevedemo in naložimo na modul. Tak način dela pa prinese določene prednosti, saj je velikost programa, ki se naloži na modul manjša in tako zasede manj pomnilniškega prostora. Vendar večjo velikost programa z uporabo Arduino knjižnice enostavno vzamemo v zakup, saj je celotna koda s to knjižnico veliko enostavnejša in dosti bolj berljiva [40]. Kljub uporabi Arduino knjižnice z vsemi funkcijami, ki so na voljo, pa osnovne operacije še vedno pišemo v sintaksi jezika C. Za izgradnjo algoritmov lahko tako uporabljamo vse vejitve, zanke, podatkovne tipe ter ostale operacije, ki so del jezika C. Dodatna uporabna podatkovna tipa, ki ju ponuja Arduino knjižnica, sta tip String in logični tip boolean. Tip String lahko uporabimo namesto tabele znakov, saj omogoča mnogo enostavnejše delo z nizi [41]. Posebej zanimivo je, da imajo programi, ki jih napišemo za Arduino modul posebno ime. Posamezen program se tako imenuje skica (angl. sketch) in so shranjeni s končnico».ino«, ki smo jo že spoznali [39] Pravilna struktura programa Arduino program oz. skica mora vedno vsebovati metodi setup in loop, drugače program ne bo deloval. Metoda setup se izvede samo enkrat, in sicer ob zagonu programa, ko

49 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 29 priklopimo modul na napajanje ali kadar ga resetiramo. V tej metodi po navadi pripravimo program preden se začne izvajati. Izvedemo inicializacijo spremenljivk, nastavitve digitalnih in analognih priključkov ter pripravimo uporabljene knjižnice za nadaljnjo uporabo [40] [42]. Metoda loop se prične izvajati takoj za metodo setup. Kot že ime samo pove, se ta metoda ponavlja, in sicer v neskončnost. Na tej metodi temelji celoten algoritem programa. Koda mora biti napisana tako, da znotraj te metode preverjamo do katerih sprememb je prišlo na priključkih Arduino modula in nanje ustrezno reagiramo. Pri tem se je potrebno zavedati, da je mikrokrmilnik pri obdelovanju ukazov zelo hiter. Tako lahko v 1 sekundi izvede tudi do milijon vrstic kode, kar pomeni, da se lahko metoda loop v eni sekundi izvede tudi več tisočkrat [5] [40] Osnovne funkcije in konstante Kot smo že ugotovili, nam Arduino knjižnica ponuja veliko funkcij, ki nam poenostavijo programiranje. Zraven metod setup in loop je še nekaj ostalih funkcij, ki jih zaradi enostavnejšega programiranja želimo poznati. Razložili bomo za kaj so namenjene in kako se uporabljajo. Preden pa bomo predstaviti metode, je potrebno spoznati naslednje konstante, ki so prav tako del Arduino knjižnice [43]: HIGH: predstavlja maksimalno vrednost napetosti na digitalnem priključku. Pri branju napetosti zavzame to vrednost, kadar je priključek pod napetostjo 3 V ali več (če modul deluje pri napetosti 5 V). Če nastavimo to konstanto kot vrednost izhoda na digitalnem priključku, pa bo ta oddajal maksimalno napetost, na primer 5 V. LOW: predstavlja ničelno vrednost napetosti na digitalnem priključku. Pri branju napetosti vrne to vrednost, kadar je napetost priključka 2 V ali manj. Kadar je priključek nastavljen kot izhod in mu nastavimo vrednost LOW, bo ta deloval pod napetostjo 0 Voltov. V tem stanju lahko deluje tudi kot skupna ničla, saj lahko sprejema električni tok. INPUT: predstavlja način delovanja priključka. Če mu pri konfiguraciji določimo to vrednost, bo deloval kot vhod in bo bral vrednost napetosti. OUTPUT: predstavlja način delovanja priključka. Če mu pri konfiguracijo določimo to vrednost, bo deloval kot izhod.

50 Stran 30 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami INPUT_PULLUP: predstavlja način delovanja priključka. Če mu pri konfiguraciji določimo to vrednost, bo imel vključen interni upor za dvig nivoja (angl. internal pull-up resistor). Osnovne funkcije, ki jih pogosto uporabljamo: pinmode: sprejme dva parametra: številko priključka ter način delovanja. Namenjena je konfiguraciji priključkov, da definiramo kako bo določen priključek deloval. Deluje lahko kot vhod (INPUT), izhod (OUTPUT) ali kot upor za dvig nivoja (INPUT_PULLUP) [44]. digitalwrite: sprejme dva parametra: številko priključka in digitalno vrednost, ki jo želimo nastaviti na izhod. Nastavimo lahko dve vrednosti: maksimalno napetost (HIGH) in ničelno napetost (LOW). Če je priključek nastavljen kot vhod, bomo z uporabo te metode in parametra HIGH vključili interni upor za dvig nivoja. Z nastavitvijo vrednosti LOW ga lahko nato izključimo [45]. digitalread: sprejme parameter za številko priključka. Prebere vrednost napetosti priključka ter vrne vrednost LOW ali HIGH glede na jakost napetosti. Če priključek ni nikamor priključen, potem je vrednost, ki jo vrne naključna oz. se skozi spreminja [46]. analogread: sprejme parameter za številko priključka. Prebere vrednost napetosti analognega priključka. Vrednost, ki jo vrne je 10 bitna in predstavlja interval od 0 do Pri čemer 0 pomeni 0 V in 1023 maksimalno napetost. Ta interval je potrebno pretvoriti v napetost, kar najlažje storimo z uporabo funkcije map [47]. analogwrite: sprejme dva parametra: številko priključka ter 8 bitno vrednost od 0 do 255. Omogoča pulzno širinsko modulacijo na priključkih, ki so označeni z znakom»~«. Frekvenca delovanja je približno 490 Hz. Modulacija na priključku se izvaja tako dolgo, dokler ne pokličemo metode digitalwrite [48]. millis: vrne število milisekund od takrat, ko smo Arduino modul vključili ali ga resetirali. Vrednost se bo vrnila nazaj na ničlo po približno 50 dnevih neprekinjenega delovanja [49]. delay: sprejme parameter za število milisekund. Pavzira delovanje programa glede na to vrednost in se šele nato prične izvajati naslednja vrstica programa.

51 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 31 pulsein: sprejme dva parametra: številko priključka ter vrednost HIGH ali LOW na katero čaka za začetek merjenja. Vrne število mikrosekund, kolikor je trajal pulz. Če na primer podamo vrednost HIGH, bo metoda čakala, da priključek zavzame vrednost HIGH ter nato vrnila število mikrosekund, ki so pretekle dokler ni zavzel nasprotne vrednosti (LOW). Deluje pri pulzih dolžine od 10 mikrosekund do 3 minut [50]. map: sprejme pet parametrov: vrednost, minimalna vrednost, maksimalna vrednost, želeni začetek intervala, želeni konec intervala. Namenjena je pretvarjanju vrednosti iz enega intervala v drugega. Na primer, če želimo vrednost iz intervala [0, 1023] pretvoriti v vrednost znotraj intervala [0, 255] [51] Knjižnice Arduino knjižnice nam nudijo enostavnejšo delo z različnimi napravami, saj je celotna koda potrebna za komunikacijo z določeno komponento že implementirana znotraj knjižnice. Uporaba je povsem enostavna. V Arduino razvojnem okolju je v meniju pod Sketches Import Library seznam knjižnic, ki so nameščene. Če želimo katero izmed teh uporabiti, jo na tak način z izbiro avtomatsko vključimo v kodo ali pa jo vpišemo ročno. Na začetek programa se doda ena ali več vrstic z besedo #include, ki vključi potrebno datoteko. Na primer knjižnico za delo z LCD zaslonom dodamo z #include <LiquidCrystal.h> [39]. Ko Arduino razvojno okolje namestimo, se v mapi libraries že nahajajo določene knjižnice. Vendar pa nismo omejeni le na te, ki jih dobimo zraven, ampak lahko dodamo tudi nove. Na spletu je na voljo veliko knjižnic, ki so brezplačno na voljo za prenos. Nove knjižnice dodamo v mapo»libraries«na lokaciji knjige skic. Mapo»libraries«je potrebno ustvariti ročno, ko dodamo prvo knjižnico [52]. Vsaka mapa znotraj direktorija»libraries«predstavlja knjižnico z izvorno kodo, ki po navadi vsebuje vsaj dve datoteki s končnicama».h«in».cpp«. Znotraj posamezne knjižnice pa lahko opazimo tudi mapo examples, ki vsebuje primere uporabe knjižnice. V tej mapi mora veljati posebno pravilo poimenovanja map in datotek. Vsaka mapa predstavlja posamezen primer uporabe, pri čemer mora biti program znotraj mape poimenovan enako kot mapa sama. Le tako bo ta primer uporabe viden tudi v Arduino razvojnem okolju. Če napišemo svojo knjižnico ali dodajamo kakšno, ki smo jo prenesli s

52 Stran 32 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami spleta, je pomembno, da upoštevamo to pravilo. Na novo dodane knjižnice pa bodo v Arduino razvojnem okolju vidne šele po ponovnem zagonu programa [39] [52] Izpisovanje informacij Ob pisanju programov za Arduino se slej ko prej pojavi potreba o izpisu podatkov. Preveriti namreč želimo pravilno delovanje sistema, trenutno stanje ali kako se program obnaša ob izvajanju. Ker Arduino modul nima vgrajenega LCD zaslona ali kakšne druge komponente za izpis podatkov, to najlažje storimo preko računalnika. USB povezava na katero je modul priključen in se uporablja za nalaganje programa, se lahko uporabi tudi za serijsko komunikacijo z računalnikom. Serijska komunikacija omogoča enostavno dvosmerno komunikacijo med računalnikom in Arduino modulom. Na računalniku lahko za ta namen uporabimo monitor serijske povezave, ki smo ga predstavili v podpoglavju Na izbiro pa imamo tudi številne druge programske jezike, ki omogočajo to vrsto komunikacije. Primer uporabe serijske povezave je viden v Izvorna koda 4.1 [53]. void setup() Serial.begin(9600); Serial.flush(); Serial.println("Zacetek komunikacije..."); void loop() if(serial.available() > 0)//preverimo ce je prislo kaj podatkov String vhodniniz = ""; delay(100); //pavziramo da se nalozi celotno sporocilo byte steviloznakov = Serial.available(); char znak; while (steviloznakov > 0) //vsak znak dodamo v niz steviloznakov--; znak = Serial.read(); vhodniniz += znak; //posljemo sporocilo Serial.print("Prejeti podatki: "); Serial.println(vhodniNiz); Izvorna koda 4.1: Uporaba serijske komunikacije

53 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 33 Za serijsko komunikacijo uporabljamo razred Serial, ki s pomočjo ustreznih metod omogoča prejemanje in pošiljanje podatkov. Pred uporabo je potrebno izvesti inicializacijo z metodo begin, v kateri moramo kot parameter podati hitrost povezave. Za pravilno delovanje morata obe napravi, ki komunicirata preko serijske povezave, imeti izbrano isto hitrost. V našem primeru sta ti napravi Arduino modul in računalnik (monitor serijske povezave v Arduino razvojnem okolju). Metodo flush je prav tako priporočljivo uporabiti pred začetkom komunikacije, da počistimo morebitna stara sporočila, ki so ostala v povezavi [53]. 4.3 Prevajanje programov Mnogo stvari se mora izvesti, da programsko kodo, ki smo jo napisali, prenesemo na mikrokrmilniški modul Arduino. Razvojno okolje, ki ga uporabljamo za programiranje Arduino modula, najprej izvede majhne transformacije, da preveri, če je programska koda sintaktično ustrezna programskemu jeziku C ali C++. Nato je ta koda posredovana avr-gcc 3 prevajalniku, ki kodo prevede v strojne inštrukcije oziroma v objektne datoteke. Za tem se ta koda poveže s standardno Arduino knjižnico, ki omogoča osnovne funkcionalnosti, kot sta metodi digitawrite in Serial.print. Rezultat je ena sama datoteka zapisana v Intel HEX formatu 4 z potrebnim nizom bajtov, ki morajo biti zapisani v programski pomnilnik mikrokrmilnika na Arduino modulu. Ta datoteka se tudi naloži na modul z USB ali serijsko povezavo preko sistemskega zaganjalnika, ki je že nameščen na mikrokrmilniku. Nalaganje je mogoče tudi s kakšno drugo strojno opremo, ki je namenjena programiranju mikrokrmilnikov [54] Več datotečni program Programska koda za poljuben Arduino modul je lahko razdeljena tudi na več datotek, ki jih imamo v Arduino programskem okolju odprte v zavihkih. Ko začnemo programsko kodo prevajati, se vse datoteke brez končnice združijo skupaj v glavno datoteko programa (angl. main sketch file). Datoteke s končnico».c«in».h«pa so prevedene posebej. Če želimo v 3 Prevajalniška zbirka GNU (angl. GNU Compiler Collection ali GCC) za Atmel AVR mikrokrmilnike [81]. 4 Datotečni format, katerega vsebina je zapisana v šestnajstiški obliki. Uporablja se pri mikrokrmilnikih in ostalih čipih. Je eden najstarejših formatov in je v uporabi že vse od 70ih let prejšnjega stoletja [80].

54 Stran 34 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami programski kodi uporabiti datoteko s končnico».h«, jo je potrebno vključiti z rezervirano besedo #include ter zraven podati ime datoteke v narekovajih. Npr: #include»test.h«[54] Proces tvorbe programa Programska koda se prevaja z uporabo avr-gcc prevajalnika. Ko v Arduino razvojnem okolju pritisnemo gumb za preverjanje programa (angl. verify), se izvede proces tvorbe programa v začasno mapo na računalniku. Na ta način nam prevajalnik lahko javi morebitne sintaktične napake. Ob pritisku na gumb naloži (angl. upload) se programska koda tvori v podmapi mape, kjer je shranjena koda programa [54]. Datoteke programa s končnico».c«in».cpp«se prevedejo v datoteke s končnico».o«ter se shranijo v to podmapo. Sem se shrani tudi glavna datoteka programa ter vse prevedene».c«in».cpp«datoteke knjižnic, ki so vključene v program. Vse te prevedene datoteke z».o«končnico se povežejo med seboj v statično knjižnico, s katero se nato poveže tudi glavna datoteka programa. Da se omeji velikost programa, so v končno datoteko Intel HEX formata vključeni le tisti deli knjižnic, ki so potrebni za izvajanje programa [54].

55 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 35 5 RAZVOJ AVTOMATIZIRANEGA ZALIVANJA Do sedaj smo spoznali predvsem strojno in programsko opremo, ki jo ponuja Arduino. S tem pridobljenim znanjem smo se lotili naslednjega koraka, kjer smo to znanje uporabili ter ga tudi nadgradili. S pomočjo Arduino Uno modula smo razvili sistem za avtomatsko zalivanje rož ali katere koli druge vrste rastlin. Za krmiljenje zalivanja nam ni bil dovolj samo Arduino modul, ampak smo potrebovali tudi nekaj drugih komponent, ki nam omogočajo izvajanje meritev, krmiljenje zalivanja ter komunikacijo z ostalimi napravami. 5.1 Cilj projekta Cilj našega projekta je bil razviti sistem, ki bo omogočal avtomatizirano zalivanje rož. Želimo si, da se avtomatika na podlagi definiranih pogojev samodejno odloči kdaj je potrebno pričeti in končati zalivanje rastlin. Pogoji se navezujejo na trenuten čas in na nivo vlažnosti zemlje. Informacije o trenutnem stanju avtomatike se izpisujejo na manjšem LCD zaslonu. Zaradi lažjega načina vnosa podatkov in boljšega pregleda vseh parametrov z avtomatiko komuniciramo preko bluetooth povezave (v nadaljevanju BT). Na drugi strani komunikacijskega kanala pa imamo mobilni telefon, ki nam omogoča podrobnejši pogled o delovanju avtomatike in enostavnejše spreminjanje parametrov izvajanja. Programsko kodo smo pisali v Arduino razvojnem okolju, ki smo ga predstavili v prejšnjem poglavju. Tako smo lahko spoznali kako se to okolje izkaže tudi v praksi. Kodo smo poizkusili pisati čim bolj objektno orientirano, tako da smo kodo razdelili na več razredov in datotek. Pri tem smo stremeli k uporabi različnih knjižnic, ki so nam na voljo za Arduino.

56 Stran 36 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Delovanje avtomatike Avtomatika ima tri osnovne funkcionalnosti: merjenje vlažnosti zemlje krmiljenje zalivanja komunikacija z uporabnikom Te funkcionalnosti za delovanje potrebujejo različno strojno opremo in dodatne komponente. Ena izmed takšnih komponent je modul realno časovne ure (angl. Real time clock v nadaljevanju RTC modul). S pomočjo tega modula lahko v vsakem trenutku vemo trenutni čas. To nam je v pomoč tako pri merjenju vlažnosti zemlje kot pri preverjanju parametrov zalivanja. Vlažnost zemlje preverjamo s pomočjo padca napetosti. Predvidevali smo, da bo ob večji vlažnosti zemlje upornost čim manjša, torej bo izmerjena napetost čim bližje vhodni napetosti. Obratno bo pri suhi zemlji, ko se bo upornost povečevala in bo napetost vedno bližje ničli. Ker želimo, da je avtomatika čim lažja za uporabo, smo dodali možnost učenja. Učenje pomeni, da se ob vsakem preverjanju vlažnosti preveri še minimalna in maksimalna vrednost vlažnosti. Po končanem učenju bomo lahko nato izvajali zalivanje glede na ti dve vrednosti brez nastavljanja parametrov. Vklop in izklop zalivanja ni vezan samo na vlažnost zemlje, je pa ta eden izmed glavnih parametrov, ki so na voljo. Pri pogojih za vklop smo zraven vklopne vlažnosti dodali še možnost za določanje ure in intervala vklopa zalivanja. Nastavimo lahko ob kateri uri želimo, da se zalivanje prične oz. glede na kakšen časovni interval naj se izvaja. Vsi ti pogoji so opcijski, torej se bodo preverjali samo tisti, ki jih bomo nastavili. Ob pogojih za vklop je potrebno definirati še parametre za izklop zalivanja. Ob izklopni vlažnosti lahko dodamo še trajanje zalivanja. Tako lahko določimo, kako dolgo želimo, da se zalivanje izvaja. Tudi ti parametri so opcijski. Ker je za zalivanje rastlin potrebna voda, bi lahko ob morebitni napaki avtomatike povzročili velik strošek, če bi bila voda dlje časa po nepotrebnem odprta. Zato smo morali poskrbeti tudi za varnostni mehanizem, ki bo takšen negativen scenarij preprečeval. Zagotoviti moramo, da se ob morebitni nepravilnosti pri zalivanju le to nemudoma prekine.

57 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran Komunikacija z uporabnikom Komunikacija z uporabnikom poteka preko dveh vmesnikov. Prvi je LCD zaslon, ki je povezan direktno na Arduino modul in služi za enosmerno komunikacijo. Izpisuje zgolj trenutno stanje avtomatike, uporabnik pa nima možnosti vnosa povratnih informacij. Zaslon je manjše velikosti in ima za prikaz na voljo dve vrstici po 16 znakov. Tej velikosti smo tudi prilagodili izbiro podatkov, ki jih izpisujemo. Ker bomo podrobnejše informacije in parametre delovanja obdelovali preko mobilnega telefona, so na tem zaslonu tako prikazane zgolj osnovne informacije o trenutnem stanju. Izpisujemo čas (ura in minuta), trenutno zunanjo temperaturo zraka ter informacijo o vlažnosti zemlje. Preostali prostor na zaslonu smo izkoristili po potrebi. Zaradi večjega števila parametrov zalivanja ter bolj preglednega uporabniškega vmesnika z avtomatiko komuniciramo tudi preko bluetooth povezave. Naprava, ki z avtomatiko komunicira je mobilni telefon z operacijskim sistemom Android. Lahko bi izbrali tudi katero drugo napravo ali operacijski sistem. Ker Arduino Uno model v osnovi ne ponuja BT komunikacije, smo uporabili BT modul, ki smo ga priključili na naš Arduino modul. S tem dodatkom dobimo možnost brezžične dvosmerne komunikacije z mobilnim telefonom, ki mu na zahtevo pošljemo trenutne informacije o senzorjih ter vse potrebne parametre krmiljenja avtomatike. Preko telefona imamo tudi možnost spreminjanja teh parametrov Uporabljene komponente Pri našem projektu smo zaradi potrebe delovanja avtomatike potrebovali več različnih komponent strojne opreme, ki so povezane z Arduino modulom. Seznam uporabljenih komponent in opreme: Arduino Uno modul + USB kabel za priklop na računalnik LCD zaslon velikosti 16 x 2 znakov RTC modul BT modul rele stikalo senzor temperature upori različnih vrednosti potenciometer

58 Stran 38 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami povezovalni kabli razvojna plošča za povezavo priključkov mobilni telefon z Android operacijskim sistemom Arduino modul je osrednje stičišče za komunikacijo z uporabljenimi komponentami. Smeri komunikacije lahko vidimo na Diagram 5.1. Večinoma komunikacija poteka dvosmerno, le pri LCD zaslonu gre ta samo v eno smer, saj od zaslona ne pričakujemo povratnih informacij. RTC modul Arduino modul BT modul LCD zaslon Senzor temperature Telefon Diagram 5.1: Diagram komunikacije komponent 5.2 Razvoj realno časovne ure Eno izmed glavnih komponent v našem sistemu predstavlja čas. Arduino nam sicer ponuja metodi millis() in micros(), ki vrneta število milisekund in mikrosekund od vklopa oziroma resetiranja sistema. Ti dve metodi bi načeloma lahko uporabili za določanje intervalov, vendar še vedno ne bi poznali trenutnega časa. Druga slabost je omejitev vrednosti teh metod. Vračata namreč nepredznačeno dolgo celo število (angl. unsigned long), ki ima omejitev v zavzemanju vrednosti. Ta omejitev povzroči, da metoda millis() nekje po 50 dneh delovanja ponovno prične vračati vrednosti od 0 naprej. Zaradi teh težav smo se odločili za uporabo realno časovne ure, ki teh omejitev nima. V vsakem trenutku nam namreč zagotavlja točen čas, ki je do sekunde natančen [41] [49] [55].

59 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 39 RTC modul je funkcionalno nekaj podobnega kot ročna ura. Vgrajeno ima baterijo (Slika 5.1 [56]), katera mu omogoča nemoteno vodenje časa, tudi kadar je napajanje prekinjeno. Z uporabo RTC modula lahko torej vodimo čas za daljše obdobje, četudi je Arduino modul odklopljen od napajanja in se zaradi tega razloga izvajanje programa prekine [55]. Slika 5.1: DS1307 RTC modul Modul uporablja nizko energijski čip realno časovne ure DS1307. Ta uporablja I 2 C (Inter- Integrated Circuit) protokol, ki omogoča, da se več naprav z bolj šibkim prenosom podatkov poveže med seboj. Glavna prednost tega protokola je, da lahko hkrati povežemo do 112 naprav na zgolj dve povezovalni žici. Počasnejši prenos podatkov je še vedno dovolj za mnogo naprav, da uporabljajo ta komunikacijski protokol. Veliko mikrokrmilnikov I 2 C protokol podpira, kakor ga tudi Arduino [57]. DS1307 čip realno časovne ure nam nudi informacije o trenutnem datumu in uri. Najpodrobnejši podatek je sekunda. Zagotavlja podporo za koledar čez celotno leto in se prilagaja tudi prestopnim letom. Ura lahko deluje v 24 ali 12 urnem načinu z indikatorjem za dopoldanski oz. popoldanski čas. Pomemben podatek pa je dejstvo, da ne prestavlja ure na poletni in zimski čas. Da lahko deluje neprekinjeno, ima vgrajeno avtomatsko zaznavanje vira energije, ki ob izpadu napajanja avtomatsko preklopi na rezervno napajanje, kot je baterija. To uporablja le takrat, kadar primarni vir energije ni na voljo [55] [58]. Za pravilno delovanje moramo na začetku določiti trenuten čas, da lahko potem računa od te točke naprej. To vrednost mu lahko posodobimo tudi kadarkoli kasneje, predvsem v primeru, ko preklapljamo med zimskim in poletnim časom ali pa se izprazni baterija. RTC modul ima na voljo 5 priključkov. Mi smo jih uporabili štiri, saj priključka SQW (Square Wave) ne potrebujemo. Dodatno smo potrebovali samo povezovalne kable, s katerimi smo priključke in Arduino modul povezali po tej shemi [55]: 5 V napajanje

60 Stran 40 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami GND skupna ničla SCL (Serial Clock) Arduino analogni priključek št. 5 SDA (Serial data) Arduino analogni priključek št. 4 Za implementacijo ure smo uporabili odprtokodno Arduino knjižnico RTClib, ki smo jo prenesli s spletnega naslova Uporaba te knjižnice nam omogoča, da ne rabimo skrbeti za protokol komunikacije z RTC modulom ter nam olajša uporabo te komponente. Prav zaradi te knjižnice smo morali RTC modul povezati po zgornji shemi, saj knjižnica pričakuje, da sta SCL in SDA priključena na analogna priključka št. 5 in 4. Zaradi I 2 C protokola je potrebna tudi knjižnica Wire, ki je že dobimo zraven Arduino razvojnega okolja [55]. Ker uro uporabljamo na več mestih (avtomatika, senzor zemlje, LCD, ), smo naredili nov razred, ki vsebuje vse potrebne metode povezane s časom. Znotraj razvojnega okolja smo ustvarili dve datoteki Ura.h in Ura.cpp. Osnovna funkcionalnost tega razreda je vračanje trenutnega časa ter računanje koliko sekund, minut in ur je preteklo glede na podan prejšnji čas. Ob kreiranju datoteke Ura.h ter definiranju razreda Ura je bilo potrebno vključiti tudi knjižnico Arduino, ki nam omogoča uporabo Arduino funkcij. V prejšnjem poglavju smo dejali, da Arduino knjižnice ni potrebno vključiti posebej, ko kreiramo nov program. To velja samo v primeru, če pišemo kodo samo v skici in ne uporabljamo lastnih razredov. Takrat je vključevanje Arduino knjižnice potrebno, saj nam bo v nasprotnem primeru prevajalnik javil napako ob prevajanju, če v razredu uporabljamo kakšno izmed funkcij Arduino knjižnice [59]. Dodali smo tudi knjižnico RTClib, ki vsebuje razreda RTC_DS1307 in DateTime. Prvi je namenjen komunikaciji z RTC modulom, drugi pa za shranjevanje vrednosti časa. Smo pa pri tej knjižnici naleteli na nekaj težav pri vključevanju, saj je nismo mogli dodati na enak način kot knjižnico Arduino (Izvorna koda 5.1). Ob enakem vključevanju nam je prevajalnik vedno javil napako, da razredov iz knjižnice RTClib ne najde. Rešitev je v dodajanju knjižnice glede na njeno relativno pot. Sprehoditi smo se morali nekaj map višje v knjigo skic, kjer se nahaja mapa»libraries«, kamor smo knjižnico RTClib prenesli. Znotraj razredov je namreč potrebno vse knjižnice (razen Arduino) dodajati glede na njihovo relativno pot [60].

61 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 41 #ifndef Ura_h #define Ura_h #include "Arduino.h" #include "..\\..\\libraries\\rtclib\\rtclib.h" class Ura public: void inicializiraj(); DateTime getcas(); int preteceneure(datetime *cas); int preteceneminute(datetime *cas); int pretecenesekunde(datetime *cas); private: RTC_DS1307 _rtc; ; #endif Izvorna koda 5.1: Definicija razreda Ura V datoteki Ura.cpp smo implementirali definirane metode. Znotraj metode inicializiraj smo najprej omogočili uporabo RTC modula s klicem funkcije begin (Izvorna koda 5.2). Naslednja vrstica v komentarju je namenjena kalibraciji RTC modula glede na podano vrednost. To vrstico smo izvedli samo enkrat, da smo nastavili trenuten čas. Nastavimo ga z metodo adjust, ki prejme kot parameter objekt tipa DateTime. Trenuten čas smo dobili s sistemskima spremenljivkama DATE in TIME, v katerih je zapisan čas (niz znakov), ko smo na računalniku izvedli prevajanje programa ter ga nato naložili na Arduino modul [55]. Metoda getcas vrača trenutni čas v RTC modulu z uporabo metode now, ki jo ponuja razred RTC_DS1307. Čas vrne v obliki razreda DateTime. Ena izmed metod, ki smo jih napisali za računanje pretečenega časa je funkcija pretecenesekunde (Izvorna koda 5.2). Ta vrne število pretečenih sekund od podanega do trenutnega časa. Za računanje pretečenih sekund smo uporabili funkcijo unixtime razreda DateTime, ki vrne število sekund od [55].

62 Stran 42 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami #include "Arduino.h" #include "Ura.h" /** * Omogoci uporabo ure */ void Ura::inicializiraj() _rtc.begin(); //_rtc.adjust(datetime( DATE, TIME )); /** * Vrne trenuten cas */ DateTime Ura::getCas() return _rtc.now(); /** * Vrne pretecene sekunde glede na podani cas */ int Ura::preteceneSekunde(DateTime *cas) if(cas == NULL) return 0; return (_rtc.now().unixtime() - cas->unixtime()); Izvorna koda 5.2: Implementacija ure Razred Ura smo nato uporabili v glavni datoteki programa (angl. main sketch file) Zalivanje.ino, kjer smo ustvarili instanco razreda Ura. Ker v našem razredu uporabljamo knjižnico RTClib, ki za izvajanje potrebuje tudi knjižnico Wire, smo morali na začetku vključiti obe knjižnici tudi v glavni datoteki programa (Izvorna koda 5.3). Na tem mestu vključevanje knjižnic glede na relativno pot ni potrebno. Dodajanje knjižnic v glavni datoteki programa je nujno zaradi povezovanja knjižnic ob prevajanju programa [60]. V metodi setup glavne datoteke programa je bilo potrebno pripraviti uro za nadaljnjo uporabo. Najprej smo z metodo begin omogočili uporabo I 2 C protokola, ki ga zagotavlja knjižnica Wire (Izvorna koda 5.3). Za tem smo izvedli samo še inicializacijo ure in le ta je pripravljena za nadaljnjo uporabo. Vsi kasnejši razredi, ki bodo želeli uporabljati uro, bodo dobili referenco objekta, ki si jo bodo shranili v kazalec. Vsi razredi torej uporabljajo isto instanco razreda Ura, ki je inicializirana v glavni datoteki programa [61].

63 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 43 #include <Wire.h> #include <RTClib.h> #include "Ura.h" Ura _ura; void setup() Wire.begin(); _ura.inicializiraj(); Izvorna koda 5.3: Inicializacija ure v glavni datoteki programa 5.3 Razvoj senzorja vlage Naslednji pomemben korak je predstavljal razvoj senzorja za merjenje vlažnosti zemlje. Želeli smo namreč, da naša avtomatika ne deluje samo glede na čas, ampak pri odločanju upošteva tudi trenutno vlažnost zemlje. Glede na ta podatek imamo možnost dodajati različne pogoje za vklop in izklop zalivanja. Na trgu je sicer na voljo nekaj naprav za merjenje vlažnosti, vendar je bil naš cilj razviti lastno rešitev, ki bo poceni ter učinkovita. Možna majhna odstopanja izmerjenih rezultatov za nas niso tako kritična. Pomembno je zgolj, da približno vemo kdaj je zemlja dovolj suha ali vlažna, da spremenimo stanje zalivanja. Potrebno je vedeti, da izmerjena vlažnost ne predstavlja dejanske vrednosti vlažnosti zemlje. To je zgolj naša enota, ki jo uporabljamo pri odločanju [62] [63]. Razvili smo senzor, ki meri vlažnost zemlje glede na njeno upornost. Vemo namreč, da se prevodnost zemlje spreminja glede na delež vode v njej. Torej smo predpostavljali, da bo pri manjši vlažnosti upornost zemlje večja ter tako tudi izmerjena napetost manjša. Pri večji vlažnosti pa bi moralo biti ravno obratno. Vpliv deleža soli in temperature na upornost zemlje smo zanemarili. Vrednosti soli v zemlji nas ni zanimala, saj predvidevamo, da se le ta ne bo spreminjala. Drugače je s temperaturo zemlje, ki ima določen vpliv, saj se ob povišani temperaturi upornost prsti zmanjša, ob vedno nižji temperaturi pa se upornost poveča. Vendar predvidevamo, da pri manjših razlikah temperature sprememba upornosti ni tako drastična, zato trenutne temperature prsti pri računanju vlažnosti ne upoštevamo [64].

64 Stran 44 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Za izgradnjo senzorja nismo potrebovali nobene dodatne naprave razen nekaj uporov in električni vodnik. Izbira ustreznega vodnika je pomembna predvsem zaradi trdote, da se ne zvije, medtem ko ga potisnemo v zemljo. Druga pomembna lastnost je material. Ker se senzor nahaja v zemlji, smo morali izbrati takšno kovino, ki ne rjavi ter ima dobro električno prevodnost. Izbrali smo električni vodnik iz bakra s plastičnim ovojem. Izdelava senzorja je bila zelo enostavna. Najprej smo odrezali dva krajša kosa bakrene žice dolžine približno 15 cm. Ker želimo prevodnost meriti samo na ustrezni globini in ne čez celoten vodnik, smo plastični ovitek odstranili samo na koncu obeh vodnikov. Olupili smo okrog 3 cm plastike. Da smo določili konstanten razmik med tipaloma, smo ju fiksirali na razdaljo 8 cm. Predvidevamo, da je ta razmik dovolj velik za računanje povprečne vlažnosti zemlje. Naslednji korak je predstavljal povezavo senzorja z Arduino modulom. Električna vodnika v zemlji smo povezali tako, kot kaže vezalna shema na Slika 5.2. Priključka napajanje 1 in 2 na shemi predstavljata dva Arduino priključka. V našem primeru smo se odločili za dva analogna, ki smo ju uporabljali kot digitalna.»napajanje 1«predstavlja analogni priključek št. 0,»napajanje 2«pa analogni priključek št. 1. Namesto teh dveh priključkov bi lahko uporabili tudi skupno ničlo in vir napetosti na modulu, vendar bi v tem primeru bil senzor vedno pod napetostjo, kar pa ni potrebno. Pod napetostjo ga želimo imeti samo takrat, kadar je potrebno izmeriti vlažnost zemlje [65]. Slika 5.2: Vezalna shema senzorja vlažnosti zemlje Kot je vidno na Slika 5.2, smo pri vezavi uporabili tudi dva upora. 2,2 KΩ upor smo uporabili za ustrezno merjenje napetosti glede na razdaljo vodnikov. Do tega upora smo prišli s poizkušanjem. Iskali smo takšnega, da je pri srednji vlažnosti zemlje izmerjena napetost polovična, okrog 2,5 V. Preizkušanje smo pričeli z uporom vrednosti 100 KΩ. Namesto fiksnega upora, bi bila morda boljša izbira potenciometer z dovolj velikim razponom. Tako bi imeli možnost kalibrirati senzor glede na posamezen tip zemlje [65].

65 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 45 Na vezalni shemi lahko opazimo tudi 100 Ω upor, ki se nahaja med drugim senzorjem in Arduino priključkom. Tega smo dodali zato, da preprečimo morebiten kratek stik, če bi senzor dali v vodo. Merjenje napetosti smo omogočili z analognim priključkom na shemi zgoraj, ki je priključen na analogen priključek št. 2 na Arduino modulu [65]. Ko smo senzor pripravili za uporabo, smo morali še izvesti implementacijo kode, ki bo dejansko izvajala merjenje vlažnosti. Da omogočimo upravljanje z vlažnostjo na več mestih znotraj programa, smo prav tako ustvarili ločen razred za delo s senzorjem vlažnosti zemlje. Kreirali smo dve datoteki SenzorVlaznostiZemlje.h in SenzorVlaznostiZemlje.cpp. Funkcionalnosti razreda SenzorVlaznostiZemlje so vidne v Izvorna koda 5.4: #ifndef SenzorVlaznostiZemlje_h #define SenzorVlaznostiZemlje_h #include "Arduino.h" #include "Ura.h" #define MAX_SENZORJEV 5 //maksimalno st senzorjev #define INTERVAL_SENZORJA 1 //stevilo sekund prikljucene napetosti class SenzorVlaznostiZemlje public: SenzorVlaznostiZemlje(Ura* ura); void inicializiraj(); void dodajsenzor(byte analogen, byte vir1, byte vir2); void preverisenzorje(); void izvediprisilnopreverjanje(); //SET metode void setucenje(boolean ucenje); void setintervalpreverjanja(byte val); //GET metode boolean getucenje(); byte getpovprecnavlaznost(); byte getpovprecnaminvlaznost(); byte getpovprecnamaxvlaznost(); byte getvlaznost(byte senzor); int getnapetost(byte senzor); byte getstevilosenzorjev(); byte getintervalpreverjanja(); DateTime* getzadnjepreverjanje(); private: Ura* _ura; ; #endif Izvorna koda 5.4: Definicija razreda SenzorVlaznostiZemlje

66 Stran 46 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Kot lahko vidimo v definiciji razreda, ta razred uporablja uro, zato mu moramo v konstruktorju podati referenco do instance razreda Ura, ki smo jo ustvarili v glavni datoteki programa. Uro si nato shranimo v kazalec. Druga posebnost je definicija vrednosti MAX_SENZORJEV, ki določa, da je maksimalno število senzorjev 5. V razredu smo namreč omogočili uporabo več senzorjev s katerimi merimo vlažnost. Zaradi tega so tudi na voljo metode, ki vračajo določene povprečne vrednosti. Mi smo v praksi uporabili samo en senzor. V nadaljevanju bomo predstavili predvsem implementacijo merjenja vlažnosti zemlje. Ostale funkcionalnosti so bolj ali manj osnovne in jih ni potrebno dodatno razlagati. Metoda ki jo vedno kličemo, da preveri, če je potrebno izvesti merjenje vlažnosti, se imenuje preverisenzorje. Ta se kliče v metodi loop glavne datoteke programa. Metoda preveri, če je potekel definiran interval minut med posameznimi preverjanji, ter če je vklopljeno prisilno preverjanje vlažnosti. Če je kateri izmed teh pogojev izpolnjen, se izvede merjenje vlažnosti zemlje (Izvorna koda 5.5). void SenzorVlaznostiZemlje::preveriSenzorje() if(_stsenzorjev == 0) return; if ((_preverjanjevlaznosti == true) (_prisilnopreverjanje == true) (_ura->preteceneminute(&_zadnjepreverjanje) >= _intervalpreverjanja)) if(_preverjanjevlaznosti == false) //zacetek preverjanja _temp_stevec = 0; //trenutni senzor _temp_smer = 1 - _temp_smer; //obrnemo smer merjenja napetosti _temp_korak = 1; //trenuten korak merjenja _preverjanjevlaznosti = true; _prisilnopreverjanje = false; preberivrednostisenzorjev(); Izvorna koda 5.5: Preverjanje pogojev za izvajanje merjenja vlažnosti Naslednji pogoj, ki ga preverimo, je trenutno preverjanje vlažnosti. Če se preverjanje ne izvaja, pomeni, da sedaj pričenjamo z merjenjem vlažnosti. Zato je potrebno inicializirati določene spremenljivke. Prva je _temp_stevec, ki kaže na trenuten senzor nad katerim

67 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 47 izvajamo merjenje vlažnosti. Ker smo rekli, da naš razred podpira do 5 senzorjev, moramo iti čez vse senzorje, ki so dodani. Pričnemo s prvim. Druga spremenljivka _temp_smer predstavlja smer merjenja vlažnosti. Napetosti namreč ne smemo meriti vedno v eno smer, saj v tem primeru povečamo delovanje elektrolize 5, ki se pojavi pri enosmernem toku. Da zmanjšamo ta učinek, izmenično izmenjujemo smer napajanja, s čimer obračamo električni naboj na bakrenih vodnikih v zemlji. Spremenljivko uporabljamo zato, da pred vsakim začetkom merjenja vlažnosti spremenimo začetno smer napajanja, ter da pri posameznem merjenju izmerimo napetost v obe smeri. Z dvojnim merjenjem pridobimo na natančnosti rezultata, s spremembo začetne smeri pa drugačen končni naboj na vodnikih po vsakem intervalnem merjenju [65]. Tretja spremenljivka je _temp_korak. Ta določa trenuten korak merjenja vlažnosti pri posameznem senzorju. Rekli smo namreč, da pri posameznem merjenju izmerimo napetost v obe smeri. Ko damo napajalna priključka v ustrezno stanje (eden je vir napetosti, drugi pa skupna ničla), je potrebno nekaj časa počakati, preden izmerimo napetost. To nam omogoča Arduino knjižnica z metodo delay, ki zaustavi izvajanje modula za določeno število milisekund. Vendar se pojavi problem, da je v tem primeru sistem ob vsakem merjenju za nekaj časa neodziven, saj se ustavi celotno izvajanje programa, česar pa ne želimo. Zato smo uporabili uro in spremenljivko _temp_korak, ki nam pove v katerem stanju je trenutno merjenje senzorja. Koraki merjenja so štirje. V posameznem koraku se izvedejo naslednja dejanja: korak 1: priključitev napetosti glede na smer korak 2: merjenje napetosti korak 3: priključitev napetosti v obratni smeri korak 4: merjenje napetosti ter računanje povprečne vrednosti obeh merjenj Ko izvedemo to inicializacijo spremenljivk ob pričetku merjenja vlažnosti, še pokličemo metodo preberivrednostisenzorjev, ki se kasneje tudi vedno pokliče med izvajanjem merjenja. Metoda namreč preveri v katerem koraku je trenuten senzor ter izvede ustrezno dejanje. Po vsakem končanem koraku vedno pokličemo metodo povecajkorak, ki določi 5 Elektrolíza je kemijski postopek, s pomočjo katerega se izvaja redukcija in oksidacija kemijskih elementov oz. spojin [82].

68 Stran 48 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami naslednji korak ter po možnosti poveča števec trenutnega senzorja. Obe metodi sta razvidni v Izvorna koda 5.6. void SenzorVlaznostiZemlje::preberiVrednostiSenzorjev() if(_temp_stevec >= _stsenzorjev) //koncaj preverjanje vlaznosti _zadnjepreverjanje = _ura->getcas(); izracunajvlaznost(); izracunajpovprecnovlaznost(); _preverjanjevlaznosti = false; return; //korak 1 ali 3 je napajanje prikljuckov glede na smer if(_temp_korak == 1 _temp_korak == 3) _temp_smer = 1 - _temp_smer; //zamenjamo smer napetosti prikljucinapetost(_temp_stevec, _temp_smer); povecajkorak(); //izvede se merjenje napetosti, ce je pretekel definiran interval else if(_ura->pretecenesekunde(&_temp_caspreverjanja) >= INTERVAL_SENZOR) if (_temp_korak == 2) //preberemo napetost _vrednosti[_temp_stevec] = preberinapetost(_temp_stevec, _temp_smer); else if (_temp_korak == 4) //pristejemo napetost in delimo z 2 _vrednosti[_temp_stevec] += preberinapetost(_temp_stevec,_temp_smer); _vrednosti[_temp_stevec] /= 2; povecajkorak(); void SenzorVlaznostiZemlje::povecajKorak() _temp_caspreverjanja = _ura->getcas(); if (_temp_korak < 4) _temp_korak++; else _temp_korak = 1; _temp_stevec++; Izvorna koda 5.6: Koraki merjenja vlažnosti

69 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 49 Ko je _temp_stevec večji ali enak številu dodanih senzorjev, pomeni da je merjenje vlažnosti pri koncu. Takrat je potrebno izračunati vlažnost v procentih glede na napetost ter končati izvajanje merjenja. Zapomnimo si tudi čas zadnjega preverjanja, ki nam služi za ugotavljanje naslednjega merjenja glede na interval. V Izvorna koda 5.6 lahko vidimo, da pri posameznem koraku priključimo ali izmerimo napetost. Pred vsakim merjenjem napetosti pa vedno preverimo, če je pretekel interval napajanja senzorja. Med vsako spremembo koraka se v metodi povecajkorak shrani trenuten čas. Glede na ta čas lahko preverimo, če je ustrezen interval čakanja že potekel, da lahko preberemo napetost. Priključevanje in branje napetosti izvajamo z metodama prikljucinapetost in preberinapetost (Izvorna koda 5.7). V metodi prikljucinapetost najprej oba napajalna priključka določimo kot izhodna z metodo pinmode. Ker smo na začetku dejali, da bomo za napajalna priključka senzorja uporabili analogna priključka št. 0 in 1, smo s to metodo hkrati določili, da bosta delovala kot digitalna priključka. Nato smo preverili smer napajanja in glede na ta pogoj določili kateri priključek bo deloval kot vir 5 V napetosti (HIGH) in kateri kot skupna ničla (LOW). [44]. Smer napajanja smo morali upoštevati tudi pri branju napetosti. Vrednost napetosti smo prebrali z metodo analogread, ki vrne vrednosti od 0 do 1023, kar predstavlja napetost od 0 do 5 V. Če gre električni tok v smeri od priključka, kamor je priključen analogni priključek za merjenje napetosti do drugega priključka, moramo izmerjeno vrednost odšteti od Na ta način pridemo do pravilnega rezultata, saj merimo napetost preden tok steče skozi zemljo do drugega priključka. Nato prekličemo napajanje priključkov s tem, da ju določimo kot vhodna (INPUT) ter vrnemo izmerjeno vrednost napetosti [65].

70 Stran 50 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami void SenzorVlaznostiZemlje::prikljuciNapetost(byte senzor, byte smer) if(senzor >= _stsenzorjev) return; //nastavimo kot izhodna prikljucka pinmode(_prikljucekvir_1[senzor], OUTPUT); pinmode(_prikljucekvir_2[senzor], OUTPUT); //preveri smer napajanja if(smer == 1) digitalwrite(_prikljucekvir_1[senzor], LOW); digitalwrite(_prikljucekvir_2[senzor], HIGH); else digitalwrite(_prikljucekvir_1[senzor], HIGH); digitalwrite(_prikljucekvir_2[senzor], LOW); int SenzorVlaznostiZemlje::preberiNapetost(byte senzor, byte smer) if(senzor >= _stsenzorjev) return 0; int vrednost = analogread(_prikljuceksenzor[senzor]); if(smer == 0) //ce je obratna smer gre napetost proti 0 vrednost = vrednost; //preklicemo napajanje prikljuckov pinmode(_prikljucekvir_1[senzor], INPUT); pinmode(_prikljucekvir_2[senzor], INPUT); return vrednost; Izvorna koda 5.7: Priključevanje in branje napetosti senzorja Dodatna funkcionalnost razreda SenzorVlaznostiZemlje je učenje. To nam namreč omogoča, da takrat, kadar je učenje omogočeno, posodabljamo minimalne in maksimalne vrednosti senzorjev. To funkcionalnost smo uporabili tudi pri avtomatiki zalivanja, ki sledi v naslednjem podpoglavju. Po vsakem končanem preverjanju vlažnosti pokličemo metodo izracunajvlaznost, ki gre čez vse senzorje in izračuna posamezno vlažnost. Če je učenje omogočeno, tudi posodobi minimalne in maksimalne vrednosti napetosti posameznih senzorjev (Izvorna koda 5.8). Vlažnost zemlje izražamo v procentih, zato je potrebno izmerjeno napetost pretvoriti v vrednost od 0 do 100. Uporabili smo funkcijo map, ki jo ponuja Arduino knjižnica. Metoda nam pretvori vrednost iz intervala od 0 do 1023 v interval od 0 do 100.

71 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 51 void SenzorVlaznostiZemlje::izracunajVlaznost() for (int i = 0; i < _stsenzorjev; i++) //preveri max vrednost, ce je omogoceno ucenje if(_ucenje && _vrednosti[i] > _maxvred[i]) _maxvred[i] = _vrednosti[i]; //preveri min vrednost, ce je omogoceno ucenje if(_ucenje && _vrednosti[i] < _minvred[i]) _minvred[i] = _vrednosti[i]; //posodobi vlaznost _vlaznost[i] = map(_vrednosti[i], 0, 1023, 0, 100); Izvorna koda 5.8: Učenje in računanje vlažnosti 5.4 Implementacija avtomatike zalivanja Avtomatika zalivanja predstavlja vso logiko povezano z odločitvami kdaj pričeti in končati z zalivanjem. To funkcionalnost smo implementirali v razredu Avtomatika. Definicija tega razreda je predstavljena v Izvorna koda 5.9 in Izvorna koda Z definicij metod lahko razberemo vse funkcionalnosti, ki jih razred nudi. Konstruktor razreda vsebuje tri parametre: senzor vlažnosti, uro in priključek za krmiljenje rele 6 stikala. Prvi dve spremenljivki predstavljata referenco objektov inicializiranih v glavni datoteki programa, tretji parameter pa predstavlja številko priključka s katerim bomo krmilili rele. Na ta način bomo lahko izvedli dejanski vklop in izklop zalivanja. Kadar bo ta priključek pod napetostjo, bo rele omogočil, da električni tok zunanjega napajanja steče skozenj. Ko priključek ni pod napetostjo, je prehod električnega toka onemogočen. Ta razred nam omogoča preverjanje pogojev za vklop in izklop zalivanja. Na voljo imamo več parametrov nad katerimi preverjamo pogoje. Vsi ti so dinamični in jih lahko spreminjamo med izvajanjem. Avtomatika prav tako podpira funkcionalnost učenja, pri čemer spremlja spreminjanje vlažnosti zemlje, medtem ko je zalivanje izklopljeno. Poskrbeli smo tudi za varovalen mehanizem, če po določenem času zalivanja ne pride do 6 Rele je elektronsko stikalo, ki je namenjeno krmiljenju (vklop / izklop) električnega toka s signalom nizke napetosti [83].

72 Stran 52 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami spremembe vlažnosti zemlje. V tem primeru zalivanje prekinemo ter onemogočimo za določen čas. #ifndef Avtomatika_h #define Avtomatika_h #include "Arduino.h" #include "SenzorVlaznostiZemlje.h" class Avtomatika public: Avtomatika(SenzorVlaznostiZemlje* senzorvlaznosti, Ura* ura, byte relepin); void inicializiraj(); void preverizalivanje(); void pricnizalivanje(); void koncajzalivanje(); byte trenutnavlaznost(); void omogocizalivanje(); void onemogocizalivanje(); void vklopiucenje(); void izklopiucenje(); //SET metode void setvklopvlaznost(byte vlaznost); void setvklopinterval(byte interval); //ure void setvklopura(byte ura); void setizklopvlaznost(byte vlaznost); void setizkloptrajanje(byte trajanje); //minute void setvarvlaznostinterval(byte minute); void setvarvlaznostrazlika(byte razlika); void setvarizkloptrajanje(byte minute); //GET metode boolean jezalivanjeomogoceno(); boolean sezalivanjeizvaja(); boolean jeucenjevklopljeno(); byte getvklopvlaznost(); //procenti vlaznosti byte getvklopinterval(); //ure byte getvklopura(); byte getizklopvlaznost(); //procenti vlaznosti byte getizkloptrajanje(); //minute DateTime* getzacetekzalivanja(); DateTime* getkoneczalivanja(); int gettrajanjezalivanja(); //minute byte getvarvlaznostinterval(); //minute byte getvarvlaznostrazlika(); //procenti vlaznosti byte getvarizkloptrajanje(); //minute boolean getvarizklop(); //ce se je izvedel varovalni izklop Izvorna koda 5.9: Definicija razreda Avtomatika (1. del)

73 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 53 private: void preverivklopzalivanja(); void preveriizklopzalivanja(); boolean varspremembavlaznosti(); byte _relepin; SenzorVlaznostiZemlje* _senzorvlaznosti; Ura* _ura; ; #endif Izvorna koda 5.10: Definicija razreda Avtomatika (2. del) Glavno krmilno metodo razreda Avtomatika predstavlja preverizalivanje (Izvorna koda 5.11). To metodo namreč nenehno kličemo v metodi loop glavne datoteke programa, da preverjamo trenutno stanje avtomatike. Znotraj metode najprej preverimo, če se je mogoče pred kratkim izvedel varovalni izklop zalivanja. V primeru, da je do tega prišlo in je pretekel čas varovalnega izklopa, zalivanje ponovno omogočimo. V nadaljevanju (če je zalivanje omogočeno) preverimo vklopne pogoje kadar se zalivanje ne izvaja ter izklopne kadar je zalivanje v teku. void Avtomatika::preveriZalivanje() //ce je prislo do varovalnega izklopa if(_var_izklop == true) if(_ura->preteceneminute(&_var_prejsnjavlaznostcas) < _var_izkloptrajanje) return; else _var_izklop = false; omogocizalivanje(); //preskoci ce zalivanje ni omogoceno if(_zalivanjeomogoceno == false) return; if(_zalivanjepoteka == false) preverivklopzalivanja(); else preveriizklopzalivanja(); Izvorna koda 5.11: Preverjanje stanja zalivanja

74 Stran 54 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Pogoje za vklop zalivanja preverjamo v metodi preverivklopzalivanja (Izvorna koda 5.12). Odločamo se glede na tri parametre: minimalna vlažnost za vklop (če je vlažnost manjša ali enaka tej vrednosti) interval zalivanja (zalivamo na določene urne intervale) uro vklopa zalivanja (zalivanje izvedemo ob določeni uri) void Avtomatika::preveriVklopZalivanja() if(_zalivanjepoteka == true) return; //preveri vlaznost if(trenutnavlaznost() > _vklopvlaznost) return; //preveri interval if(_vklopinterval > 0 && _ura->preteceneure(&_koneczalivanja) < _vklopinterval) return; //preveri uro vklopa if (_vklopura < 24 && _ura->getcas().hour()!= _vklopura) _urnivklopizveden = false; //ponastavitev return; else if (_vklopura < 24 &&!_urnivklopizveden && _ura->getcas().hour() == _vklopura) _urnivklopizveden = true; //shranimo, da smo urni vklop izvedli //vsi definirani pogoji drzijo -> pricni zalivanje pricnizalivanje(); void Avtomatika::pricniZalivanje() if(_zalivanjepoteka == false && _zalivanjeomogoceno) _zalivanjepoteka = true; digitalwrite(_relepin, HIGH); _zacetekzalivanja = _ura->getcas(); _var_izklop = false; _var_prejsnjavlaznostcas = _ura->getcas(); _var_prejsnjavlaznost = trenutnavlaznost(); Izvorna koda 5.12: Preverjanje pogojev za vklop zalivanja

75 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 55 Da pričnemo z zalivanjem morajo biti vsi pogoji izpolnjeni. Preverjamo pa samo tiste, ki imajo definirane vrednosti. Po vrsti gremo čez vse posamezne parametre. Če naletimo na katerega, ki ima definirano vrednost, vendar pogoj ni izpolnjen, preverjanje prekinemo. V primeru, da pridemo do konca metode (vsi definirani pogoji so izpolnjeni), pričnemo z zalivanjem. Pri preverjanju izklopnih pogojev pa je nekoliko drugače. V metodi preveriizklopzalivanja preverjamo, če je katerikoli pogoj izpolnjen (Izvorna koda 5.13). To je pomembno tudi iz varnostnega stališča, saj tako preprečimo čakanje v nedogled, da se vsi pogoji izpolnijo. V tem primeru se zalivanje ne bi nikoli končalo. Preverjamo tri parametre: varnostno spremembo vlažnosti (če se je v določenem intervalu vlažnost spremenila za določen interval) izklopno vlažnost (če je trenutna vlažnost večja ali enaka izklopni vrednosti) trajanje zalivanja (če je določeno trajanje zalivanja v minutah) void Avtomatika::preveriIzklopZalivanja() if(_zalivanjepoteka == false) return; //ce ni prislo do spremembe vlaznosti -> varnostni izklop if(varspremembavlaznosti() == false) _var_izklop = true; onemogocizalivanje(); else if(_izklopvlaznost <= trenutnavlaznost()) koncajzalivanje(); else if(_izkloptrajanje > 0 && _izkloptrajanje <= _ura->preteceneminute(&_zacetekzalivanja)) koncajzalivanje(); void Avtomatika::koncajZalivanje() if(_zalivanjepoteka) _zalivanjepoteka = false; digitalwrite(_relepin, LOW); _koneczalivanja = _ura->getcas(); Izvorna koda 5.13: Preverjanje pogojev za izklop zalivanja

76 Stran 56 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Pri preverjanju izklopnih pogojev prav tako preverjamo samo tiste parametre, ki so definirani. Varnostno spremembo vlažnosti preverjamo s funkcijo varspremembavlaznosti, ki vrne false, če je pretekel interval preverjanja varovalne vlažnosti in je sprememba manjša od definirane. V vseh drugih primerih vrne true in varnostnega izklopa ne izvedemo. boolean Avtomatika::varSpremembaVlaznosti() if(_ura->preteceneminute(&_var_prejsnjavlaznostcas) >= _var_vlaznostinterval) _var_prejsnjavlaznostcas = _ura->getcas(); if(trenutnavlaznost() - _var_prejsnjavlaznost < _var_vlaznostrazlika) return false; //sprememba vlaznosti ni zadostna else _var_ prejsnjavlaznost = trenutnavlaznost(); return true; //sprememba vlaznosti je zadostna return true; //cas za preverjanje se ni potekel Izvorna koda 5.14: Varnostno preverjanje vlažnosti Na začetku tega podpoglavja smo dejali, da avtomatika podpira učenje, ki ga omogoča senzor vlažnosti. Če želimo uporabiti to funkcionalnost, je potrebno učenje krmiliti z metodama vklopiucenje in izklopiucenje (Izvorna koda 5.15). S tema metodama se v primeru, kadar vklopimo učenje, onemogoči izvajanje zalivanja ter nato spet omogoči, ko učenje izklopimo. Na ta način zagotovimo, da zalivanje avtomatike ne vpliva na spremembo vlažnosti. Ob končanju procesa učenja si avtomatika shrani pridobljeni povprečni minimalni in maksimalni vrednosti senzorja vlažnosti. Ti vrednosti se nato samodejno določita kot vklopna in izklopna vlažnost za zalivanje. S to funkcionalnostjo lahko z ročnim zalivanjem z zalivalnico na enostaven način pridemo do ustreznih vklopnih in izklopnih parametrov.

77 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 57 void Avtomatika::vklopiUcenje() if(_senzorvlaznosti->getucenje() == false) onemogocizalivanje(); _senzorvlaznosti->setucenje(true); void Avtomatika::izklopiUcenje() if(_senzorvlaznosti->getucenje()) _senzorvlaznosti->setucenje(false); _vklopvlaznost = _senzorvlaznosti->getpovprecnaminvlaznost(); _izklopvlaznost = _senzorvlaznosti->getpovprecnamaxvlaznost(); omogocizalivanje(); Izvorna koda 5.15: Vklop in izklop učenja avtomatike 5.5 Razvoj temperaturnega senzorja Našemu sistemu smo zraven dodali še senzor temperature zraka. Ta sam po sebi nima nobenega vpliva na odločanje avtomatike, ampak zgolj ponuja dodatne informacije o okolici. Trenutno temperaturo namreč želimo prikazati na LCD zaslonu. Uporabili smo DS18B20 digitalen temperaturni senzor (Slika 5.3 [66]). Slika 5.3: DS18B20 temperaturni senzor Senzor vsebuje 3 priključke, ki smo jih povezali po shemi, kot kaže Slika 5.4. Vezava je enostavna, dodatno smo potrebovali zgolj 4,7 KΩ upor, ki ga je potrebno povezati med priključek DQ in vir napetosti. Z Arduino modulom je povezan preko enega samega priključka, ki je prav tako povezan na DQ. Priključek je lahko digitalen, saj senzor pošilja

78 Stran 58 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami digitalen signal. Mi smo v našem primeru uporabili analogen priključek A3, ki se bo obnašal kot digitalen [67]. Slika 5.4: Vezalna shema temperaturnega senzorja Za komunikacijo temperaturni senzor DS18B20 uporablja 1-Wire protokol, ki je podoben I 2 C protokolu, le da zagotavlja manjši prenos podatkov z daljšim dosegom. 1-Wire protokol omogoča, da lahko na samo eno povezavo priključimo do 127 senzorjev hkrati in z njimi brez težav komuniciramo. V praksi nam to omogoča uporabo zgolj enega Arduino priključka, če želimo uporabljati več temperaturnih senzorjev hkrati [67] [68]. Za enostavnejšo uporabo temperaturnega senzorja smo s spleta prenesli dve odprtokodni knjižnici. OneWire knjižnico, ki omogoča uporabo 1-Wire protokola, smo našli na naslovu Druga knjižnica se imenuje DallasTemperature in omogoča enostavno upravljanje s temperaturnimi senzorji ob uporabi OneWire knjižnice, ki je nujna za delovanje. Prenesli smo jo z naslova Ker smo dejali, da podatek o temperaturi okolice ne bo vplival na krmiljenje avtomatike zalivanja, ni potrebe po tem, da ustvarimo za temperaturo nov razred. Tudi sama uporaba knjižnic je enostavna in ni potrebe po dodatnih funkcijah. Kljub temu smo za upravljanje s temperaturnim senzorjem ustvarili novo datoteko, ki pa ni razred. V odseku»4.3.1 Več datotečni program«smo dejali, da Arduino podpira več datotečne programe. Te datoteke so lahko razredi (».h«in».cpp«) ali pa imamo več datotek končnice».ino«, ki so v zavihkih Arduino razvojnega okolja vidne brez končnic. Te dodatne datoteke se nato ob prevajanju združijo v eno samo glavno datoteko programa. Zaradi boljše preglednosti smo izkoristili to funkcionalnost ter ustvarili novo datoteko, ki smo jo poimenovali Temperatura. V novi datoteki smo najprej vključili obe potrebni knjižnici ter ustvarili instance dveh potrebnih razredov OneWire in DallasTemperature (Izvorna koda 5.16). Konstruktorju

79 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 59 razreda OneWire je potrebno dodati priključek, na katerega je temperaturni senzor priključen. V našem primeru je to analogni priključek A3. Razredu DallasTemperature je nato potrebno dodati referenco na to instanco razreda. Na ta način lahko knjižnica uporablja 1-Wire protokol. Deklarirali smo tudi spremenljivko tipa DeviceAddress, kamor si shranimo naslov temperaturnega senzorja. Ta naslov je nekaj podobnega kot MAC naslov pri mrežnih karticah, saj je edinstven za vsak DS18B20 temperaturni senzor. Preko tega naslova lahko pridobimo temperaturo specifičnega senzorja [40]. #include <OneWire.h> #include <DallasTemperature.h> #define TEMP_SENZOR A3 OneWire _onewire(temp_senzor); DallasTemperature _temp_senz(&_onewire); DeviceAddress _senzornaslov; DateTime _zadnjepreverjanje; void inittemperatura() _temp_senz.begin(); _temp_senz.getaddress(_senzornaslov, 0); preberitemperaturo(); void preveritemperaturo() if(_ura.preteceneminute(&_zadnjepreverjanje) > 0) preberitemperaturo(); void preberitemperaturo() _temp_senz.requesttemperatures(); _temperatura = _temp_senz.gettempc(_senzornaslov); _zadnjepreverjanje = _ura.getcas(); Izvorna koda 5.16: Implementacija temperaturnega senzorja Pred pričetkom uporabe je senzor potrebno inicializirati. V metodi inittemperatura smo to storili z metodo begin. Sedaj ko je senzor pripravljen za uporabo, smo si samo še shranili naslov senzorja ter izvedli branje temperature, ki ga naredi metoda preberitemperaturo. Pred branjem temperature je vedno potrebno poklicati metodo requesttemperatures, ki izmeri temperaturo vseh priključenih senzorjev. Šele ko se to izvede, lahko preberemo temperaturo specifičnega senzorja, ki jo dobimo s funkcijo gettempc s podanim naslovom senzorja. Glede na to, da imamo priključen samo en senzor, bi lahko uporabili tudi

80 Stran 60 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami funkcijo gettempcbyindex, ki vrne temperaturo senzorja glede na indeks (v našem primeru bi bil 0). Ta metoda je uporabna, vendar ne zagotavlja enakega vrstnega reda, kot so senzorji fizično priključeni na žico. Zaradi tega smo naslov senzorja uporabili namenoma, da prikažemo kako se izvaja branje temperature v primeru, če imamo priključenih več temperaturnih senzorjev, ki merijo različne temperature [40]. Prebrano temperaturo shranimo v spremenljivko _temperatura ter si shranimo čas zadnjega preverjanja. Opazimo lahko, da spremenljivka _temperatura ni definirana v tej datoteki. Potrebno jo je bilo definirati v glavni datoteki programa. Na začetku smo imeli spremenljivko definirano v datoteki Temperatura, a s kasnejšem dodajanju dodatnih datotek, nekatere ostale niso imele dostopa do te spremenljivke. S poizkušanjem smo ugotovili, da se ob prevajanju h glavni datoteki programa dodatne datoteke dodajajo po vrstnem redu, ki je abecedni. V tem primeru so imele do spremenljivke _temperatura dostop samo datoteke, ki so bile po abecedi za datoteko Temperatura. Da smo se izognili temu problemu, smo spremenljivko definirali v glavni datoteki programa. Ker ne želimo, da se preverjanje temperature izvaja nenehno, smo dodali metodo preveritemperaturo (Izvorna koda 5.16). Ta preveri, če je od zadnjega preverjanja pretekla vsaj 1 minuta ter ob izpolnjenem pogoju tudi prebere temperaturo. Metodo preveritemperaturo zato kličemo v metodi loop glavne datoteke programa, da zagotovimo nenehno posodabljanje trenutne temperature. 5.6 Uporaba LCD zaslona Za izpis osnovnih informacij o stanju sistema smo uporabili LCD zaslon Winstar WH1602B (Slika 5.5). Zaslon ima za izpis na voljo dve vrstici po 16 znakov. Tej velikosti primerno smo morali tudi določiti podatke, ki jih bomo izpisali. Izbrali smo trenuten čas, ki ne prikazuje sekund, temperaturo v C in vlago zemlje. Ostalo nam je še nekaj prostora, ki smo ga porabili kasneje v fazi testiranja.

81 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 61 Slika 5.5: LCD zaslon WH1602B Vezava LCD zaslona zahteva nekaj več pozornosti, saj zaslon ponuja kar 16 priključkov. Uporabili nismo vseh, saj so štirje ostali nepovezani (priključki 7-10). Povezava zaslona je zapisana v Tabela 5.1 [69], pri čemer so v prvem stolpcu zapisani viri povezave, kamor smo priključili posamezen priključek LCD zaslona (drugi stolpec). Dodan je še opis posameznega priključka, ki pove čemu je namenjen [40]. Tabela 5.1: Vezava priključkov LCD zaslona Vir povezave LCD zaslon (priključek) Opis Skupna ničla (GND) 1 Vss Skupna ničla 5 V 2 Vdd 5 V vir napetosti Potenciometer 3 Vo Kontrast Digitalen priključek 9 4 RS Signal za izbiro registra Skupna ničla (GND) 5 R/W Signal za branje/pisanje Digitalen priključek 8 6 E Signal za aktivacijo Digitalen priključek 7 11 DB4 Podatkovna povezava Digitalen priključek 6 12 DB5 Podatkovna povezava Digitalen priključek 5 13 DB6 Podatkovna povezava Digitalen priključek 3 14 DB7 Podatkovna povezava 5 V Ω upor 15 LED + Vir napetosti za osvetlitev Skupna ničla (GND) 16 LED - Skupna ničla za osvetlitev

82 Stran 62 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Za določanje kontrasta smo uporabili potenciometer, ki omogoča dinamično spreminjanje upornosti. Na ta način lahko ročno prilagajamo kontrast med samo uporabo. Med 15. priključek za osvetlitev (LED +) in 5 V vir napetosti smo dali 220 Ω upor, da smo nekoliko zmanjšali osvetlitev na bolj primerno svetlobo. Posebnost je tudi priključek št. 5 (R/W). Tega smo priključili na skupno ničlo. Ta priključek omogoča pisanje in branje vrednosti z zaslona. Ker pri nas pride v poštev samo pisanje na zaslon, ga lahko priključimo direktno na skupno ničlo. Če bi uporabljali obe možnosti, bi ga bilo potrebno priključiti na enega izmed Arduino priključkov, s čemer bi lahko spreminjali način delovanja [70]. Zaslone, ki so kompatibilni s Hitachi HD44780 gonilnikom, lahko upravljamo v 4 ali 8 bitnem načinu. 4 bitni način zahteva 7 Arduino priključkov, med tem ko jih 8 bitni potrebuje 11. Za prikaz teksta na zaslonu nam zadošča 4 bitni, ki smo ga uporabili mi. Zaradi tega so 4 priključki na LCD zaslonu ostali nepovezani. Če še enkrat pogledamo Tabela 5.1, lahko opazimo, da smo mi uporabili zgolj 6 priključkov na Arduino modulu. Do razlike je prišlo, ker smo zaslon uporabili samo za pisanje in smo 5. priključek povezali direktno na skupno ničlo [70]. Za delo z zasloni, ki so kompatibilni s Hitachi HD44780 gonilnikom, imamo na voljo knjižnico LiquidCrystal, ki jo že dobimo zraven Arduino razvojnega okolja. Knjižnico smo uporabili v ločeni datoteki programa imenovani Zaslon (Izvorna koda 5.17), kjer krmilimo izpis podatkov na zaslon. Ta datoteka se ob prevajanju prav tako združi z glavno datoteko programa [70]. #include <LiquidCrystal.h> LiquidCrystal _lcd(9, 8, 7, 6, 5, 3); //definiramo znak za stopinjo byte _stopinja[8] = B00010, B00101, B00010, B00000, B00000, B00000, B00000, B00000; float _temptemperatura; byte _tempminuta; byte _tempvlaga; void initzaslon() _lcd.begin(16,2); _lcd.createchar(1, _stopinja); //dodamo znak izpisizaslon(); Izvorna koda 5.17: Inicializacija LCD zaslona

83 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 63 Konstruktor razreda LiquidCrystal zahteva številke priključkov na katere je LCD zaslon priključen, da lahko preko teh poteka komunikacija. Priključki so podani v tem vrstnem redu: RS, E, DB4, DB5, DB6, DB7. Sledi naslednja spremenljivka, ki je tabela tipa byte. To tabelo smo uporabili za definicijo posebnega znaka, ki ga izpišemo na zaslon. Ker zaslon ne podpira znaka za stopinjo ( ), smo ga ustvarili sami. LCD zaslon nam namreč omogoča dodajanje do 8 lasnih znakov [71]. Posamezen znak je velikosti 5 točk v širino in 8 točk v višino. Tabela vsebuje 8 elementov, od katerih vsak predstavlja posamezno vrstico. Indeksi vrstic si sledijo od zgoraj navzdol. Posamezen element v tabeli je dolžine 5 znakov, kar pomeni posamezno točko v vrstici od leve proti desni. Če želimo, da je posamezna točka obarvana, zapišemo vrednost 1, v nasprotnem primeru pa 0. Primer stopinje vidimo v Tabela 5.2 [71]. Tabela 5.2: Definicija kode znaka za stopinjo V metodi initzaslon pripravimo LCD zaslon za izpis podatkov. Najprej omogočimo delovanje knjižnice z metodo begin, saj je potrebno podati velikost zaslona, katerega bomo krmilili. V našem primeru 16 znakov po 2 vrstici. Za tem smo z metodo createchar ustvarili znak za stopinjo z indeksom 1. Preko tega indeksa lahko kasneje ta znak izrišemo na zaslon. Metoda preveriizpiszaslona (kličemo jo v metodi loop glavne datoteke programa) preverja, če je pri katerem podatku, ki ga izpisujemo, prišlo do spremembe (Izvorna koda 5.18). Preverjamo temperaturo, čas in vlago. V primeru katerekoli spremembe se izvede ponoven izpis na zaslon, ki poteka v metodi izpisizaslon. V tej metodi si najprej shranimo začasne vrednosti na podlagi katerih vedno preverjamo spremembe ter počistimo zaslon z metodo clear. Čiščenje zaslona je potrebno, saj v nasprotnem primeru posamezni znaki, ki

84 Stran 64 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami jih ne prepišemo ostanejo na zaslonu. Pred začetkom pisanja z metodo setcursor postavimo kazalec (angl. cursor) na začetek prve vrstice. void preveriizpiszaslona() if(_temptemperatura!= _temperatura _tempminuta!= _ura.getcas().minute() _tempvlaga!= _avtomatikazalivanja.trenutnavlaznost()) izpisizaslon(); void izpisizaslon() _temptemperatura = _temperatura; _tempminuta = _ura.getcas().minute(); _tempvlaga = _avtomatikazalivanja.trenutnavlaznost(); _lcd.clear(); _lcd.setcursor(0,0); DateTime cas = _ura.getcas(); char ura[] = "12:00"; _ura.geturaminute(ura, &cas); _lcd.print(ura); _lcd.print(" T="); _lcd.print(_temperatura); _lcd.write(1); //izpisemo stopinjo _lcd.print("c"); _lcd.setcursor(0,1); _lcd.print("vlaga="); _lcd.print(_tempvlaga); _lcd.print("% "); Izvorna koda 5.18: Izpis podatkov na LCD zaslon Za potrebe izpisa časa na zaslon smo v razredu Ura ustvarili metodo geturaminute, ki ji kot parameter podamo tabelo znakov ter trenuten čas. V to tabelo nam metoda zapiše trenuten čas (ura in minuta) z znaki. Posebno metodo za oblikovanje trenutne ure smo potrebovali, ker razred DateTime ne ponuja nobene metode, ki bi trenuten čas vrnila kot niz znakov. Prav tako smo želeli, da je posamezna enota ure prikazana z dvema znakoma (npr.»02«in ne»2«). Tako ura na zaslonu vedno zasede fiksno število znakov. Najprej smo želeli niz sestaviti kot tip String, saj omogoča enostavnejše delo z nizi. Problem je nastal zaradi porabe pomnilnika, saj je program po nekaj trenutkih preprosto

85 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 65 prenehal delovati. Rešitev smo našli z uporabo tabele znakov, ki pa zahteva nekoliko več dela s pretvarjanjem vrednosti iz tipa int. Posamezno vrednost smo na zaslon izpisali z metodo print. Posebnost je znak za stopinjo, kjer smo uporabili metodo write, ki smo ji podali indeks kreiranega znaka. Ob izpisu podatkov na zaslon se kazalec samodejno premika na naslednji znak. Metodo setcursor smo nato ponovno uporabili za premik v drugo vrstico. 5.7 Razvoj bluetooth komunikacije Zaradi lažjega krmiljenja Arduino modula smo se odločili, da sistemu dodamo možnost komunikacije preko BT povezave. Ker model Uno ne omogoča te možnosti komunikacije, smo uporabili BT modul JY-MCU (Slika 5.6 [72]). Slika 5.6: BT modul JY-MCU Povezava BT modula je preprosta, saj ima na voljo samo 4 priključke in ni potrebe po nobenih dodatnih komponentah. Priključke smo povezali tako kot kaže shema na Slika 5.7. Dva priključka sta namenjena napajanju (VCC in GND), dva pa komunikaciji (TXD in RXD). Slika 5.7: Vezalna shema BT modula Komunikacija BT modula poteka preko serijske povezave, zato je potrebno komunikacijska priključka povezati z ustreznima serijskima priključkoma na Arduino modulu. Pri modelu Uno sta to digitalna priključka št. 0 (RX) in 1 (TX). Ti dve oznaki lahko tudi vidimo na strani 13 na Slika 3.1. Priključek z oznako TX je namenjen pošiljanju

86 Stran 66 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami (angl. transfer) podatkov in ga je potrebno povezati z RX priključkom, ki je namenjen sprejemanju (angl. receive) podatkov [53]. Vse kar moramo pri serijski povezavi vedeti je, da moramo vedno križno povezati RX in TX priključke na napravah. Se pravi TX in RX morata biti vedno povezana med seboj, da lahko napravi komunicirata. To je pomembno, saj preko iste povezave en modul podatke oddaja (TX priključek), drugi pa jih z RX priključkom sprejema. Serijsko komunikacijo Arduino modul uporablja tudi za komunikacijo z računalnikom preko USB povezave. Omenili smo že, da Arduino razvojno okolje vsebuje podporo za serijsko komunikacijo z Arduino moduli. Serijska komunikacija, ki jo uporabljamo za delo z BT modulom, je enaka kot ta, ki jo uporabljamo za komunikacijo z računalnikom. Zaradi tega ne moremo uporabljati digitalnih priključkov 0 in 1 hkrati s serijsko komunikacijo preko USB povezave [53]. Ta problem smo opazili, ko smo BT modul povezali z Arduino modulom. Med nalaganjem prevedenega programa preko USB povezave je namreč Arduino razvojno okolje javilo napako pri nalaganju. Takoj ko smo BT modul odklopili s priključkov št. 0 in 1, je bilo nalaganje spet uspešno. Ko je program naložen, lahko BT modul spet priključimo nazaj ter normalno uporabljamo serijsko povezavo. Za enostavnejšo komunikacijo preko bluetooth povezave smo uporabili knjižnico MeetAndroid. Vendar uporaba te knjižnice ni nujna. Komuniciramo lahko tudi direktno preko serijske povezave z uporabo razreda Serial, ki je že del Arduino razvojnega okolja. Za uporabo MeetAndroid knjižnice smo se odločili zaradi uporabe mobilnega telefona z operacijskim sistemom Android. Knjižnica je namreč napisana za komunikacijo z Android napravami. Na Android telefon lahko namestimo aplikacijo imenovano Amarino, ki že omogoča komunikacijo z Arduino modulom preko nekakšne konzole. Preko te aplikacije lahko enostavno pošiljamo in prejemamo podatke na Arduino modulu. Uporaba mobilne aplikacije in knjižnice za Arduino je brezplačna ter odprtokodna. Vse to je dostopno na spletnem naslovu Na voljo imamo tudi istonamensko knjižnico za Android operacijski sistem, ki nam omogoča razvoj lastne aplikacije za komunikacijo z Arduino modulom preko BT povezave [73]. Za delo z BT modulom smo kreirali ločeno datoteko programa imenovano Bluetooth. V njej smo najprej vključili knjižnico MeetAndroid ter ustvarili instanco isto imenovanega

87 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 67 razreda (Izvorna koda 5.19). V metodi initbluetooth smo uporabili metodo registerfunction razreda MeetAndroid za registracijo funkcij za posamezen ukaz. MeetAndroid knjižnica namreč uporablja tak protokol, da je v vsakem sporočilu najprej zapisan ukaz nato pa vrednost. Na primer sporočilo»a120«pomeni, da smo poslali ukaz A z vrednostjo 120. Vrednost ni nujno številka, lahko je tudi tekst. Ukazi so velike angleške črke od»a«do»z«ter male od»a«do»z«. Ko prejmemo sporočilo z določenim ukazom, se izvede funkcija, ki smo jo registrirali za ta ukaz. Prejeta sporočila preverja metoda preveriprihodbluetoothpodatkov, ki preverja morebitne nove prejete podatke [74]. #include <MeetAndroid.h> MeetAndroid _meetandroid; void initbluetooth()//registriranje funkcij _meetandroid.registerfunction(posljiinformacije, 'A'); _meetandroid.registerfunction(posljiparametresenzorvlaznosti, 'B'); _meetandroid.registerfunction(posljiparametreavtomatika, 'C'); _meetandroid.registerfunction(posodobiparametre, 'D');//ON-OFF zalivanje _meetandroid.registerfunction(posodobiparametre, 'E');//vklop vlaznost _meetandroid.registerfunction(posodobiparametre, 'F');//vklop interval _meetandroid.registerfunction(posodobiparametre, 'G');//vklop ura _meetandroid.registerfunction(posodobiparametre, 'H');//izklop vlaznost _meetandroid.registerfunction(posodobiparametre, 'I');//izklop trajanje //interval varovalnega preverjanja vlaznosti _meetandroid.registerfunction(posodobiparametre, 'J'); //razlika varovalne vlaznosti _meetandroid.registerfunction(posodobiparametre, 'K'); //trajanje varovalnega izklopa _meetandroid.registerfunction(posodobiparametre, 'L'); _meetandroid.registerfunction(posodobiparametre, 'M');//ucenje avtomatike //interval preverjanja senzorja vlaznosti _meetandroid.registerfunction(posodobiparametre, 'N'); //izvedi prisilno preverjanje vlaznosti _meetandroid.registerfunction(posodobiparametre, 'O'); void preveriprihodbluetoothpodatkov() _meetandroid.receive(); //preverjamo prihod podatkov Izvorna koda 5.19: Uporaba knjižnice MeetAndroid Registrirali smo več funkcij. Funcije posljinformacije, posljiparametresenzorvlaznosti in posljiparametreavtomatika smo uporabili za to, da ob ustreznem prejetem ukazu mobilni aplikaciji pošljejo izbrane informacije o sistemu. Funkcijo posodobiparametre smo registrirali večkrat, saj je namenjena posodabljanju parametrov sistema. Vsak posamezen

88 Stran 68 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami ukaz je namenjen specifičnemu parametru, ki so zapisani v komentarjih ob registraciji funkcij (Izvorna koda 5.19). Vsaka funkcija, ki jo želimo registrirati, mora vsebovati dva parametra tipa byte. Pri je namenjen temu, da se v njega shrani prejeti ukaz, drugi pa pove število znakov, ki so prispeli v sporočilu. Primer obdelave prejetega sporočila je viden v metodi posodobiparametre (Izvorna koda 5.20). Ker smo to metodo registrirali za več ukazov, moramo obdelati vsakega posameznega. Uporabili smo parameter ukaz, ki je ključ za prejeto sporočilo. Glede na ta ukaz v switch stavku posodobimo določen parameter ali izvedemo akcijo. Prejeto vrednost smo dobili s pomočjo funkcije getint, ki vrne podatek v sporočilu kot tip int. Na voljo je še več drugih metod za različne tipe (getdouble, getstring, ) [74]. void posodobiparametre(byte ukaz, byte steviloznakov) char znak = ukaz; int vrednost = _meetandroid.getint(); if(vrednost < 0) return; switch(znak) case 'D': if(vrednost == 1) _avtomatikazalivanja.omogocizalivanje(); else _avtomatikazalivanja.onemogocizalivanje(); break; case 'E': _avtomatikazalivanja.setvklopvlaznost(vrednost); break; case 'O': _senzorvlaznosti.izvediprisilnopreverjanje(); break; Izvorna koda 5.20: Obdelava prejetih podatkov preko BT modula Za pošiljanje podatkov smo malce dopolnili knjižnico MeetAndroid. Privzeta metoda send za pošiljanje podatkov ima namreč samo en parameter za podajanje niza znakov. Mi smo podatke želeli pošiljati po ključu oz. ukazu, zaradi lažje obdelave sporočila na mobilnem telefonu. Če bi želeli v sporočilo dodati ključ, bi morali pred pošiljanjem sporočila obdelati

89 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 69 vsak posamezen niz. To pa predstavlja nepotrebno rabo pomnilnika. Zato smo knjižnici dodali metodo sendparameter (Izvorna koda 5.21), ki ima na voljo 2 parametra. Prvi predstavlja ključ, drugi pa podatek, ki ga želimo poslati. Vrednosti sta med seboj ločeni z znakom» «. Z modifikacijo knjižnice smo se enostavno izognili obdelavi niza znakov. Knjižnico predstavljata dve datoteki tipa».cpp«in».h«, ki ju lahko poljubno urejamo. void MeetAndroid::sendParameter(const char kljuc[], int n) Serial.print(startFlag); Serial.print(kljuc); Serial.print(' '); Serial.print(n); Serial.print(ack); void MeetAndroid::sendParameter(const char kljuc[], const char str[]) Serial.print(startFlag); Serial.print(kljuc); Serial.print(' '); Serial.print(str); Serial.print(ack); void MeetAndroid::send(const char str[]) Serial.print(startFlag); Serial.print(str); Serial.print(ack); Izvorna koda 5.21: Dopolnitev MeetAndroid knjižnice Primer uporabe te dodatne funkcionalnosti lahko vidimo v metodi posljiinformacije (Izvorna koda 5.22), kjer pošljemo informacije o trenutnem stanju sistema. Ker je ta metoda registrirana za ukaz»a«, bodo te informacije poslane nazaj, kadar bomo s telefona poslali sporočilo s tem ukazom. Vsebina prejetega sporočila ni pomembna, saj je ne obdelujemo. Če želimo uspešno komunicirati z BT modulom, je pomembno določiti hitrost serijske povezave na Arduino modulu. Ta mora biti namreč enaka tisti, ki jo uporablja BT modul, zato je potrebno poiskati ta podatek o napravi. Naš BT modul deluje pri hitrosti To vrednost smo nastavili z metodo Serial.begin v metodi setup glavne datoteke programa. S tem smo določili, da bo serijska komunikacije potekala pri tej hitrosti.

90 Stran 70 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami void posljiinformacije(byte ukaz, byte steviloznakov) char ura[] = "12:00:00"; char datum[] = " "; DateTime cas = _ura.getcas(); _ura.geturasekunde(ura, &cas); _ura.getdatum(datum, &cas); _meetandroid.sendparameter("i_ura", ura); _meetandroid.sendparameter("i_datum", datum); _meetandroid.sendparameter("i_temperatura", _temperatura); _meetandroid.sendparameter("i_vlaznost", _ avtomatikazalivanja.trenutnavlaznost()); _meetandroid.sendparameter("i_zalivanje", _avtomatikazalivanja.sezalivanjeizvaja()); _meetandroid.sendparameter("i_zalivanjeomogoceno", _avtomatikazalivanja.jezalivanjeomogoceno()); _ura.geturasekunde(ura, _avtomatikazalivanja.getzacetekzalivanja()); _meetandroid.sendparameter("i_zaczalivanja", ura); _meetandroid.sendparameter("i_trajanjezalivanja", _avtomatikazalivanja.gettrajanjezalivanja()); _meetandroid.sendparameter("i_varizklop", _avtomatikazalivanja.getvarizklop()); Izvorna koda 5.22: Pošiljanje informacij o stanju sistema 5.8 Glavna datoteka programa Glavna datoteka programa je namenjena povezavi vseh uporabljenih razredov in knjižnic, saj sta tukaj metodi setup in loop, ki omogočata izvajanje programa. V tej datoteki se tudi nahajajo vse instance razredov, ki smo jih napisali. Na prvi pogled je v tej datoteki zelo malo kode, saj smo vse funkcionalnosti in preverjanja obdelali v posameznih razredih oz. datotekah. Vse inicializacije, ki so potrebne za nemoteno delovanje sistema, smo izvedli v metodi setup. Vrstni red inicializacij sledi temu, kako so posamezne komponente odvisne med seboj. Uro namreč uporablja senzor vlažnosti, razred Avtomatika pa oba. Zato je pomembno, da se inicializacija izvede v pravilnem zaporedju.

91 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 71 #include <Wire.h> #include <RTClib.h> #include "Ura.h" #include "SenzorVlaznostiZemlje.h" #include "Avtomatika.h" /*=====LASTNI RAZREDI=====*/ Ura _ura; SenzorVlaznostiZemlje _senzorvlaznosti(&_ura); Avtomatika _avtomatikazalivanja(&_senzorvlaznosti, &_ura, 2); float _temperatura; //trenutna temperatura zraka void setup() Serial.begin(9600); Serial.flush(); Wire.begin(); _ura.inicializiraj(); inittemperatura(); _senzorvlaznosti.inicializiraj(); _senzorvlaznosti.dodajsenzor(a2, A0, A1); _avtomatikazalivanja.inicializiraj(); initzaslon(); initbluetooth(); void loop() preveritemperaturo(); _senzorvlaznosti.preverisenzorje(); _avtomatikazalivanja.preverizalivanje(); preveriizpiszaslona(); preveriprihodbluetoothpodatkov(); Izvorna koda 5.23: Glavna datoteka programa V metodi loop se nenehno izvaja preverjanje posameznih komponent. Kličemo metode, ki preverijo, če je prišlo do kakšne spremembe ali pa je morebiti potrebno izvesti kakšno akcijo. 5.9 Vezalna shema Vezalna shema povezave Arduino modula z vsemi uporabljenimi elementi je vidna na Slika 5.8. Za kreiranje sheme smo uporabili orodje Fritzing, ki je brezplačno ter omogoča

92 Stran 72 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami risanje shem sistemov z različnimi Arduino moduli in elementi. Vse povezave priključene na vir napetosti uporabljalo povezovalni kabel rdeče barve, za skupno ničlo pa je uporabljen črn kabel. Ti dve barvi sta uporabljeni zaradi boljše preglednosti med napajalnimi in ostalimi priključki. Preostale uporabljene barve priključkov nimajo pomena in so uporabljene zgolj zaradi boljše preglednosti. Slika 5.8: Vezalna shema elementov 5.10 Testiranje sistema Testiranje sistema smo izvajali v treh sklopih. Prvi sklop je predstavljal sprotno testiranje kode in posameznih komponent. Tega smo izvajali z izpisom stanj in podatkov preko serijske povezave na računalnik. Tako smo lahko enostavno popravljali napake in preverjali pravilno delovanje. Na ta način smo odkrili kje so težave v sistemu in kje prihaja

93 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami Stran 73 do nepravilnost. Veliko lažje bi bilo, če bi Arduino razvojno okolje ponujalo razhroščevalnik (angl. debugger), vendar ta funkcionalnost ne obstaja. Tako nam je preostalo le izpisovanje podatkov na različnih mestih v programu. Drugi sklop testiranja je predstavljal testiranje posameznih funkcionalnosti ter delovanje celotnega sistema. Kreirali smo novo datoteko imenovano Test, v kateri smo s pomočjo kode simulirali delovanje komponent in sistema ter ugotavljali morebitne napake. Na ta način smo lahko ugotovili predvsem, kako deluje avtomatika zalivanja ob različnih pogojih. Pri tem testiranju smo prav tako uporabljali serijsko povezavo za izpis podatkov na računalnik, kjer smo analizirali podatke o stanju sistema. Tretji sklop je predstavljal testiranje s telefonom preko BT povezave. Pri tem testiranju smo lahko na enostaven način spreminjali vrednosti parametrov. Ob tem smo nenehno preverjali informacije o sistemu ter trenutne parametre avtomatike in senzorja vlažnosti. Dodatno smo v vseh sklopih testiranja preverjali tudi porabo pomnilnika. Ta podatek je pomemben, saj ob prekomerni porabi le tega Arduino modul preneha delovati. Privzeto tega podatka nimamo na voljo. Zaradi tega smo na uradni strani Arduino projekta poiskali funkcijo, ki izračuna količino preostalega prostega pomnilnika. Podatek pove število prostih bajtov (B), za računanje pa uporablja sistemske spremenljivke [75]. int freeram() extern int heap_start, * brkval; int v; return (int) &v - ( brkval == 0? (int) & heap_start : (int) brkval); Izvorna koda 5.24: Preverjanje količine prostega pomnilnika Podatek o prostem pomnilniku smo izpisovali na LCD zaslon, kjer smo izkoristili preostali prazen prostor. Z dodajanjem razredov in knjižnic, se je ta količina sproti zmanjševala. Tako ima naš končni sistem na voljo še 375 B prostega pomnilnika od skupne velikosti 2 KB, ki jo zagotavlja model Uno.

94 Stran 74 Krmiljenje mikrokrmilniškega modula Arduino in njegova uporaba pri komunikaciji z ostalimi napravami 5.11 Beleženje delovanja sistema Sistemu smo želeli dodati tudi možnost za beleženje delovanja. Na ta način lahko kadarkoli preverimo zgodovino zalivanja in preteklo vlažnost zemlje. Odločili smo se za pisanje trenutnega stanja na SD kartico. Ker Arduino Uno model reže za SD kartico ne vsebuje, smo uporabili Arduino vmesnik z vgrajenim internetnim priključkom ter podporo za mikro SD kartice (Slika 5.9 [76]). Slika 5.9: Arduino vmesnik s podporo za internet in micro SD kartice Ta vmesnik potrebuje proste digitalne priključke od 11 do 13 za komunikacijo preko serijskega sinhronskega vmesnika (SPI) ter priključka 10 in 4 za izbiro uporabe internetnega priključka ali SD reže. Hkrati lahko namreč uporabljamo le eno komponento, ki jo določimo s tema dvema priključkoma. Zaradi teh zahtev smo skozi celotno načrtovanje sistema namerno pustili te priključke neuporabljene. Tako sheme poveze in implementacije sistema ni bilo potrebno prav nič spreminjati. Arduino vmesnik smo zgolj nataknili na Arduino modul ter povezovalne žice priključili na ta vmesnik na iste vrednosti priključkov kot prej [77]. Za implementacijo beleženja smo uporabili knjižnico SD.h, ki je že del Arduino razvojnega okolja in omogoča branje in pisanje na SD kartico. Podatke smo želeli zapisati v razredu SenzorVlaznostiZemlje, kjer bi shranili podatke o trenutni napetosti, vlažnosti senzorja ter podatek o učenju. Zato smo dodali metodo zapisipodatke (Izvorna koda 5.25). Na začetku smo izvedli inicializacijo knjižnice z metodo begin, ki vrne true, če je se je le ta izvedla uspešno, kar pomeni, da lahko pričnemo z obdelavo SD kartice. V naslednjem koraku z metodo open odpremo datoteko»log.txt«za pisanje (parameter FILE_WRITE). Če je bila datoteka uspešno prvič ustvarjena oziroma ponovno odprta, pričnemo s pisanjem

Tretja vaja iz matematike 1

Tretja vaja iz matematike 1 Tretja vaja iz matematike Andrej Perne Ljubljana, 00/07 kompleksna števila Polarni zapis kompleksnega števila z = x + iy): z = rcos ϕ + i sin ϕ) = re iϕ Opomba: Velja Eulerjeva formula: e iϕ = cos ϕ +

Διαβάστε περισσότερα

Zaporedja. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 22. oktober Gregor Dolinar Matematika 1

Zaporedja. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 22. oktober Gregor Dolinar Matematika 1 Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 22. oktober 2013 Kdaj je zaporedje {a n } konvergentno, smo definirali s pomočjo limite zaporedja. Večkrat pa je dobro vedeti,

Διαβάστε περισσότερα

Funkcijske vrste. Matematika 2. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 2. april Gregor Dolinar Matematika 2

Funkcijske vrste. Matematika 2. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 2. april Gregor Dolinar Matematika 2 Matematika 2 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 2. april 2014 Funkcijske vrste Spomnimo se, kaj je to številska vrsta. Dano imamo neko zaporedje realnih števil a 1, a 2, a

Διαβάστε περισσότερα

Odvod. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 5. december Gregor Dolinar Matematika 1

Odvod. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 5. december Gregor Dolinar Matematika 1 Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 5. december 2013 Primer Odvajajmo funkcijo f(x) = x x. Diferencial funkcije Spomnimo se, da je funkcija f odvedljiva v točki

Διαβάστε περισσότερα

PONOVITEV SNOVI ZA 4. TEST

PONOVITEV SNOVI ZA 4. TEST PONOVITEV SNOVI ZA 4. TEST 1. * 2. *Galvanski člen z napetostjo 1,5 V požene naboj 40 As. Koliko električnega dela opravi? 3. ** Na uporniku je padec napetosti 25 V. Upornik prejme 750 J dela v 5 minutah.

Διαβάστε περισσότερα

Osnove elektrotehnike uvod

Osnove elektrotehnike uvod Osnove elektrotehnike uvod Uvod V nadaljevanju navedena vprašanja so prevod testnih vprašanj, ki sem jih našel na omenjeni spletni strani. Vprašanja zajemajo temeljna znanja opredeljenega strokovnega področja.

Διαβάστε περισσότερα

KODE ZA ODKRIVANJE IN ODPRAVLJANJE NAPAK

KODE ZA ODKRIVANJE IN ODPRAVLJANJE NAPAK 1 / 24 KODE ZA ODKRIVANJE IN ODPRAVLJANJE NAPAK Štefko Miklavič Univerza na Primorskem MARS, Avgust 2008 Phoenix 2 / 24 Phoenix 3 / 24 Phoenix 4 / 24 Črtna koda 5 / 24 Črtna koda - kontrolni bit 6 / 24

Διαβάστε περισσότερα

ΕΛΕΓΧΟΣ ΑΝΤΛΙΟΣΤΑΣΙΟΥ ΜΕ ΔΕΞΑΜΕΝΗ ΜΕΣΩ GSM CHECK IN TANK PUMPING THROUGH GSM

ΕΛΕΓΧΟΣ ΑΝΤΛΙΟΣΤΑΣΙΟΥ ΜΕ ΔΕΞΑΜΕΝΗ ΜΕΣΩ GSM CHECK IN TANK PUMPING THROUGH GSM ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΏΝ ΕΦΑΡΜΟΓΏΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ CHECK IN TANK PUMPING THROUGH GSM Επιβλέπων Καθηγητής: Κόγιας Παναγιώτης Επιβλέπουσα Καθηγήτρια: Κόγια Φωτεινή ΚΑΒΑΛΑ, ΦΕΒΡΟΥΑΡΙΟΣ

Διαβάστε περισσότερα

Diferencialna enačba, v kateri nastopata neznana funkcija in njen odvod v prvi potenci

Diferencialna enačba, v kateri nastopata neznana funkcija in njen odvod v prvi potenci Linearna diferencialna enačba reda Diferencialna enačba v kateri nastopata neznana funkcija in njen odvod v prvi potenci d f + p= se imenuje linearna diferencialna enačba V primeru ko je f 0 se zgornja

Διαβάστε περισσότερα

Delovna točka in napajalna vezja bipolarnih tranzistorjev

Delovna točka in napajalna vezja bipolarnih tranzistorjev KOM L: - Komnikacijska elektronika Delovna točka in napajalna vezja bipolarnih tranzistorjev. Določite izraz za kolektorski tok in napetost napajalnega vezja z enim virom in napetostnim delilnikom na vhod.

Διαβάστε περισσότερα

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. Σχεδίαση και ανάπτυξη οχήματος που ακολουθεί μια γραμμή

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. Σχεδίαση και ανάπτυξη οχήματος που ακολουθεί μια γραμμή ΤΕΙ ΑΝΑΤΟΛΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΚΑΙ ΘΡΑΚΗΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Σχεδίαση και ανάπτυξη οχήματος που ακολουθεί μια γραμμή Σπουδαστές: Ταβλάκης Γεώργιος ΑΕΜ:

Διαβάστε περισσότερα

MATEMATIČNI IZRAZI V MAFIRA WIKIJU

MATEMATIČNI IZRAZI V MAFIRA WIKIJU I FAKULTETA ZA MATEMATIKO IN FIZIKO Jadranska cesta 19 1000 Ljubljan Ljubljana, 25. marec 2011 MATEMATIČNI IZRAZI V MAFIRA WIKIJU KOMUNICIRANJE V MATEMATIKI Darja Celcer II KAZALO: 1 VSTAVLJANJE MATEMATIČNIH

Διαβάστε περισσότερα

Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 21. november Gregor Dolinar Matematika 1

Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 21. november Gregor Dolinar Matematika 1 Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 21. november 2013 Hiperbolične funkcije Hiperbolični sinus sinhx = ex e x 2 20 10 3 2 1 1 2 3 10 20 hiperbolični kosinus coshx

Διαβάστε περισσότερα

matrike A = [a ij ] m,n αa 11 αa 12 αa 1n αa 21 αa 22 αa 2n αa m1 αa m2 αa mn se števanje po komponentah (matriki morata biti enakih dimenzij):

matrike A = [a ij ] m,n αa 11 αa 12 αa 1n αa 21 αa 22 αa 2n αa m1 αa m2 αa mn se števanje po komponentah (matriki morata biti enakih dimenzij): 4 vaja iz Matematike 2 (VSŠ) avtorica: Melita Hajdinjak datum: Ljubljana, 2009 matrike Matrika dimenzije m n je pravokotna tabela m n števil, ki ima m vrstic in n stolpcev: a 11 a 12 a 1n a 21 a 22 a 2n

Διαβάστε περισσότερα

CM707. GR Οδηγός χρήσης... 2-7. SLO Uporabniški priročnik... 8-13. CR Korisnički priručnik... 14-19. TR Kullanım Kılavuzu... 20-25

CM707. GR Οδηγός χρήσης... 2-7. SLO Uporabniški priročnik... 8-13. CR Korisnički priručnik... 14-19. TR Kullanım Kılavuzu... 20-25 1 2 3 4 5 6 7 OFFMANAUTO CM707 GR Οδηγός χρήσης... 2-7 SLO Uporabniški priročnik... 8-13 CR Korisnički priručnik... 14-19 TR Kullanım Kılavuzu... 20-25 ENG User Guide... 26-31 GR CM707 ΟΔΗΓΟΣ ΧΡΗΣΗΣ Περιγραφή

Διαβάστε περισσότερα

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα 1ο ΕΠΑΛ Περάματος 7ο ΕΚ Πειραιά Πλακέτα Arduino Το 2005 oι Massimo Banzi και David Cueartielles στο Ivrea Δημιουργούν την υπολογιστική πλατφόρμα Arduino.

Διαβάστε περισσότερα

Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 14. november Gregor Dolinar Matematika 1

Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 14. november Gregor Dolinar Matematika 1 Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 14. november 2013 Kvadratni koren polinoma Funkcijo oblike f(x) = p(x), kjer je p polinom, imenujemo kvadratni koren polinoma

Διαβάστε περισσότερα

Odvod. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 10. december Gregor Dolinar Matematika 1

Odvod. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 10. december Gregor Dolinar Matematika 1 Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 10. december 2013 Izrek (Rolleov izrek) Naj bo f : [a,b] R odvedljiva funkcija in naj bo f(a) = f(b). Potem obstaja vsaj ena

Διαβάστε περισσότερα

Booleova algebra. Izjave in Booleove spremenljivke

Booleova algebra. Izjave in Booleove spremenljivke Izjave in Booleove spremenljivke vsako izjavo obravnavamo kot spremenljivko če je izjava resnična (pravilna), ima ta spremenljivka vrednost 1, če je neresnična (nepravilna), pa vrednost 0 pravimo, da gre

Διαβάστε περισσότερα

Δθαξκνγέο αζύξκαηεο ηειεκεηξίαο ζηελ αλαπηπμηαθή πιαηθόξκα Arduino

Δθαξκνγέο αζύξκαηεο ηειεκεηξίαο ζηελ αλαπηπμηαθή πιαηθόξκα Arduino Σερλνινγηθό Δθπαηδεπηηθό Ίδξπκα Κξήηεο ρνιή Σερλνινγηθώλ Δθαξκνγώλ Σκήκα Δθαξκνζκέλεο Πιεξνθνξηθήο & Πνιπκέζσλ Πηπρηαθή εξγαζία Δθαξκνγέο αζύξκαηεο ηειεκεηξίαο ζηελ αλαπηπμηαθή πιαηθόξκα Arduino Διεπζεξηάδεο

Διαβάστε περισσότερα

NEPARAMETRIČNI TESTI. pregledovanje tabel hi-kvadrat test. as. dr. Nino RODE

NEPARAMETRIČNI TESTI. pregledovanje tabel hi-kvadrat test. as. dr. Nino RODE NEPARAMETRIČNI TESTI pregledovanje tabel hi-kvadrat test as. dr. Nino RODE Parametrični in neparametrični testi S pomočjo z-testa in t-testa preizkušamo domneve o parametrih na vzorcih izračunamo statistike,

Διαβάστε περισσότερα

Η δυναμική του Arduino στο μάθημα της Τεχνολογίας. Φάσουρας Δημήτριος Ηλεκτρολόγος ΠΕ 17,03

Η δυναμική του Arduino στο μάθημα της Τεχνολογίας. Φάσουρας Δημήτριος Ηλεκτρολόγος ΠΕ 17,03 Η δυναμική του Arduino στο μάθημα της Τεχνολογίας Φάσουρας Δημήτριος Ηλεκτρολόγος ΠΕ 17,03 dfasouras@gmail.com Τι είναι το Arduino ; Το Arduino είναι μια απλή μητρική πλακέτα ανοικτού κώδικα. Διαθέτει

Διαβάστε περισσότερα

Transformator. Delovanje transformatorja I. Delovanje transformatorja II

Transformator. Delovanje transformatorja I. Delovanje transformatorja II Transformator Transformator je naprava, ki v osnovi pretvarja napetost iz enega nivoja v drugega. Poznamo vrsto različnih izvedb transformatorjev, glede na njihovo specifičnost uporabe:. Energetski transformator.

Διαβάστε περισσότερα

1. Trikotniki hitrosti

1. Trikotniki hitrosti . Trikotniki hitrosti. Z radialno črpalko želimo črpati vodo pri pogojih okolice z nazivnim pretokom 0 m 3 /h. Notranji premer rotorja je 4 cm, zunanji premer 8 cm, širina rotorja pa je,5 cm. Frekvenca

Διαβάστε περισσότερα

Kotne in krožne funkcije

Kotne in krožne funkcije Kotne in krožne funkcije Kotne funkcije v pravokotnem trikotniku Avtor: Rok Kralj, 4.a Gimnazija Vič, 009/10 β a c γ b α sin = a c cos= b c tan = a b cot = b a Sinus kota je razmerje kotu nasprotne katete

Διαβάστε περισσότερα

Robot Stäubli RX90. Robot Stäubli RX90

Robot Stäubli RX90. Robot Stäubli RX90 Robot Stäubli RX90 Robot Stäubli RX90 je antropomorfne konfiguracije s šestimi prostostnimi stopnjami. Uporabljen kot: industrijski robot s pozicijskim vodenjem, v laboratoriju je uporabljen kot haptični

Διαβάστε περισσότερα

8. Diskretni LTI sistemi

8. Diskretni LTI sistemi 8. Diskreti LI sistemi. Naloga Določite odziv diskretega LI sistema s podaim odzivom a eoti impulz, a podai vhodi sigal. h[] x[] - - 5 6 7 - - 5 6 7 LI sistem se a vsak eoti impulz δ[] a vhodu odzove z

Διαβάστε περισσότερα

Ενσωµατωµένα Συστήµατα

Ενσωµατωµένα Συστήµατα Ενσωµατωµένα Συστήµατα για εφαρµογές πραγµατικού χρόνου Μικροελεγκτής Arduino Ιωάννης Καλόµοιρος Αναπληρωτής Καθηγητής Τµήµα Μηχανικών Πληροφορικής Μάθηµα 7ο Τι είναι το Arduino... Ένα open-hardware σύστηµα

Διαβάστε περισσότερα

NAPREDEN TEMPERATURNO ODVISEN PWM REGULATOR POROČILO IZDELAVE PROJEKTA

NAPREDEN TEMPERATURNO ODVISEN PWM REGULATOR POROČILO IZDELAVE PROJEKTA NAPREDEN TEMPERATURNO ODVISEN PWM REGULATOR POROČILO IZDELAVE PROJEKTA Študent: Luka Dragovan Vpisna št.: E5006203 Program: Telekomunikacije MAG Letnik: 2. letnik Datum: 21. 1. 2013 Kazalo Kazalo... 2

Διαβάστε περισσότερα

Kontrolne karte uporabljamo za sprotno spremljanje kakovosti izdelka, ki ga izdelujemo v proizvodnem procesu.

Kontrolne karte uporabljamo za sprotno spremljanje kakovosti izdelka, ki ga izdelujemo v proizvodnem procesu. Kontrolne karte KONTROLNE KARTE Kontrolne karte uporablamo za sprotno spremlane kakovosti izdelka, ki ga izdeluemo v proizvodnem procesu. Izvaamo stalno vzorčene izdelkov, npr. vsako uro, vsake 4 ure.

Διαβάστε περισσότερα

Numerično reševanje. diferencialnih enačb II

Numerično reševanje. diferencialnih enačb II Numerčno reševanje dferencaln enačb I Dferencalne enačbe al ssteme dferencaln enačb rešujemo numerčno z več razlogov:. Ne znamo j rešt analtčno.. Posamezn del dferencalne enačbe podan tabelarčno. 3. Podatke

Διαβάστε περισσότερα

Πλακέτα Arduino. 1ο ΕΠΑΛ Περάματος - 7ο ΕΚ Πειραιά

Πλακέτα Arduino. 1ο ΕΠΑΛ Περάματος - 7ο ΕΚ Πειραιά Πλακέτα Arduino Το 2005 oι Massimo Banzi και David Cueartielles στο Ivrea Δημιουργούν την υπολογιστική πλατφόρμα Arduino. Το Arduino είναι βασισμένο σε μια απλή μητρική πλακέτα ανοικτού κώδικα, με ενσωματωμένο

Διαβάστε περισσότερα

ΠΕΡΙΓΡΑΦΗ ΥΛΙΚΟΥ AVR 1. ΕΙΣΑΓΩΓΗ 1.1 ΓΕΝΙΚΗ ΔΟΜΗ 1.2 ΟΙΚΟΓΕΝΕΙΕΣ 1.3 ΤΥΠΟΙ 1.4 ΕΡΓΑΛΕΙΑ

ΠΕΡΙΓΡΑΦΗ ΥΛΙΚΟΥ AVR 1. ΕΙΣΑΓΩΓΗ 1.1 ΓΕΝΙΚΗ ΔΟΜΗ 1.2 ΟΙΚΟΓΕΝΕΙΕΣ 1.3 ΤΥΠΟΙ 1.4 ΕΡΓΑΛΕΙΑ ΠΕΡΙΓΡΑΦΗ ΥΛΙΚΟΥ AVR 1. ΕΙΣΑΓΩΓΗ 1.1 ΓΕΝΙΚΗ ΔΟΜΗ 1.2 ΟΙΚΟΓΕΝΕΙΕΣ 1.3 ΤΥΠΟΙ 1.4 ΕΡΓΑΛΕΙΑ Oι βασικές αρχές λειτουργίας των RISC είναι : Εντολές ενός κ.μ. με κατάλληλη σχεδίαση της μονάδας διοχέτευσης Μεγάλος

Διαβάστε περισσότερα

ADS sistemi digitalnega snemanja ADS-DVR-4100D4

ADS sistemi digitalnega snemanja ADS-DVR-4100D4 ADS-DVR-4100D4 Glavne značilnosti: kompresija, idealna za samostojni sistem digitalnega snemanja štirje video vhodi, snemanje 100 slik/sek v D1 ločljivosti pentaplex funkcija (hkratno delovanje petih procesov):

Διαβάστε περισσότερα

13. Jacobijeva metoda za računanje singularnega razcepa

13. Jacobijeva metoda za računanje singularnega razcepa 13. Jacobijeva metoda za računanje singularnega razcepa Bor Plestenjak NLA 25. maj 2010 Bor Plestenjak (NLA) 13. Jacobijeva metoda za računanje singularnega razcepa 25. maj 2010 1 / 12 Enostranska Jacobijeva

Διαβάστε περισσότερα

ARDUINO ΟΔΗΓΟΣ ΓΙΑ ΑΡΧΑΡΙΟΥΣ

ARDUINO ΟΔΗΓΟΣ ΓΙΑ ΑΡΧΑΡΙΟΥΣ ARDUINO ΟΔΗΓΟΣ ΓΙΑ ΑΡΧΑΡΙΟΥΣ ΤΙ ΕIΝΑΙ ΤΟ ARDUINO; Το Arduino είναι μια «ανοικτού κώδικα» πλατφόρμα βασισμένη σε ευέλικτο και εύκολο στη χρήση hardware και software. Αυτό σημαίνει ότι ο καθένας μπορεί να

Διαβάστε περισσότερα

Stikalni pretvorniki. Seminar: Načrtovanje elektronike za EMC Boštjan Glažar

Stikalni pretvorniki. Seminar: Načrtovanje elektronike za EMC Boštjan Glažar Stikalni pretvorniki Seminar: Načrtovanje elektronike za EMC 9. 3. 2016 Boštjan Glažar niverza v Ljubljani Fakulteta za elektrotehniko Tržaška cesta 25, SI-1000 Ljubljana Vsebina Prednosti stikalnih pretvornikov

Διαβάστε περισσότερα

Γνωριμία με το Arduino

Γνωριμία με το Arduino Γνωριμία με το Arduino Τι είναι το Arduino; Το arduino είναι ένας μικρός υπολογιστής σε μέγεθος παλάμης που περιλαμβάνει ένα μικροελεγκτή (για εκτέλεση εντολών) και ένα σύνολο εισόδων/εξόδων για επικοινωνία

Διαβάστε περισσότερα

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων Εργαστήριο ενσωματωμένων συστημάτων Παρουσίαση 1: Εισαγωγή στα ενσωματωμένα συστήματα (embedded systems) Εργαστήριο Αυτομάτου Ελέγχου Ενσωματωμένα συστήματα (Embedded Systems) Ενσωματωμένα συστήματα (Embedded

Διαβάστε περισσότερα

ΣΔΥΝΟΛΟΓΙΚΟ ΔΚΠΑΙΓΔΤΣΙΚΟ ΙΓΡΤΜΑ (Σ.Δ.Ι.) Α.Μ.Θ. ΥΟΛΗ ΣΔΥΝΟΛΟΓΙΚΧΝ ΔΦΑΡΜΟΓΧΝ ΣΜΗΜΑ ΜΗΥΑΝΙΚΧΝ ΠΛΗΡΟΦΟΡΙΚΗ ΣΟΜΔΑ ΤΣΗΜΑΣΧΝ ΠΑΡΑΓΧΓΗ ΠΣΤΥΙΑΚΗ ΔΡΓΑΙΑ

ΣΔΥΝΟΛΟΓΙΚΟ ΔΚΠΑΙΓΔΤΣΙΚΟ ΙΓΡΤΜΑ (Σ.Δ.Ι.) Α.Μ.Θ. ΥΟΛΗ ΣΔΥΝΟΛΟΓΙΚΧΝ ΔΦΑΡΜΟΓΧΝ ΣΜΗΜΑ ΜΗΥΑΝΙΚΧΝ ΠΛΗΡΟΦΟΡΙΚΗ ΣΟΜΔΑ ΤΣΗΜΑΣΧΝ ΠΑΡΑΓΧΓΗ ΠΣΤΥΙΑΚΗ ΔΡΓΑΙΑ ΣΔΥΝΟΛΟΓΙΚΟ ΔΚΠΑΙΓΔΤΣΙΚΟ ΙΓΡΤΜΑ (Σ.Δ.Ι.) Α.Μ.Θ. ΥΟΛΗ ΣΔΥΝΟΛΟΓΙΚΧΝ ΔΦΑΡΜΟΓΧΝ ΣΜΗΜΑ ΜΗΥΑΝΙΚΧΝ ΠΛΗΡΟΦΟΡΙΚΗ ΣΟΜΔΑ ΤΣΗΜΑΣΧΝ ΠΑΡΑΓΧΓΗ ΠΣΤΥΙΑΚΗ ΔΡΓΑΙΑ ΜΔΛΔΣΗ, ΥΔΓΙΑΗ ΚΑΙ ΑΝΑΠΣΤΞΗ ΤΣΗΜΑΣΟ ΓΙΑ ΣΟΝ ΑΤΡΜΑΣΟ ΔΛΔΓΥΟ

Διαβάστε περισσότερα

Arduino-FPGA vremenska postaja

Arduino-FPGA vremenska postaja Laboratorij za načrtovanje integriranih vezij Univerza v Ljubljani Fakulteta za elektrotehniko Arduino-FPGA vremenska postaja DES 2013/14 - razvoj vgrajenega sistema Arduino grafični vmesnik Arduino Leonardo

Διαβάστε περισσότερα

NADZOR ELEKTRIČNIH PORABNIKOV

NADZOR ELEKTRIČNIH PORABNIKOV ŠOLSKI CENTER CELJE Srednja šola za elektrotehniko, kemijo, in računalništvo NADZOR ELEKTRIČNIH PORABNIKOV RAZISKOVALNA NALOGA MENTOR: Gregor Kramer univ. dipl. inž. el. Avtor: Nejc KOVAČIČ, E-4.a Celje,2016

Διαβάστε περισσότερα

Zajemanje merilnih vrednosti z vf digitalnim spominskim osciloskopom

Zajemanje merilnih vrednosti z vf digitalnim spominskim osciloskopom VSŠ Velenje ELEKTRIČNE MERITVE Laboratorijske vaje Zajemanje merilnih vrednosti z vf digitalnim spominskim osciloskopom Vaja št.2 M. D. Skupina A PREGLEDAL:. OCENA:.. Velenje, 22.12.2006 1. Besedilo naloge

Διαβάστε περισσότερα

1. Έντυπα αιτήσεων αποζημίωσης... 2 1.1. Αξίωση αποζημίωσης... 2 1.1.1. Έντυπο... 2 1.1.2. Πίνακας μεταφράσεων των όρων του εντύπου...

1. Έντυπα αιτήσεων αποζημίωσης... 2 1.1. Αξίωση αποζημίωσης... 2 1.1.1. Έντυπο... 2 1.1.2. Πίνακας μεταφράσεων των όρων του εντύπου... ΑΠΟΖΗΜΙΩΣΗ ΘΥΜΑΤΩΝ ΕΓΚΛΗΜΑΤΙΚΩΝ ΠΡΑΞΕΩΝ ΣΛΟΒΕΝΙΑ 1. Έντυπα αιτήσεων αποζημίωσης... 2 1.1. Αξίωση αποζημίωσης... 2 1.1.1. Έντυπο... 2 1.1.2. Πίνακας μεταφράσεων των όρων του εντύπου... 3 1 1. Έντυπα αιτήσεων

Διαβάστε περισσότερα

IZPIT IZ ANALIZE II Maribor,

IZPIT IZ ANALIZE II Maribor, Maribor, 05. 02. 200. (a) Naj bo f : [0, 2] R odvedljiva funkcija z lastnostjo f() = f(2). Dokaži, da obstaja tak c (0, ), da je f (c) = 2f (2c). (b) Naj bo f(x) = 3x 3 4x 2 + 2x +. Poišči tak c (0, ),

Διαβάστε περισσότερα

Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 12. november Gregor Dolinar Matematika 1

Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 12. november Gregor Dolinar Matematika 1 Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 12. november 2013 Graf funkcije f : D R, D R, je množica Γ(f) = {(x,f(x)) : x D} R R, torej podmnožica ravnine R 2. Grafi funkcij,

Διαβάστε περισσότερα

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα 1ο ΕΠΑΛ Περάματος 7ο ΕΚ Πειραιά Πλακέτα Arduino Το 2005 oι Massimo Banzi και David Cueartielles στο Ivrea Δημιουργούν την υπολογιστική πλατφόρμα Arduino.

Διαβάστε περισσότερα

Mobilni robot za sledenje po črti

Mobilni robot za sledenje po črti UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO 000 Maribor, Smetanova ul. 7 Študij. leto: 008/009 Datum:..008 Uvodni seminar Mobilni robot za sledenje po črti Izvajalci:

Διαβάστε περισσότερα

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Τεχνολογικών Εφαρμογών Τμήμα Μηχανολόγων Μηχανικών T.E

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Τεχνολογικών Εφαρμογών Τμήμα Μηχανολόγων Μηχανικών T.E Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Τεχνολογικών Εφαρμογών Τμήμα Μηχανολόγων Μηχανικών T.E ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Επέκταση των δυνατοτήτων του εκπαιδευτικού πακέτου «LEGO-MINDSTORMS», με την χρήση του

Διαβάστε περισσότερα

Zaporedna in vzporedna feroresonanca

Zaporedna in vzporedna feroresonanca Visokonapetostna tehnika Zaporedna in vzporedna feroresonanca delovanje regulacijskega stikala T3 174 kv Vaja 9 1 Osnovni pogoji za nastanek feroresonance L C U U L () U C () U L = U L () U C = ωc V vezju

Διαβάστε περισσότερα

Integralni račun. Nedoločeni integral in integracijske metrode. 1. Izračunaj naslednje nedoločene integrale: (a) dx. (b) x 3 +3+x 2 dx, (c) (d)

Integralni račun. Nedoločeni integral in integracijske metrode. 1. Izračunaj naslednje nedoločene integrale: (a) dx. (b) x 3 +3+x 2 dx, (c) (d) Integralni račun Nedoločeni integral in integracijske metrode. Izračunaj naslednje nedoločene integrale: d 3 +3+ 2 d, (f) (g) (h) (i) (j) (k) (l) + 3 4d, 3 +e +3d, 2 +4+4 d, 3 2 2 + 4 d, d, 6 2 +4 d, 2

Διαβάστε περισσότερα

Poglavje 7. Poglavje 7. Poglavje 7. Regulacijski sistemi. Regulacijski sistemi. Slika 7. 1: Normirana blokovna shema regulacije EM

Poglavje 7. Poglavje 7. Poglavje 7. Regulacijski sistemi. Regulacijski sistemi. Slika 7. 1: Normirana blokovna shema regulacije EM Slika 7. 1: Normirana blokovna shema regulacije EM Fakulteta za elektrotehniko 1 Slika 7. 2: Principielna shema regulacije AM v KSP Fakulteta za elektrotehniko 2 Slika 7. 3: Merjenje komponent fluksa s

Διαβάστε περισσότερα

ΕΦΑΡΜΟΓΕΣ ΤΗΛΕΠIΚΟΙΝΩΝΙΑΚΩΝ ΔΙΑΤΑΞΕΩΝ

ΕΦΑΡΜΟΓΕΣ ΤΗΛΕΠIΚΟΙΝΩΝΙΑΚΩΝ ΔΙΑΤΑΞΕΩΝ ΕΦΑΡΜΟΓΕΣ ΤΗΛΕΠIΚΟΙΝΩΝΙΑΚΩΝ ΔΙΑΤΑΞΕΩΝ ΟΙΚΟΝOΜΟΥ ΧΑΡΗΣ (6424) ΦΩΚΟΣ ΝΙΚΟΛΑΟΣ(6592) ΚΑΜΒΥΣΗΣ ΝΙΚΟΛΑΟΣ(7178) 2013-2014 ΠΕΡΙΕΧΟΜΕΝΑ Σκοπός της εργασίας Ανάλυση Arduino Uno Δημιουργία πληροφορίας Αποστολή και

Διαβάστε περισσότερα

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Σερρών Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πληροφορικής & Επικοινωνιών

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Σερρών Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πληροφορικής & Επικοινωνιών Τεχνολογικό Εκπαιδευτικό Ίδρυμα Σερρών Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πληροφορικής & Επικοινωνιών Υλοποίηση δικτύου ασύρματης ραδιοεπικοινωνίας μεταξύ δύο ενσωματωμένων κόμβων (κόμβος ταυτοποίησης

Διαβάστε περισσότερα

STANDARD1 EN EN EN

STANDARD1 EN EN EN PRILOGA RADIJSKE 9,000-20,05 khz naprave kratkega dosega: induktivne aplikacije 315 600 khz naprave kratkega dosega: aktivni medicinski vsadki ultra nizkih moči 4516 khz naprave kratkega dosega: železniške

Διαβάστε περισσότερα

Reševanje sistema linearnih

Reševanje sistema linearnih Poglavje III Reševanje sistema linearnih enačb V tem kratkem poglavju bomo obravnavali zelo uporabno in zato pomembno temo linearne algebre eševanje sistemov linearnih enačb. Spoznali bomo Gaussovo (natančneje

Διαβάστε περισσότερα

Arduino grafični vmesnik

Arduino grafični vmesnik Laboratorij za načrtovanje integriranih vezij Univerza v Ljubljani Fakulteta za elektrotehniko Arduino grafični vmesnik DES 2012/13 - razvoj vgrajenega sistema Arduino grafični vmesnik Arduino Leonardo

Διαβάστε περισσότερα

AVTOMATIZACIJA RASTLINJAKA

AVTOMATIZACIJA RASTLINJAKA Šolski center Celje Srednja šola za strojništvo, mehatroniko in medije AVTOMATIZACIJA RASTLINJAKA RAZISKOVALNA NALOGA Avtor: Leon CUGMAS, M-4. c Mentorja: Matej VEBER, univ. dipl. inž. Mag. Andro Glamnik

Διαβάστε περισσότερα

Vaje: Električni tokovi

Vaje: Električni tokovi Barbara Rovšek, Bojan Golli, Ana Gostinčar Blagotinšek Vaje: Električni tokovi 1 Merjenje toka in napetosti Naloga: Izmerite tok, ki teče skozi žarnico, ter napetost na žarnici Za izvedbo vaje potrebujete

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΛΕΓΚΤΩΝ

ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΛΕΓΚΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΛΕΓΚΤΩΝ ATMEL AVR8 ΠΟΡΛΙΔΑΣ ΔΗΜΗΤΡΙΟΣ ATMEL AVR Atmega16 Χαρακτηριστικά Μικροελεγκτής 8-bit υψηλής απόδοσης και χαμηλής κατανάλωσης Προοδευμένη αρχιτεκτονική RISC (Reduced instruction

Διαβάστε περισσότερα

Splošno o interpolaciji

Splošno o interpolaciji Splošno o interpolaciji J.Kozak Numerične metode II (FM) 2011-2012 1 / 18 O funkciji f poznamo ali hočemo uporabiti le posamezne podatke, na primer vrednosti r i = f (x i ) v danih točkah x i Izberemo

Διαβάστε περισσότερα

Gradniki TK sistemov

Gradniki TK sistemov Gradniki TK sistemov renos signalov v višji rekvenčni legi Vsebina Modulacija in demodulacija Vrste analognih modulacij AM M FM rimerjava spektrov analognih moduliranih signalov Mešalniki Kdaj uporabimo

Διαβάστε περισσότερα

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων Εργαστήριο ενσωματωμένων συστημάτων Παρουσίαση 2: Βασικός Προγραμματισμός Arduino (AVR) Εργαστήριο Αυτομάτου Ελέγχου Η πλατφόρμα Arduino Microcontroller: ATmega328 Operating Voltage: 5V Digital I/O Pins:

Διαβάστε περισσότερα

Merilnik kakovosti električne napetosti MC774

Merilnik kakovosti električne napetosti MC774 Merilnik kakovosti električne napetosti MC774 Kratka navodila za vgradnjo Kazalo Kazalo Varnostna navodila in opozorila... 3 Opis naprave... 5 Priključitev... 6 Električna vezava... 9 Napajalni vhodi...

Διαβάστε περισσότερα

MERJENJE TEMPERATURE Z UPORABO MIKROKRMILNIKA

MERJENJE TEMPERATURE Z UPORABO MIKROKRMILNIKA Šolski center Celje Srednja šola za kemijo, elektrotehniko, računalništvo MERJENJE TEMPERATURE Z UPORABO MIKROKRMILNIKA RAZISKOVALNA NALOGA AVTOR Peter Tuhtar E-4.c MENTOR Gregor Kramer, u. d. i. e. Celje,

Διαβάστε περισσότερα

Μαθαίνοντας το hardware του αναπτυξιακού

Μαθαίνοντας το hardware του αναπτυξιακού 1. ΑΣΚΗΣΗ 1 Μαθαίνοντας το hardware του αναπτυξιακού Προϋποθέσεις Το εργαστήριο αυτό προϋποθέτει το διάβασμα και χρήση των εξής: Αρχείο mcbstr9.chm HTML, που δίδεται με τα υπόλοιπα αρχεία του εργαστηρίου.

Διαβάστε περισσότερα

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο, Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο, 2016-2017 Mηχανοτρονική Το Arduino είναι μια «ανοικτού κώδικα» πλατφόρμα «πρωτοτυποποιημένων» ηλεκτρονικών βασισμένη σε ευέλικτο και εύκολο στη χρήση

Διαβάστε περισσότερα

p 1 ENTROPIJSKI ZAKON

p 1 ENTROPIJSKI ZAKON ENROPIJSKI ZAKON REERZIBILNA srememba: moža je obrjea srememba reko eakih vmesih staj kot rvota srememba. Po obeh sremembah e sme biti obeih trajih srememb v bližji i dalji okolici. IREERZIBILNA srememba:

Διαβάστε περισσότερα

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές Εισαγωγή στο Arduino Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών Τι είναι Μικροελεγκτής; Ηλεκτρονική συσκευή που διαχειρίζεται ηλεκτρονικά

Διαβάστε περισσότερα

DISKRETNA FOURIERJEVA TRANSFORMACIJA

DISKRETNA FOURIERJEVA TRANSFORMACIJA 29.03.2004 Definicija DFT Outline DFT je linearna transformacija nekega vektorskega prostora dimenzije n nad obsegom K, ki ga označujemo z V K, pri čemer ima slednji lastnost, da vsebuje nek poseben element,

Διαβάστε περισσότερα

Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών

Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ:ΗΛΕΚΤΡΟΝΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΩΝ ΕΦΑΡΜΟΓΩΝ Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων

Διαβάστε περισσότερα

*M * Osnovna in višja raven MATEMATIKA NAVODILA ZA OCENJEVANJE. Sobota, 4. junij 2011 SPOMLADANSKI IZPITNI ROK. Državni izpitni center

*M * Osnovna in višja raven MATEMATIKA NAVODILA ZA OCENJEVANJE. Sobota, 4. junij 2011 SPOMLADANSKI IZPITNI ROK. Državni izpitni center Državni izpitni center *M40* Osnovna in višja raven MATEMATIKA SPOMLADANSKI IZPITNI ROK NAVODILA ZA OCENJEVANJE Sobota, 4. junij 0 SPLOŠNA MATURA RIC 0 M-40-- IZPITNA POLA OSNOVNA IN VIŠJA RAVEN 0. Skupaj:

Διαβάστε περισσότερα

Zaporedja. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 15. oktober Gregor Dolinar Matematika 1

Zaporedja. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 15. oktober Gregor Dolinar Matematika 1 Matematika 1 Gregor Dolinar Fakulteta za elektrotehniko Univerza v Ljubljani 15. oktober 2013 Oglejmo si, kako množimo dve kompleksni števili, dani v polarni obliki. Naj bo z 1 = r 1 (cosϕ 1 +isinϕ 1 )

Διαβάστε περισσότερα

SKUPNE PORAZDELITVE VEČ SLUČAJNIH SPREMENLJIVK

SKUPNE PORAZDELITVE VEČ SLUČAJNIH SPREMENLJIVK SKUPNE PORAZDELITVE SKUPNE PORAZDELITVE VEČ SLUČAJNIH SPREMENLJIVK Kovaec vržemo trikrat. Z ozačimo število grbov ri rvem metu ( ali ), z Y a skuo število grbov (,, ali 3). Kako sta sremelivki i Y odvisi

Διαβάστε περισσότερα

ΕΛΕΓΧΟΣ ΚΑΙ ΤΡΟΦΟΔΟΤΗΣΗ ΜΕΛΙΣΣΟΚΟΜΕΙΟΥ ΑΠΟ ΑΠΟΣΤΑΣΗ

ΕΛΕΓΧΟΣ ΚΑΙ ΤΡΟΦΟΔΟΤΗΣΗ ΜΕΛΙΣΣΟΚΟΜΕΙΟΥ ΑΠΟ ΑΠΟΣΤΑΣΗ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΗΛΕΚΤΡΙΚΩΝ ΒΙΟΜΗΧΑΝΙΚΩΝ ΔΙΑΤΑΞΕΩΝ ΚΑΙ ΣΥΣΤΗΜΑΤΩΝ ΑΠΟΦΑΣΕΩΝ ΕΛΕΓΧΟΣ ΚΑΙ ΤΡΟΦΟΔΟΤΗΣΗ ΜΕΛΙΣΣΟΚΟΜΕΙΟΥ ΑΠΟ ΑΠΟΣΤΑΣΗ

Διαβάστε περισσότερα

Ljubljanska cesta Kamnik SLOVENIJA Tel (0) Fax ( Mob

Ljubljanska cesta Kamnik SLOVENIJA Tel (0) Fax ( Mob Ljubljanska cesta 45 1241 Kamnik SLOVENIJA Tel. +386 (0)1 5190 853 Fax. +386 (9059 636 Mob. +386 41 622 066 E-mail: info@goto.si www.goto.si Navodilo za hitri začetek uporabe Frekvenčni pretvornik ig5a

Διαβάστε περισσότερα

ΑΝΙΧΝΕΥΣΗ ΓΕΓΟΝΟΤΩΝ ΒΗΜΑΤΙΣΜΟΥ ΜΕ ΧΡΗΣΗ ΕΠΙΤΑΧΥΝΣΙΟΜΕΤΡΩΝ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

ΑΝΙΧΝΕΥΣΗ ΓΕΓΟΝΟΤΩΝ ΒΗΜΑΤΙΣΜΟΥ ΜΕ ΧΡΗΣΗ ΕΠΙΤΑΧΥΝΣΙΟΜΕΤΡΩΝ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΕΠΙΚΟΙΝΩΝΙΩΝ ΗΛΕΚΤΡΟΝΙΚΗΣ ΚΑΙ ΣΥΣΤΗΜΑΤΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΙΧΝΕΥΣΗ ΓΕΓΟΝΟΤΩΝ ΒΗΜΑΤΙΣΜΟΥ ΜΕ ΧΡΗΣΗ ΕΠΙΤΑΧΥΝΣΙΟΜΕΤΡΩΝ

Διαβάστε περισσότερα

ELEKTRONIKA PAHOR D.O.O.

ELEKTRONIKA PAHOR D.O.O. ELEKTRONIKA PAHOR D.O.O. DVOVHODNI ANALOGNI MODUL Tip SM1-03 Navodila za uporabo Elektronika Pahor 2012 www.termomer.com 1 Kazalo vsebine 1.Namen...3 2.Vsebina kompleta...4 3.Montaža...4 3.1.Možnosti pritrditve...4

Διαβάστε περισσότερα

ELEKTRONIKA PAHOR D.O.O.

ELEKTRONIKA PAHOR D.O.O. ELEKTONIKA PAHO D.O.O. ŠTIIVHODNI ANALOGNI MODUL Tip SM2 Navodila za uporabo Elektronika Pahor 22 www.termomer.com Kazalo vsebine.namen...3 2.Vsebina kompleta...4 3.Montaža...4 3..Možnosti pritrditve...4

Διαβάστε περισσότερα

PRENAPETOSTNE ZAŠČITE ZA DOM

PRENAPETOSTNE ZAŠČITE ZA DOM PRENAPETOSTNE ZAŠČITE ZA DOM? TEVIZA, d.o.o., Bevkova 5, 1270 Litija, tel.: (0) 1 898 37 53, fax: (0) 1 898 32 93 PRENAPETOSTNE ZAŠČITE V ENERGETSKIH NIZKONAPETOSTNIH SISTEMIH PROTEC B - Odvodnik skupine

Διαβάστε περισσότερα

Zgodba vaše hiše

Zgodba vaše hiše 1022 1040 Zgodba vaše hiše B-panel strani 8-11 Osnovni enobarvni 3020 3021 3023 paneli 3040 3041 Zasteklitve C-panel strani 12-22 S-panel strani 28-35 1012 1010 1013 2090 2091 1022 1023 1021 1020 1040

Διαβάστε περισσότερα

Podobnost matrik. Matematika II (FKKT Kemijsko inženirstvo) Diagonalizacija matrik

Podobnost matrik. Matematika II (FKKT Kemijsko inženirstvo) Diagonalizacija matrik Podobnost matrik Matematika II (FKKT Kemijsko inženirstvo) Matjaž Željko FKKT Kemijsko inženirstvo 14 teden (Zadnja sprememba: 23 maj 213) Matrika A R n n je podobna matriki B R n n, če obstaja obrnljiva

Διαβάστε περισσότερα

«ΥΛΟΠΟΙΗΣΗ ΑΣΥΡΜΑΤΗΣ ΕΠΙΚΟΙΝΩΝΙΑΣ ΜΕ ΧΡΗΣΗ ΜΙΚΡΟΕΛΕΓΚΤΩΝ» ΒΥΣΑΝΣΙΩΤΗΣ ΣΤΑΥΡΟΣ Α.Μ ΚΑΡΒΟΥΝΙΔΟΥ ΑΓΓΕΛΙΚΗ Α.Μ

«ΥΛΟΠΟΙΗΣΗ ΑΣΥΡΜΑΤΗΣ ΕΠΙΚΟΙΝΩΝΙΑΣ ΜΕ ΧΡΗΣΗ ΜΙΚΡΟΕΛΕΓΚΤΩΝ» ΒΥΣΑΝΣΙΩΤΗΣ ΣΤΑΥΡΟΣ Α.Μ ΚΑΡΒΟΥΝΙΔΟΥ ΑΓΓΕΛΙΚΗ Α.Μ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ «ΥΛΟΠΟΙΗΣΗ ΑΣΥΡΜΑΤΗΣ ΕΠΙΚΟΙΝΩΝΙΑΣ ΜΕ ΧΡΗΣΗ ΜΙΚΡΟΕΛΕΓΚΤΩΝ» ΒΥΣΑΝΣΙΩΤΗΣ ΣΤΑΥΡΟΣ Α.Μ. 10139 ΚΑΡΒΟΥΝΙΔΟΥ ΑΓΓΕΛΙΚΗ Α.Μ. 10057 ΕΠΙΒΛΕΠΩΝ ΚΑΘΗΓΗΤΗΣ ΤΑΤΣΗΣ ΓΕΩΡΓΙΟΣ ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ Κατάλογος

Διαβάστε περισσότερα

MERILNIK POSPEŠKOV V AVTOMOBILU

MERILNIK POSPEŠKOV V AVTOMOBILU UNIVERZA V LJUBLJANI Fakulteta za elektrotehniko MERILNIK POSPEŠKOV V AVTOMOBILU Rok Vinder Predmet: Seminar Nosilec predmeta: doc.dr. Marko Jankovec 1. Časovni in finančni plan projekta Za razvoj novega

Διαβάστε περισσότερα

PARCIJALNI IZVODI I DIFERENCIJALI. Sama definicija parcijalnog izvoda i diferencijala je malo teža, mi se njome ovde nećemo baviti a vi ćete je,

PARCIJALNI IZVODI I DIFERENCIJALI. Sama definicija parcijalnog izvoda i diferencijala je malo teža, mi se njome ovde nećemo baviti a vi ćete je, PARCIJALNI IZVODI I DIFERENCIJALI Sama definicija parcijalnog ivoda i diferencijala je malo teža, mi se njome ovde nećemo baviti a vi ćete je, naravno, naučiti onako kako vaš profesor ahteva. Mi ćemo probati

Διαβάστε περισσότερα

Fazni diagram binarne tekočine

Fazni diagram binarne tekočine Fazni diagram binarne tekočine Žiga Kos 5. junij 203 Binarno tekočino predstavljajo delci A in B. Ti se med seboj lahko mešajo v različnih razmerjih. V nalogi želimo izračunati fazni diagram take tekočine,

Διαβάστε περισσότερα

Tehnika za življenje SOLUTIONS KTS 560 / KTS 590. Diagnostika ECU z ESI[tronic]

Tehnika za življenje SOLUTIONS KTS 560 / KTS 590. Diagnostika ECU z ESI[tronic] Tehnika za življenje SOLUTIONS KTS 560 / KTS 590 Diagnostika ECU z ESI[tronic] Visokotehnološka diagnoza ECU za optimalno učinkovitost Nova trpežna modula KTS KTS 560 in KTS 590 sta osnovana na Boschevi

Διαβάστε περισσότερα

Programiranje 1 PROGRAMIRANJE 1 MATIJA LOKAR SREČO URANIČ

Programiranje 1 PROGRAMIRANJE 1 MATIJA LOKAR SREČO URANIČ PROGRAMIRANJE 1 MATIJA LOKAR SREČO URANIČ Višješolski strokovni program: Informatika Učbenik: Pogramiranje 1 Gradivo za 1. letnik Avtorja: Mag. Matija Lokar Univerza v Ljubljani Fakulteta za matematiko

Διαβάστε περισσότερα

Energetska neodvisnost

Energetska neodvisnost Energetska neodvisnost Komandne omare Ročne - avtomatske - paralelne Komandne omare ROČNA KOMANDNA OMARA KO-R MRS Ročna komandna omara je lahko montirana na elektroagregatu ali ločeno. Obsega celoten nadzor

Διαβάστε περισσότερα

Frekvenčna analiza neperiodičnih signalov. Analiza signalov prof. France Mihelič

Frekvenčna analiza neperiodičnih signalov. Analiza signalov prof. France Mihelič Frekvenčna analiza neperiodičnih signalov Analiza signalov prof. France Mihelič Vpliv postopka daljšanja periode na spekter periodičnega signala Opazujmo družino sodih periodičnih pravokotnih impulzov

Διαβάστε περισσότερα

V tem poglavju bomo vpeljali pojem determinante matrike, spoznali bomo njene lastnosti in nekaj metod za računanje determinant.

V tem poglavju bomo vpeljali pojem determinante matrike, spoznali bomo njene lastnosti in nekaj metod za računanje determinant. Poglavje IV Determinanta matrike V tem poglavju bomo vpeljali pojem determinante matrike, spoznali bomo njene lastnosti in nekaj metod za računanje determinant 1 Definicija Preden definiramo determinanto,

Διαβάστε περισσότερα

osnovni koraki Matija Lokar in Srečo Uranič V 0.9 oktober 2008

osnovni koraki Matija Lokar in Srečo Uranič V 0.9 oktober 2008 诲诲뾡盦盨 盨 ʚProgramski jezik C# osnovni koraki Matija Lokar in Srečo Uranič V 0.9 oktober 2008 2 3 Predgovor Omenjeno gradivo predstavlja prvi del gradiv, namenjenih predmetu Programiranje 1 na višješolskem

Διαβάστε περισσότερα

Razvojna plošča za predmet Integrirana vezja SEMINAR

Razvojna plošča za predmet Integrirana vezja SEMINAR Razvojna plošča za predmet Integrirana vezja SEMINAR Ljubljana, 2012 Damjan Repar, 64050333 1 KAZALO KAZALO...2 KLJUČNE BESEDE...3 PROBLEM, IDEJA...4 ZASNOVA NAPRAVE...5 BLOČNI DIAGRAM...5 FPGA...6 uc...6

Διαβάστε περισσότερα

The Thermal Comfort Properties of Reusable and Disposable Surgical Gown Fabrics Original Scientific Paper

The Thermal Comfort Properties of Reusable and Disposable Surgical Gown Fabrics Original Scientific Paper 24 The Thermal Comfort Properties of Surgical Gown Fabrics 1 1 2 1 2 Termofiziološke lastnosti udobnosti kirurških oblačil za enkratno in večkratno uporabo december 2008 marec 2009 Izvleček Kirurška oblačila

Διαβάστε περισσότερα

4. Osnovne vhodno/izhodne enote

4. Osnovne vhodno/izhodne enote 4. Osnovne vhodno/izhodne enote Spoznali boste osnovne vhodno/izhodne enote digitalne (binarne) ali logične vhode/izhode. Naučili se boste konfigurirati posamezne priključke vrat A, B in C ter programsko

Διαβάστε περισσότερα

Iterativno reševanje sistemov linearnih enačb. Numerične metode, sistemi linearnih enačb. Numerične metode FE, 2. december 2013

Iterativno reševanje sistemov linearnih enačb. Numerične metode, sistemi linearnih enačb. Numerične metode FE, 2. december 2013 Numerične metode, sistemi linearnih enačb B. Jurčič Zlobec Numerične metode FE, 2. december 2013 1 Vsebina 1 z n neznankami. a i1 x 1 + a i2 x 2 + + a in = b i i = 1,..., n V matrični obliki zapišemo:

Διαβάστε περισσότερα

VEKTORJI. Operacije z vektorji

VEKTORJI. Operacije z vektorji VEKTORJI Vektorji so matematični objekti, s katerimi opisujemo določene fizikalne količine. V tisku jih označujemo s krepko natisnjenimi črkami (npr. a), pri pisanju pa s puščico ( a). Fizikalne količine,

Διαβάστε περισσότερα

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems)

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems) Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems) Μαθηµα 2 ηµήτρης Λιούπης 1 Intel SA-1110 µc StrongARM core. System-on-Chip. Εξέλιξη των SA-110 και SA-1100. 2 ARM cores ARM: IP (intellectual

Διαβάστε περισσότερα

SEMINARSKA NALOGA Funkciji sin(x) in cos(x)

SEMINARSKA NALOGA Funkciji sin(x) in cos(x) FAKULTETA ZA MATEMATIKO IN FIZIKO Praktična Matematika-VSŠ(BO) Komuniciranje v matematiki SEMINARSKA NALOGA Funkciji sin(x) in cos(x) Avtorica: Špela Marinčič Ljubljana, maj 2011 KAZALO: 1.Uvod...1 2.

Διαβάστε περισσότερα

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Sreda, 3. junij 2015 SPLOŠNA MATURA

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Sreda, 3. junij 2015 SPLOŠNA MATURA Državni izpitni center *M15143113* SPOMLADANSKI IZPITNI ROK NAVODILA ZA OCENJEVANJE Sreda, 3. junij 2015 SPLOŠNA MATURA RIC 2015 M151-431-1-3 2 IZPITNA POLA 1 Naloga Odgovor Naloga Odgovor Naloga Odgovor

Διαβάστε περισσότερα