61
Žiga Obojnik MIKROKRMILNIŠKI SISTEM ZA MERJENJE TEMPERATURE IN RELATIVNE VLAŽNOSTI Diplomsko delo Maribor, junij 2016

Žiga Obojnik MIKROKRMILNIŠKI SISTEM ZA …II Mikrokrmilniški sistem za merjenje temperature in relativne vlažnosti Ključne besede: senzor temperature in vlage, mikrokrmilnik,

  • Upload
    others

  • View
    2

  • Download
    1

Embed Size (px)

Citation preview

Žiga Obojnik

MIKROKRMILNIŠKI SISTEM ZA MERJENJE

TEMPERATURE IN RELATIVNE VLAŽNOSTI

Diplomsko delo

Maribor, junij 2016

MIKROKRMILNIŠKI SISTEM ZA MERJENJE

TEMPERATURE IN RELATIVNE VLAŽNOSTI

Diplomsko delo

Študent: Žiga Obojnik

Študijski program: visokošolski študijski program Elektrotehnika

Smer: Elektronika

Mentor: viš. pred. dr. Mitja Solar

I

II

Mikrokrmilniški sistem za merjenje temperature in relativne

vlažnosti

Ključne besede: senzor temperature in vlage, mikrokrmilnik, zaslon s tekočimi

kristali, programska oprema MikroC, Altium Designer

UDK: 681.586.6(043.2)

Povzetek

V prvem delu diplomskega dela je na kratko predstavljena zgodovina merjenja temperature

in temperaturne lestvice. Podrobneje so opisani ključni elektronski elementi, ki smo jih

uporabil in sicer senzor za merjenje temperature in relativne vlažnosti SHT75,

mikrokrmilnik PIC16f648a, štirivrstični zaslon LCD, napajalnik Traco Power ter

programska oprema MikroC, Altium Designer in PICkit2. V zadnjem delu diplomskega dela

je prikazana električna shema, 3D model vezja, izdelava tiskanine , opis delovanja programa

z diagramom poteka ter samo preiskušanje vezja in naše ugotovitve.

III

Microcontroller based system for temperature and humidity

control

Key words: temperature and relative humidity sensor, microcontroller, LCD

display, software equipment MikroC, Altium Designer

UDK: 681.586.6(043.2)

Abstract

The first part of my diploma thesis consists of a brief history of temperature measurement

and basics of the temperature scale. Key electronic components, that have been used in my

work are then described in detail, namely a temperature and relative humidity sensor SHT75,

microcontroller PIC16f648a, a 4-line LCD display, power supply Traco Power and software

equipment MikroC, Altium Designer and PICkit2. In the last part of the diploma thesis the

electrical scheme and 3D model of the circuit can be found, together with the description of

circuit creation, a description of the program with a flowchart and the results of the circuit

testing.

IV

KAZALO

1. Uvod ........................................................................................................................................... 1

2. Temperatura in vlažnost ............................................................................................................ 2

2.1 Zgodovina merjenja temperature ...................................................................................... 2

2.2 Merjenje temperature danes ............................................................................................. 3

2.3 Vlažnost .............................................................................................................................. 5

3. Uporabljena strojna oprema ...................................................................................................... 6

3.1 Mikrokrmilnik PIC16f648a .................................................................................................. 6

3.2 Senzor SHT75 ...................................................................................................................... 8

3.2.1 Točnost merjenja relativne vlažnosti in temperature senzorja SHT7x ........................ 10

3.2.2 Postopek obnove senzorja ........................................................................................... 12

3.2.3 Priključki senzorja SHT75 .............................................................................................. 12

3.2.4 Zagon senzorja ............................................................................................................. 13

3.2.5 Pošilajanje ukaza .......................................................................................................... 13

3.2.6 Statusni register ........................................................................................................... 15

3.2.7 Kompenzacija nelinearnosti izmerjene relativne vlažnosti .......................................... 16

3.2.8 Temperaturna kompenzacija relativne vlažnosti ......................................................... 17

3.2.9 Izračun temperature .................................................................................................... 18

3.2.10 Primer meritve relativne vlažnosti .............................................................................. 19

3.3 LCD -Tekoče kristalni zaslon (Liquid Crystal Display) ....................................................... 20

3.4 AC –DC pretvornik TRACO POWER ................................................................................... 23

4. Programska oprema ................................................................................................................. 24

4.1 Programsko orodje MikroC PRO for PIC ........................................................................... 24

4.2 Programator in razhroščevalnik PicKit2 ................................................................................. 25

4.3 Altium designer ................................................................................................................ 26

5. Zasnova rešitve in implementacija ........................................................................................... 27

5.1 Izdelava električne sheme ................................................................................................ 27

5.2 3D tiskanina (Altium Designer) ......................................................................................... 28

5.3 Izdelava tiskanine ............................................................................................................. 29

5.4 Delovanje programa ......................................................................................................... 30

6. Rezultati.................................................................................................................................... 32

6.1 Točnost merjenja .............................................................................................................. 33

6.2 Primerjava vrednosti temperature pri različnih območjih preklopa ................................ 35

7. Zaključek ................................................................................................................................... 37

V

Viri in literature ................................................................................................................................ 38

Koda programa (MikroC Pro for PIC) .............................................................................................. A

KAZALO SLIK

Slika 2.1: Risba Galilejevega termoskopa ............................................................................. 2

Slika 2.2 Primerjava lestvic Celzija in Fahrenheita .............................................................. 4

Slika 3.1 Oblike mikrokrmilnika PIC16f648a ....................................................................... 6

Slika 3.2 Priključki mikrokrmilnika PIC16f648a .................................................................. 7

Slika 3.3 Senzor SHT75 ........................................................................................................ 8

Slika 3.4 Priključki senzorja SH75 ...................................................................................... 12

Slika 3.5 Ukaz za začetek prenosa....................................................................................... 13

Slika 3.6 Statusni register (pisalni) ...................................................................................... 15

Slika 3.7 Primer meritve relativne vlažnosti ....................................................................... 19

Slika 3.8 prikazovalnik LCD .............................................................................................. 20

Slika 3.9 Dimenzije LCD znaka .......................................................................................... 20

Slika 3.10 Dimenzije LCD prikazovalnika.......................................................................... 21

Slika 3.11 AC-DC pretvornik [7] ........................................................................................ 23

Slika 3.12 Dimenzije pretvornika [11] ................................................................................ 23

Slika 4.1 MikroC PRO [5] ................................................................................................... 24

Slika 4.2 Programator PicKIT2 [5] Slika 4.3 PICkit 2 Programmer [1]......................... 25

Slika 4.4 Program za načrtovanje vezij - Altium designer [9] ............................................ 26

Slika 5.1 Električna shema sistema ..................................................................................... 27

Slika 5.2 Sprednja stran tiskanine........................................................................................ 28

Slika 5.3 Zadnja stran tiskanine ........................................................................................... 29

Slika 5.4 Rezkanje tiskanine ................................................................................................ 29

Slika 5.5 Diagram poteka programa .................................................................................... 31

Slika 6.1 Štirivrstični zaslon LCD ....................................................................................... 32

Slika 6.2 Končno vezje pripravljeno za vgradnjo v ohišje .................................................. 32

Slika 6.3 Meritev relativne vlažnosti z mokrim in suhim termometrom ............................. 33

VI

KAZALO TABEL

Tabela 3.1 Karakteristike senzorja SHT75 ............................................................................ 9

Tabela 3.2 Zmogljivost senzorja pri merjenju relativne vlažnosti ..................................... 10

Tabela 3.3 Zmogljivost senzorja pri merjenju temperature ................................................. 11

Tabela 3.4 seznam ukazov ................................................................................................... 14

Tabela 3.5 Biti statusnega registra ....................................................................................... 15

Tabela 3.6 Konstante za izračun nelinearnosti senzorja ...................................................... 16

Tabela 3.7 Koeficienti za kompenzacijo temperature ......................................................... 17

Tabela 3.8 Koeficienti za temperaturno pretvorbo .............................................................. 18

Tabela 3.9 Priključki LCD prikazovalnika .......................................................................... 22

Tabela 6.1 Tabela za izračun relativne vlažnosti z dvema termometroma .......................... 34

Tabela 6.2 Izmerjene vrednosti ........................................................................................... 34

Tabela 6.3 tabela izmerjenih temperatur ............................................................................. 35

KAZALO GRAFOV

Graf 3.1 Območje normalnega delovanja senzorja ............................................................... 9

Graf 3.2 Maksimalna toleranca senzorja pri merjenju relativne vlažnosti (pri 25°C) ......... 11

Graf 3.3 Maksimalna toleranca senzorja pri merjenju temperature .................................... 11

Graf 6.1 Izmerjena temperatura pri preklopu ±3˚C ............................................................. 36

Graf 6.2 Izmerjena temperatura pri preklopu ±1,5˚C .......................................................... 36

Graf 6.3 Izmerjena temperatura pri preklopu ±0,5˚C .......................................................... 36

KAZALO ENAČB

𝑅𝐻𝑙𝑖𝑛𝑒𝑎𝑟 = 𝑐1 + 𝑐2 ∙ 𝑆𝑂𝑅𝐻 + 𝑐3 ∙ 𝑆𝑂𝑅𝐻2 %𝑅𝐻(2.1) .................................................. 16

𝑅𝐻𝑡𝑟𝑢𝑒 = 𝑇°𝐶 − 25 ∙ 𝑡1 + 𝑡2 ∙ 𝑆𝑂𝑅𝐻 + 𝑅𝐻𝑙𝑖𝑛𝑒𝑎𝑟 (2.2) ................................................ 17

𝑇 = 𝑑1 + 𝑑2 ∙ 𝑆𝑂𝑇 (2.3) .................................................................................................... 18

VII

KRATICE in SIMBOLI

LCD - (ang. liquid crystal display ) – tekočekristalni zaslon

RH - (ang. relative humidity) – relativna vlažnost

RAM - (ang. random acces memmory) – delovni spomin

EEPROM – (ang. Erasable Programmable Read-Only Memory) - Zbrisljiv in programirljiv bralni

pomnilnik

AC – (ang. Alternating current) - Izmenični tok

DC - (ang. direct current) – enosmerni tok

1

1. Uvod

V nekaterih prostorih hiš, sušilnicah, rastlinjakih, skladiščih in bazenih je potrebno

zagotoviti točno določeno temperature in vlažnost zraka, sicer se pojavi neželen kondenz,

razvije se plesen in onemogočeno je sušenje. Zato je v tovrstnih prostorih potrebno poskrbeti

za samodejno uravnvanje omenjenih veličin, ki jih je mogoče regulirati z ustreznim

mikrokrmilniškim sistemom. Ta mora vključevati ustrezne aktuatorje, za krmiljenje

klimatskih naprav, vlažilnikov ali razvlažilnikov ter grelnih naprav.

V diplomskem delu želimo izdelati tovrstni sistem. Enota bo realizirana s pomočjo

mikrokrmilnika, ustreznih aktuatorjev, senzorja vlage in temperature ter LCD

prikazovalnika. Regulacija temperature in vlažnosti bo mogoča v prostorih različnih

velikosti. Sistem bo mogoče nadzorovati in upravljati lokalno preko LCD prikazovalnika in

gumbov.

2

2. Temperatura in vlažnost

2.1 Zgodovina merjenja temperature

Dolgo časa so se ljudje zadovoljevali z fizičnim občutkom merjenja temperature. Vedeli so,

da je mlačna voda toplejša od mrzle, da je vrela toplejša od mlačne in da je ogenj toplejši od

vrele vode.

Galileo Galilei je bil eden izmed prvih, ki je okoli leta 1592 poskušal z merjenjem določiti

kako toplo je kaj. »Galilei je stekleno posodo z ozko cevko z zrakom segrel in potopil cevko

v vodo. Voda v cevki se je dvignila, ko se je zrak ohladil (slika 2.1). Poslej je gladina kazala,

kako topel je zrak v cevki: čim bolj se je segrel, tem niže se je spustila. Pozneje je Galilei

zavil cevko navzgor. Galilei je lahko s svojim termoskopom primerjal, katero od dveh teles

je toplejša, ne da bi se mu bilo treba sklicevati na občutke. Pri tem je izkoriščal lastnost

zraka, da se mu poveča prostornina, ko ga segrejemo. To pa velja le, če se zunanji zračni

tlak ne spremeni. Višina vodne gladine v termoskopu je torej odvisna od zunanjega tlaka, za

katerega vemo, da se spreminja z vremenom. Kaže, da se Galilei te pomanjkljivosti ni

zavedal« [3].

Slika 2.1: Risba Galilejevega termoskopa

3

Veliko izboljšavo merjenja temperature je naredil Daniel Fahrenheit. Fahrenheitu se je

alkohol s svojim nizkim vreliščem ni zdel primeren zato ga je nadomestil z živim srebrom,

za katerega je leta 1714 tudi izumil način čiščenja, saj se je neprečiščeno živo srebro lepilo

na steklo. Živo srebro ima namreč pred alkoholom to prednost, da se razširja ob segrevanju

bolj enakomerno.

Fahrenheitova lestvica se je hitro razširila in jo še dandanes uporabljajo po angleško

govorečih deželah. Pri nas se Fahrenheitova lestvica ni udomačila, živosrebrne termometre

uporabljamo še danes.

Pri nas uporabljamo lestvico astronoma Anderasa Celsiusa (Celzija), ki je leta 1742 priredil

vrelišču vode 0 stopinj in ledišču 100 stopinj. A kaj kmalu si je Celzij premislil in stvar

zasukal tako, kot jo poznamo še danes. Leta 1948 je mednarodni odbor za uteži in mere

potrdil stopinjo celzija, kot enoto za temperaturo.

2.2 Merjenje temperature danes

Delovanje termometrov temelji na temperaturni odvisnosti neke lastnosti snovi, lahko se

veča oziroma manjša vlumen tekočin in trdnih snovi ali pa se spreminjajo električne lastnosti

snovi [15].

Nekaj vrst termometrov:

Plinski termometri (uporabljajo za kalibracijo drugih vrst termometrov)

Tekočinski termometri (živosrebrni ali alkoholni)

Električni termometri:

- uporovni (el. prevodnost pada z naraščanjem temperature)

- termistorji (polprevodniki - upornost je odvisna od temperature)

- termoelementi (dva vodnika različnih materialov, na stikališčih različne temperature

se pojavi el. tok)

- infrardeči

4

V večjem delu sveta se za meritev temperature uporablja Celzijeva temperaturna

lestvica.

Najbolj znane temperaturne lestvice:

- Celzijeva - 100 ºC predstavlja vrelišče vode, 0 ºC predstavlja tališče ledu.

- Kelvinova - ne pozna negativnih vrednosti; ničlo v lestvici je absolutno ničla.

- Fahrenheitova temperaturna lestvica - ničla je najnižja temperatura, ki jo lahko

ponovljivo dosegel z mešanico ledu in soli (0 ºF), kot drugo umeritveno točko pa je

vzel temperaturo človeškega telesa (96 ºF).

- Rankinova temperaturna lestvica

- Réaumurjeva temperaturna lestvica - ničlo ima pri tališču ledu in 80º pri vrelišču

vode pri enakih pogojih.

Slika 2.2 Primerjava lestvic Celzija in Fahrenheita [15]

5

2.3 Vlažnost

Vlažnost podaja količino vodnih hlapov v zraku. Vlažnost delimo na absolutno in relativno.

Absolutna vlažnost je skupna masa vodne pare, ki je prisotna v kubičnem metru

zraka. Absolutna vlažnost v atmosferi sega od blizu nič do približno 30 gramov na kubični

meter, ko je zrak nasičen pri 30 ° C in se spreminja z spremembo tlaka ali temperature zraka

[14].

Relativna vlažnost je razmerje med absolutno vlažnostjo in največjo mogočo absolutno

vlažnostjo. Z nižanjem temperature pridemo do kondenzacije in iz vlažnega zraka se začnejo

izločati kapljice vode. Temu pojavu pravimo rosišče.

6

3. Uporabljena strojna oprema

Sistem je sestavljen iz spodaj naštetih elektronskih komponent, ki jih bomo v nadaljevanju

podrobneje opisali:

- Mikrokrmilnik Microchip PIC16f648a (slika 3.1)..

- Senzor vlage in temperature Sensirion SHT75 (slika 3.3).

- Prikazovalnik s tekočimi kristali LCD (slika 3.8).

- AC-DC pretvornik TRACO POWER (slika 3.11).

- Rele, upor, zener diode, svetleča dioda, varovalka, tipke.

3.1 Mikrokrmilnik PIC16f648a

Microchip Technology Inc. ima veliko izbiro 8-bitnih mikrokrmilnikov z velikem številom

vgrajenih funkcij kot so analogno-digitalni pretvornik, PWM modul, I2C, UART, časovniki,

primerjalnik in zunanje prekinitve. Mikrokrmilnik PIC16F648A smo izbrali zaradi števila

I/O priključkov in zadostnega programskega pomnilnika [4].

Slika 3.1 Oblike mikrokrmilnika PIC16f648a

7

Mikrokrmilnik PIC16F648A uvrstimo v družino PIC16F627A/628A/648A 18-pinskih

FLASH 8-bitnih mikrokrmilnikov podjetja Microchip Technology Inc. Ima 16 digitalnih ali

analognih vhodno/izhodnih priključkov, 256 zlogov EEPROM spomina, 4kB Flash

programskega pomnilnika in 256 zlogov RAMA. Napajamo ga lahko z 2V do 5,5V

enosmerne DC napetosti in porabi zelo malo električne energije. Ima možnost uporabe

zunanjega oscilatorja do 20MHz in natančen notranji tovarniško kalibriran oscilator na

4MHz ±1%. Pri našem projektu smo uporabili notranji 4MHz oscilator in s tem prihranili

dva priključka. Dobavljiv je v SOIC, SSOP, QF N in PDIP ohišjih, slednjega smo zaradi ne

pretirano majhne velikosti in s tem lahke zamenljivosti uporabili pri izdelavi prototipa (slika

3.2). Delovno območje od -40°C do 125°C.

Slika 3.2 Priključki mikrokrmilnika PIC16f648a

8

3.2 Senzor SHT75

Senzor za merjenje temperature in relativne vlažnosti Sensirion SHT 75 izhaja iz družine

senzorjev SHTxx Švicarskega podjetja Sensirion (slika 3.3). Senzor ima integriran senzorski

del in del za obdelavo signalov, zaradi česar ima zelo hiter odzivni čas, dobro odpornost na

zunanje motnje (EMC) in popolnoma umirjen digitalni izhod. Senzorski del je sestavljen iz

kapacitivnega tipala za merjenje relativne vlažnosti in temperaturnega tipala. Oba tipala sta

priklopljena na 14-bitni analogno/digitalni pretvornik in zaporedni vmesnik. Uporabljena

CMOSens® tehnologija zagotavlja visoko stopnjo zanesljivosti in dolgoročno stabilnost.

Vsak SHT7x senzor je individualno umerjen v precizni vlažnostni komori. Kalibracijski

koeficienti so shranjeni na OTP pomnilniku, ki je uporabljen za interno umerjanje signalov

senzorja. Dvožilni zaporedni vmesnik in interna regulacija napetosti omogoča enostavno in

hitro integracijo sistema. [10]

Slika 3.3 Senzor SHT75

9

Priporočljiva napajalna napetost senzorja je 3,3V enosmerne DC napetosti, lahko pa se giblje

od 2,4V do 5,5V DC. Senzor porabi zelo malo električne energije, kar je razvidno iz tabele

2.1. Logična ničla oziroma negativen logični signal je kadar pade signal po 20% napajalne

napetosti, logična enica oziroma pozitiven logični signal pa kadar naraste signal nad

80%napajalne napetosti. Senzor med merjenjem porabi 3mW električne moči in 2µW do

5µW med čakanjem (tabela 3.1). Senzor deluje v območju od -40°C do 120°C (graf 3.1).

Tabela 3.1 Karakteristike senzorja SHT75

Parameter stanje Min običajno max Enota

Napajalna napetost DC 2,40 3,3 5,5 V

spanje 2 5 Uw

Poraba električne energije merjenje 3 Mw

povprečna 90 Uw

spanje 0,3 1,5 Ua

Napajalni tok merjenje 0,55 1 Ma

povprečna 2 28 Ua

Negativen logični signal (logična 0) 0% 20% VDD

Pozitiven logični signal (logična 1) 80% 100% VDD

Graf 3.1 Območje normalnega delovanja senzorja

10

3.2.1 Točnost merjenja relativne vlažnosti in temperature senzorja SHT7x

Oba senzorja opravljata enako funkcijo le da je SHT75 še bolj natančen kot SHT71.

Območje merjenja relativne vlažnosti pri obeh senzorjih je od 0% do 100%, območje

merjenja temperature pa od -40°C do 123,8°C. SHT71 ima pri odčitavanju relativne

vlažnosti toleranco ± 3,0% (tabela 3.2) pri odčitavanju temperature pa ± 0.4°C (tabela 3.3)

za razliko od senzorja SHT75, ki ima toleranco pri odčitavanju relativna vlažnosti le ± 1,8%

(tabela 3.2), pri odčitavanju temperature pa le ±0,3°C (tabela 3.3). Iz grafa 2.2 je razvidno,

da ima senzor SHT75 pogrešek večji od 2% le pri merjenju relativne vlažnosti nižje od 10%

in višje od 90%. Pri merjenju temperature (graf 3.2) na sobnem nivoju, kar je okoli 25°C,

pa ima pogrešek manjši od 0,5%.

Tabela 3.2 Zmogljivost senzorja pri merjenju relativne vlažnosti

Parameter Stanje Min običajno max Enota

Resolucija 0.4 0.05 0.05 %RH

8 12 12 Bit

Tolerance SHT71 Običajno ± 3.0

Max glej graf: max. toleranca relativne vlažnosti pri 25°C

Tolerance SHT75 Običajno ±1.8

Max glej graf: max. toleranca relativne vlažnosti pri 25°C

Ponovljivost ±0.1 %RH

Histereza ±1 %RH

Območje merjenja 0 100 %RH

11

Graf 3.2 Maksimalna toleranca senzorja pri merjenju relativne vlažnosti (pri 25°C)

Tabela 3.3 Zmogljivost senzorja pri merjenju temperature

Parameter Stanje Min običajno max enota

Resolucija 0.04 0.01 0.01 °C

12 14 14 bit

Toleranca SHT71 običajno ±0.4 °C

Max glej graf: max. toleranca temperature

Toleranca SHT75 običajno ±0.3 °C

Max glej graf: max. toleranca temperature

Ponovljivost ±0.1 °C

Delovno -40 123.8 °C

Območje -40 254.9 °F

Graf 3.3 Maksimalna toleranca senzorja pri merjenju temperature

12

3.2.2 Postopek obnove senzorja

Ekstremnimi pogoji ali izpostavljenost hlapov topil lahko popači natančnost senzorja. V

takšnem primeru lahko poskusimo obnoviti senzor v kalibracijsko stanje.

Senzor lahko vstavimo v pečico za 10 ur pri 100-105°C in relativni vlažnosti pod 5%, ali

ga rehidriramo pri 20-30°C pri ~75% relativni vlažnosti 12ur.

3.2.3 Priključki senzorja SHT75

Senzor SHT75 ima štiri priključke, dva za napajanje in dva za digitalno komunikacijo pri

čemer je eden urin takt, drugi pa podatkovna linija. Čeprav je komunikacija podobna I2C

(komunikacijski protokol) ni kompatibilno z njim. Med napajalno in podatkovno linijo je

potrebno vezati zunanji 10kΩ dvižni upor (pull up) za dvig pozitivnega logičnega signala na

podatkovno linijo. Na zadnji strani senzorja je med napajalni priključek in priključek za

maso integriran kondenzator 100nF. Priključek SCK (urin takt) je uporabljen za

sinhronizacijo komunikacije med mikrokrmilnikom in senzorjem, priključek DATA pa za

prenos podatkov iz in v senzor (slika 3.4).

Slika 3.4 Priključki senzorja SH75

13

3.2.4 Zagon senzorja

Prvi korak pri zagonu senzorja je izbira napajalne napetosti (VDD). Pri priključitvi na

napetost senzor potrebuje 11ms, da preide v spalni način delovanja (ang. Sleep State), v tem

trenutku mu ne smemo pošiljati nobenih ukazov.

3.2.5 Pošilajanje ukaza

Ko je urin takt (SCK) na logični 1 je potrebno postaviti podatkovno linijo (DATA) na

logično 0 in počakati da pade SCK nazaj na logično 0. Ko SCK ponovno naraste na logično

1, dvignemo DATA linijo nazaj na logično 1 in s tem začnemo »Transmission Start«

(začetek prenosa) (slika 3.5).

Slika 3.5 Ukaz za začetek prenosa

14

Naslednji korak je pošiljanje ukaza, ki je sestavljen iz treh naslovnih bitov in petih ukaznih

bitov. Potrditev pravilnega sprejema ukaza senzor pokaže s tem, da postavi DATA na

logično 0 po prehodu osmega urinega bita SCK na logično 0. Ta bit imenujemo potrditveni

bit (ang. acknowledge ACK). Če želimo naprimer meriti temperaturo uporabimo ukazne

bite 00011, pri meritvi relativne vlažnosti pa 00101 (tabela 3.4). Po sprejetem ukazom

merjenja mora mikrokrmilnik počakati 20/80/320ms za 8-, 12-,14-bitno meritev.

Mikrokrmilnik mora počakati na »Data ready« signal preden začne brati meritev senzorja

in potrditi vsak bit, s tem, da postavi DATA linijo na logično 0. Da bi preprečili segrevanje

samega senzorja pod 0,1°C senzor ne sme biti aktiven več kot 10% časa.

Tabela 3.4 seznam ukazov

Ukaz Ukazni biti

Rezervirano 0000x

Meritev temperature 00011

Meritev relativne vlažnosti 00101

Beri statusni register 00111

Piši v statusni register 00110

Rezervirano 0101x-1110x

Soft reset (resetira vmesnik, 11110

počisti statusni register,

počakaj 11ms na naslednji ukaz)

15

3.2.6 Statusni register

Napredne možnosti senzorja SHT7x so možnost izbiranja resolucije meritev in opozorilo na

prazno baterijo. Po ukazu beri statusni register (ang. Status Register Read) ali piši v statusni

register (ang. Status register write) lahko zapišemo ali preberemo 8-bitno informacijo

statusnega registra (slika 3.6 in tabela 3.5).

Privzeta resolucija merjenja je 14 bitov za meritev temperature in 12 bitov za meritev

relativne vlažnosti in je lahko zmanjšana na 12 in 8 bitov.

TS – Transmission Start (začetek ukaza) ; ACK – Acknowledge (potrditev)

Slika 3.6 Statusni register (pisalni)

Tabela 3.5 Biti statusnega registra

16

3.2.7 Kompenzacija nelinearnosti izmerjene relativne vlažnosti

Za kompenzacijo nelinearnosti senzorja relativne vlažnosti in za pridobitev točnosti senzorja

je priporočljivo prebrano (SORH) vrednost preračunati po spodnji enačbi 3.1.

𝑅𝐻𝑙𝑖𝑛𝑒𝑎𝑟 = 𝑐1 + 𝑐2 ∙ 𝑆𝑂𝑅𝐻 + 𝑐3 ∙ 𝑆𝑂𝑅𝐻2 (%𝑅𝐻) (3.1)

Tu je: 𝑆𝑂𝑅𝐻 – izmerjena vrednost

𝑐1, 𝑐2, 𝑐3 – konstante

Tabela 3.6 Konstante za izračun nelinearnosti senzorja

17

3.2.8 Temperaturna kompenzacija relativne vlažnosti

Za temperature, ki se bistveno razlikujejo od 25°C je potrebno izračunati temperaturno

kompenzacijo relativne vlažnosti (enačba 3.2).

Korekcija temperature ustreza približno 0,12% RH / °C pri 50% RH. Koeficienti za

kompenzacijo so podani v spodnji tabeli (tabela 3.7).

𝑅𝐻𝑡𝑟𝑢𝑒 = (𝑇°𝐶 − 25) ∙ (𝑡1 + 𝑡2 ∙ 𝑆𝑂𝑅𝐻) + 𝑅𝐻𝑙𝑖𝑛𝑒𝑎𝑟 (3.2)

Tu je: 𝑡1, 𝑡2 – konstante

𝑆𝑂𝑅𝐻 – izmerjena vrednost

Tabela 3.7 Koeficienti za kompenzacijo temperature

18

3.2.9 Izračun temperature

Temperaturo preračunamo po spodnji enačbi, pri čemer je 𝑆𝑂𝑇 vrednost izmerjene

temperature, 𝑑1 in 𝑑2 pa sta konstanti (tabela 3.8).

𝑇 = 𝑑1 + 𝑑2 ∙ 𝑆𝑂𝑇 (3.3)

Tabela 3.8 Koeficienti za temperaturno pretvorbo

19

3.2.10 Primer meritve relativne vlažnosti

Primer merjenja relativne vlažnosti ˇ0000`0100ˇ 0011`0001ˇ = 1073 = 35,5 %RH ( brez

temperaturne kompenzacije) prikazuje slika 3.7. Tanka DATA linjia prikazuje signal iz

mikrokrmilnika, debela pa signal senzorja.

Slika 3.7 Primer meritve relativne vlažnosti

20

3.3 LCD -Tekoče kristalni zaslon (Liquid Crystal Display)

Osnova delovanja LCD zaslona so tekoči kristali. Z električnim tokom vklapljamo in

izklapljamo točke in s tem tvorimo znake. Na LCD zaslonu, ki smo ga uporabili je za vsak

znak namenjenih 40 točk. Več kot imamo na voljo točk ostrejši je zapis (slika 3.9). Pri sedem

segmentnem zaslonu jih imamo na primer na voljo le sedem.

Slika 3.8 prikazovalnik LCD [8]

Za izpis merjenje in želene vrednosti smo uporabili 4x20 zaslon LCD (slika 3.8) s katerim

lahko izpisujemo štiri vrstice po deset simbolov (slika 3.10), številk ali črk velikosti 3,55

mm x 5,35 mm. Vsak simbol, število ali črko lahko sestavimo iz osmih vrstic po pet (8x5)

točk velikosti 0,55mm x 0,55mm (slika 3.9) [6].

Slika 3.9 Dimenzije LCD znaka

21

Slika 3.10 Dimenzije LCD prikazovalnika

VSS in VDD priključek smo priklopili na napajanje (DC +5V).

Priključke V0, A in K smo vezali na napajanje preko potenciometra, s katerim bomo

regulirali kontrast izpisa in osvetlitev.

RW (read/write) priključek smo povezali na maso (logična 0), ker bomo na LCD

prikazovalnik samo pisali.

E (enable) priključek smo povezali na RB2 priključek mikrokrmilnika, ki bo z pozitivnim

logičnim nivojem omogočil pisanje.

22

Prikazovalnik LCD ima šestnajst priključkov, kot je razvidno iz tabele (tabela 3.9). Uporabili

smo ga v 4-bitnem načinu in tako smo potrebovali le štiri podatkovne priključke LCD

prikazovalnika. Uporabili smo D4, D5, D6 in D7 in jih povezali na mikrokrmilniške

priključke RB3, RB4, RB5 in RB6, D0 - D3 pa smo preventivno, kot zaščito proti motnjam

vezali na maso.

Tabela 3.9 Priključki LCD prikazovalnika

1 VSS – Masa ( 0V )

2 VDD – Napajanje ( +5V DC )

3 V0 – Nastavitev kontrasta ( 0-5V DC )

4 RS – (Register select ; 0V ali 5V ) – Preklop med podatkovnim (logična 1) in

ukaznim (logična 0) načinom delovanja

5 RW (Read/Write; 0V ali 5V) – Preklop med pisalnim (logična 0) ali bralnim

(logična 1) načinom delovanja

6 E (Enable; 0V ali 5V) –Vklop krmilne logike (omogoči pisanje v register)

7-14 D0-D7 (Data; 0-5V DC) Podatkovne linije

15 A (Anoda 0-5V) LED osvetlitev LCD prikazovalnika

16 K (Katoda Led -) LED osvetlitev LCD prikazovalnika

23

3.4 AC –DC pretvornik TRACO POWER

Za napajanje elektronike potrebujemo stabilno enosmerno napetost. Za pretvorbo izmenične

napetosti v enosmerno smo izbrali stikalni napajalnik Traco Power TMLM 04105 (slika

3.11), ki je primeren za spajkanje na PCB tiskanino in ima dovolj moči za možno nadgradnjo

sistema. Dimenzije pretvornika so razvidne iz slike 3.12.

Slika 3.11 AC-DC pretvornik [7]

Slika 3.12 Dimenzije pretvornika [11]

Vhodne karakteristike :

100 - 240V AC

47 – 63Hz

0,1A max. (zagonski tok < 2ms do

15A)

Izhodne karakteristike:

+5V DC ±2%

800mA

kratkostična zaščita

maksimalna kapacitivnost

bremena 8000uF

Območje delovanja od -25°C do +60°C

24

4. Programska oprema

V digitalni tehniki kljub množici analognih komponent potrebujemo tudi dobro programsko

opremo. Z realizacijo prototipa smo uporabili prevajalnik za mikrokrmilnike PIC - MikroC

PRO (slika 4.1), razvojni programator in razhroščevalnik za družino Flash Mikrochipovih

mikrokrmilnikov Pickit2 (slika 4.2 in slika 4.3) in program za risanje tiskanin in 3D modelov

Altium Designer (slika 4.4).

4.1 Programsko orodje MikroC PRO for PIC

Programsko okolje MikroC PRO for PIC (slika 4.1) prevajalnik za mikrokrmilnike PIC je

izdelek srbskega podjetja Mikroelektronika d.o.o.. Programsko okolje ima dobro podporo,

obsežno bazo knjižnic in veliko primerov, ki pomagajo pri učenju in skrajšajo čas

programiranja. Za programiranje uporablja programski jezik ANSI C.

Slika 4.1 MikroC PRO [5]

25

4.2 Programator in razhroščevalnik PicKit2

PicKit2 je razvojni programator in razhroščevalnik za družino Flash Mikrochipovih

mikrokrmilnikov (slika 4.2 in slika 4.3). Primeren je za programiranje mikrokrmilnikov

serije PIC10F, PIC12F5xx, PIC16F5xx, PIC12F6xx, PIC16F, PIC18F, PIC24, dsPIC30,

dsPIC33 in PIC32. Programator ima možnost programiranja ICSP (In circuit serial

programming), kar pomeni, da lahko naložimo program brez odstranitve mikrokrmilnika iz

vezja. Z USB kablom ga povežemo na računalnik, povezava z mikrokrmilnikom pa je

razvidna iz sheme vezja (slika 4.1) [5].

Programator ima 6 priključkov:

1 = VPP/MCLR ( Programirna napetost )

2 = VDD Target ( Napajalna napetost )

3 = VSS (ground) (Masa)

4 = ICSPDAT/PGD ( Podatkovna linija )

5 = ICSPCLK/PGC ( Urin takt )

6 = Auxiliary ( Pomožni )

Slika 4.2 Programator PicKIT2 [5] Slika 4.3 PICkit 2 Programmer [1]

26

4.3 Altium designer

Altium designer je programski paket za načrtovanje tiskanih vezij ter njihovo analizo.

Omogoča nam 3D načrtovanje s podatki dobavitelja elektronskih komponent .

Slika 4.4 Program za načrtovanje vezij - Altium designer [9]

27

5. Zasnova rešitve in implementacija

5.1 Izdelava električne sheme

Električno shemo smo izrisali v programu Altium designer (slika 5.1).

Slika 5.1 Električna shema sistema

28

5.2 3D tiskanina (Altium Designer)

Vezje smo izrisali v razvojnem okolju Altium designer. Zaradi mnogih povezav smo

izdelali dvostransko tiskanino, ki je na spodnji strani sestavljena iz SMD komponent

(upori, tranzistorji, kondenzatorji in diode). Na zgornji strani so priključki (LCD

zaslon, senzor, tipke, signalne svetleče diode, programator, izhodne naprave ter

napajanje), AC-DC pretvornik, varovalke, mikrokrmilnik ter tudi dva nastavljiva

upora, s katerima lahko reguliramo svetlost ter kontrast LCD zaslona (slika 5.2 in

slika 5.3 ).

Slika 5.2 Sprednja stran tiskanine

29

Slika 5.3 Zadnja stran tiskanine

5.3 Izdelava tiskanine

Tiskanino smo zrezkali in na rezkalnem stroju v labaratoriju za elektronske in

informacijske sisteme LEIS (slika 5.4).

Slika 5.4 Rezkanje tiskanine

30

5.4 Delovanje programa

Kot je razvidno iz spodnjega diagrama poteka (slika 5.5), smo program sestavili iz več

podprogramov. Pričeli smo z meritvijo temperature in relativne vlažnosti ter izpisom

izmerjenih veličin na LCD zaslon. Prebrane vrednosti naslednji podprogram primerja z

željenimi, ki jih je nastavil uporabnik, nakar sledi preklapljanje izhodnih kontaktorjev.

Program vsak cikel preveri še ali je bila sklenjena katera od treh tipk. Sklenjena tipka (+)

vklopi izhodne kontaktorje, sklenjena tipka (-) pa izklopi izhodne kontaktorje in tako vezje

deluje le za meritev ne pa tudi regulacijo. V primeru, da je sklenjena tipka set (s), program

vklopi prekinitev in skoči v nastavitveni »set« podprogram, v katerem lahko s tipkama plus,

minus in set nastavljamo željeno temperaturo, relativno vlažnost in histerezo. Program gre

iz nastavitvenega načina nazaj na merjenje in regulacijo, kadar šest sekund ni pritisnjena

nobena od teh treh tipk.

31

START

MERJENJE

TEMP &RH

IZPS

TEMP

IN RH

PRIMERJAVA

ZELJENE

VREDNOSTI Z

TRENUTNO

If tipka (+)= =1

If tipka (-)==1

If tipka(S)==1

ON/OFF

IZHODOV

VKLOP

IZHODNIH

NAPRAV

IZKLOP

IZHODNIH

NAPRAV

DA

NE

DANE

NE

Skok v prekinitev

DA

A==0

Set==0

A++

If set==4

(S)==1

(+)==1

(-)==1

Set=1

Set++

A=0 Set==1

Set==2

Set==3

Hist+0,5

Žel. Temp

+0,5

Žel rH

+0,5

A==0

Set==1

Set==2

Set==3

Hist - 0,5

Žel. Temp

-0,5

Žel. RH

-0,5

A==0

Delay_ms(50)

A=<50

DA

DA

DA

DADA

DA

DA

DA

DA

DA

DA

Slika 5.5 Diagram poteka programa

32

6. Rezultati

Vezje lahko upravljamo s tremi tipkami: set(s), plus(+) in minus(-) (slika 6.2) s katerimi

lahko vklopimo ali izklopimo izhodne kontaktorje, nastavljamo željeno temperaturo,

vlažnost in histerezo preklopa (slika 6.1). S pritiskom na tipko set se pojavi kurzor (>) , kar

pomeni, da smo v nastavitvenem načinu delovanja, kjer lahko nastavljamo željeno

temperaturo, vlažnost in histerezo. Med pritiskanjem tipke set se z kurzorjem pomikamo po

meniju, s tipkama plus in minus pa spreminjamo izbran parameter. Če v set načinu šest

sekund ne pritisnemo nobene od treh tipk, program skoči iz nastavitvenega načina. Kadar

nismo v nastavitvenem načinu lahko s tipkama plus in minus izklopimo ali vklopimo izhodne

kontaktorje.

Slika 6.1 Štirivrstični zaslon LCD

Slika 6.2 Končno vezje pripravljeno za vgradnjo v ohišje

33

6.1 Točnost merjenja

Zaradi točnosti in dolgoročne stabilnosti smo za preizkus točnosti merjenja senzorja SHT75

uporabili živosrebrna termometra in relativno vlažnost zraka izmerili po metodi psihrometra

[12, 13].

V cev z vgrajenim ventilatorjem, ki nam zagotavlja konstanten pretok zraka, smo vstavili

dva živo-srebrna termometra ter senzor Sensirion SHT75. Na enega od živosrebrnih

termometrov smo navili vlažno bombažno krpico. Iz krpice izhlapeva voda in za to porablja

določeno količino toplote, ki jo jemlje okolici (slika 6.3). Potemtakem se moker termometer

zaradi izhlapevanja bolj ohladi kot suhi. Iz razlike izmerjenih temperatur, med mokrim in

suhim termometrom, smo lahko iz tabele 6.2 izračunali relativno vlažnost zraka.

Slika 6.3 Meritev relativne vlažnosti z mokrim in suhim

termometrom

34

Tabela 6.1 Tabela za izračun relativne vlažnosti z dvema termometroma

S senzorjem smo izmerili temperaturo 25,9ºC in relativno vlažnost 53,5%, z suhim

termometrom pa 26 ˚C. Ta meritev dokazuje, da je temperatura, ki jo je izmeril senzor v

območju predpisanih toleranc.

Temperaturne razlika med mokrim in suhim temometrom je bila 6,5˚C. S tem podatkom smo

lahko iz tabele 6.2 odčitali relativno vlažnost 54%, kar je le za 0,5% višja vrednost kot

vrednost iz senzorja SHT75 in je prav tako v območju predpisanih toleranc senzorja.

Tabela 6.2 Izmerjene vrednosti

SHT75

Moker

termometer

Suhi

termometer

temperatura (˚C) 25,9 19,5 26

relativna vlažnost (%) 53,5 x x

35

6.2 Primerjava vrednosti temperature pri različnih območjih preklopa

Na vezju smo nastavili željeno temperaturo 50˚C in vsakih pet sekund zabeležili vrednost

temperature, pri treh različnih preklopih ±3˚C, ±1,5˚C in ±0,5˚C (tabela 6.3). Za hlajenje smo

uporabili ventilator ter žarnico za grelec, na katero smo pritrdili senzor. Iz grafa 6.1, 6.2 in

6.3 je razvidno, da je temperatura narastla do 0,6˚C več kot smo želeli, saj je grelec (žarnica)

ob izklopu še vedno oddajala določeno temperaturo. Podoben rezultat smo dobili pri

hlajenju, kjer je temperatura padla za do 0,5˚C od željenega preklopa. Meritve prvih deset

sekund niso realne, saj smo žarnico greli od sobne temperature do 50 ˚C, zaradi tega je ob

preklopu temperatura še strmo naraščala.

Tabela 6.3 tabela izmerjenih temperatur

Preklop ±3 Preklop ±1,5 Preklop ±0,5

Čas t(s)

Temperatura T(˚C)

temperatura T(˚C)

temperatura T(˚C)

0 50 50 50

5 51,7 52,5 51,4

10 52,9 50,4 49,4

15 52,2 48,2 48,7

20 49 47,8 49,4

25 47,5 48,6 50,8

30 46,6 50,3 49,4

35 46,9 51,9 48,7

40 48,3 50 49,3

45 50 48,3 50,6

50 52 47,9 49,8

55 53,3 48,8 48,8

60 50,9 50,4 49,3

65 48,1 51,8 50,4

70 46,9 49,2 49,6

75 46,5 48 48,8

80 47,1 48,1 49,4

85 48,4 49,2 50,7

90 50,1 50,8 49,5

95 51,9 51,6 49,1

36

Graf 6.1 Izmerjena temperatura pri preklopu ±3˚C

Graf 6.2 Izmerjena temperatura pri preklopu ±1,5˚C

Graf 6.3 Izmerjena temperatura pri preklopu ±0,5˚C

50

51,7

52,952,2

49

47,5

46,6 46,9

48,3

50

52

53,3

50,9

48,1

46,946,5

47,1

48,4

50,1

51,9

46

47

48

49

50

51

52

53

54

0 10 20 30 40 50 60 70 80 90 100

tem

pe

ratu

ra T

(˚C

)

čas t(s)

Preklop ±3˚C

50

52,5

50,4

48,247,8

48,6

50,3

51,9

50

48,347,9

48,8

50,4

51,8

49,2

48 48,1

49,2

50,8

51,6

47

48

49

50

51

52

53

0 10 20 30 40 50 60 70 80 90 100

tem

pe

ratu

ra T

(˚C

)

čas t(s)

Preklop ±1,5˚C

50

51,4

49,4

48,7

49,4

50,8

49,4

48,7

49,3

50,6

49,8

48,8

49,3

50,4

49,6

48,8

49,4

50,7

49,5

49,1

48,5

49

49,5

50

50,5

51

51,5

52

0 10 20 30 40 50 60 70 80 90 100

tem

pe

ratu

ra T

(˚C

)

čas t(s)

Preklop ±0,5˚C

37

7. Zaključek

V diplomskem smo želeli izdelati sistem za nadzor in regulacijo temperature in relativne

vlažnosti, ki je realiziran s pomočjo mikrokrmilnika, senzorja vlage in temperature, LCD

prikazovalnika ter ustreznih aktuatorjev za krmiljenje klimatskih naprav, vlažilnikov ali

razvlažilnikov ter grelnih naprav.

Delovanje Sistema za nadzor in regulacijo temperature in relativne vlage v prostoru smo

preverili z meritvami. Najprej smo pomerili merjenje senzorja temperature in vlage, nato pa

tudi celotnega Sistema regulacije. Kot je razvidno iz meritev delujeta sensor temperature in

zračne vlage v območju predpisanih toleranc, točnost regulacije pa je odvisna od moči

priklopljenih naprav.

Pri diplomskem delu smo dobro spoznali programsko okolje MikroC in mikrokrmilnike

Microchip – PIC.

V nadaljnem raziskovanju, bi lahko regulacijo programsko posodobili glede na strmino

izmerjene krivulje. Tako bi lahko z predvidevanjem moči izhodnih naprav, prej preklapljali

izhodne kontaktorje in izmerjena vrednost ne bi presegla željene.

Pridobljeno znanje in izkušnje pri pisanju diplomskega dela, bodo vsekakor prišla prav pri

nadaljnem raziskovanju elektronike.

38

Viri in literature

[1] Circuitvalley, Pickit2 Programmer. Dostopno na:

http://www.circuitvalley.com/2011/07/pickit-2-clone-universal-microchip-pic.html

(5.8.2016)

[2] Embedded-lab, Embedded Systems tutorials. Dostopno na:

http://embedded-lab.com/blog/humidity-and-temperature-measurements-with-sensirions-

sht1xsht7x-sensors-part-2/ (5.8.2016)

[3] Janez Strnad: O MERJENJU TEMPERATURE IN TERMOMETRIH: Iz

zgodovine fizike. Dostopno na: http://www.presek.si/11/639-Strnad.pdf (5.8.2016)

[4] Microchip, Microchip PIC16F627A/628A/648A Data Sheet. Dostopno na:

http://ww1.microchip.com/downloads/en/DeviceDoc/40044E.pdf (5.8.2016)

[5] Mikroelektronika, MikroC Pro for PIC. Dostopno na:

http://www.mikroe.com/mikroc/pic/ (5.8.2016)

[6] Orient display, Dostopno na:

http://www.orientdisplay.com/products/AMC2004A.pdf (5.8.2016.)

[7] Octopart, Traco Power TMLM 04105. Dostopno na:

https://octopart.com/tmlm+04105-tracopower-12112853 (5.8.2016)

[8] Superdroid robots. Dostopno na:

http://www.superdroidrobots.com/shop/item.aspx/4x20-parallel-lcd-neg-mode-w-white-

led-backlight/695/ (5.8.2016)

[9] Slika programa - Altium Designer.Dostopno na:

https://techdocs.altium.com/display/ADOH/Working+with+Documents (5.8.2016)

[10] Sensirion, Humidity and Temperature sensor IC SHT7x. Dostopno na:

https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/Humidi

ty_Sensors/Sensirion_Humidity_Sensors_SHT7x_Datasheet_V5.pdf (5.8.2016)

[11] Traco Power, TMLM series. Dostopno na:

http://www.tracopower.com/products/browse-by-category/find/tmlm/3/ (5.8.2016)

39

[12] Texas gateway, Psychrometer. Dostopno na:

http://www.texasgateway.org/node/3954 (5.8.2016)

[13] The Engineering toolbox, Dry Bulb, Wet Bulb and Dew Point temperatures.

Dostopno na: http://www.engineeringtoolbox.com/dry-wet-bulb-dew-point-air-d_682.html

(5.8.2016)

[14] Wikipedia, Humidity Dostopno na: https://en.wikipedia.org/wiki/Humidity

(5.8.2016)

[15] Wikipedia, Temperature. Dostopno na:

https://en.wikipedia.org/wiki/Temperature#Temperature_measurement (5.8.2016)

Priloga A

Koda programa (MikroC Pro for PIC)

Kodo programa smo napisali z prevajalnikom MikroC Pro in jo posneli na Microchipov

mikrokrmilnik PIC16f648a, s programatorjem Pickit2. S krepko pisavo so napisani

komentarji, ki služijo lažjemu razumevanju programa in nimajo vpliva na njegovo izvajanje.

Nekaj knjižic smo črpali iz spletne strani Embedded-lab [2].

/*

REGULACIJA TEMPERATURE IN RELATIVNE VLAŽNOSTI

Prevajalnik: MikroC Pro

Programator: Pickit 2

Mikrokrmilnik: PIC16f648A

Senzor temp in RH: Sensirion SHT75

*/

///////////////////////LCD povezave////////////////////////////////////

// Povezava LCD z mikrokrmilnikom

sbit LCD_RS at RB1_bit;

sbit LCD_EN at RB2_bit;

sbit LCD_D7 at RB6_bit;

sbit LCD_D6 at RB5_bit;

sbit LCD_D5 at RB4_bit;

sbit LCD_D4 at RB3_bit;

// Povezava LCD z mikrokrmilnikom

sbit LCD_RS_Direction at TRISB1_bit;

sbit LCD_EN_Direction at TRISB2_bit;

sbit LCD_D7_Direction at TRISB6_bit;

sbit LCD_D6_Direction at TRISB5_bit;

sbit LCD_D5_Direction at TRISB4_bit;

sbit LCD_D4_Direction at TRISB3_bit;

////////////////////////////SHT75 povezave///////////////////////////////////

sbit DATA at RA1_bit; // podatkovni priključek

sbit CLOCK at RA2_bit; // priključek za urin takt

sbit DATA_Direction at TRISA1_bit; // priključek za določanje smeri podatkov

sbit CLOCK_Direction at TRISA2_bit; // priključek za določanje smeri uringa

takta

Priloga B

//////////////////////////generiranje plusminus znaka za lcd /////////////////

const char character[] = 4,4,31,4,4,0,31,0;

void CustomChar(char pos_row, char pos_char)

char i;

Lcd_Cmd(64);

for (i = 0; i<=7; i++) Lcd_Chr_CP(character[i]);

Lcd_Cmd(_LCD_RETURN_HOME);

Lcd_Chr(pos_row, pos_char, 0);

//////////////////////////////////KONSTANTE ////////////////////////////////////

// koeficienti za pretvorbo relativne vlažnosti (12 bit)

const unsigned int C1 = 205; // -2.0468

const unsigned int C2 = 367; // 0.0367 (367 * 10^-4)

const unsigned short C3 = 16; // -1.5955* 10^-6 (15.955 * 10^-7)

// temperaturni kompenzacijski koeficienti (12 bit)

const unsigned int T1 = 1000; // 0.01 (1*10^-2)

const unsigned int T2 = 8; // 0.00008 (8 * 10^-5)

//koeficienti za pretvorbo temperature (14 bit)

const unsigned int code D1 = 4010; // -40.1

const unsigned short code D2 = 1; // 0.01

///////////////////////////////////SPREMENLJIVKE ////////////////////////////////

unsigned short i, j, Select;

long int SOt, SOrh, temp, k, Tmp_res, Rh_res, Tmp_res1, Rh_res1,number,Hist_res;

int a = 0;

bit oldstate;

bit nastavitve;

bit vklop;

int izbira = 0;

bit tipka_plus;

char txt1[] = "TRENUTNA: ZELJENA:";

char *Tmp = "T:000.0 "; //trenutna temperatura

char *Rh = "V: 00.0 "; //trenutna vlažnost

char *Tmp1 = "T:000.0 "; //zeljena temperatura

char *Rh1 = "V: 00.0 "; //zeljena vlažnost

char *Hist = "0.0"; // histereza

Priloga C

////////////////////////////////// SHT_Reset()//////////////////////////////////

void SHT_Reset()

CLOCK = 0;

DATA_Direction = 1; // DATA port je vhod

for (i = 1; i <= 10; i++) // ponovi 10X

CLOCK = ~CLOCK; // invertiraj CLOCK

////////////////////////////////Transmission_Start()///////////////////////////

void Transmission_Start()

DATA_Direction = 1; // DATA port je vhod

CLOCK = 1;

Delay_1us();

DATA_Direction = 0; // DATA port je izhod

DATA = 0;

Delay_1us();

CLOCK = 0;

Delay_1us();

CLOCK = 1;

Delay_1us();

DATA_Direction = 1; // DATA port je vhod

Delay_1us();

CLOCK = 0;

//////////////////////// MCU ACK potrditev////////////////////////////////////

void MCU_ACK()

DATA_Direction = 0; // definiraj SDA kot izhod

DATA = 0; // SDA low

CLOCK = 1; // SCL high

Delay_1us(); // 1us delay

CLOCK = 0; // SCL low

Delay_1us(); // 1us delay

DATA_Direction = 1; // definiraj SDA kot vhod

Priloga D

///////////////////////////////MERITEV//////////////////////////////////////////

// Ta funkcija vrne vrednost temperature ali vlažnosti

j = command; // j = izbira meritve (0x03 or 0x05)

SHT_Reset(); // reset SHT75

Transmission_Start(); // začetek prenosa

k = 0; // k = 0

DATA_Direction = 0; // defineraj SDA kot izhod

CLOCK = 0; /

for(i = 1; i <= 8; i++) // ponovi 8x

if (j.F7 == 1) // če je bit 7 = 1

DATA_Direction = 1; // definiraj SDA kot izhod

else

// else (if bit 7 = 0)

DATA_Direction = 0; // definiraj SDA kot izhod

DATA = 0;

Delay_1us();

CLOCK = 1;

Delay_1us();

CLOCK = 0;

j <<= 1; // premakni vsebino j eno mesto bolj levo

DATA_Direction = 1; // definiraj SDA kot vhod

CLOCK = 1; // SCL high

Delay_1us(); // 1us delay

CLOCK = 0; // SCL low

Delay_1us(); // 1us delay

while (DATA == 1) // dokler je SDA high, ne naredi ničesar

Delay_1us(); // 1us delay

for (i = 1; i <=16; i++) // ponovi 16x

k <<= 1; // premakni vsebino k eno mesto bolj levo

CLOCK = 1;

if (DATA == 1)

k = k | 0x0001;

CLOCK = 0;

if (i == 8) // če je števec i = 8 tedaj

MCU_ACK(); // MCU potrditev

return k; // vrne vrednosti od k

void DisplayMeasurements()

Priloga E

// Izračun temperature

// Tmp_res = D1 + D2 * SOt

if(SOt > D1) // če je vrednost temperature pozitivna

Tmp_res = SOt * D2 - D1; // izračunaj temperaturo

else // else (če je vrednost temperatureee negativna)

Tmp_res = D1 - SOt * D2; // izračunaj temperaturo

// Izračun relativne vlažnosti

temp = SOrh * SOrh * C3 / 100000; // izračun vlažnosti

Rh_res = SOrh * C2 / 100 - temp - C1; // izračun vlažnosti

// Temperaturna kompenzacija

//RHtrue=(T-25)*(T1+T2*SOrh)+RHlin

temp=(T1+(T2*SOrh))/1000;

Temp=((Tmp_res-2500)*temp)/100;

Rh_res=temp+Rh_res;

/*Pretvorba vrednosti temperature v ASCII za izpis na LCD*/

Tmp[2] = Tmp_res / 10000 + 48; // primer: Tmp[2] = 12345 / 10000 = 1, 1+

48 = //'1' - ASCII

Tmp[3] = Tmp_res % 10000 / 1000 + 48; // primer: Tmp[3] = 12345 % 10000 =

2345, //Tmp[3] = 2345 / 1000 = 2, 2 + 48 = '2' - ASCII

Tmp[4] = Tmp_res % 1000 / 100 + 48; // primer: Tmp[7] = 12345 % 1000 =

345, Tmp[7] = 345 / 100 = 3, 3 + 48 = '3' - ASCII

Tmp[6] = Tmp_res % 100 / 10 + 48; // primer: Tmp[9] = 12345 % 100 = 45,

Tmp[9] //= 45 / 10 = 4, 4 + 48 = '4' - ASCII

Tmp[7] = 223;

Tmp[8] = 'C';

Priloga F

/*Pretvorba vrednosti vlažnosti v ASCII za izpis na LCD*/

Rh[2] = ' ';

Rh[3] = Rh_res % 10000 / 1000 + 48; // primer: Rh[3] = 12345 % 10000 = 2345,

//Rh[3] = 2345 / 1000 = 2, 2 + 48 = '2' - ASCII

Rh[4] = Rh_res % 1000 / 100 + 48; // primer: Rh[4] = 12345 % 1000 = 345,

Rh[4] = //345 / 100 = 3, 3 + 48 = '3' - ASCII

Rh[6] = Rh_res % 100 / 10 + 48; // primer: Rh[6] = 12345 % 100 = 45, Rh[6] =

45 /

//10 = 4, 4 + 48 = '4' - ASCII

Rh[7] = ' ';

Rh[8] = '%';

/*end*/

/*brisanje nepotrebnih znakov (ničel)*/

if (Tmp[2] == '0') // if Tmp[2] = '0' then

Tmp[2] = ' '; // vstavi prazen znak v Tmp[2]

if (Tmp[2] == ' ' && Tmp[3] == '0') // if Tmp[2] is blank and Tmp[3] = '0' then

Tmp[3] = ' '; // vstavi prazen znak v Tmp[3]

if (Rh[3] == '0') // if Tmp[5] = '0' then

Rh[3] = ' '; // vstavi prazen znak v Tmp[5]

/*end*/

Lcd_Out(3, 1, Tmp); // izpiši temperaturo v prvo vrstico, i column

Lcd_Out(4, 1, Rh); // izpiši vlažnost v drugo vrstico, i column

///////////////////////////////on/off izhodnih naprav/////////////////////////

on_off()

if(Button(&PORTA,3,1,1))

vklop=1;

Lcd_out(1,3," ");

Lcd_out(1,3,"ON");

while (PORTA.RA3 == 1);

if(Button(&PORTA,4,1,1))

vklop=0;

Lcd_out(1,3," ");

Lcd_out(1,3,"OFF");

while (PORTA.RA4 == 1);

Priloga G

///////////////////////////////////avtomatika///////////////////////////////////

avtomatika() //primerjava - vklapljanje relejev

if(vklop==1)

if(PORTA.RA0==0 && Tmp_res>(Tmp_res1+Hist_res))

PORTA.RA7=0;

PORTA.RA0=1;

if(PORTA.RA0==1 & Tmp_res<Tmp_res1)

PORTA.RA0=0;

if(Tmp_res<(Tmp_res1-Hist_res) & PORTA.RA7==0 )

PORTA.RA0=0;

PORTA.RA7=1;

if(PORTA.RA7==1 & Tmp_res>Tmp_res1)

PORTA.RA7=0;

if(PORTB.RB7==0 & Rh_res>(Rh_res1+Hist_res))

PORTB.RB7=1;

PORTA.RA6=0 ;

if(PORTB.RB7==1 & Rh_res<Rh_res1)

PORTB.RB7=0;

if(Rh_res<(Rh_res1-Hist_res)& PORTA.RA6==0)

PORTA.RA6=1 ;

PORTB.RB7=0 ;

if(PORTA.RA6==1 & Rh_res>Rh_res1)

PORTA.RA6=0;

else

PORTA.RA6=0 ;

PORTB.RB7=0 ;

PORTA.RA0=0 ;

PORTA.RA7=0 ;

Priloga H

///////////////////////////////////// meri/////////////////////////////////////

void meri()

/*Merjenje temperature z SHT75*/

CLOCK_Direction = 0; // definiraj CLOCK kot izhod

SOt = Measure(0x03); // funkcija za meritev (ukaz 0x03 je za

temperaturo) on_off();

//avtomatika();

/*Merjenje relativne vlažnosti z SHT75*/

Delay_ms(5);

SOrh = Measure(0x05); // funkcija za meritev (ukaz 0x05 je za relativno

vlažnost) on_off();

//avtomatika();

CLOCK_Direction = 1; // definiraj CLOCK kot vhod

DisplayMeasurements();

Delay_ms(5);

//////////////////////////pretvorba v char za zeljeno///////////////////////////

void pretvorba()

/*Priprava temperature2 za LCD*/

Tmp1[2] = Tmp_res1 / 10000 + 48;

// primer: Tmp[2] = 12345 / 10000 = 1, 1 + 48 = '1' - ASCII

Tmp1[3] = Tmp_res1 % 10000 / 1000 + 48;

// primer: Tmp[3] = 12345 % 10000 = 2345, Tmp[6] = 2345 / 1000 = 2, 2 + 48 = '2'

Tmp1[4] = Tmp_res1 % 1000 / 100 + 48;

// primer: Tmp[4] = 12345 % 1000 = 345, Tmp[4] = 345 / 100 = 3, 3 + 48 = '3'

Tmp1[6] = Tmp_res1 % 100 / 10 + 48;

// primer: Tmp[6] = 12345 % 100 = 45, Tmp[6] = 45 / 10 = 4, 4 + 48 = '4'

Tmp1[7] = 223;

Tmp1[8] = 'C';

Priloga I

/*Priprava humidity2 za LCD*/

Rh1[2] = ' ';

Rh1[3] = Rh_res1 % 10000 / 1000 + 48;

// primer: Rh[3] = 12345 % 10000 = 2345, Rh[3] = 2345 / 1000 = 2, 2 + 48 = '2'

Rh1[4] = Rh_res1 % 1000 / 100 + 48;

// primer: Rh[4] = 12345 % 1000 = 345, Rh[4] = 345 / 100 = 3, 3 + 48 = '3' -

ASCII

Rh1[6] = Rh_res1 % 100 / 10 + 48;

// primer: Rh[6] = 12345 % 100 = 45, Rh[6] = 45 / 10 = 4, 4 + 48 = '4' - ASCII

Rh1[7] = ' ';

Rh1[8] = '%';

/*Brisanje nepotrebnih ničel*/

if (Tmp1[2] == '0') // če je Tmp[2] = '0' then

Tmp1[2] = ' '; // vstavi prazen znak v Tmp[2]

if (Tmp1[2] == ' ' && Tmp1[3] == '0') //če je Tmp[2] prazen in Tmp[3] = '0'

Tmp1[3] = ' '; // vstavi prazen znak v Tmp[3]

if (Rh1[3] == '0') // če je Tmp[5] = '0' then

Rh1[3] = ' '; // vstavi prazen znak vTmp[5]

if(Tmp_res1 >9900)

Tmp_res1=0;

else if(Tmp_res1 <0)

Tmp_res1=9900;

else if(Rh_res1 >9900)

Rh_res1=0;

else if(Rh_res1 <0)

Rh_res1=9900;

Lcd_Out(3, 12, Tmp1); // izpiši temperaturo v tretjo vrstico, i stolpec

Lcd_Out(4, 12, Rh1); // izpiši vlažnost v četrto vrstico, i stolpec

Priloga J

///////////////////////////////////////////izpis histereze//////////////////////

void pretvorba_hist()

if(Hist_res<0)

Hist_res=0;

if(Hist_res>900)

Hist_res=900;

Hist[0] = Hist_res % 1000 / 100 + 48;

// primer: Hist[0] = 12345 % 1000 = 345, Hist[0] = 345 / 100 = 3, 3 + 48 = '3' -

ASCII

Hist[2] = Hist_res % 100 / 10 + 48;

// primer: Hist[2] = 12345 % 100 = 45, Hist[2] = 45 / 10 = 4, 4 + 48 = '4' - ASCII

Lcd_Out(1, 18, Hist);

////////////////////////////////PREKINITEV//////////////////////////////////////

void interrupt(void)

if(INTCON.INTF)

nastavitve=1;

while(PORTB.RB0==1);

INTCON.INTF=0;

///////////////////////////////////////////////////////////////////////////////

//////////////////////////////_____GLAVNI PROGRAM_____///////////////////////////////////

///////////////////////////////////////////////////////////////////////////////

void main()

TRISA = 0b00011100;

TRISB = 0b00000000;

PORTB = 0x00;

PORTA = 0x00;

CMCON |= 7; // ugasni analogni komparator in naredi

PORTA v digitalne vhodno /izhodne

TRISB0_bit = 1; // nastavi RB0 na vhod

INTCON.GIE=1; // omogoči globalno prekinitev

INTCON.INTE=1; // omogoči prekinitve iz RB0

INTCON.INTF=0; // resetiraj zunanjo prekinitveno zastavico

PEIE_bit = 0;

OPTION_REG.INTEDG = 1;

Priloga K

LCD_Init(); // init LCD on PORTB

LCD_Cmd(_LCD_CURSOR_OFF); // ugasni LCD kurzor

LCD_Cmd(_LCD_CLEAR); // zbriši LCD

Delay_ms(500);

Lcd_Out(2,1," Regulacija TEMP&RH ");

Delay_ms(2000);

LCD_Cmd(_LCD_CLEAR);

Lcd_Out(2,1,txt1);

Lcd_Out(1,9,"Preklop:");

Lcd_Out(1,1,"__");

Lcd_Out(1,6,"__");

Lcd_out(1,3,"OFF");

izbira=0;

nastavitve=0;

a=0;

Tmp_res1=0;

Rh_res1=0;

Hist_res=200;

vklop=0;

while(1)

if(nastavitve == 1) //skok v prekinitev

INTCON.INTE = 0; // onemogoči zunanje prekinitve RB0

CustomChar(1,17); // +- znak

pretvorba_hist() ; //pretvorba histereze v char za izpis na lcd

pretvorba(); //pretvorba zeljene v char za zapis na lcd

for(a=0;a<25;a++) //loop za prekinitev

Priloga L

if(Button(&PORTB,0,1,1)) //premikanje kurzorja

izbira=izbira++;

if(izbira==4) Izbira=1;

a=0;

while (PORTB.RB0 == 1) ;

switch(izbira) //izpis kurzorja na lcd

case 1:

Lcd_Out(1,8,">");

Lcd_Out(4,11," ");

Lcd_Out(3,11," ");

break;

case 2:

Lcd_Out(1,8," ");

Lcd_Out(3,11,">");

Lcd_Out(4,11," ");

break;

case 3:

Lcd_Out(3,11," ");

Lcd_Out(1,8," ");

Lcd_Out(4,11,">");

if(Button(&PORTA,3,1,1)) //prištevanje željene vrednosti

a=0;

Lcd_Out(2,11,"+");

if (izbira==2) Tmp_res1 = Tmp_res1+50;

else if (izbira==3) Rh_res1 = Rh_res1+50;

else if (izbira==1) Hist_res= Hist_res+50;

pretvorba_hist() ; //pretvorba histereze v char za izpis na lcd

pretvorba(); //pretvorba zeljene v char za zapis na lcd

delay_ms(50);//while (PORTA.RA3 == 1) ;

Priloga M

if(Button(&PORTA,4,1,1)) //odštevanje željene vrednosti

a=0;

Lcd_Out(2,11,"-");

if (izbira==2)Tmp_res1 = Tmp_res1-50;

else if (izbira==3) Rh_res1 = Rh_res1-50;

else if (izbira==1)Hist_res= Hist_res-50;

pretvorba_hist() ; //pretvorba histereze v char za izpis na lcd

pretvorba(); //pretvorba zeljene v char za zapis na lcd

delay_ms(50);//while (PORTA.RA4 == 1) ;

Lcd_Out(2,11," "); //brisanje + ali - ki se pojavi ob zviševanju ali

zniževanju

INTCON.INTE = 1; // omogoči zunanje prekinitve iz RB0

nastavitve = 0;

Lcd_Out(1,8," "); //pobriši kurzorje

Lcd_Out(3,11," ");

Lcd_Out(4,11," ");

on_off(); //skok v podprogram on_off()

avtomatika(); //skok v podprogram avtomatika()

meri(); //skok v podprogram meri()