Žiga obojnik mikrokrmilniŠki sistem za …ii mikrokrmilniški sistem za merjenje temperature in...
TRANSCRIPT
Ž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
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()