UNIVERZA V MARIBORU
FAKULTETA ZA ELEKTROTEHNIKO,
RAČUNALNIŠTVO IN INFORMATIKO
Nejc Arzenšek
BREZŽIČNI NADZOR IN UPRAVLJANJE STROJNICE BAZENA
Magistrsko delo
Maribor, maj 2016
I
BREZŽIČNI NADZOR IN UPRAVLJANJE STROJNICE BAZENA
Magistrsko delo
Študent: Nejc Arzenšek
Študijski program: Študijski program 2. stopnje
Elektrotehnika
Smer: Elektronika
Mentor: doc. dr. Boštjan Vlaovič
Lektorica: Damjana Hundrić
II
III
ZAHVALA
Zahvaljujem se mentorju za pomoč
in vodenje pri opravljanju
magistrskega dela. Posebej sem
hvaležen svojim staršem, ki so mi
omogočili študij.
IV
Brezžični nadzor in upravljanje strojnice bazena
Ključne besede: mikrokrmilnik, senzorji, komunikacija, mobilni telefon, bazen UDK: 621.395.721.5(043.2) Povzetek
V magistrskem delu je predstavljena izdelava prototipa strojne in programske opreme, ki
uporabniku omogoča, da z aplikacijo na mobilnem telefonu preko brezžičnega vmesnika
krmili strojnico bazena ter sledi podatkom o temperaturi vode, njeni vrednosti pH in redoks
potenciala.
V magistrskem delu smo opisali razvoj aplikacije za mobilni telefon z operacijskim sistemom
Android ter razvoj strojne in programske opreme krmilnika za upravljanje strojnice. Bistveni
elementi vezja so mikrokrmilnik, modul BlueTooth in dodatna vezja za krmiljenje strojnice ter
zajem podatkov o temperaturi vode, njeni vrednosti pH in vrednosti redoks potenciala.
V
Wireless monitoring and control of pool engine room
Key words: microcontroller, sensors, communication, cell phone, pool
UDK: 621.395.721.5(043.2) Abstract
This master's thesis presents the prototype hardware and software that allows the user to
wirelessly controll pool's engine room and track data on water temperature, pH value and
redox potential with the app on mobile phone.
In this thesis, we describe the development of application for mobile phones with the Android
operating system and the development of hardware and software for controller that controls
pool's engine room. The essential elements of the circuit are the microcontroller, Bluetooth
module and additional circuits for controlling the pool's engine room and for capturing data
of the temperature of the water, pH value and the redox potential.
VI
Kazalo
1. UVOD ................................................................................................................................. 1
2. STROJNICA BAZENA ...................................................................................................... 3
2.1. Ventil ........................................................................................................................... 4
2.2. Opis črpalke ................................................................................................................. 6
2.3. Opis sonde pH ............................................................................................................. 8
2.4. Opis sonde redoks ..................................................................................................... 12
3. RAZVOJNA PLATFORMA ............................................................................................ 14
3.1. Android ...................................................................................................................... 14
3.2. Razvojno okolje Eclipse ............................................................................................ 17
4. BREZŽIČNA POVEZAVA .............................................................................................. 21
4.1. Bluetooth modul ........................................................................................................ 22
5. MIKROKRMILNIK ......................................................................................................... 31
5.1. Analogno-digitalna pretvorba .................................................................................... 34
5.2. USART ...................................................................................................................... 36
6. PROTOTIP KRMILNE ENOTE ...................................................................................... 45
6.1. Krmiljenje črpalke in 6-potnega ventila .................................................................... 46
6.2. Merjenje pH ............................................................................................................... 57
6.3. Merjenje potenciala redoks ........................................................................................ 67
6.4. Merjenje temperature ................................................................................................. 74
7. REZULTATI ..................................................................................................................... 86
7.1. Meritev vrednosti pH ................................................................................................. 86
7.2. Meritev potenciala redoks ......................................................................................... 87
7.3. Meritev temperature .................................................................................................. 88
8. SKLEP .............................................................................................................................. 91
9. VIRI .................................................................................................................................. 93
VII
Kazalo slik
Slika 2.1: Primer strojnice bazena .............................................................................................. 3
Slika 2.2: Ročni 6-potni ventil ................................................................................................... 4
Slika 2.3: Elektronski 6-potni ventil .......................................................................................... 5
Slika 2.4: Štiri tipke za krmiljenje 6-potnega ventila ................................................................. 6
Slika 2.5: Črpalka ....................................................................................................................... 7
Slika 2.6: Stikalo in časovnik ..................................................................................................... 7
Slika 2.7: Podatki črpalke ........................................................................................................... 8
Slika 2.8: Temperaturne odvisnosti el. potenciala ................................................................... 10
Slika 3.1: Izdelava grafičnega vmesnika v okolju eclipse........................................................ 19
Slika 3.2: Deklaracija spremenljivk ......................................................................................... 19
Slika 3.3: Povezave preko ID-jev ............................................................................................. 20
Slika 4.1: podatkovno-povezovalne plasti WiFi povezave ...................................................... 21
Slika 4.2: Bluetooth modul RN-42 ........................................................................................... 22
Slika 4.3: Priključki modula BT ............................................................................................... 23
Slika 4.4: Modul BT in upora R6 in R8 .................................................................................. 24
Slika 4.5: Shema povezave modula BT na PC preko integriranega vezja MAX232 ............... 24
Slika 4.6: Integrirano vezje MAX232 in priključitev kondenzatorjev ..................................... 25
Slika 4.7: Razpored priključkov vrat RS232 ............................................................................ 26
Slika 4.8: Shema vezave modula BT na vrata RS232 preko integriranega vezja MAX232 .... 26
Slika 4.9: Povezava BT med osebnim računalnikom z modulom BT in mobilno napravo ..... 29
Slika 4.10: Nastavitve programa Putty ..................................................................................... 30
Slika 4.11: Nastavitve programa Hyper Terminal.................................................................... 30
Slika 5.1: Atmega8 v ohišju PDIP ........................................................................................... 32
Slika 5.2: Register ADMUX (ADC multiplexer selection register) ........................................ 34
Slika 5.3: Registra ADCL in ADCH sta podatkovna registra
analogno digitalne pretvorbe (ADC data register) .................................................. 35
Slika 5.4: Blokovni diagram generatorja urinega takta prenosne hitrosti ................................ 38
Slika 5.5: Register za hitrost prenosa ....................................................................................... 39
Slika 5.6: Blok shema priključitve mikrokrmilnika na osebni računalnik ............................... 40
VIII
Slika 5.7: Blok diagram LCD zaslona DEM 16216 SYH ........................................................ 40
Slika 5.8: Nastavitev frekvence in naložitev .hex tatoteke za mikrokrmilnik
v simulatorju ISIS proteus ....................................................................................... 42
Slika 5.9: Nastavitve Virtual terminal-a ................................................................................... 43
Slika 5.10: Simulacija s simulatorjem ISIS Proteus ................................................................. 44
Slika 5.11: Povezava BT med mobilnim telefonom in BT modulom
priključenim na mikrokrmilnik. ............................................................................. 44
Slika 6.1: Blok shema krmilne enote (prototipa) ..................................................................... 45
Slika 6.2: Shema vezja z relejem ............................................................................................. 46
Slika 6.3: Vezje z releji ............................................................................................................ 47
Slika 6.4: Tripolno stikalo za krmiljenje črpalke ..................................................................... 48
Slika 6.5: Vezava dveh relejev za krmiljenje črpalke .............................................................. 48
Slika 6.6: Simulacija tipk in tripolnega stikala z uporabo V-m v ISIS proteus ....................... 49
Slika 6.7: Koda mikrokrmilnika za krmiljenje tipke »praznjenje« na 6-potnem ventilu ......... 50
Slika 6.8: Koda mikrokrmilnika za krmiljenje tipk »pranje filtra« in
»filtriranje« na 6-potnem ventilu ............................................................................. 51
Slika 6.9: Koda mobilne naprave za krmiljenje tipk 6-potnega ventila ................................... 52
Slika 6.10: Koda mobilne naprave za prikaz statusa 6-potnega ventila ................................... 53
Slika 6.11: Koda mikrokrmilnika za krmiljenje črpalke .......................................................... 55
Slika 6.12: Koda mobilne naprave za krmiljenje črpalke ........................................................ 56
Slika 6.13: Koda mobilne naprave za prikaz statusa črpalke ................................................... 57
Slika 6.14: Shema ojačevalnika za ojačenje napetosti s sonde pH .......................................... 58
Slika 6.15: Grafična predstavitev skaliranja ............................................................................ 61
Slika 6.16: Števec »izmen« ...................................................................................................... 63
Slika 6.17: Diagram poteka števca, ki določi, katera veličina se bo poslala
v trenutnem ciklu ................................................................................................... 64
Slika 6.18: Koda mikrokrmilnika za zajem preko ADC, pretvorbo in
ustrezno pošiljanje vrednosti pH .......................................................................... 65
Slika 6.19: Koda mobilne naprave za preverjanje, če je poslani niz niz pH
in odstranjevanje začetnega in končnega znaka .................................................... 65
Slika 6.20: Koda mobilne naprave za izpis vrednosti pH ........................................................ 66
Slika 6.21: Shema ojačevalnika potenciala redoks ................................................................. 68
Slika 6.22: Shema ojačevalnika potenciala redoks z nastavljenimi trimerji
za ojačenje in za napetost na negativni vhod ......................................................... 69
IX
Slika 6.23: Grafični prikaz meritev potrebnih za skaliranje redoks potenciala........................ 71
Slika 6.24: Koda mikrokrmilnika za analogno-digitalno pretvorbo,
skaliranje in pošiljanje vrednosti potenciala redoks .............................................. 72
Slika 6.25: Koda mobilne naprave za preverjanje, če je poslani niz
niz potenciala redoks in odstranjevanje začetnega in končnega znaka ................. 73
Slika 6.26: Koda mobilne naprave za izpis vrednosti potenciala redoks ................................. 74
Slika 6.27: Konfiguracijski register ......................................................................................... 75
Slika 6.28: Beležka ................................................................................................................... 76
Slika 6.29: Logična 1 in logična 0 pri standardnem protokolu enožičnega vodila ................. 77
Slika 6.30: Temperaturni register senzorja DS18B20 .............................................................. 79
Slika 6.31: Povezava temperaturnega senzorja DS18B20 na mikrokrmilnik .......................... 80
Slika 6.32: Primer vrednosti, ki jih mikrokrmilnik pošlje preko usart-a ................................. 81
Slika 6.33: Koda mikrokrmilnika za zajem in pošiljanje temperature ..................................... 82
Slika 6.34: Primer novega niza za temperaturo, ki se pošlje preko usart-a .............................. 83
Slika 6.35: Razpored priključkov senzorja DS18B20 v TO-92 ohišju .................................... 83
Slika 6.36: Koda mobilne naprave za zaznavo poslanega niza za
temperaturo in izpis temperature ........................................................................... 84
Slika 6.37: Aplikacija STROJNICA naložena na mobilni telefon ........................................... 85
Slika 6.38: Temperaturi dodali enoto °C .................................................................................. 85
Slika 7.1: Senzor vstavljen v cevko ......................................................................................... 89
Slika 7.2: Cevka s senzorjem zalita s splastiko ........................................................................ 89
Slika 7.3: Cevka s senzorjem povita z izolirnim trakom in izolirana s termo skrčljivo cevko 90
X
Kazalo tabel
Tabela 2.1: Redukcija/oksidacija. ............................................................................................ 12
Tabela 3.1: Verzije platforme Android in njihova imena ter API nivoji ................................. 16
Tabela 4.1: Oznake priključkov B ............................................................................................ 24
Tabela 5.1: Izbira in nastavitve eksterne ali interne ure za Atmega8....................................... 33
Tabela 5.2: Tabela frekvenc v odvisnosti CKSEL nastavitev za notranji RC oscilator ........... 33
Tabela 5.3: Izbira referenčne napetosti za A-D pretvorbo ....................................................... 35
Tabela 6.1: Niz za pH, poslan z mikrokrmilnika ..................................................................... 67
Tabela 6.2: Resolucija temperature in čas pretvorbe ............................................................... 75
Tabela 6.3: Temperaturni niz, ki ga dobimo z uporabo funkcije therm_read_temperature ..... 81
Tabela 7.1: Rezultati meritev pH vrednosti.............................................................................. 87
Tabela 7.2: Rezultati meritev redoks potenciala ...................................................................... 88
Tabela 7.3: Rezultati meritev temperature ............................................................................... 90
XI
Uporabljeni simboli
I – tok
P – električna moč
W – električna energija
R – električna upornost
Vdd – enosmerna napajalna napetost
V – volt
Hz – (ang.Hertz) herc,
Ω – ohm
A – amper
˚C – stopinja celzija
XII
Uporabljene kratice
BT – BlueTooth, modri zob
LCD – Liquid Crystal Display, zaslon s tekočimi kristali
PC – Personal Computer, osebni računalnik
ASCII – American Standard Code for Information Interchange, ameriški standardni nabor za
izmenjavo informacij
CMOS – Complementary Metal-Oxide-Semiconductor, komplementarni metal-oksidni
polprevodnik
ROM – Read-Only Memory, bralni pomnilnik
RAM – Random Access Memory, pomnilnik z naključnim dostopom
SRAM – Static Random Access Memory, statični RAM
ADMUX – Analog-to-Digital converter Multiplexer, multiplekser analogno digitalnega
pretvornika
ISP – In-System Programmable, programirljiv vgrajen sistem
GND – Ground, zemlja
LED – Light Emitting Diode, svetleča dioda
USART – Universal Synchronous Asynchronous Receiver Transmitter, Univerzalni sinhroni
asinhroni sprejemnik oddajnik
SPI – Serial Periphal Interface, je standard za sinhrono serijsko podatkovno povezavo
PDIP – Plastic Dual Inline Package, plastično dvolinijsko ohišje
LSB – Least Signicant Bit, najmanj uteženi bit
MSB – Most Significant Bit, najbolj uteženi bit
ADC – Analog to Digital Converter, analogno digitalni pretvornik
XIII
SDK – Software Development Kit, programski razvojni paket
API – Application Programming Interface, vmesnik za programiranje aplikacij
XML – Extensible Markup Language, razširljivi označevalni jezik
UART – Universal Asynchronous Receiver/Transmiter, univerzalni asinhroni sprejemnik
oddajnik
USB – Universal Serial Bus, univerzalno serijsko vodilo
1
1. UVOD
Vsi bazeni morajo biti opremljeni z osnovno opremo, ki jo po funkcijah delimo na:
površinsko zajemanje vode (skimer ali prelivni rob),
mehansko filtrirno napravo za odstranjevanje grobih delcev,
distribucijski sistem za povrat filtrirane vode v bazen (cevni razvod in šobe),
talni izpust za praznjenje bazena.
Filtrirno napravo predstavlja peščeni filter, ki iz vode odstranjuje fine nečistoče, kot so prah,
lasje, koža itd. Deluje tako, da vodo potiska skozi filtrirni medij, ki delce zadrži.
Vsak filter je opremljen s 6-potnim ventilom, ki deluje kot nekakšna kretnica za bazensko
vodo in določa, ali se voda filtrira ali se bazen prazni ali se filter izpira itd.
Bazenska črpalka predstavlja srce bazena, saj le-ta skrbi, da se voda po sistemu premika.
Črpalka je sestavljena iz grobega predfiltra, vstopnega in izstopnega priključka za cevi ter
turbine, ki jo poganja električni enofazni motor.
Strojnica bazena je prostor, kjer je fiksno postavljena bazenska oprema (filtri, črpalke …).
Strojnice so lahko locirane v hiši, kleti, garaži, vrtni lopi ali pa v izvedbi zidane strojnice ob
bazenu. Pri zidanih bazenih se strojni del prizida kar v nadaljevanju bazena [10].
Poleg mehanskega čiščenja bazenske vode s pomočjo filtrirnega sistema je potrebno v
bazenski vodi vzdrževati tudi ustrezno kemično ravnovesje. Slednje se izvaja z regulacijo
kislosti in bazičnosti vode (vrednost pH). Pravilna vrednost pH nam zagotavlja, da je voda
kopalcem prijazna, hkrati pa preprečimo razvoj mikroorganizmov in alg. V bazenski vodi
moramo vzdrževati rahlo bazično vrednost vode v območju pH 7,3 do 7,5. To dosežemo z
dodajanjem regulatorja pH-minus (zniževanje vrednosti pH – višanje kislosti) ali pH-plus
(zviševanje vrednosti pH – višanje bazičnosti). Ker ima voda v Sloveniji visoko koncentracijo
kalcijevih ionov (trda voda), ima posledično visoko vrednost pH, zato jo moramo v večini
primerov zniževati.
2
Če ima bazenska voda previsoko vrednost pH, moramo uporabljati več dezinfekcijskih
sredstev. Poleg tega se na stene bazena in v filtru izloča vodni kamen. V primeru, da ima
bazenska voda prenizko vrednost pH, postane kemično agresivna. Posledici sta draženje
sluznice kopalcev in korozija kovinskih delov v bazenu.
V bazensko vodo z uravnoteženo in pravilno vrednostjo pH dodajamo sredstvo za
dezinfekcijo vode, ki preprečuje razvoj mikroorganizmov in alg. Najbolj razširjen dodatek je
klor v različnih oblikah. Zelo učinkovit je že v nizkih koncentracijah. Je edino sredstvo, ki se
lahko uporablja za dezinfekcijo v javnih kopališčih. Njegovo koncentracijo merimo posredno
prek vrednosti redoks potenciala bazenske vode ali direktno z meritvijo prostega klora v
bazenski vodi.
Večina bazenskih strojnic je vkopanih v zemljo, zato je dostop otežen, prostor v njih pa je
praviloma zelo omejen. To je še posebej moteče, ko uporabnik izpira pesek v filtru ali sesa
dno bazena, saj mora večkrat (po lestvi) v strojnico, da vklopi/izklopi črpalko in spremeni
položaj 6-potnega ventila. Če uporabnika zanima vrednost pH ali vrednost redoks potenciala,
mora prav tako v strojnico.
Cilj magistrske naloge je izdelati prototip strojne in programske opreme, ki bo preko
brezžičnega vmesnika omogočala krmiljenje strojnice bazena na daljavo, obenem pa iz
strojnice dobivala podatke o temperaturi vode, njeni vrednosti pH in vrednosti redoks
potenciala. Zaradi razširjenosti pametnih telefonov smo se odločili, da brezžični nadzor in
upravljanje omogočimo s temi napravami.
Magistrsko delo je razdeljeno na osem poglavij. V uvodnem poglavju bralca seznanimo s
temo magistrskega dela. V drugem poglavju predstavimo strojnico bazena in podrobneje
opišemo naprave v njej, ki smo jih krmilili oziroma z njimi pridobivali podatke. V tretjem
poglavju smo opisali operacijski sistem Android in razvojno okloje Eclipse. V četrtem
poglavju smo opisali brezžično povezavo BT in natančneje opisali BT modul, ki smo ga
uporabili. V petem poglavju smo opisali mikrokrmilnik, ki smo ga uporabili in natančenje
opisali nekatere njegove funkcionalnosti, ki smo jih uporabili. V šestem poglavju smo opisali
strojno in programsko opremo prototipa krmilne enote ter programsko opremo mobilnega
telefona. V sedmem poglavju smo predstavili rezultate. Zadnje poglavje je sklep, v njem
povzamemo opravljeno delo, ga ovrednotimo in opišemo možnosti izboljšave oz. nadgradnje
v prihodnosti.
3
2. STROJNICA BAZENA
Slika 2.1 prikazuje strojnico vkopano v zemljo. Uporabnik mora vanjo po lestvi, če želi
vklopiti ali izklopiti črpalko, spremeniti pozicijo 6-potnega ventila, odčitati vrednost pH ali
redoks potenciala.
Slika 2.1: Primer strojnice bazena
Strojnica ima dve napravi, ki ju bomo krmilili: črpalko za vodo in 6-potni ventil, ki usmerja
pretok vode v želeno smer (npr. skozi filter nazaj v bazen, v odtok …).
V strojnici sta tudi dve sondi, s katerih bomo zajemali vrednosti. To sta sonda pH in sonda za
meritev redoks potenciala.
4
2.1. Ventil
Najprej bomo opisali ročni 6-potni ventil, čeprav je v našem primeru 6-potni ventil
elektronski.
Pri ročnemu 6-potnemu ventilu (slika 2.2) mora uporabnik sam preklapljati med vsemi šestimi
pozicijami:
zaprto,
filtriranje (normalno, črpalka črpa vodo iz bazena skozi filter nazaj v bazen),
kroženje (brez filtriranja, mimo filtra nazaj v bazen),
pranje (pere filtrirni pesek, voda teče v odtok),
»rinse (izpiranje ventila) in
»waste« (praznjenje) mimo filtra v odtok.
Slika 2.2: Ročni 6-potni ventil
Elektronski 6-potni ventil (slika 2.3) opravlja isto funkcijo kot ročni, le da ga ni potrebno
preklapljati ročno, saj to opravlja motorček, ki je elektronsko krmiljen.
5
Slika 2.3: Elektronski 6-potni ventil
Pri elektronskem 6-potnem ventilu ima uporabnik na razpolago le nekaj tipk, po navadi manj
kot 6, saj ko pritisnemo določeno tipko, npr. pranje filtra, elektronika krmili motorček, ki
krmili 6-potni ventil, tako da preklopi med določenimi položaji (izvede določeno zaporedje).
Med temi samodejnimi preklopi motorček tudi sam začasno izklopi črpalko. Tako uporabnik
ne izbira vseh 6 poti, saj so določene smiselne le v okviru izbranega zaporedja.
Uporabljen elektronski 6-potni ventil ima naslednje štiri tipke (slika 2.4):
izklop – izklopi vso elektroniko 6-potnega ventila,
filtriranje – voda gre skozi filter nazaj v bazen,
tipka za vklop praznjenja bazena – voda gre mimo filtra v odtok,
pranje filtra – s to tipko sprožimo celotni ciklus pranja filtra:
najprej se izvede pranje peska, nato pa še kratko izpiranje celotnega ventila. Med
vsakim preklopom pozicije ventila se samodejno izklopi in nato ponovno vklopi
črpalka za obtok bazenske vode. Ko je ciklus končan, se 6-potni ventil avtomatsko
vrne v normalno delovanje (filtriranje).
6
Slika 2.4: Štiri tipke za krmiljenje 6-potnega ventila
Praviloma tipka za izklop ni v uporabi, saj je naprava vedno v načinu pripravljenosti. V tem
načinu je poraba zelo mala, zato smo predvideli krmiljenje le treh tipk.
Za krmiljenje potrebujemo tri I/O izhode iz mikrokrmilnika in tri releje, katere mikrokrmilnik
upravlja z uporabo časovnika, tako da, za pritisk tipke, vklopi rele za 1 sekundo in ga nato
izklopi. Podrobnejši opis izvedbe je v poglavju 6.1.
2.2. Opis črpalke
Črpalka črpa vodo iz bazena v smer, izbrano s 6-potnim ventilom. Pri normalnem delovanju
črpalka potiska vodo skozi filter nazaj v bazen. Črpalka z grobim predfiltrom, vstopnim in
izstopnim priključkom za cevi in turbino, ki jo poganja električni enofazni motor, je prikazana
na sliki 2.5.
7
Slika 2.5: Črpalka
Črpalka je krmiljena s stikalom s tremi pozicijami:
časovnik: črpalka deluje na časovnik, ki vklaplja in izklaplja črpalko glede na čas,
izklopljeno: izklopljena črpalka,
vklop: vklop črpalke.
Na sliki 2.6 sta prikazana stikalo hager SF119 in časovnik. Slednji deluje, ko je stikalo v
zgornji poziciji.
Slika 2.6: Stikalo in časovnik
8
Z nalepke na črpalki (slika 2.7) je razvidno, da je črpalka priklopljena na omrežno napetost
230 V in ima moč 0,37 kW.
Slika 2.7: Podatki črpalke
Črpalko želimo krmiliti brezžično, zato bosta vlogo tripolnega stikala v nadaljevanju prevzela
releja. Releja morata imeti izhodne kontakte, primerne izračunanemu toku in napetosti.
Ker so podatki za izhodne kontakte relejev po navadi maksimalna napetost in tok, izračunamo
tok po enačbi (2.2).
𝑃 = 𝑈 • 𝐼 2.1
Iz tega izpeljemo:
𝐼 =𝑃
𝑈 =
370
230= 1,6 𝐴 2.2
Za krmiljenje črpalke potrebujemo dva I/O izhoda iz mikrokrmilnika.
2.3. Opis sonde pH
Oznaka pH (pressure of hydrogen) predstavlja vsebnost aktivnih vodikovih ionov v raztopini,
ki je definirana z enačbo (2.3) .
9
𝑝𝐻 = −𝑙𝑜𝑔 ([𝐻+])
2.3
Lestvica pH ima razpon od 0 do 14. pH-meter je dovolj občutljiv voltmeter, ki meri
potencialno razliko med referenčno in merilno elektrodo. Potencial merilne elektrode opišemo
z Nernstovo enačbo (2.4).
𝐸 = 𝐸0 − 𝑘 • 𝑇 • 𝑝𝐻 2.4
Pri čemer so: E = električni potencial med elektrodama, 𝐸0 = potencial referenčne elektrode,
T = temperatura v K, k = naklonski faktor, izračunan iz večih konstant (Faradayeva konstanta,
plinska konstanta) in pH = vrednost pH.
Iz enačbe (2.4) lahko razberemo, da je potencial, ki nam ga daje merilna elektroda, linearno
odvisen od vrednosti pH. Razvidno je da, imamo opravka z linearno funkcijo, katere naklon
nam določa naklonski faktor (kT).
Iz enačbe (2.4) lahko izračunamo električni potencial. Pri temperaturi 25 °C je, če je vrednost
pH enaka 7, električni potencial med elektrodama 0 V. Če se pH poveča za eno vrednost pH,
se električni potencial med elektrodama zmanjša za 59,16 mV. Če pa se pH zmanjša za eno
vrednost pH, se električni potencial med elektrodama poveča za 59,16 mV.
Primer: ko je vrednost pH 9, je električni potencial med elektrodama -118,32 mV.
Kot je razvidno z enačbe 2.4 in slike 2.8, je električni potencial med elektrodama tudi
temperaturno odvisen. Vendar je temperaturna odvisnost pri meritvi pH bazenske vode dokaj
zanemarljiva, saj temperatura vode nikoli ni pod 0 °C ali nad 50 °C, prav tako pa se vrednosti
pH bazenske vode gibljejo v okolici pH = 7 ± 1,5 pH.
10
Slika 2.8: Temperaturne odvisnosti el. potenciala
S slike 2.8 je razvidno, da je temperaturna odvisnost električnega potenciala med elektrodama
v območju okoli pH = 7 mala, če upoštevamo, da temperature bazenske vode nikoli ne bodo
manjše od 0 °C ali večje od 40 °C. V času kopalne sezone, ko bo natančnost meritev pH
najpomembnejša, bo temperatura med 20 °C in 30 °C.
Najpomembnejši podatek sonde pH je naklon.
Prvi način podajanja naklona sond pH je sledeč: npr.: 59,16 mV na pH enoto, s toleranco ±3
mV, pri 25 °C. To pomeni, če se pH zmanjša za eno enoto pH, se bo napetost povečala za
59,16 mV, z možnim odstopanjem ±3 mV in obratno.
Drugi način podajanja naklona sond pH pa je naklon, podan v odstotkih.
Primer: naklon je od 95 % do 102 %. Odstotne vrednosti dobijo proizvajalci na sledeči način:
najprej izmerijo določeno vrednost napetosti pri določeni vrednosti pH, nato izmerijo še eno
vrednost napetosti pri drugi vrednosti pH (imajo različne spojine s točno določeno vrednostjo
pH). Nato izračunajo razliko med prvo in drugo napetostjo ter razliko pH pri prvi in drugi
meritvi. Razliko napetosti delijo z razliko vrednosti pH. V tej fazi imajo naklon podan v mV
na pH, tako kot v prejšnjem primeru. Nato to vrednost še delijo s teoretičnim (idealnim)
4 1 14 13 12 11 10 9 8 7 6 5 3 0 2
25 °C
50 °C
pozitivna napetost
negativna napetost
-448,8 mV
-414,0 mV
414,0 mV
448,8 mV 50 °C
25 °C
11
naklonom, ta je 59,16 mV/pH, in množijo s 100, tako dobijo odstotno vrednost, pri kateri bi
100 % pomenilo idealno elektrodo, ki bi imela naklon 59,16 mV/pH.
Primer izračuna:
Elektroda pH, ki generira -15 mV, ko je potopljena v raztopino s pH = 7,01, in generira +160
mV, ko je potopljena v raztopino s pH= 4,01.
160 mV - (-15 mV) = 175 mV
175 mV / 3 = 58.33 mV/pH tako dobijo naklon v mV/pH enoto.
58.33/59.16 x 100 = 98.6% tako dobijo naklon v procentih
Po navadi je naklon elektrod med 90 in 105 %. Večina elektrod ima vrednosti manjše od 100
%.
Sonda EPHM
Obravnavana sonda EPHM ima 4,5 m kabla, ki se zaključi s konektorjem BNC. Maksimalni
pritisk je 7 barov, maksimalna temperatura pa 70° C. Proizvajalec podatka o naklonu ne poda.
Vsaka elektroda se posebej umeri, kar zagotavlja najbolj točne rezultate meritev. Umerjanje
se izvede tako, da postavimo elektrodo v raztopine različnih vrednosti pH, ki imajo dovolj
točno, stabilno in znano vrednost pH, in izmerimo električni potencial med elektrodama. Ko
imamo dve vrednosti pH in dve vrednosti električnega potenciala, izračunamo naklon.
Elektrode nismo umerjali, saj nismo imeli dostopa do raztopin za umerjanje, smo pa od
lastnika sond dobili podatke z zadnjega umerjanja.
Podatki uporabljene elektrode:
naklon: 59 mV/pH
offset: + 005 mV
Naklon nam poda linearno odvisnost napetosti med elektrodama od vrednosti pH. Offset nam
poda zamik, saj ni pri vsaki sondi napetost 0 mV točno pri 7,00 pH.
Za zajem vrednosti pH iz sonde bomo potrebovali ojačevalnik, ki ojači signal iz sonde, nato
pa bomo ta ojačeni signal povezali na analogno-digitalni pretvornik mikrokrmilnika, program
12
v mikrokrmilniku pa bo poskrbel za ustrezno skaliranje in pošiljanje vrednosti na mobilni
telefon.
2.4. Opis sonde redoks
Beseda redoks izhaja iz besed redukcija in oksidacija. Reakcija redoks ali daljše redukcijsko-
oksidacijska reakcija je kemijska reakcija, pri kateri atomi spremenijo svoje oksidacijsko
stanje (tabela 2.1).
Tabela 2.1: Redukcija/oksidacija.
Reakcija Pot elektronov Poimenovanje snovi Oksidacijsko stanje
snovi
Redukcija Sprejemanje
elektronov
Oksidant se zmanjša
Oksidacija Oddajanje elektronov Reducent se poveča
Oksidanti lahko oksidirajo druge snovi, drugim snovem lahko odvzemajo elektrone, same pa
se pri tem reducirajo. Ker lahko od drugih snovi sprejemajo elektrone, se imenujejo tudi
akceptorji elektronov [11].
Reducenti lahko reducirajo druge snovi, drugim snovem lahko oddajajo elektrone, same pa pri
tem oksidirajo. Ker lahko drugim snovem oddajajo elektrone, se imenujejo tudi donorji
elektronov.
Potencial redoks merimo v V. Potencial redoks nam pove težnjo vodnega okolja k oksidaciji
ali redukciji snovi. Zato imajo raztopine z višjim redukcijskim potencialom, kot ga ima npr.
snov, ki jo dodamo raztopini, težnjo po oksidaciji dodane snovi. Podobno kot je pH povezan s
prenosom protonov med različnimi kemijskimi vrstami, je tudi redoks potencial povezan s
prenosom elektronov med različnimi kemijskimi vrstami. Redoks potencial je intenzivna
količina in ne določa kapacitete okolja za oksidacijo ali redukcijo, oz. pove nam, kakšna je
težnja vodnega okolja, da oksidira ali reducira snov, ne pa koliko snovi lahko oksidira ali
reducira.
13
Če ima okolje previsok ali prenizek potencial redoks, potem tako okolje nima ugodnih
življenjskih pogojev za mikroorganizme. Primer: večina koliformnih bakterij ne preživi več
kot 30 sekund v močno oksidativnem okolju (potencial redoks > + 660 mV). Voda iz
vodovoda, ki jo natočimo v kozarec in je tako izpostavljena zraku, ima pri sobni temperaturi
potencial redoks približno od +450 do + 500 mV. Negativni potencial redoks pomeni, da je v
vodi zelo malo kisika in v takšnih pogojih lahko bakterije razgradijo nitrat. V bazenski vodi
imamo vedno pozitivni potencial redoks.
Višji potencial redoks pomeni bolj čisto vodo z več kisika. Če je potencial redoks previsok, je
to problematično. Želimo manj mikroorganizmov v vodi, ampak nočemo, da bi bila voda
škodljiva za ljudi (kopalce). Da spremenimo potencial redoks vode, ji dodamo klor. Vrednosti
potenciala redoks v bazenskih vodah moramo vzdrževati med 650 in 850 mV.
Sonda redoks
Glavne značilnosti uporabljene sonde redoks:
ime: erhm,
merilno območje: od -2000 do +2000 mV,
dolžina kabla: 4,5 m,
konektor: BNC.
Tudi sondo redoks je potrebno pred uporabo umeriti. To se naredi tako, da se sondo potopi v
referenčno raztopino. Po navadi je to raztopina za umerjanje sonde redoks, ki ima potencial
redoks 650 mV. Za razliko od sonde pH se pri sondi redoks umerja le odmik, naklon pa ne.
Elektrode nismo umerjali, saj nismo imeli dostopa do raztopin za umerjanje, smo pa od
uporabnika dobili podatke z zadnjega umerjanja. Ko bi moral redoks potencial biti 650 mV je
bil 654 mV, kar pomeni, da je odmik 4 mV.
Signal iz sonde redoks bomo ojačili ter z uporabo analogno-digitalne pretvorbe in korekcijske
funkcije dobili nominalno vrednost.
14
3. RAZVOJNA PLATFORMA
3.1. Android
Android je odprtokodni operacijski sistem, zgrajen na osnovi Linux jedra. Namenjen je
pametnim telefonom in preostalim prenosnim napravam.
Google je hotel prodreti na tržišče mobilnih naprav, zato je kupil podjetje Android, Inc. Leta
2007 je ustanovil poslovno združenje, v katerem se združuje več podjetij, imenovano Open
Handset Alliance (OHA), v prizadevanju za skupni razvoj odprtih standardov in razvoj
inovacij za potrebe mobilnih naprav. Android je odprtokoden in brezplačen.
Operacijski sistem Android je sestavljen iz aplikacije, aplikacijskega ogrodja, knjižnic,
prevajalnika in jedra Linux [2].
Aplikacije
Aplikacije so napisane v programskem jeziku Java. Poleg Jave pa se za izdelavo aplikacij
uporablja tudi XML. Del kode, ki je napisan v XML, lahko generiramo tudi z uporabo
grafičnega vmesnika. Izvršna datoteka aplikacije ima končnico .apk in se zažene v okviru
lastnega procesa.
Ko se aplikacija zažene, se ustvari lastna identifikacijska koda. Identifikacijski kodi se
dodajo pravice za uporabo strojne opreme, v našem primeru pravica za uporabo BlueTooth
(BT).
Aplikacijsko ogrodje
V aplikacijskem ogrodju so sistemski procesi, ki koordinirajo delovanje aplikacij:
upravitelj aktivnosti (Activity Manager) – upravlja življenjski cikel posameznih
aplikacij in omogoča medsebojno komunikacijo med njimi,
upravitelj obvestil (Notification Manager) – skrbi za prikazovanje obvestil,
upravitelj lokacij (Location Manager) – omogoča določanje lokacije s pomočjo
modula GPS, WiFi dostopne točke ali omrežja mobilnega operaterja,
upravitelj telefonije (Telephony Manager),
15
upravitelj pomnilnika,
sistem pogleda (View System) itd.
Knjižnice
Knjižnice so temeljni del sistema Android in se uporabljajo pri razvoju za dostop do strojnih
komponent naprave in funkcionalnosti sistema:
sistemska knjižnica C za mobilne naprave, prilagojena standardna sistemska knjižnica
libc,
večpredstavne knjižnice, ki temeljijo na knjižnicah paketa PacketVideo OpenCORE,
za predvajanje in snemanje večpredstavnih vsebin,
upravitelj površin (Surface Manager), ki upravlja dostop do zaslonskega podsistema in
sestavlja 2D- in 3D-sloje aplikacij,
LibWebCore in WebKit predstavljata vgrajeni brskalnik,
SGL za povezavo z osnovnim slojem 2D-grafičnega pogona,
OpenGL ES za izris 3D-grafike,
FreeType za prikaz bitne in vektorske pisave,
SQL (oz.SQLite) zagotavlja podporo za podatkovne baze itd.
Prevajalnik
Do različice 4.4 je operacijski sistem Android uporabljal prevajalnik JIT (Just in time
compiler). Tako je omogočen prenos iste izvorne kode na več različnih prenosnih naprav.
Možnost vklopa prevajalnika ART (Android Run Time), ki vse aplikacije prevede ob zagonu
(AOT), je bila uvedena v verziji 4.4. Prevajalnik ART je nekoliko boljši ravno zaradi AOT
(Ahead-of-Time compiler), ki procesira inštrukcije aplikacije, preden so potrebovane. Tako
ima uporabnik občutek, da vse teče bolj gladko (hitrejše izvajanje aplikacij).
Jedro Linux
Osrčje Androida, ki zagotavlja upravljanje s pomnilnikom, varnost, upravljanje s procesi,
omrežnim skladom in modeli gonilnikov, je jedro Linux, saj poveže strojno opremo s
programskim skladom. Jedro Linux je zanesljivo in robustno [9].
Andorid API (Application Programming Interface) so vmesniki, namenjeni lažjemu razvoju
aplikacij. Navadno so API kompatibilni s prejšnjimi verzijami, torej lahko programiramo in
16
naredimo program v nižjem API-nivoju, kot ga ima Androidni operacijski sistem na napravi,
na katero naložimo program.
Pri izbiri API-nivoja je pomembno dvoje. Višji kot bo API-nivo, več bo funkcionalnosti,
ampak program ne bo deloval na starejših napravah, s starejšim operacijskim sistemom. Nižji
kot bo API-nivo, na več napravah bo program deloval, vendar smo z nižjim API-nivojem
izgubili določene funkcionalnosti.
Za izbiro API-nivoja moramo vedeti, kakšno funkcionalnost potrebujemo, in poznati verzijo
androidnega sistema naprave, ki ji bo aplikacija namenjena. Tako lahko izberemo API-nivo,
ki ustreza androidnemu sistemu na ciljni napravi in ima vse želene funkcionalnosti. Za nas je
bila pomembna funkcionalnost Bluetooth. Pri razvoju aplikacije ne izberemo ene same verzije
API-nivoja, ampak več API-nivojev v smislu od/do. Povezavo med različico platforme in API
nivoja prikazuje tabela 3.1.
Tabela 3.1: Verzije platforme Android in njihova imena ter API nivoji
Različica platforme API nivo Ime različice
Android 5.1 22 LOLLIPOP_MR1
Android 5.0 21 LOLLIPOP
Android 4.4W 20 KITKAT_WATCH
Android 4.4 19 KITKAT
Android 4.3 18 JELLY_BEAN_MR2
Android 4.2, 4.2.2 17 JELLY_BEAN_MR1
Android 4.1, 4.1.1 16 JELLY_BEAN
Android 4.0.3, 4.0.4 15 ICE_CREAM_SANDWICH_MR1
Android 4.0, 4.0.1, 4.0.2 14 ICE_CREAM_SANDWICH
Android 3.2 13 HONEYCOMB_MR2
Android 3.1.x 12 HONEYCOMB_MR1
Android 3.0.x 11 HONEYCOMB
Android 2.3.4
Android 2.3.3 10 GINGERBREAD_MR1
Android 2.3.2
Android 2.3.1
Android 2.3 9 GINGERBREAD
Android 2.2.x 8 FROYO
Android 2.1.x 7 ECLAIR_MR1
Android 2.0.1 6 ECLAIR_0_1
Android 2.0 5 ECLAIR
Android 1.6 4 DONUT
Android 1.5 3 CUPCAKE
Android 1.1 2 BASE_1_1
Android 1.0 1 BASE
17
3.2. Razvojno okolje Eclipse
Za razvoj aplikacije smo uporabili razvojni programski paket Android SDK (software
development kit), ki vsebuje vsa potrebna orodja za razvoj, razhroščevanje in emuliranje
aplikacij.
Uporabili smo razvojno okolje IDE (integrated development environment) Eclipse, ki
uporablja vmesnik Android Development Tools (ADT).
Aplikacija se praviloma razvija v dveh delih. Prvi del je glavna aktivnost. Ta predstavlja
celotno obnašanje v ozadju uporabniškega vmesnika in se piše v programskem jeziku Java.
Uporabniški vmesnik je drugi del in povezuje glavno aktivnost z uporabnikom ter se
programira v programskem jeziku XML. Namesto pisanja XML kode lahko določene
elemente naredimo kar z grafičnim vmesnikom, ki sam kreira kodo XML, prav tako pa lahko
z grafičnim vmesnikom vplivamo na določene lastnosti teh elementov. Primer: kreiramo
gumb, mu določimo velikost ter njegovo pozicijo na zaslonu.
Aplikacija potrebuje dovoljenja za dostop do izbranih komponent, zato se pri razvoju
deklarira vsaka uporabljena komponenta v datoteki AndroidManifest.xml. V datoteki
AndroidManifest.xml so tudi ostali pomembni podatki o aplikaciji, na primer deklaracija
različic Androida, ki jih bo aplikacija podpirala. Navadno določimo:
minimalni (najnižji) API (minSdkVersion),
ciljna različica API (API, za katerega razvijamo aplikacijo) (targetSdkVersion) in
najvišji API (maxSdkVersion).
Aplikacija STROJNICA
Za komunikacijo s strojnico smo izbrali brezžično povezavo (BT), zato je aplikacija za
androidni telefon potrebovala funkcionalnost BT.
Preverili smo, če obstaja že kakšna odprto-kodna aplikacija. Našli smo aplikacijo
BluetoothChat, preko katere si lahko uporabnika pišeta sporočila. Funkcionalnost je podobna
SMS (Short Message Service), vendar deluje le v dosegu povezave BT. Odločili smo se, da jo
uporabimo pri razvoju.
18
Aplikacija BluetoothChat za delovanje uporablja knjižnico Android Bluetooth API in nam s
tem nudi podporo za polno funkcionalnost povezave Bluetooth, to je:
iskanje dosegljivih naprav BT,
parjenje naprav BT,
vzpostavitev povezave s kanalom/vtičnico (channel/socket) RFCOMM (Radio
frequency communication),
povezovanje z napravami,
prenos podatkov preko povezave BT.
V istem zaporedju, kot smo funkcije našteli, se tudi izvedejo v programu za vzpostavitev
povezave. BluetoothChat aplikacijo smo preuredili po naših zahtevah. Natančneje je koda
opisana v 6. poglavju.
Za nadzor in upravljanje strojnice bazena potrebujemo gumbe, s katerimi upravljamo
delovanje 6-potnega ventila in črpalke. Potrebovali smo tudi izpis teksta (textView) za prikaz
temperature, potenciala redoks in pH-vrednosti vode.
Uporabili smo tri gumbe, s katerimi bo lahko uporabnik izbral delovanje črpalke:
vklop,
časovnik in
izklop.
In tri gumbe, s katerimi bo lahko uporabnik izbiral različne pozicije 6-potnega ventila:
filtriranje,
praznjenje in
pranje filtra.
Za izpis teksta smo potrebovali pet objektov textView za prikaz: temperature, potenciala
redoks, vrednosti pH, status črpalke in status 6-potnega ventila.
Potrebne gumbe in textView-je smo kreirali s pomočjo grafičnega vmesnika, tako da smo jih
izbrali iz zavihka Form Widgets in jih povlekli na zaslon, s tem smo tudi določili pozicijo
elementov na zaslonu (slika 3.1). Določene vrednosti smo določili v main.xml.
19
Slika 3.1: Izdelava grafičnega vmesnika v okolju eclipse
Za povezavo elementa v delu programa, ki je napisan v Javi, in delom, ki je napisan v XML,
je pomemben id elementa. Id se priredi na način: android:id="@+id/textView2", tako je sedaj
id tega texview-ja textView2. Privzeti tekst, ki bo napisan v textView-ju, dokler ga program
ne spremeni, se določi na način: android:text="redoks". Velikost pisave teksta, ki se bo
izpisoval v tekstView-ju, se določi na način: android:textSize="32sp".
Najprej v delu programa, napisanega v programskem jeziku Java, deklariramo spremenljivke,
te so v našem primeru vse tipa textView, saj morajo na zaslonu naprave izpisovati tekst (slika
3.2).
Slika 3.2: Deklaracija spremenljivk
TextView text; TextView text2; TextView crpalka; TextView ventil; TextView temperatura;
20
Nato moramo povezati spremenljivke z Java dela programa z elementi z XML dela programa
preko id-jev.
Primer za spremenljivko temperatura, ki jo moramo povezati z id-jem textView7:
temperatura = (TextView) findViewById(R.id.textView7);
Prav tako moramo preko id-jev povezati gumbe, saj se uporabljajo tako v kodi xml kot v kodi
Java. Vse povezave preko id-jev lahko vidimo v kodi na sliki 3.3.
Slika 3.3: Povezave preko ID-jev
Nadaljevanje kode za mobilno napravo z OS android sledi v poglavju 6.
text = (TextView) findViewById(R.id.textView1); text2 = (TextView) findViewById(R.id.textView2); crpalka = (TextView) findViewById(R.id.textView5); ventil = (TextView) findViewById(R.id.textView6); temperatura = (TextView) findViewById(R.id.textView7); Button button1 = (Button) findViewById(R.id.button1); Button button2 = (Button) findViewById(R.id.button2); Button button6 = (Button) findViewById(R.id.button6); Button button3 = (Button) findViewById(R.id.button3); Button button4 = (Button) findViewById(R.id.button4); Button button5 = (Button) findViewById(R.id.button5);
21
4. BREZŽIČNA POVEZAVA
Skoraj vsak telefon z OS (operacijskim sistemom) android ima možnost brezžične povezave
Bluetooth, zato smo za brezžični nadzor in upravljanje strojnice izbrali povezavo Bluetooth.
Tako potrebujemo za povezavo poleg telefona z OS android le še modul Bluetooth, povezan
na mikrokrmilnik v strojnici.
Skoraj vsak telefon z OS android ima tudi možnost WiFi povezave in moduli za povezavo
WiFi so istega cenovnega razreda kot moduli za povezavo BT. Vendar smo se odločili za BT
zaradi bistveno večje kompleksnosti povezave WiFi, ki pa našemu projektu ne bi nič
doprinesla. Za boljšo predstavo kompleksnosti poglejmo sliko formata okvirja z
dvonivojskim referenčnim modelom OSI in podatkovno-povezovalne plasti (Data Link
Layer). Naši (uporabni) podatki so le del, na katerega kaže puščica na sliki 4.1.
Slika 4.1: podatkovno-povezovalne plasti WiFi povezave
Bluetooth
Bluetooth je brezžična tehnologija, ki za povezovanje različnih digitalnih naprav uporablja
frekvenčni pas med 2400 MHz in 2483,5 MHz. Bluetooth je zaenkrat najbolj razširjen v
mobilnih telefonih.
Maksimalna razdalja povezave je odvisna od razreda:
1. razred = 100 m,
2. razred = 10 m,
3. razred = 1 m.
Bluetooth standard zagotavlja varnost z naslednjimi ukrepi:
22
da se dve napravi povežeta, potrebujeta ključ (ang.: passkey/passcode/pairing code),
bluetooth napravo lahko naredimo »nevidno«,
ko je zveza vzpostavljena, je zaščitena z (maksimalno) 128-bitno enkripcijo,
zamenjava (skakanje) frekvence (frequency-hopping spread spectrum) Bluetooth
razdeli podatke v pakete in vsak paket pošlje po enem od 79 Bluetooth kanalov. Vsak
kanal ima pasovno širino 1 MHz.
(Oziroma Bluetooth 4.0, ki uporablja razmik 2 MHz, ima lahko le 40 kanalov. Prvi se
začne pri 2402 MHz in konča z zadnjim 2480 MHz.)
Bluetooth zamenja frekvenco 1600-krat na sekundo [3].
4.1. Bluetooth modul
Izbrali smo modul RN 42 (slika 4.2), saj podpira povezavo UART (Universal asynchronous
receiver/transmitter), kar je priročno pri povezavi BT modula na mikrokrmilnik.
Ta modul smo izbrali tudi zato, ker ima dovolj veliko razdaljo povezave. Bil je takoj
dobavljiv in lahko z malo predelave deluje na 5 V. To je bilo za nas pomembno v začetnih
fazah, ko smo testirali povezavo Bluetooth in UART-povezavo BT modula z
mikrokrmilnikom in imeli mikrokrmilnik napajan s 5V, saj smo takšno napetost potrebovali
za zaslon LCD, ki smo ga uporabljali v fazi testiranja.
Slika 4.2: Bluetooth modul RN-42
Značilnosti modula RN 42:
možnost povezave UART s hitrostjo prenosa (baud rate) od 1200 b/s do 3 Mb/s,
delovanje na napetosti 3,3 V ali 5 V,
23
Bluetooth v2.1 +EDR (možno izbrati druge verzije: 2.0/1.2/1.1) (EDR=Enhanced
Data Rate),
nizka poraba, ko je povezava vzpostavljena 8-30 mA, v mirovanju 2mA,
vgrajena antena (povezave PCB na ploščici so antena),
čeprav je modul 2. razred (class 2), kar pomeni, da naj bi povezava delovala na
razdalji 10 m, v dokumentaciji proizvajalca piše, da povezava deluje do 20 m
(Oddajna moč 4 dBm. Sprejemna občutljivost -80 dBm),
frekvenčni pas od 2402 do 2480 MHz, modulacija FHSS (Frequency-hopping spread
spectrum) in GFSK (Gaussian frequency-shift keying): 79 kanalov pri 1 MHz,
128-bitno šifriranje,
temperaturno območje delovanja od -40 °C do 85 °C,
dovoljena relativna vlažnost pri delovanju <90 %. [5]
Ker smo želeli, da modul BT deluje na napetosti 5 V, smo izbrali priključke B, saj priključki
A delujejo na napetosti 3,3 V. Razpored priključkov A in B je prikazan na sliki 4.3.
Slika 4.3: Priključki modula BT
Privzeto so aktivirani priključki A, da smo izbrali priključke B (jih aktivirali), smo odspajkali
upora R6 in R8, označena na sliki 4.4.
24
Slika 4.4: Modul BT in upora R6 in R8
Pomeni priključkov na priključku B so razvidni iz tabele 4.1.
Tabela 4.1: Oznake priključkov B
Priključek Oznaka Opis
1 RX Sprejema UART
2 TX Oddaja UART
3 RTS Request To Send smo povezali na CTS
4 CTS Clear To Send smo povezali na RTS
5 VDD Napajanje: enosmerna napetost od 5 do 16 V
6 GND Masa
Najprej smo preverili delovanje modula z uporabo serijske povezave RS 232 z računalnikom.
Modul BT ima možnost povezave neposredno na RS232, z RS232 logičnimi nivoji na
priključkih A. Ker pa smo želeli testirati modul BT na linijah, s katerimi bo kasneje povezan
na mikrokrmilnik smo uporabili priključke B. Tako smo uporabili linije z logičnimi nivoji
TTL, pri tem smo za pretvorbo med RS232 in logičnimi nivoji TTL uporabili integrirano
vezje MAX232. Shemo povezave prikazuje slika 4.5.
Slika 4.5: Shema povezave modula BT na PC preko integriranega vezja MAX232
Bluetooth
modul
MAX 232 Osebni
računalnik
25
Za pretvorbo logičnih nivojev TTL v logične nivoje RS232 potrebujemo poleg integriranega
vezja MAX232 še pet elektrolitskih kondenzatorjev vrednosti 1 uF. Ti so potrebni za
podvojitev napetosti (za voltage doubler) in za invertiranje napetosti (za voltage inverter).
Tako potrebuje integrirano vezje za napajanje le 5 V [7].
MAX2332 ima dva vhoda TTL/CMOS, ki jih pretvori na dva izhoda RS-232 in dva vhoda
RS-232, ki ju pretvori na dva izhoda TTL/CMOS. Razpored priključkov, priklop
kondenzatorjev in vezje MAX232 so razvidni s slike 4.6.
Slika 4.6: Integrirano vezje MAX232 in priključitev kondenzatorjev
Uporabili smo le en vhod TTL in en RS-232 vhod, saj smo za komunikacijo z računalnikom
uporabljali le liniji RxD (Received Data) in TxD (Transmitted Data).
Razpored priključkov vrat RS232 (COM1 (Communication port)) je prikazan na sliki 4.7.
Normalno oštevilčenje priključkov je za moški konektor (na računalniku), oštevilčenje
priključkov v oklepajih pa je za ženski konektor (kabel). Za nas so pomembni le priključki
2,3 in 7,8.
26
Slika 4.7: Razpored priključkov vrat RS232
Pomen uporabljenih priključkov vrat RS232:
2 = Rx (recive data),
3 = Tx (transmit data),
7 = RTS (request to send),
8 = CTS (clear to send) [6]
Sprejemni priključek (Rx) modula BT povežemo z oddajnim priključkom (Tx) vrat RS232 in
obratno, vmes je integrirano vezje max232 zaradi prilagoditve logičnih nivojev. Shemo
vezave modula BT na vrata RS232 preko integriranega vezja MAX232 lahko vidimo na sliki
4.8, na kateri so tudi številke priključkov, ki so uporabljeni za povezavo. Ker linij RTS
(request to send) in CTS (clear to send) nismo uporabljali, saj jih pozneje v povezavi z
mikrokrmilnikom tudi ne bo, smo priključka 3 in 4 na modulu BT povezali s kratkostičnikom.
Na kablu RS232 smo povezali žici 7 (Request to Send) in 8 (clear to send).
Slika 4.8: Shema vezave modula BT na vrata RS232 preko integriranega vezja MAX232
27
Ko je modul BT priključen na napajalno napetost, postane viden drugim napravam BT.
Tovarniško nastavljeno ime "FireFly-ABCD". "FireFly" je ime naprave, "ABCD"pa sta
zadnja dva zloga naslova MAC. Najenostavneje konfiguriramo modul z računalnikom.
Povežemo se lahko brezžično preko BT-vmesnika osebnega računalnika ali pa preko
serijskega vmesnika. Ko se povežemo, modul ustvari navidezna serijska vrata. Odločili smo
se za povezavo preko serijskega vmesnika, saj tako testiramo funkcionalnost, ki jo bomo v
nadaljevanju potrebovali.
Na računalniku lahko za pošiljanje znakov uporabimo katerikoli terminalski program, ki
podpira komunikacijo preko serijskih vrat. Za testiranje smo uporabili program »Putty«,
preverili pa smo tudi delovanje s »HyperTerminal«, ker je že del Windows operacijskega
sistema.
Pri prvem povezovanju modula BT je potrebno vnesti geslo, tovarniška nastavitev gesla je
»1234«. Modul BT je lahko v podatkovnem (Data mode) ali ukaznem načinu (command
mode) delovanja. Ko vključimo modul BT, modul deluje v podatkovnem načinu. To pomeni,
da lahko oddaja in sprejema podatke. Če želimo v ukazni način, moramo v 60 sekundah od
vklopa vpisati ukaz »$$$«. Če smo uspešno izbrali ukazni način, nam modul BT odgovori s
»CMD«. Ukazi za modul BT so sestavljeni iz znakov ASCII. Ko pošljemo veljaven ukaz,
nam modul BT odgovori z »AOK«, če pošljemo neveljaven ukaz, nam odgovori z »ERR«, če
pa pošljemo ukaz, ki ga ne prepozna, pa nam odgovori z »?«.
Privzeto je modul BT nastavljen na suženjski način. Modul BT deluje kot strežnik, druge
naprave Bluetooth ga lahko odkrijejo in se povežejo z njim.
Tovarniške nastavitve serijskega vmesnika modula BT so:
prenosna hitrost (baud rate) je 115200 bps,
dolžina podatka je 8 bitov,
pariteta se ne preverja (No Parity) ,
1 stop bit,
strojni nadzor prenosa podatkov je omogočen.
Ko smo v ukaznem načinu, lahko nastavljamo različne parametre. Nekaj primerov
nastavljanja parametrov:
ime naprave (ukaz: SN,<IME>),
28
pariteta UART-a (ukaz: SL, <E,O,N> E=sodo (even), O= liho (odd), N= nič (non)),
enkripcija (ukaz: SE,<1,0> 1= vklopljeno, 0=izklopljeno),
nastavitev prenosne hitrosti (baudrate) ukaz: SU,<podatkovna hitrost>
Možnosti so 1200, 2400, 4800, 9600, 19.2, 28.8, 38.4, 57.6, 115K, 230K, 460K,
921K , samo prava dva znaka sta potrebna.
Prenosno hitrost smo nastavili na 9600, ker je takšna prenosna hitrost ustrezna za priključitev
modula BT na mikrokrmilnik. Ni potrebe po višji prenosni hitrosti, izbrano hitrost pa lahko
mikrokrmilnik doseže brez uporabe kvarčnega kristala, saj lahko deluje z uro z notranjega
oscilatorja R-C (v našem primeru 4 MHz). Za izbiro prenosne hitrosti 9600 smo poslali ukaz
SU,96.
Določene parametre lahko poleg tega, da jih lahko nastavimo programsko (z ukazi),
nastavimo tudi tako, da določene priključke GPIO (General-purpose input/output) postavimo
na visok ali nizek logični nivo. Prav tako pa so določeni priključki GPIO izhodi, ki
spremenijo logični nivo, odvisno od tega, kaj se dogaja. Primer: priključek GPIO2 preide na
visok logični nivo, če je modul povezan z napravo Bluetooth, če ni povezan, pa ima nizek
logični nivo.
Ko imamo modul BT povezan na osebni računalnik preko serijskega vodila in smo v ukaznem
načinu nastavili želene parametre, lahko vzpostavimo BT-povezavo s kakšno drugo napravo.
V našem primeru je bila ta naprava najprej prenosni računalnik z adapterjem USB/Bluetooth.
V terminalskem programu pošljemo preko serijske povezave modulu BT znak C, da se
povežemo (Connect) z drugo napravo BT, katere naslov ima modul BT že shranjen. Če
naslova še nima, uporabimo ukaz C,<naslov>, pri tem je naslov v hex formatu, po uspešni
izvedbi tega ukaza se naslov shrani v modulu BT.
Če ne poznamo naslova naprave BT, s katero se želimo povezati, pošljemo ukaz
I,<čas>,<COD>, tako modul BT išče/pridobiva (Inquiry) naslove naprav tako dolgo, kot smo
določili čas. COD je kratica, ki pomeni razred naprave Class of Device, če ne vpišemo nič,
išče med vsemi razredi.
Z uporabo programa Putty smo preko povezave BT v obe smeri pošiljali znake ASCII med
osebnim računalnikom z modulom BT in prenosnim računalnikom z adapterjem USB/BT, ki
je v terminalskem programu viden kot navidezna vrata COM1. Pozneje smo prenosni
računalnik nadomestili z mobilno napravo (mobilni telefon z OS Android), ki ima že vgrajen
29
BT in naloženo aplikacijo Bluetooth Chat. Tako smo preko povezave BT v obe smeri pošiljali
ASCII znake med osebnim računalnikom z modulom BT in androidnim telefonom (slika
4.9).
Slika 4.9: Povezava BT med osebnim računalnikom z modulom BT in mobilno napravo
S tem smo testirali modul BT v celoti. Saj bo delovanje modula BT, ko bo priklopljen na
mikrokrmilnik isto, le da mu bo znake, ki smo mu jih pošiljali z računalnika preko serijskega
vmesnika pošiljal mikrokrmilnik preko UART-a z istimi nastavitvami (prenosne hitrosti …),
znake, ki jih bo sprejemal od mobilne naprave, pa bo preko UART-a poslal na mikrokrmilnik
namesto na računalnik.
Nastavitve, ki smo jih uporabili za terminalski program Putty prikazuje slika 4.10, nastavitve,
ki smo jih uporabili za terminalski za program HyperTerminal pa slika 4.11.
V našem projektu bo modul BT nastavljen v suženjski način, tako da mikrokrmilniku ne bo
potrebno krmiliti modula BT za vzpostavitev povezave, saj bomo z mobilno napravo (mobilni
telefon z OS Android) odkrili modul BT in se povezali z njim.
Mobilni
telefon
Bluetooth
modul
MAX 232 Osebni
računalnik
30
Slika 4.10: Nastavitve programa Putty
Slika 4.11: Nastavitve programa Hyper Terminal
31
5. MIKROKRMILNIK
Za krmiljenje strojnice z uporabo mobilne naprave potrebujemo na strani strojnice ne le
modul za brezžično povezavo, ampak tudi napravo, ki izvede vklop/izklop črpalke, spremeni
položaja 6-potnega ventila in mora zajemati podatke o vrednosti pH, potencialu redoks in
temperaturi ter jih ustrezno pretvoriti za brezžično pošiljanje (preko BT) na mobilno napravo.
Za to napravo smo izbrali mikrokrmilnik, saj je cenovno najbolj ugodna rešitev.
Izbrali smo mikrokrmilnik Atmega8 proizvajalca Atmel zaradi prosto dostopne razvojne
programske opreme WinAVR, cenovne ugodnosti in zadostne funkcionalnosti za naš projekt.
8-bitni ATmega8 v ohišju PDIP (plastic dual in-line package) z 28 priključki (slika 5.1) ima:
6 priključkov za analogno-digitalno pretvorbo, dva bomo potrebovali za zajem
vrednosti pH in potenciala redoks;
programljiv serijski vmesnik USART (Universal Synchronous and Asynchronous
serial Receiver and Transmitter), ki ga bomo uporabili za priklop modula BT;
23 digitalnih programljivih priključkov, ki so lahko uporabljeni kot digitalni vhodi ali
digitalni izhodi, ki jih bomo kot izhode potrebovali za krmiljenje črpalke in 6-potnega
ventila, 2 bosta uporabljena kot ADC, 2 za UART.
V fazi testiranja povezave USART in kasneje za testiranje povezave BT jih bomo
uporabili za priklop prikazovalnika LCD;
8 kB programljivega bliskovnega pomnilnika (ang.: Flash memory) z možnostjo
10000 vpisov/izbrisov, 512 zlogov EEPROM (Electrically Erasable Programmable
Read-Only Memory) in 1 kB SRAM (Static random-access memory);
uporabili bomo tudi notranji oscilator RC, da ni potreben signal ure z zunanjega
oscilatorja [4].
32
Slika 5.1: Atmega8 v ohišju PDIP
Uporabljena programska oprema
V razvojnem okolju WinAVR smo programirali v programskem jeziku C++ in objektno
datoteko tipa .hex naložili na mikrokrmilnik s programom PonyProg2000.
Pri WinAvr moramo opisati makefile, to je datoteka, v kateri so določene osnovne nastavitve,
kot npr. tip mikrokrmilnika, frekvenca delovanja itd. Pomagamo si lahko s programom MFile,
ki nam avtomatsko generira datoteko makefile.
Ko nastavimo vse nastavitve v programu mfile, shranimo Makefile in ga v »WinAVR
Programmer s Notepad« vključimo v naš projekt.
Ko imamo v WinAVR Programmer z Notepad-u narejen projekt z ustreznim makefile-om in
vključene ustrezne zglavne datoteke, lahko pričnemo programirati (v C++ jeziku).
Ko želimo tvoriti objektno datoteko, kliknemo na zavihek Tools in nato kliknemo [WinAVR]
Make all, da nam zgenerira hex datoteko, nato je le-to potrebno prenesti na mikrokrmilnik.
Objektno datoteko smo prenesli na mikrokrmilnik z uporabo programatorja PonyProg 2000.
V zavihku Device izberemo, kateri mikrokrmilnik bomo programirali, nato odpremo hex
datoteko programa, ki bi ga radi prenesli na mikrokrmilnik, po potrebi nastavimo še
konfiguracijske in varnostne bite (Configuration and Security bites) ter kliknemo na gumb
Write Device.
33
Primeri postavitev določenih konfiguracijskih bitov za Atmega8 so razvidni v tabeli 5.1.
Izbrali smo kalibrirani notranji oscilator RC. S postavitvijo bit-ov CKSEL (tabela 5.2) smo
določili tudi frekvenco delovanja mikrokrmilnika, 4 MHz. Podrobnejša predstavitev je na
voljo v [1].
Tabela 5.1: Izbira in nastavitve eksterne ali interne ure za Atmega8
Opcije ure CKSEL 3..0
Zunanji kristalni/keramični resonator 1111-1010
Zunanji nizko frekvenčni kristal 1001
Zunanji RC oscilator 1000-0101
Kalibrirani notranji RC oscilator 0100-0001
Zunanja ura 0000
Tabela 5.2: Tabela frekvenc v odvisnosti CKSEL nastavitev za notranji RC oscilator
CKSEL 3..0 Frekvenca [MHz]
0001 1,0
0010 2,0
0011 4,0
0100 8,0
34
5.1. Analogno-digitalna pretvorba
Atmega8 v PDIP ohišju ima 6 vhodov za analogno-digitalno (A-D) pretvorbo, v drugih
ohišjih TQFP in QFN/MLF pa ima 8 vhodov za A-D pretvorbo. Vsi A-D vhodi so povezani
na analogni multiplekser, ko je izbran določen A-D vhod, se napetost na njem vzorči na 10
bit-nem analogno digitalnem pretvorniku.
Glavne značilnosti analogno-digitalne pretvorbe z Atmega8:
10-bitna resolucija, (8 bitov v enem registru + 2 bita v drugem registru),
0.5 LSB integralna nelinearnost,
pri tem predstavlja LSB (ang. = Least significant bit) najniže utežni bit.
± 2 LSB absulutna natančnost,
13 - 260 μs čas pretvorbe.
Pretvornik AD ima 10-bitno ločljivost, kar pomeni, da je vsaka pretvorba analogne napetosti
pretvorjena v 10-bitno število. 210 = 1024, torej lahko zavzame 1024 vrednosti.
Vsi ADC-vhodi so multipleksirani, ADC MULTIPLEXER SELECT (ADMUX) s pomočjo
MUX DEKODERJA določi, kateri od analognih vhodov ADC0 ÷ ADC7 je v določenem
trenutku izbran za AD-pretvorbo.
Atmega8 ima več možnosti izbire referenčne napetosti. Lahko je napajalna napetost
mikrokrmilnika Avcc = 5 V, ali notranja referenca 2,56 V ali zunanja napetost, ki jo
pripeljemo na AREF-priključek 21.
Za referenčno napetost smo izbrali notranjo napetost 2,56 V. Za izbiro referenčne napetosti
nastavimo bit-a REFS1 in REFS0 v ADMUX registru (slika 5.2). Nastavitve bitov za
referenčno napetost vidimo v tabeli 5.3.
Slika 5.2: Register ADMUX (ADC multiplexer selection register)
35
Tabela 5.3: Izbira referenčne napetosti za A-D pretvorbo
REFS1 REFS0 Izbira referenčne napetosti
0 0 AREF, notranja referenčna napetost je izklopljena
0 1 AVCC z zunanjim kondenzatorjem na AREF priključku
1 0 Pridržano
1 1 Notranja ref. nap. 2,56 V z zunanjim kondenzatorjem na AREF priključku
Primer kode za izbiro notranje referenčne napetosti 2,56 V:
ADMUX|=(1<<REFS1)|(1<<REFS0);
S slike 5.3 je razvidno, kako se 10-bitna analogno digitalna pretvorba shrani v dva 8-bitna
registra ADCH (H=high) in ADCL (L=low).
Slika 5.3: Registra ADCL in ADCH sta podatkovna registra analogno digitalne pretvorbe
(ADC data register)
Ker so podatkovni registri le 8-bitni, se vrednost shrani v 2 registra. V enega 8 bitov in v
drugega 2 bita. Da iz dveh 8-bitnih registrov dobimo 10-bitno število, najprej preberemo nižje
36
utežne vrednosti iz ADCL registra, nato pa jim dodamo še višje utežne vrednosti z ADCH
registra.
Primer kode napisane v jeziku C:
adc_vrednost = ADCL;
adc_vrednost += (ADCH<<8);
V prvi vrstici kode smo spremenljivki adc_vrednost priredili vrednost z registra ADCL, torej
spodnjih 8 bitov pretvorbe ADC.
V drugi vrstici kode, pa smo k prejšnjim 8 bitom dodali še 2 bita. Če bi ju samo prišteli, bi se
prištela na prvem in drugem bitu, mi pa jih moramo prišteti kot deveti in deseti bit. Zato smo
uporabili logični pomik za 8. Podrobnejša predstavitev analogno digitalne pretvorbe je na
voljo v [1].
5.2. USART
Za povezavo mikrokrmilnika in modula BT smo se odločili za povezavo z vmesnikom
USART (Universal Synchronous and Asynchronous serial Receiver and Transmitter).
Serijski vmesnik USAR v Atmega8 mikrokrmilniku omogoča sihroni in asihroni prenos
podatkov. Ker ima dva ločena registra za oddajo in sprejem, se lahko podatki istočasno
oddajajo in sprejemajo, kar omogoča obojesmerni (full duplex) prenos podatkov.
Sinhroni način prenosa podatkov se uporablja za pošiljanje daljših zaporedij znakov. Takta
oddajnika in sprejemnika sta sinhronizirana (se ves čas ujemata). Za to sinhronizacijo je
(poleg podatkovne linije) potrebna še sinhronizacijska linija, razen če sprejemnik
sinhronizacijsko informacijo dobi iz podatkovne linije (če je sinhronizacijska informacija
»modulirana« med podatke na podatkovni liniji).
Asinhroni način prenosa podatkov je primeren za pošiljanje posameznih znakov. Hitrost
prenosa (baudrate) mora biti že vnaprej določena in enaka pri sprejemniku in oddajniku.
Najprej se pošlje začetni bit (start bit), ki zbudi sprejemnik, za njim se pošlje znak. Če želimo
preverjati pravilnost prenosa, se za znakom pošlje znak za preverjanje paritete in na koncu se
pošlje še zaključni bit (stop bit). Sprejemnik ve, da bo dobil podatek (znak), ko dobi začetni
37
(start) bit, nato podatek (znak) bere z vnaprej nastavljeno prenosno hitrostjo (baud rate), bere
tudi vnaprej nastavljeno število bitov, dokler ne pride do zaključnega bit-a.
Vmesnik USART ima generator urinega takta prenosne hitrosti (Baud Rate Generator), ki
generira glavni takt za oddajo in sprejem podatkov.
Vmesnik USART podpira štiri načine delovanja ure:
normalni asinhroni način,
asinhroni način z dvojno hitrostjo,
glavni sinhroni način (Master synchronous),
suženjski sinhroni način (Slave synchronous).
USART podpira naslednje podatkovne okvirje:
podatkovnih bitov je lahko 5, 6, 7, 8 ali 9,
1 ali 2 stop bita,
preverjanje in generiranje paritetnega bita je strojno podprto,
tri možne prekinitve, ki se sprožijo:
- če je podatkovni oddajni register (TX Data Register) prazen,
- če je končano sprejemanje podatka,
- če je končano pošiljanje podatka.
Slika 5.4 prikazuje generator urinega takta prenosne hitrosti. Števec, ki šteje navzdol
(Prescaling Down-Counter) s frekvenco sistemske ure fosc, se resetira na vrednost, zapisano
v registru UBRR (Baud Rate Register), vsakič ko pride do nič. Vsakič, ko števec (Prescaling
Down-Counter) pride na vrednost nič, se ustvari urin takt, ki predstavlja frekvenco za
prenosno hitrost, odvisno od izbire nastavitev bitov UMSEL, U2X in DDR XCK pa se ta
frekvenca deli še z 2, 4, ali 16. Deljenje s 16 se izvede tako, da se deli z 2, nato s 4 in še
enkrat z 2.
38
Slika 5.4: Blokovni diagram generatorja urinega takta prenosne hitrosti
Tako lahko prenosno hitrost izračunamo po enačbi (5.1) :
𝐵𝐴𝑈𝐷 =𝑓𝑜𝑠𝑐
𝑑𝑒𝑙𝑗𝑖𝑡𝑒𝑙𝑗 • (𝑈𝐵𝑅 + 1)
5.1
Po navadi že poznamo želeno prenosno hitrost in želimo izračunati vrednost, ki jo moramo
vpisati v register UBRR, da dobimo želeno prenosno hitrost, to vrednost izračunamo po
enačbi (5.2):
𝑈𝐵𝑅𝑅 =𝑓𝑜𝑠𝑐
𝑑𝑒𝑙𝑗𝑖𝑡𝑒𝑙𝑗 • 𝐵𝐴𝑈𝐷− 1
5.2
delitelj je lahko 16, 8 ali 2:
delitelj je 16, če je izbran normalno asinhrono delovanje (asynchronous normal
mode) bit U2X na 0,
delitelj je 8, če je izbran asinhroni način delovanja z dvojno hitrostjo
(asynchronous double speed mode) bit U2X na 1,
delitelj je 2, če je izbran glavni sinhroni način (synchronous master mode),
BAUD = Baud rate prenosna hitrost v bitih na sekundo, bps (bits per second),
39
f osc= frekvenca oscilatorja sistema, v našem primeru je to notranji R-C oscilator
ATM8 (ni nastavljen v c++ kodi v datoteki main.c npr: #define F_CPU 4000000,
ampak je bit-no izbrano pri samem nalaganju kode v ATM8 z PonyProg2000),
UBRR je vsebina UBRRH in UBRRL registrov (vrednost od 0 do 4095)
UBRRH je zgornji register (4 biti) za UBRR (Baud Rate Register), UBRRL pa spodnji
(8 bitov). Skupaj imata 12 bitov, kar je 4095 vrednosti (slika 5.5).
Slika 5.5: Register za hitrost prenosa
V končnem projektu bo mikrokrmilnik preko UART-a komuniciral z modulom BT, da pa smo
testirali kodo za UART, smo najprej mikrokrmilnik preko UART-a povezali na osebni
računalnik. Mikrokrmilnik smo preko serijske povezave RS 232 priklopili na računalnik (slika
5.6). Ker pa RS232 nima logičnih nivojev TTL, smo za pretvorbo logičnih nivojev uporabili
integrirano vezje MAX232 (kot že pri povezavi modula BT na osebni računalnik).
Na kablu RS232 smo povezali žico, ki gre na 7 priključek COM vrat (Request to Send)
COM, in žico, ki gre na 8 priključek COM vrat (Clear To Send). Da smo videli, če se znaki
prenašajo pravilno, smo (v tej testni fazi) dodali alfanumerični LCD ( liquid-crystal display)
zaslon.
Alfanumerični zaslon LCD, ki smo ga uporabili (DEM 16216SYH), ima krmilnik KS0070B,
ki je kompatibilen s HD44780. Na sliki 5.7 je prikazan zaslon DEM 16216SYH, ki je
sestavljen iz zaslona LCD, ki lahko prikazuje dve vrstici s po šestnajst znakov, KS0070B
kontrolerja in LED (light-emitting diode) osvetlitve (backlight).
40
Slika 5.6: Blok shema priključitve mikrokrmilnika na osebni računalnik
Slika 5.7: Blok diagram LCD zaslona DEM 16216 SYH
41
Opis priključkov alfanumeričnega LCD-ja:
Vdd in Vss sta napajalna priključka, Vdd = +5 V in Vss = masa.
Vo priključek je za nastavitev kontrasta zaslona. Med Vdd in Vss vežemo 10k
potenciometer, nastavljivi del potenciometra pa vežemo na Vo, tako s tem
potenciometrom nastavljamo kontrast.
D0–D7 so (dvosmerno) podatkovno vodilo.
R/W krmilni vhod, ki omogoči branje ali pisanje znakov iz oz. v LCD zaslon (določi
smer podatkovnega vodila).
RS je priključek za izbiro registra (register select). Kadar je RS = 0 (je izbran
instrukcijski register), podatki na vodilu DB0 ÷ DB7 se obravnavajo kot ukaz in če je
RS = 1, (je izbran podatkovni register), podatki na vodilu DB0 ÷ DB7 se obravnavajo
kot znakovni podatki.
E priključek omogoči ali neomogoči modul LCD. Ko je E priključek na nizkem
nivoju, bo LCD izklopljen in status RS, R/W linij ter podatkovnega vodila bo
ignoriran. Ko je E priključek na visokem nivoju, je LCD omogočen in status drugih
kontrolnih linij ter podatkovnega vodila bo LCD procesiral.
A (anoda +) in K (katoda -) sta napajanje za LED osvetlitev.
Podrobnejša predstavitev povezave LCD zaslonov z mikrokrmilnikom je na voljo v [1].
Preden smo naredili in testirali vezje s slike 5.6, smo pravilno izvajanje kode preverili s
simulatorjem ISIS Proteus. Brezplačno je na razpolago predstavitveni program (ang. demo),
drugače pa je ISIS Proteus plačljivo orodje.
Najprej smo s pomočjo grafičnega vmesnika narisali vezje. Nato smo na mikrokrmilnik
(ATM8) naložili HEX datoteko in nastavili frekvenco delovanja (slika 5.8). Frekvenca se
mora v simulatorju nastaviti, čeprav je morda že nastavljena v programu, iz katerega se je
zgenerirala .hex datoteka.
42
Slika 5.8: Nastavitev frekvence in naložitev .hex tatoteke za mikrokrmilnik v simulatorju ISIS
proteus
V simulaciji smo uporabili Virtual Terminal, tako smo videli to, kar bi videli s putty-jem ali
hyperterminal-om, če bi dejanski mikrokrmilnik povezali z računalnikom. V Virtual
Terminal-u smo nastavili vse nastavitve tako, kot bodo pozneje, ko bomo mikrokrmilnik
povezali z računalnikom in nato še pozneje z Bluetooth modulom (slika 5.9):
prenosna hitrost (baudrate) 9600,
dolžina podatka je 8 bitov (Data bits:8),
pariteta se ne preverja (Parity: NONE) ,
1 stop bit.
43
Slika 5.9: Nastavitve Virtual terminal-a
Za testiranje smo naredili program odmev (echo). Znak, ki ga pošljemo z računalnika, mora
mikrokrmilnik prebrati in isti znak poslati nazaj ter ga tudi izpisati na alfanumeričnem
zaslonu LCD. Na sliki 5.10 vidimo v simulaciji poleg poslanega znaka »a« in takoj za njim
prejetega znaka »a«, nad tem še napis »Testiranje USART-a134«. »Testiranje USART-a« je
niz, ki smo ga poslali za testiranje prenosa nizov, število »134« pa je število, ki smo si ga
izmislili, da smo testirali funkcijo, ki celoštevilčni tip (integer) pretvori v niz (string), saj ne
moremo izpisovati celih števil (integer), dokler jih ne pretvorimo v bodisi en sam znak (char),
če ima število samo enice (od 0 do 9), bodisi v niz (string), če je število večje. Če bi izpisali
število brez pretvorbe, bi se na zaslonu ali terminalu prikazali ASCII znaki, ki ustrezajo temu
številu, ne pa to dejansko število.
ASCII znaki za števila od 0 do 9 so dejansko vrednosti od 48 do 57, za vsa večja števila od 9
pa se uporabi več kot en ASCII znak. Tako mora funkcija za izpis najprej ločiti enice,
desetice, stotice … in jih nato ustrezno izpisati (tako da znake »zloži« v niz).
44
Slika 5.10: Simulacija s simulatorjem ISIS Proteus
Kot je razvidno s slike 5.10, simulacija deluje, ne da bi v simulatorju pripeljali LCD-ju
napajalno napetost in napetost za kontrast (priključki: 1,2,3). Zaslon LCD v simulaciji nima
priključkov 15 in 16, ki sta LED-osvetlitev zaslona LCD.
Zatem smo testirali BT povezavo na način, v katerem bo delovala v končni uporabi, torej med
mobilnim telefonom in BT modulom priključenim na mikrokrmilnik. V fazi testiranja je bil
na mikrokrmilnik priključen LCD zaslon (slika 5.11). Na mobilni napravi smo v tej fazi
uporabili še nespremenjeno aplikacijo BluetoothChat opisano v poglavju 3.2. Med napravama
smo pošiljali ASCII znake, vse je delovalo v skladu s pričakovanji.
Slika 5.11: Povezava BT med mobilnim telefonom in BT modulom priključenim na
mikrokrmilnik.
Mobilni
telefon
Bluetooth
modul
Mikrokrmilnik LCD zaslon
45
6. PROTOTIP KRMILNE ENOTE
Krmilna enota, prikazana na sliki 6.1sestoji iz:
pH-ojačevalnika, ki ojači napetost s pH-sonde,
ojačevalnika za potencial redoks, ki ojači napetost s sonde redoks,
vezja z releji, ki se uporabljajo za krmiljenje črpalke in 6-potnega ventila,
temperaturnega senzorja, ki zaznava temperaturo vode,
modula BT za brezžično povezavo in
mikrokrmilnika (ATM8).
Slika 6.1: Blok shema krmilne enote (prototipa)
BT
modul
Mikrokrmilnik
pH sonda
redoks sonda
ventil
črpalka
pH ojačevalnik
Redoks ojačevalnik
Vezje z releji
temperaturni senzor
mobilni
telefon
46
6.1. Krmiljenje črpalke in 6-potnega ventila
Z mikrokrmilnikom krmilimo 6-potni ventil in črpalko, ki je priključena na omrežno napetost
230 V. Ker imajo izhodni priključki mikrokrmilnika prenizko napetost (5 V) in imajo premalo
tokovno zmogljivost, maksimalno zmorejo 40 mA, smo skonstruirali vezje, ki omogoča,
krmiljenje porabnikov, ki delujejo na omrežno napetost. V našem primeru je to črpalka.
Glavni del vezja sta dva BC547C-tranzistorja tipa NPN, vezana v Darlingtonovo vezavo, saj
takšna vezava zagotovi dovolj tokovnega ojačenja za krmiljenje tuljave releja. Da lahko
vidimo, kdaj je rele vklopljen, ima vezje LED diodo (D2), ki služi kot indikator. Ker je
napajalna napetost vezja 5 V, ima dioda LED predupor (R2). Tuljava releja je zaščitena z
zaščitno diodo (D1), ki ščiti tuljavo releja. Vezje je prikazano na sliki 6.2.
Slika 6.2: Shema vezja z relejem
Napajalna napetost Vcc je 5 V, je enako napajalni napetosti za vezje mikrokrmilnika. Slika
6.3 prikazuje del vezja. Celotno vezje, ki je na shemi (slika 6.2), je narejeno petkrat. Tri
47
potrebujemo za krmiljenje treh tipk pri elektroniki 6-potnega ventila in dva za krmiljenje
črpalke. Na vhode vezja so priklopljeni izhodni priključki mikrokrmilnika. Na izhode (rele-
kontakte) pa so vezane naprave, ki jih želimo krmiliti, v našem primeru črpalka in tipke 6-
potnega ventila.
Releja, ki vklapljata črpalko, zmoreta tok 12 A pri izmenični napetosti 250 V (slika 6.3), kar
je več kot dovolj za črpalko, ki potrebuje 1,6 A pri 230 V.
Slika 6.3: Vezje z releji
Vseh pet vezij je popolnoma enakih, razlika je le v signalih, ki jih na vhode dobijo z
mikrokrmilnika, tako da se potem tri obnašajo kot tipke za 6-potni ventil in dve kot tripolno
stikalo za črpalko.
Releje za krmiljenje treh tipk za 6-potni ventil smo povezali vzporedno k že obstoječim
tipkam, tako lahko uporabnik še vedno uporablja tudi originalne tipke. Releje za krmiljenje
črpalke smo povezali k že obstoječemu tripolnem stikalu, s tem da če namerava uporabnik
uporabljati brezžično upravljanje črpalke, mora dati že obstoječe tripolno stikalo v pozicijo,
pri kateri je črpalka izklopljena. Vezava že obstoječega tripolnega stikala je prikazana na sliki
6.4, pri čemer je pozicija:
48
1 = vklapljanje črpalke preko časovnika,
2 = črpalka je izklopljena,
3 = črpalka je vklopljena.
Slika 6.4: Tripolno stikalo za krmiljenje črpalke
Vezava z dvema relejema za krmiljenje črpalke je prikazana na sliki 6.5. R1 je prvi rele. Ko je
le-ta vklopljen, je črpalka vezana na časovnik. R2 je drugi rele. Ko je le-ta vklopljen, je
črpalka vklopljena (vezana neposredno na fazo). Ko sta oba releja izklopljena, je črpalka
izklopljena. Zaradi »varnosti« smo dodali še stikalo za izklop, vidno na sliki 6.5 označeno
Sizk. Če uporabnik izklopi to stikalo, bo črpalka izklopljena ne glede na to, kako se bosta
vklapljala releja. Ko je stikalo Sizk izklopljeno, lahko uporabnik ročno vklaplja črpalko preko
že obstoječega tripolnega stikala (slika 6.4).
Slika 6.5: Vezava dveh relejev za krmiljenje črpalke
3
2
1
črpalka
časovnik
Sizk
R1
R2 črpalka
časovnik
49
Za tipke (za krmiljenje 6-potnega ventila) smo uporabili priključke mikrokrmilnika PB0,PB1
in PB2 na vratih B. Za tripolno stikalo moramo krmiliti dva releja. Za to smo uporabili
priključka PB3 in PB4 na vratih B. Za testiranje kode v simulatorju smo na uporabljene
priključke mikrokrmilnika vezali V-metre (slika 6.6). Tako smo vedeli, da ko je na V-metru 0
V, bi bil rele izklopljen, ko pa je 5 V, bi bil rele vklopljen. Ko smo zagnali simulacijo, smo
preko virtual-terminala pošiljali ustrezne znake in na V-metrih gledali napetosti, s katerih je
bilo razvidno, ali se bodo releji obnašali pravilno. To pomeni, da ko se pošlje znak za
določeno tipko, mora določeni rele vklopiti za 1 s, ko pa se pošlje znak za tripolno stikalo, pa
je glede na poslan znak vklopljen en rele (vklopljena črpalka) ali drug rele (črpalka vezana na
časovnik) ali pa sta oba releja izklopljena (črpalka izklopljena).
Slika 6.6: Simulacija tipk in tripolnega stikala z uporabo V-m v ISIS proteus
V simulaciji je vse delovalo pravilno, zato smo zvezali vezje. Na rele smo priključili
porabnika 220 V - »breme«. V fazi testiranja je to bila žarnica 220 V, fazo za vklop žarnice
220 V smo priključili preko releja. Z mobilnim telefonom smo jo uspešno vklapljali in
izklapljali.
50
Krmiljenje 6-potnega ventila
Določili smo znake s kode ascii, ki bodo poslani za vklop tipk, ti znaki so »v«, »i« in »z«.
Nato smo pogledali vrednost teh znakov s tabele ascii, vrednosti so v=118, i=105 in z=122.
Sama koda s pogojnim stavkom »if« preverja, če je mobilna naprava poslala mikrokrmilniku
katerega od teh znakov. Če je, potem da mikrokrmilnik ustrezen priključek na visok nivo (5
V), kar vklopi rele, ga pusti na visokem nivoju eno sekundo in nato spusti na nizek nivo (0
V), kar izklopi rele. Zatem pa še pošlje mobilni napravi znak, s katerega program na mobilni
napravi razbere, da se je pritisk tipke izvedel uspešno, poleg tega pa razbere tudi, katera tipka
je bila pritisnjena in tako mobilna naprava izpiše, kam je (po novem) obrnjen 6-potni ventil.
Na sliki 6.7 je prikazan primer kode mikrokrmilnika za tipko praznjenje: če mikrokrmilnik
prejme znak »v« = 118, potem da priključek PB2 na visok nivo, nato čaka (da se izteče delay
1000 ms) 1 s, nakar da priključek PB2 na nizek nivo. Zatem pošlje mobilni napravi znak »I«,
iz katerega mobilna naprava razbere, da je 6-potni ventil obrnjen na pozicijo praznejenje.
Slika 6.7: Koda mikrokrmilnika za krmiljenje tipke »praznjenje« na 6-potnem ventilu
Na sliki 6.8 je prikazan primer tipk »pranje filtra« in »filtriranje«: če mikrokrmilnik prejme
znak »i« = 105, potem da priključek PB0 na visok nivo, nato čaka 1s (da se izteče timer),
nakar da priključek PB0 na nizek nivo. Zatem pošlje mobilni napravi znak »K«, iz katerega
program v mobilni napravi razbere, da je 6-potni ventil obrnjen na pozicijo »pranje filtra«.
Če mikrokrmilnik prejme znak »c« = 122, potem da priključek PB1 na visok nivo, nato čaka 1
s (da se izteče timer), nakar da priključek PB1 na nizek nivo. Zatem pošlje mobilni napravi
if (c==118)
PORTB |= (1<<PB2);
_delay_ms(1000);
PORTB &= ~(1<<PB2);
uart_puts("I");
51
znak »G«, iz katerega program v mobilni napravi razbere, da je 6-potni ventil obrnjen na
pozicijo »filtriranje«.
.
Slika 6.8: Koda mikrokrmilnika za krmiljenje tipk »pranje filtra« in »filtriranje« na 6-potnem
ventilu
Za gumbe na zaslonu na dotik na mobilni napravi, ki bodo upravljali tipke 6-potnega ventila,
smo uporabili funkcijo OnClickListener, ki preverja, če smo pritisnili gumb. Ko pritisnemo
določen gumb, se izvede koda v oklepajih v funkciji onClick.
Na sliki 6.9 na začetku vidimo kodo za gumb »praznjenje« (button1), to je gumb, ki bo 6-
potni ventil obrnil na pozicijo praznjenje. Ko pritisnemo gumb, mobilna naprava pošlje
mikrokrmilniku znak »v«, to mikrokrmilnik prepozna in vklopi rele, ki vklopi tipko (za 1s),
ki obrne (nastavi) 6-potni ventil v pozicijo za praznjenje.
Če pritisnemo gumb »pranje filtra« (button2), bo mobilna naprava poslala mikrokrmilniku
znak »i«, to mikrokrmilnik prepozna in vklopi rele, ki vklopi tipko (za 1s), ki obrne (nastavi )
6-potni ventil v pozicijo za pranje filtra.
if (c==105)
PORTB |= (1<<PB0);
_delay_ms(1000);
PORTB &= ~(1<<PB0);
uart_puts("K");
if (c==122)
PORTB |= (1<<PB1);
_delay_ms(1000);
PORTB &= ~(1<<PB1);
uart_puts("G");
52
Če pritisnemo gumb »filtriranje« (button6), bo mobilna naprava poslala mikrokrmilniku znak
»z«, to mikrokrmilnik prepozna in vklopi rele, ki vklopi tipko (za 1s), ki obrne (nastavi) 6-
potni ventil v pozicijo za filtriranje.
Slika 6.9: Koda mobilne naprave za krmiljenje tipk 6-potnega ventila
Ko mikrokrmilnik prejme znake od mobilne naprave in pritisne ustrezne tipke na 6-potnem
ventilu, pošlje nazaj znak, tako mobilna naprava prepozna, da se je dejanje (pritisk določene
tipke) izvedlo pravilno, in to tudi izpiše.
Primer: Če smo na mobilni napravi na primer pritisnili gumb »praznjeneje« (button1), je
poslala mikrokrmilniku znak »v«, mikokokrmilnik je vklopil rele, ki vklopi tipko (za 1s), ki
obrne (ponastavi) 6-potni ventil v pozicijo za praznjenje. Nato mikrokrmilnik pošlje mobilni
napravi znak »I«, ko mobilna naprava dobi znak »I«, izpiše v textView, namenjen za status
ventila »praznjenje«. Tako uporabnik ve, da je 6-potni ventil obrnjen v pozicijo praznjenje.
Napis ostane viden, dokler ne izberemo kakšne druge pozicije 6-potnega ventila, takrat pa se
osveži z novo vrednostjo. Tako uporabnik vedno ve, v kakšnem položaju je 6-potni ventil.
button1.setOnClickListener(new View.OnClickListener() public void onClick(View v) sendMessage("v"); ); button2.setOnClickListener(new View.OnClickListener() public void onClick(View v) sendMessage("i"); ); button6.setOnClickListener(new View.OnClickListener() public void onClick(View v) sendMessage("z"); );
53
Razen ko zažene aplikacijo in še nikoli ni pritisnil nobenega gumba za spreminjanje pozicije
6-potnega ventila. Če se uporabnik želi prepričati o poziciji 6-potnega ventila enostavno
pritisne tipko za želeno pozicijo 6-potnega ventila, saj ni nič narobe, če izbere položaj, v
katerem je morda že 6-potni.
V kodi na sliki 6.10 so trije pogojni stavki if, ki preverjajo, če je mikrokrmilnik poslal mobilni
napravi znake, ki predstavljajo uspešno izvedbo spreminjanja položaja 6-potnega ventila,
obenem pa predstavljajo tudi pozicijo.
Prvi pogojni stavek if preverja, če je mikrokrmilnik poslal mobilni napravi znak »G«, če je, se
v textView za status ventila izpiše »filtriranje«.
Drugi pogojni stavek if preverja, če je mikrokrmilnik poslal mobilni napravi znak »I«, če je,
se v textView za status ventila izpiše »praznjenje«.
Tretji pogojni stavek if preverja, če je mikrokrmilnik poslal mobilni napravi znak »K«, če je,
se v textView za status ventila izpiše »pranje filtra«.
Slika 6.10: Koda mobilne naprave za prikaz statusa 6-potnega ventila
if(readMessage.contains("G")) ventil.setText("filtriranje"); if(readMessage.contains("I")) ventil.setText("praznjenje"); if(readMessage.contains("K")) ventil.setText("pranje filtra");
54
Krmiljenje črpalke
Za krmiljenje črpalke potrebujemo tripolno stikalo. Tripolno stikalo smo naredili iz dveh
relejev. Tako je ena pozicija tripolnega stikala, da je vklopljen prvi rele in se črpalka vklaplja
preko časovnika (faza gre skozi časovnik). Druga pozicija je, ko je vklopljen drugi rele in prvi
izklopljen, tako je črpalka vezana neposredno na fazo (vklopljena). Tretja pozicija je, ko sta
oba releja izklopljena in je črpalka izklopljena. Vezava relejev je razvidna s slike 6.5.
Mobilna naprava pošlje mikrokrmilniku znak »a« za vklop črpalke preko časovnika, znak »e«
za vklop črpalke in znaka »g« in »c« za izklop obeh relejev. Slika 6.11 prikazuje del
programa za nadzor črpalke. Ob prejemu ukaza »a«, ki ima ASCII kodo 97, se onemogoči
neposreden vklop črpalke (postavi priključek PB3 na nizek nivo) in vklopi delovanje preko
časovnika (postavi priključek PB4 na visok nivo). Uspešen zaključek ukaza se potrdi s
poslanim znakom »C«, katerega program na mobilni napravi prepozna in potrdi, da se črpalka
vklaplja preko časovnika.
Ob prejemu ukaza »c«, ki ima ASCII kodo 99, mikrokrmilnik postavi priključek PB4 na nizek
nivo in s tem izklopi rele za vklapljanje črpalke preko časovnika. Mikrokrmilnik nato pošlje
mobilni napravi znak »E«, katerega program na mobilni napravi prepozna in potrdi, da je
črpalka izklopljena.
Ob prejemu ukaza »e«, ki ima ASCII kodo 101, mikrokrmilnik postavi priključek PB4 na
nizek nivo, s tem izklopi rele za vklapljanje črpalke preko časovnika. Zatem postavi
priključek PB3 na visok nivo, s tem vklopi rele, ki vklopi črpalko. Nato pa pošlje mobilni
napravi znak »A«, katerega program na mobilni napravi prepozna in potrdi, da je črpalka
vklopljena.
Ob prejemu ukaza »g«, ki ima ASCII kodo 103, mikrokrmilnik postavi priključek PB3 na
nizek nivo in s tem izklopi rele za neposredno vklapljanje črpalke. Mikrokrmilnik nato pošlje
mobilni napravi znak »E«, katerega program na mobilni napravi prepozna in potrdi, da je
črpalka izklopljena.
55
Slika 6.11: Koda mikrokrmilnika za krmiljenje črpalke
Za gumbe na zaslonu na dotik, na mobilni napravi, ki upravljajo črpalko, smo uporabili
funkcijo OnClickListener, ki preverja, če smo pritisnili gumb. Ko pritisnemo določen gumb,
se izvede koda v oklepajih.
Na sliki 6.12 je prikazana koda za tri gumbe, s katerimi krmilimo črpalko. »Časovnik«
(button3) je gumb, ki ga uporabnik pritisne, če želi, da se bo črpalka vklapljala preko
časovnika. Ko pritisnemo gumb, mobilna naprava pošlje mikrokrmilniku znak »a«, to
mikrokrmilnik prepozna in vklopi rele, ki poveže črpalko na časovnik (še prej pa izklopi rele
za neposredno vklapljanje črpalke).
if (c==97)
PORTB &= ~(1<<PB3);
PORTB |= (1<<PB4);
uart_puts("C");
if (c==99)
PORTB &= ~(1<<PB4);
uart_puts("E");
if (c==101)
PORTB &= ~(1<<PB4);
PORTB |= (1<<PB3);
uart_puts("A");
if (c==103)
PORTB &= ~(1<<PB3);
uart_puts("E");
56
Če pritisnemo gumb »Izklop« (button4), bo mobilna naprava poslal mikrokrmilniku znaka
»c« in »g«, to mikrokrmilnik prepozna in izklopi rele za vklop črpalke in rele za vklapljanje
črpalke preko časovnika.
Če pritisnemo gumb »Vklop« (button5), bo mobilna naprava poslal mikrokrmilniku znak »e«,
to mikrokrmilnik prepozna in vklopi rele za vklop črpalke (še prej pa izklopi rele za
vklapljanje črpalke preko časovnika).
Slika 6.12: Koda mobilne naprave za krmiljenje črpalke
Slika 6.13 prikazuje tri pogojne stavke if , ki preverjajo, če je mikrokrmilnik poslal znak, ki
mobilni napravi opiše status črpalke:
pogojni stavek if, ki preverja, če je mikrokrmilnik poslal mobilni napravi znak »A«, če
je, se v textView za status črpalke izpiše »črpalka vklopljena«,
pogojni stavek if, ki preverja, če je mikrokrmilnik poslal mobilni napravi znak »C«,
če je, se v textView za status črpalke izpiše »časovnik črpalka«,
button3.setOnClickListener(new View.OnClickListener() public void onClick(View v) sendMessage("a"); ); button4.setOnClickListener(new View.OnClickListener() public void onClick(View v) sendMessage("c");
sendMessage("g");
); button5.setOnClickListener(new View.OnClickListener() public void onClick(View v) sendMessage("e"); );
57
pogojni stavek if, ki preverja, če je mikrokrmilnik poslal mobilni napravi znak »E«, če
je, se v textView za status črpalke izpiše »črpalka izklopljena«.
Slika 6.13: Koda mobilne naprave za prikaz statusa črpalke
6.2. Merjenje pH
Ker je napetost s sonde pH premajhna, da bi jo pripeljali neposredno na analogno-digitalni
(ADC) vhod mikrokrmilnika, jo je bilo potrebno ustrezno ojačiti. Najboljša izbira za ojačenje
napetosti s sonde je operacijski ojačevalnik, odločili smo se za LM358. Glavni del vezja je
operacijski ojačevalnik, vezan v neinvertirajočo vezavo. Ojačevalno vezje ima napajalno
napetost Vpoz je +5 V, negativna napajalna napetost Vneg je -5 V.
Glede na to, da je pri sondi pH ena enota pH ekvivalent 60 mV, pri čemer je 0 V, ko je pH=7,
smo se odločili, da če nas pri bazenskih vodah zanimajo vrednosti pH +/- 2 enote pH od 7, se
pravi vrednosti pH od 5 do 9, potem moramo z ojačevalnikom ojačiti napetosti od -120 mV
do +120 mV. Da te vrednosti niso na robu merilnega območja, smo izbrali območje od -
135mV do +135 mV.
if(readMessage.contains("A")) crpalka.setText("črpalka vklopljena"); if(readMessage.contains("C")) crpalka.setText("časovnik črpalka"); if(readMessage.contains("E")) crpalka.setText("črpalka izklopljena");
58
Slika 6.14: Shema ojačevalnika za ojačenje napetosti s sonde pH
Upor R7 je trimer in se uporablja kot delilnik napetosti v kombinaciji z uporom R6, na njem
je napetost, ki jo potrebujemo za negativni vhod operacijskega ojačevalnika. Na negativni
vhod pripeljemo to negativno napetost, zato ker mora ojačevalnik pH začeti ojačevati prej kot
pri 0 V.
Tako je naša napetost na negativnem vhodu ojačevalnika -135 mV, da pa se jo nastavljati s
trimerjem R7, kar nam omogoča, da lahko v prihodnje po potrebi spremenimo merilno
območje vrednosti pH.
Ker ima napajalnik negativno napetost Vneg = -5 V, smo izbrali upor R6 = 20 kΩ in linearni
trimer R7 = 1 kΩ, tako je s trimerjem enostavno nastaviti negativno napetost, ki jo
potrebujemo za negativni vhod operacijskega ojačevalnika.
59
Razmerje, ki ga potrebujemo, je -135 mV proti -5 V, torej 1,35 : 50. Upornost R7 smo z
meritvijo nastavili s trimerjem, tako, da smo dobili -135 mV, lahko bi jo izračunali in
uporabili navaden upor. Enako velja za ojačenje, ki se nastavlja s trimerjem R2, vendar smo
želeli, da so možne prilagoditve, zaradi toleranc elementov in zato, da lahko pozneje po želji
širimo in ožimo merilno območje samo z nastavitvijo trimerjev ter s spremembo koeficientov
v enačbi za skaliranje v mikrokrmilniku.
Ojačenje
Ojačevalnik mora ojačiti napetost od -135 mV do +135 mV (razpon 270 mV) v napetost od 0
do 2,56V (saj ima ADC mikrokrmilnika za referenčno napetost 2,56 V). Takoj opazimo, da
mora biti ojačenje:
ojačenje = 𝑈𝑖𝑧ℎ𝑜𝑑𝑛𝑎
𝑈𝑣ℎ𝑜𝑑𝑛𝑎=
2,56
270•10−3 = 9,48
6.1
Formula za ojačenje za neinvertirajoč ojačevalnik:
Ojačenje = 𝑈𝑖𝑧ℎ𝑜𝑑𝑛𝑎
𝑈𝑣ℎ𝑜𝑑𝑛𝑎=
𝑅1+𝑅2+𝑅3+𝑅4
𝑅4
6.2
R2 je trimer, s katerim nastavljamo ojačenje. R1 in R3 sta dva 20 kΩ upora. Vrednost trimerja
R2 (če ga nastavimo na maksimalno vrednost) je 47 kΩ.
Tako bi bilo ojačanje pri nastavitvi maksimalnega ojačanja:
ojačenje = 20𝑘+47𝑘+20𝑘+10𝑘
10𝑘=
97𝑘
10𝑘= 9,7
6.3
Ojačenje lahko seveda poljubno zmanjšamo z nastavitvijo trimerja R2 in tako lahko
nastavimo želenih 9,48.
R2 in R7 sta trimerja tudi zato, ker imajo vsi elementi tolerance in zaradi rahlega odstopanja
napajalne napetost (npr.: napajalna napetost, ki naj bi bila 5 V, je v resnici 4,9 V). Zato je
dobro vezje »približno« izračunati, samo izvedbo pa narediti nastavljivo in jo potem v
dejanskem delovanju umeriti.
60
Skaliranje
Ob vzorčenju napetost iz pH ojačevalnega vezja, mikrokrmilnik pretvori v 10-bitno število.
Skaliranje opisuje postopek pretvorbe tega števila v vrednost pH.
Izhodna napetost iz pH-ojačevalnika Uizh je napetost, ki je priključena na enega izmed
vhodov mikrokrmilnika za analogno–digitalno pretvorbo. Analogno-digitalnemu pretvorniku
smo za referenčno napetost nastavili 2,56 V, zato nas napetost s pH-ojačevalnika zanima le v
območju od 0 do 2,56 V.
Napetost na vhodu ojačevalnika Uvh je napetost, ki bo prišla s sonde pH. V času razvoja smo
napetost s pH-sonde Uvh »simulirali« tako, da smo jo nastavljali z nastavljivim
laboratorijskim napajalnikom, kajti če bi se priklopili na sondo pH, bi imeli konstantno
napetost. Velikost te napetosti bi bila seveda odvisna od vrednosti pH. Da pa bi jo spremenili
(dobili več točk meritve), bi morali vplivati na pH vode, v kateri bi bila sonda, ali pa sondo
potapljati v različne spojine, katerih pH bi nam bil znan.
Ko smo na ojačevalniku nastavili ojačenje in negativno vhodno napetost, smo opravili več
meritev in preverili linearnost, med drugim smo pridobili naslednje vrednosti:
pri 0 V na vhodu je bilo na izhodu ojačevalnika 1,28 V,
pri -136 mV na vhodu je bilo na izhodu 0 V in
pri 146 mV na vhodu je bilo na izhodu 2,56 V.
Grafično predstavitev skaliranja prikazuje slika 6.15. Na črti pH so predstavljene dejanske
vrednosti pH vode, v katero je sonda pH potopljena. Na črti Uvh je predstavljena napetost s
sonde pH, ki je priključena na vhod pH-ojačevalnika. Na črti Uizh je predstavljena napetost
na izhodu pH-ojačevalnika, ki je priključena na ADC priključek mikrokrmilnika. Zadnja črta
na sliki 6.15 predstavlja 10-bitno vrednost analogno-digitalne pretvorbe. Ko je izhodna
napetost iz ojačevalnika (to je napetost, ki gre na ADC) 0 V, je vrednost ADC enaka 0, ko
doseže svoj maksimum 2,56 V, pa je vrednost ADC- pretvorbe najvišja, kar je kar je 210 =
1024.
61
Slika 6.15: Grafična predstavitev skaliranja
Da dobimo velikost pH merilnega območja (MO) naše meritve, od končne vrednosti
odštejemo začetno, kot je razvidno z enačbe (6.4).
MO = 9,43 - 4,73 = 4,7
6.4
S tem smo dobili vrednost MO. To pomeni, da imamo za 4,7 pH enot na razpolago 1024
vrednosti. Tako lahko izračunamo, s koliko moramo deliti ADC-vrednost, da dobimo enote
pH. Enačba (6.5)
1024
𝑥= 4,7
6.5
Iz tega sledi enačba (6.6):
𝑥 =1024
4,7= 217,87
6.6
Zaokrožitev:
x=218
Tako je enačba za pretvorbo ADC vrednosti v pH enote, enačba (6.7):
𝑝𝐻 = 9,4 − 𝑣𝑟𝑒𝑑𝑛𝑜𝑠𝑡 𝐴𝐷𝐶
218
6.7
0
9,43
-136
0
7
512
0
1,28 2,56
146
4,73
1024
Uizh [V]
Uvh
pH
ADC
vrednost
62
Z enačbo (6.7) bi dobili dejansko vrednost pH, ampak bi morali preko BlueTooth pošiljati
dodaten znak, decimalno vejico, in mikrokrmilnik ne bi mogel več računati s (celoštevilčno)
spremenljivko tipa integer (potrebovali bi tip npr. float ali double). Zato smo se odločili, da
mikrokrmilnik pošilja vrednost pH, ki je desetkrat večja kot dejanski pH, nato pa jo na
sprejemni strani mobilna naprava deli z deset (oziroma v niz, vrine znak decimalne vejice).
Enačba za desetkrat večjo pH vrednost (6.8):
Z enačbo (6.8) dobimo z 10-bitne ADC-vrednosti, dejansko vrednost pH, ki jo, ko jo dobimo
preko BT na mobilno napravo, moramo le še deliti z 10.
Z mobilno napravo dejansko ne delimo vrednosti (zaradi načina zaokroževanja), ampak v niz,
ki je polje znakov, vrinemo znak decimalne vejice, saj vemo, da je v našem primeru vrednost
pH vedno sestavljena iz dveh števil, tako se vejica vrine vedno na isto mesto v nizu.
Natančneje: sam niz ima začeten znak, dve vrednosti, ki predstavljajo vrednost pH ter končen
znak. Znak decimalne vejice, je potrebno vriniti med dve števili, ki predstavljata vrednost
pH.
Da ločimo vrednosti, ki jih mikrokrmilnik pošilja za prikaz pH, in vrednosti, poslane za
prikaz potenciala redoks, in zato da naša aplikacija na mobilni napravi zazna, kdaj je dobila
celoten niz znakov, smo uporabili »posebne znake« za določitev začetka in konca niza znakov
za posamezno vrednost pH, potenciala redoks in temperature. Tako mikrokrmilnik doda znak
pred začetkom vrednosti pH, vrednosti potenciala redoks in temperature ter na koncu
vrednosti pH, vrednosti potenciala redoks in temperature.
Za te znake smo izbrali znake, ki se nikoli ne pojavljajo v vsebini ostalih sporočil. Tako smo
za začetni znak pH izbrali »:«, za končni znak pH pa ».«.
V kodi mikrokrmilnika je celoštevilčena (int) spremenljivka »izmen«, ta je števec, ki se
poveča za ena vsakič, ko se izvede glavni del programa. Ko števec prešteje do tri, se zopet
resetira na ena (slika 6.16). Ta števec uporabljamo, zato da s pogojnimi stavki določamo, kdaj
bomo skalirali in pošiljali vrednosti pH, potenciala redoks in temperature. Če tega števca in
pogojnih stavkov ne bi bilo, bi se vse tri vrednosti (pH, redoks, temperatura) pošiljale v
𝑝𝐻 = 94 − 𝑣𝑟𝑒𝑑𝑛𝑜𝑠𝑡 𝐴𝐷𝐶
22
6.8
63
vsakem »ciklu« programa, kar pa se je izkazalo moteče na strani mobilne naprave, saj je
takšna frekvenca osveževanja podatkov moteča.
Slika 6.16: Števec »izmen«
Na sliki 6.17 je prikazan diagram poteka, ko je števec »izmen«:
enak 1, se izvede koda za AD- pretvorbo, skaliranje in pošiljanje vrednosti pH,
enak 2, se izvede koda za AD-pretvorbo, skaliranje in pošiljanje vrednosti potenciala
redoks,
enak 3 (oziroma če ni 1 in ni 2 »else« ), se izvede koda za pošiljanje vrednosti
temperature.
Ko se izvede katerakoli od treh možnosti, se program vrne na začetek glavnega programa.
Na sliki 6.18 je prikazana koda mikrokrmilnika za skaliranje in pošiljanje vrednosti pH. Na
začetku kode vidimo pogojni stavek if, ki preverja, če je vrednost spremenljivke »izmen«
enaka 1, če je, se izvede koda za AD-pretvorbo, skaliranje in pošiljanje vrednosti pH.
Najprej se naredi analogno-digitalna pretvorba napetosti na priključku, ki je priklopljen na
izhod ojačevalnika pH,
adc_start_conversion(0);
Vrednost AD-pretvorbe se nato priredi spremenljivki adc_vrednost, zatem pa se izračuna
dejanska (ampak 10-krat večja) vrednost pH po enačbi (6.8) in se priredi spremenljivki z
imenom ph, ki je celo številčni tip (integer).
int adc_vrednost=(adc_value);
int ph= (94-(adc_vrednost/22));
int izmen;
izmen=izmen+1;
if (izmen > 3)
izmen=1;
64
Slika 6.17: Diagram poteka števca, ki določi, katera veličina se bo poslala v trenutnem ciklu
Nato se nominalna vrednost ph pretvori v niz
itoa( ph, buffer, 10);
Zatem se začne pošiljanje. Najprej se pošlje začetni znak za pH »:«, za njim vrednost pH kot
niz in za njo še končni znak za pH ».«.
uart_puts(":");
uart_puts(buffer);
uart_puts(".");
izmen=1
izmen=2
AD pretvorba, skaliranje
in pošiljanje pH vrednosti
AD pretvorba, skaliranje
in pošiljanje redoks
potenciala
pošiljanje temperature
ne
ne
da
da
65
Slika 6.18: Koda mikrokrmilnika za zajem preko ADC, pretvorbo in ustrezno pošiljanje
vrednosti pH
Mobilna naprava od mikrokrmilnika (preko BT-modula) dobiva različne nize znakov (za pH,
za potencial redoks, za temperaturo) in znake (za status črpalke in 6-potnega ventila), da ve, v
katerem nizu so vrednosti katerih veličin, mora preverjati nize za začetni in končni znak. Tako
za pH preverja, če ima niz znak »:« in znak ».« (vsebovati mora oba, zato vidimo v kodi
logični in (&&). Seveda se ti dodatni znaki ne izpišejo na zaslonu mobilne naprave, zato jih je
treba iz niza znakov (odrezati) odstraniti, preden niz (string) izpišemo. V kodi na sliki 6.19
vidimo ukaze za brisanje začetnega in končnega znaka v nizu.
Slika 6.19: Koda mobilne naprave za preverjanje, če je poslani niz niz pH in odstranjevanje
začetnega in končnega znaka
if(izmen==1)
adc_start_conversion(0);
int adc_vrednost=(adc_value);
int ph= (94-(adc_vrednost/22));
itoa( ph, buffer, 10);
uart_puts(":");
uart_puts(buffer);
uart_puts(".");
if ((readMessage.contains(":")) && (readMessage.contains("."))) String str = readMessage.toString().trim();
if(str.length()!=0) str = str.substring( 0, str.length() - 1 ); str = str.substring(1);
66
Če bi vrednosti pH slučajno postale večje ali manjše, kot je merilno območje (manj kot 4,9 ali
več kot 9,2), mora program na to opozoriti. Del programa za preverjanje zgornje in spodnje
meje pH ter izpisa vrednosti pH vidimo na sliki 6.20. Meje merilnega območja preverjata dva
pogojna stavka if, ki preverjata, če so vrednosti prišle do roba merilnega območja. Da pa
lahko niz, ki predstavlja vrednost pH, primerjamo, ga moramo najprej pretvoriti v število, ker
je vrednost pH zaenkrat še desetkrat večja, ni decimalne vejice, zato lahko niz pretvorimo v
celoštevilčni tip (integer). Za spodnjo mejo vrednosti pH, ki je 4,9, se tako preverja, če je
število manjše od 49. Za zgornjo mejo vrednosti pH, ki je 9,2, pa se preverja, če je število
večje od 92.
Če je pH pod spodnjo mejo merilnega območja, se na delu zaslona, ki prikazuje pH, izpiše
»pH<4,9«.
Če je pH nad zgornjo mejo merilnega območja, se na delu zaslona, ki prikazuje pH, izpiše
»pH>9,2«.
Če pa je pH znotraj merilnega območja, se na drugo mesto v nizu (ki ima že odrezan začetni
in končni znak), vstavi decimalna vejica. Tako imamo sedaj dejansko vrednost pH na eno
decimalko. Na delu zaslona, ki prikazuje pH, se izpiše »ph:« in dejanska vrednost pH z eno
decimalko.
Slika 6.20: Koda mobilne naprave za izpis vrednosti pH
Primer, ko je pH = 7,8 :
int stevilo=Integer.parseInt(str.replaceAll("[\\D]","")); if(stevilo>92) text.setText("pH>9,2"); else if(stevilo<49) text.setText("pH<4,9"); else String x=str; x = x.substring(0, 1) + "," + x.substring(1, x.length()); text.setText("ph: "+ x);
;
67
Mikrokrmilnik pošlje vrednost pH 10-krat večjo in z dvema ločilnima znakoma: ;78. (Tabela
6.1)
Tabela 6.1: Niz za pH, poslan z mikrokrmilnika
znak:1 znak:2 znak:3 znak:4
; 7 8 .
Mobilna naprava odreže prvi in zadnji znak, tako dobi vrednost 78, nato vstavi decimalno
vejico med prvi in drugi znak (na 2. mesto niza), tako dobimo vrednost 7,8. Preden jo izpiše,
pa še doda tekst »pH: «, izpis na zaslonu je tako: pH: 7,8
6.3. Merjenje potenciala redoks
Pri vodah v bazenih nas potencial redoks zanima v območuju od 630 mV do 850 mV.
Analogno-digitalni pretvornik v mikrokrmilniku ima za referenčno napetost napetost 2,56 V.
To pomeni, da smo morali narediti ojačevalnik, ki bo (linearno) ojačil vhodno napetost od 630
mV do 850 mV, na napetost na izhodu od 0 V do 2,56 V.
Za ojačenje je bil najbolj primeren operacijski ojačevalnik. Izbrali smo operacijski
ojačevalnik LM 358, saj je cenovno ugoden in za napajanje potrebuje le +5 V. Operacijski
ojačevalnik je vezan v neinvertirajočo vezavo.
Napetost na negativnem vhodu operacijskega ojačevalnika nam služi kot (»offset«/
»trashold«) meja, ki nam pove, kdaj bo ojačevalnik začel ojačevati.
Shema ojačevalnika potenciala redoks je prikazana na sliki 6.21. Upori R5, R6 in R7
sestavljajo delilnik napetosti. Delilnik napetosti je priklopljen na Vpoz (5 V) in na maso.
Upora R6 in R7 sta trimerja, R6 je za grobo nastavitev napetosti, R7 pa za fino nastavitev. S
pravo nastavitvijo trimerjev dosežemo ustrezen padec napetosti, tako da na uporu R7 dobimo
želeno napetost, ki jo »peljemo« na negativni vhod operacijskega ojačevalnika. Ta napetost je
630 mV oziroma malo manj (620 mV), tako da so meritve pri 630 mV v MO.
68
Slika 6.21: Shema ojačevalnika potenciala redoks
Ojačenje
Ojačevalnik mora ojačiti napetost s sonde redoks (ta se giblje od 630 do 850 mV) na napetost
za analogno digitalni konverter (od 0 do 2,56 V).
Tako lahko po enačbi (6.9) izračunamo potrebno ojačenje ojačevalnika:
Vhodna napetost v enačbi (6.9) je 220 mV, saj je 850 mV -630 mV = 220 mV.
Ojačenje = 𝑈𝑖𝑧ℎ𝑜𝑑𝑛𝑎
𝑈𝑣ℎ𝑜𝑑𝑛𝑎 =
2,56
220•10−3= 11,63
6.9
Ker želimo rahlo razširiti merilno območje, zato da 630 mV ni robna vrednost, se bi v enačbi
(6.9) delilo z malo več kot 220 • 10−3, tako bi ojačenje bilo manj kot 11,63. R3 je trimer, s
katerim nastavljamo ojačenje.
Vsi izračuni so samo zato, da smo ugotovili vrednosti elementov, točne dejanske vrednosti pa
so umerjene s trimerji. To smo naredili tako, da smo opazovali napetost na vhodu
ojačevalnika na katerega je bila priključena napetost z nastavljivega laboratorijskega
69
napajalnika, ki je simulirala sondo in prikaz na mobilni napravi. Na mobilni napravi je v tej
fazi bila prikazana vrednost 10-bitne AD-pretvorbe, brez skaliranja. Trimerje smo nastavljali
tako, da so se ujemale vrednosti napetosti na vhodu ojačevalnika in vrednosti, prikazane na
mobilni napravi. Ujemanje vrednosti smo najbolj opazovali pri vrednosti 0 in 1024, saj sta ti
vrednosti minimum in maksimum, potek vrednosti med njima pa je linearen.
Trimerje smo nastavili tako, da smo na vhod ojačevalnika priključili napetost 620 mV, nato
nastavljali trimerje in opazovali, kdaj se na mobilni napravi začne število 0 spreminjati v
večja števila. Nato smo na vhod ojačevalnika priključili napetost 850 mV in nastavljali
trimerje in opazovali kdaj se na mobilni napravi pojavi vrednost 1024.
Primer nastavitve napetosti, ki je speljana na negativni vhod operacijskega ojačevalnika
(trimer R6 in R7) in ojačenja (trimer R3), vidimo na sliki 6.22.
Slika 6.22: Shema ojačevalnika potenciala redoks z nastavljenimi trimerji za ojačenje in za
napetost na negativni vhod
Ko imamo nastavljene trimerje, lahko po enačbi (6.10) izračunamo ojačenje.
70
Ojačenje = 𝑈𝑖𝑧ℎ𝑜𝑑𝑛𝑎
𝑈𝑣ℎ𝑜𝑑𝑛𝑎 =
𝑅2+𝑅3+𝑅4+𝑅1
𝑅1 =
47𝑘+20𝑘+20𝑘+10𝑘
10𝑘= 9,7
6.10
Čeprav že z meritev poznamo napetost, ki gre na negativni vhod operacijskega ojačevalnika
(620 mV), jo lahko še izračunamo, upoštevajoč nastavitev trimerjev. Razmerje upornosti v
delilniku napetosti je razvidno iz enačbe:
4,7 kΩ + 2 kΩ : 1 k Ω = 6,7 k Ω : 1 kΩ
6.11
Celotni delilnik napetosti je priključen na napetost 5 V in ima (celotno) upornost 7,7kΩ
(enačba 6.12)
4,7 kΩ + 2 kΩ + 1 k Ω = 7,7 kΩ.
6.12
R7 ima upornost 1 kΩ, tako lahko napetost na uporu R7 izračunamo po enačbi
𝑈𝑅7 =5
7,7= 0,649 𝑉 = 649 𝑚𝑉
6.13
Na sliki 6.23 vidimo, da ojačevalnik značne ojačevati prej kot pri 649 mV, in sicer pri 620
mV. Do napake v izračunu je najverjetneje prišlo zato, ker smo v enačbi (slika 6.13)
predpostavili, da imamo napajanje natančno 5 V, v resnici pa je bilo malo manj.
Zaradi takšnih odstopanj je bilo pametno, da smo vezje umerili z trimerji, ne pa uporabili le
elemente z izračunanimi vrednostmi.
Skaliranje
Na vhodu in izhodu ojačevalnika smo imeli merilna inštrumenta (V-meter). Ko smo
ojačevalnik nastavili s trimerji (in potenciometrom), smo izmerili, da (pri nastavitvah, kot so
na sliki 6.22) začne ojačevati pri 620 mV vhodne napetosti in doseže maksimum (2,56 V
napetosti na izhodu) pri 858 mV vhodne napetosti (slika 6.23).
71
Slika 6.23: Grafični prikaz meritev potrebnih za skaliranje redoks potenciala
Po enačbi (6.14) smo izračunali območje, ki ga ojačevalnik ojačuje:
858 mV – 620 mV = 238 mV
6.14
Po enačbi (6.15) smo izračunali faktor za skaliranje:
x = 238
1024= 0,232
6.15
Tako smo dobili celotno enačbo (6.16):
Potencial redoks = ((ADC_vrednost • 23 ) / 100 ) + 620
6.16
ADC-vrednost je vrednost analogno-digitalne pretvorbe.
V enačbi (6.16) nismo množili z 0,238, temveč s 23, in nato delili s 100, tako smo lahko delali
s celoštevilčno spremenljivko tipa integer (int).
Na sliki 6.24 je prikazana koda mikrokrmilnika za skaliranje in pošiljanje vrednosti potenciala
redoks. Najprej vidimo pogojni stavek else if, ki preverja, če je za pošiljanje vrednosti mobilni
napravi na vrsti redoks potencial (slika 6.17). Če je, se izvede koda za analogno-digitalno
pretvorbo, skaliranje in pošiljanje vrednosti potenciala redoks.
Najprej se naredi analogno-digitalna pretvorba napetosti na priključku, ki je priklopljen na
izhod ojačevalnika potenciala redoks,
0
620
0
512
1,28 2,56
858
1024
Uizh
Uvh
ADC
vrednost
72
adc_start_conversion(1);
Vrednost AD-pretvorbe se nato priredi spremenljivki »redoks«, zatem pa se izračuna
dejanska vrednos potenciala redoks po enačbi (6.16) in se priredi spremenljivki z imenom
»redoks2«, ki je celoštevilčni tip (integer).
int klor2 = ((klor*23)/100)+620;
Nato se nominalna vrednost potenciala redoks pretvori v niz.
itoa( klor2, buffer, 10);
Nato se začne pošiljanje. Najprej se pošlje začetni znak za potencial redoks »;«, za njim
vrednost redoks potenciala kot niz in za njo še končni znak za potencial redoks »~«.
Slika 6.24: Koda mikrokrmilnika za analogno-digitalno pretvorbo, skaliranje in pošiljanje
vrednosti potenciala redoks
Mobilna naprava od mikrokrmilnika preko BT modula dobiva različne nize znakov (za pH, za
potencial redoks in za temperaturo) in znake (za status črpalke in 6-potnega ventila). Da lahko
prepozna, v katerem nizu so vrednosti katerih veličin, mora preverjati nize za začetni in
končni znak. Tako za potencial redoks preverja, če ima niz znak »;« in znak »~«, vsebovati
else if (izmen==2)
adc_start_conversion(1);
int redoks=(adc_value);
int redoks2 = ((redoks*23)/100)+620;
itoa( redoks2, buffer, 10);
uart_puts(";");
uart_puts(buffer);
uart_puts("~");
73
mora oba, zato je v kodi logični in (&&). Seveda se ti dodatni znaki ne izpišejo na zaslonu
mobilne naprave, zato jih je treba iz niza znakov odstraniti, preden niz izpišemo. V kodi na
sliki 6.25 vidimo ukaze za brisanje začetnega in končnega znaka v nizu.
Slika 6.25: Koda mobilne naprave za preverjanje, če je poslani niz niz potenciala redoks in
odstranjevanje začetnega in končnega znaka
Če bi vrednost potenciala redoks slučajno postala večja ali manjša, kot je merilno območje, to
je manj kot 625 mV ali več kot 850 mV, mora program na to opozoriti. Del programa za
preverjanje zgornje in spodnje meje potenciala redoks ter izpisa vrednost potenciala redoks
vidimo na sliki 6.26. Meje merilnega območja preverjata dva pogojna stavka, ki preverjata, če
so vrednosti prišle do roba merilnega območja. Da pa lahko niz, ki predstavlja vrednost
potenciala redoks, primerjamo, ga moramo najprej pretvoriti v število. Niz pretvorimo v
celoštevilčni tip. Za spodnjo mejo vrednosti potenciala redoks, ki je 625 mV, se tako preverja,
če je število manjše od 625. Za zgornjo mejo vrednosti potenciala redoks, ki je 850 mV, pa se
preverja, če je število večje od 850.
Če je redoks potencial pod spodnjo mejo merilnega območja, se na delu zaslona, ki prikazuje
potencial redoks, izpiše »redoks<625«.
Če je potencial redoks nad zgornjo mejo merilnega območja, se na delu zaslona, ki prikazuje
potencial redoks, izpiše »redoks>850«.
Če je potencial redoks znotraj merilnega območja, pa se na delu zaslona, ki prikazuje
potencial redoks, izpiše »redoks:« in dejanska vrednost potenciala redoks.
if ((readMessage.contains(";"))&&(readMessage.contains("~"))) String str = readMessage.toString().trim();
if(str.length()!=0) str = str.substring( 0, str.length() - 1 );
74
Slika 6.26: Koda mobilne naprave za izpis vrednosti potenciala redoks
6.4. Merjenje temperature
Za merjenje temperature smo uporabili digitalni temperaturni senzor DS18B20, saj obstaja
vodotesna različica, je cenovno ugoden (6 EUR) in ima dovolj veliko temperaturno območje.
Pri testiranju prototipa smo uporabljali navaden temperaturni senzor zaradi možnosti takojšnje
nabave, delovanje vodoodpornega je popolnoma enako, tako da se pozneje samo zamenjata.
Glavne značilnosti temperaturnega senzorja DS18B20:
Komunikacija preko enožičnega vodila (1-wire), senzor z mikrokrmilnikom
komunicira po eni liniji. Da lahko po eni liniji pošiljamo podatke (v obe smeri),
potrebujeta senzor in mikrokrmilnik tudi skupno maso. Mikrokrmilnik je vedno
gospodar (master), senzor ali več senzorjev pa so vedno sužnji (slave).
Vsak senzor DS18B20 ima 64-bitno edinstveno serijsko številko, shranjeno v svojem
pomnilniku ROM (Read-only memory), zato, da lahko na isto linijo oz. vodilo
povežemo več senzorjev, saj 64-bitno serijsko številko uporabljamo za naslavljanje.
Ne potrebuje nobenih dodatnih zunanjih komponent, razen enega dvižnega upora.
Napajalna napetost je od 3,0 V do 5,5 V, napajan pa je lahko tudi preko podatkovne
linije.
Merilno območje temperature je od -55 °C do +125 °C.
Natančnost meritev je ±0.5 °C v območju od -10 °C do +85 °C.
Uporabnik lahko z bit-oma R1 in R0 izbira resolucijo temperature, vendar večja kot je
resolucija, daljši je čas pretvorbe (tabela 6.2).
int stevilo=Integer.parseInt(str.replaceAll("[\\D]","")); if(stevilo>850) text2.setText("klor>850"); else if(stevilo<625) text2.setText("klor<625"); else text2.setText("klor" + str);
;
75
Tabela 6.2: Resolucija temperature in čas pretvorbe
R1 R0 Resolucija v
BIT-ih
Maksimalen čas pretvorbe
0 0 9 93.75ms (tCONV/8)
0 1 10 187.5ms (tCONV/4)
1 0 11 375ms (tCONV/2)
1 1 12 750ms (tCONV)
Bit-a R1 in R0 sta 6. in 5. bit konfiguracijskega registra (Configuration Register),
ostalih bit-ov v tem registru ne moremo spreminjati, saj jih potrebuje senzor za interno
uporabo (slika 6.27).
Slika 6.27: Konfiguracijski register
Možnost alarma: uporabnik lahko v senzor shrani spodnjo in zgornjo vrednost alarma,
tako aplikacijam, ki niso narejene za zajemanje temperature, ampak so narejene za
zaznavanje, če temperatura preseže določeno vrednost, ni potrebno kontinuirano brati
temperature, saj senzor sproži »alarm«, ko je vrednost, ki jo določimo, presežena.
Vrednosti Th (alarm high trigger register) in Tl (alarm low trigger register) EEPROM-
ov (Electrically Erasable Programmable Read-Only Memory) se shranijo v beležko
(scratchpad) pomnilnik. Beležka je pomnilnik SRAM (Static Random Access
Memory). Poleg Th in Tl se v pomnilnik beležka shranijo tudi vrednosti
konfiguracijskega registra.
Na sliki 6.28 lahko vidimo posamezne zloge pomnilnika beležka:
Zloga 0 in 1 sta namenjena hranjenju temperature,
v zlogu 0 se hranijo nižje uteženi biti (LSB – Least Significant Byte), v zlog-u 1 pa
višje uteženi biti (MSB – Most Significant Byte).
Ko senzor pošilja podatek o temperaturi mikrokrmilniku, začne z najmanj uteženim
bit-om in konča z najvišje uteženim bitom.
76
Zloga 2 in 3 sta namenjena hranjenju alarmnih vrednosti Th in Tl.
Zlog 4 je namenjen hranjenju vrednosti Configuration registra.
Zlogi 5, 6 in 7 so rezervirani za senzor.
Zlog 8 za CRC (Cyclic Redundancy Check) kodo za zaznavanje napak.
Slika 6.28: Beležka
Enožično vodilo (protokol)
Najprej mikrokrmilnik kot gospodar (master) izvede reset (oz. inicializacijo) enožičnega
vodila. To naredi tako, da postavi podatkovno linijo na nizek nivo za 480 μs. Počaka 70 μs,
nato pa vzorči podatkovno linijo. Če je vrednost vzorčenja 0, pomeni, da je senzor (ali kakšna
druga naprava) prisoten na vodilu. Nato sledi zakasnitev 410 μs. Nato mora mikrokrmilnik
poslati ukaz, da sproži branje edinstvene 64-bitne kode senzorja (naprave).
Primeri ukazov za DS18B20:
Search ROM je ukaz za pridobitev edinstvene 64-bitne kode senzorja, če je na vodilu
več senzorjev (naprav). SEARCH ROM ukaz = [F0h].
Read ROM je ukaz za pridobitev edinstvene 64-bitne kode senzorja, če je na vodilu en
sam senzor (naprava). Ukaz READ ROM = [33h].
77
Alarm Search je ukaz za pridobitev edinstvene 64-bitne kode senzorja, pri katerem se
je sprožil alarm pri zadnji pretvorbi temperature (zaradi presežene vrednosti Th ali Tl).
Ukaz ALARM SEARCH = [ECh].
Match ROM je ukaz, s katerim naslavljamo senzor z edinstveno kodo. MATCH ROM
ukaz = [55h].
Ko želi mikrokrmilnik komunicirati s senzorjem, na vodilo pošlje njegov edinstven 64-bitni
naslov. Sedaj mikrokrmilnik komunicira samo z naslovljenim senzorjem, ostali se ne odzivajo
na podatke na liniji. Ko mikrokrmilnik ponovno resetira omrežje, so zopet vsi senzorji (oz.
naprave) v stanju pripravljenosti na klic mikrokrmilnika.
Branje bita se izvede tako, da mikrokrmilnik podatkovno linijo postavi na nizek nivo za 6 μs
in sprosti vodilo, počaka 9 μs ter nato vzorči podatkovno linijo.
Da senzorju pošljemo bit z vrednostjo 1, mora mikrokrmilnik (master) postaviti podatkovno
linijo na nizek nivo za 6μs, zatem pa za 54 μs na visoki nivo.
Da senzorju pošljemo bit z vrednostjo 0, mora mikrokrmilnik postaviti podatkovno linijo na
nizek nivo za 50 μs, zatem pa na visok nivo za 10 μs.
Tako je za vsak bit predviden časovni okvir (reža) 60 μs, to je standardni časovni okvir,
obstaja tudi časovni okvir »overdrive«, ta traja le 8 μs.
Primer pošiljanja bita 1 in 0 v časovnem okvirju 60 μs prikazuje slika 6.29.
Slika 6.29: Logična 1 in logična 0 pri standardnem protokolu enožičnega vodila
78
Ob vsakem začetku pošiljanja bita pri padajoči fronti signala se zažene monostabilni
multivibrator v senzorju (suženjski napravi) in izvede se sinhronizacija, zato ne potrebujemo
sistemske ure za povezovanje senzorjev (naprav) na enožično vodilo [8].
Ukazi za senzor DS18B20
Za nas so pomembni le trije ukazi:
»Convert temperature« je ukaz, ki se uporabi, da senzor izmeri temperaturo.
CONVERT T ukaz = [44h].
»Read scratchpad« je ukaz, ki se uporabi za branje vrednosti iz pomnilnika beležka.
Ukaz READ SCRATCHPAD = [BEh].
»Write scratchpad« je ukaz, ki se uporabi, če želimo vpisovati vrednosti v pomnilnik
beležka. Ukaz WRITE SCRATCHPAD = [4Eh].
Za pridobitev vrednosti temperature s senzorja, moramo izvesti tri korake:
1. Inicializacija, je že opisana na začetku opisa enožičnega vodila (protokola) kot reset,
ne kot inicializacija.
2. Ukaz ROM (ROM Command), opisani so pod naslovom enožično vodilo (protokol),
kot primeri ukazov za DS18B20, to so Search ROM, Read ROM itd.
3. Funkcijski ukaz za senzor DS18B20 (DS18B20 Function Command), opisani zgoraj,
to so Convert t itd.
Za pridobivanje vrednosti temperature s senzorja z mikrokrmilnikom, smo uporabili že
obstoječi program za senzor DS18B20 in ga priredili za naše potrebe. Tako smo že imeli
funkcijo, ki nam prebere zloga 0 in 1 s pomnilnika beležka in nato višje utežene bite množi ali
naredi logične premike ter prišteje nižje utežene bite, da dobimo vrednost temperature.
Zloga 0 in 1 s pomnilnika beležka sta dva 8-bitna registra (skupaj 16 bitov), biti, ki ostanejo
(tudi pri najvišji resuluciji temperature se porabi le 12 bitov), so predznak. Predznak nam
pove, če je nominalna vrednost temperature vrednost nad ničlo + ali pod ničlo -. Za pozitivne
vrednosti temperature so ti biti 0, za negativne vrednosti pa so ti biti postavljeni na 1.
79
V kolikor izberemo manjšo resolucijo temperature kot 12 bitov, so določeni nižjeuteženi biti
neveljavni:
pri 11-bit resoluciji, je bit 0 nedefiniran,
pri 10-bit resoluciji, sta bita 1 in 0 nedefinirana,
pri 9-bit resoluciji, so biti 2, 1 in 0 nedefinirani.
Na sliki 6.30 je prikazan temperaturni register, pri čemer S (sign) predstavlja bite, ki
predstavljajo predznak.
Slika 6.30: Temperaturni register senzorja DS18B20
Simulacija
Ker je temperaturni senzor DS18B20 vsebovan v simulatorju ISIS proteus, smo delovanje
kode mikrokrmilnika najprej preverili v simulatorju. Dq priključek temperaturnega senzorja
smo povezali na 28. priključek mikrokrmilnika (PC5), to je naše enožično vodilo. Napajalni
priključek senzorja Vdd (oziroma v simulatorju označen Vcc) smo povezali na napajalno
napetost + 5 V in priključek GND (ground) povezali na maso. Med linjo enožičnega vodila
(Dq) in napajalno linijo (Vcc) smo povezali 4,7 kΩ dvižni upor. Povezava senzorja na
mikrokrmilnik je prikazana na sliki 6.31.
Ob zagonu simulacije, smo opazili, da nam pošiljanje takšnega niza temperature na USART v
Virtual Terminalu izpiše temperaturo s predznakom, z decimalno piko, s štirimi decimalkami
ter s presledkom in znakom »C« (celzija). Voda v bazenu ni nikoli pod ničlo (saj bi zmrznila),
zato je pošiljanje predznaka redundantno. Ker ima senzor za merjenje temperature natančnost
le do ±0.5 °C, je tudi izpis decimalk nepotreben. Znak °C lahko dodamo v izpis na mobilni
napravi, zato nam tudi znaka C (in presledka) ni potrebno pošiljati preko USART-a in BT.
80
Slika 6.31: Povezava temperaturnega senzorja DS18B20 na mikrokrmilnik
Na sliki 6.32 je temperaturni senzor DS18B20 označen z U2. V simulaciji je na elementu, ki
simulira temperaturni senzor, tipka za povečevanje temperature, tipka za zmanjševanje
temperature in zaslon, ki nam prikaže, kakšno temperaturo trenutno simuliramo. V tem
primeru smo simulirali 32,0 °C.
Na sliki 6.32 je tudi Virtual Terminal, nanj je mikrokrmilnik preko USART-a poslal: vrednost
pH, vrednost redoks potenciala, temperaturo in nato zopet vrednost pH itd., dokler nismo
ustavili simulacije. Razvidno je, da je vrednost pH 10-krat večja in opremljena z začetnim
znakom »:« in končnim znakom ».«, tako kot smo opisali v poglavju 6.2. Razvidno je, da je
vrednost redoks potenciala opremljena z začetnim znakom »;« in končnim znakom »~«, kot
smo opisali v poglavju 6.3. Same vrednosti pH (94) in potenciala redoks (849) so odvisne od
nastavitev potenciometrov RV1 in RV2 (slika 6.31), saj le-ta vplivata na napetosti, ki so
priključene na ADC mikrokrmilnika. S spreminjanjem RV1 in RV2 smo simulirali različne
napetosti, ki bi jih ustvarili sondi. V oknu virtual terminala je razviden še prikaz temperature.
Temperatura je prikazana s predznakom, decimalno piko, štirimi decimalkami, presledkom in
znakom »C«.
81
Slika 6.32: Primer vrednosti, ki jih mikrokrmilnik pošlje preko usart-a (simulacija v ISIS
Proteus)
Ker smo želeli preko BT pošiljati le niz, ki predstavlja prebrano temperaturo, nismo pa želeli
pošiljati še predznaka, decimalne pike, štiri decimalke, presledka in znaka »C«, smo iz
celotnega niza, kot ga dobimo z funkcijo therm_read_temperature (tabela 6.3) vzeli le 2. in 3.
znak. Primer v tabeli 6.3 je za temperaturo 32 °C.
Tabela 6.3: Temperaturni niz, ki ga dobimo z uporabo funkcije therm_read_temperature
1.znak 2.znak 3.znak 4.znak 5.znak 6.znak 7.znak 8.znak 9.znak 10.znak
+ 3 2 . 0 0 0 0 C
Na sliki 6.33 je prikazana koda mikrokrmilnika za zajem temperature in pošiljanje vrednosti
temperature (preko usart-a in preko BT) na mobilno napravo.
Začne se s stavkom else, saj, če v trenutnem ciklu izvajanja kode ni za pošiljanje na vrsti pH
ali potencial redoks, potem je na vrsti temperatura, kot je razvidno z diagrama na sliki 6.17.
82
Za tem je razvidna funkcija therm_read_temperature z argumentom x, ko se le-ta izvede,
priredi spremenljivki x vrednost temperature (s predznakom, štirimi decimalkami, presledkom
in znakom »C« ). Zatem znaku (char) zn1 priredimo vrednost znaka na 2. mestu niza x. Zatem
znaku (char) zn2 priredimo vrednost znaka na 3. mestu niza x.
Nato je razvidno pošiljanje znakov preko usart-a. Najprej se pošlje začetni znak za pošiljanje
temperature »t«, nato dva znaka (zn1 in zn2), ki predstavljata vrednost temperature in zatem
še končni znak za pošiljanje temperature »T«. (Kot smo že omenili v prejšnjih poglavjih,
začetni in končni znak potrebujemo zato, da mobilna naprava prepozna, kdaj se pošiljajo
vrednosti, katere veličine, in zato da mobilna naprava prepozna, kdaj se prenos določene
veličine začne in kdaj konča).
Slika 6.33: Koda mikrokrmilnika za zajem in pošiljanje temperature
Na sliki 6.34 je prikazana simulacija novega niza temperature, ki ga pošljemo preko usart in
BT-modula mobilni napravi. Kot je razvidno s slike 6.34, smo v simulatorju imeli nastavljeno
temperaturo 32 °C. Kot je razvidno z Virtual Terminala, je sedaj niz vrednosti temperature
opremljen z začetnim znakom »t« in končnim znakom »T«, sama vrednost temperature pa je
le dvomestno število brez predznaka, v tem primeru »32«.
else
therm_read_temperature(x);
char zn1=x[1];
char zn2=x[2];
uart_puts("t");
uart_putc(zn1);
uart_putc(zn2);
uart_puts("T");
83
Slika 6.34: Primer novega niza za temperaturo, ki se pošlje preko usart-a (simulacija v ISIS
Proteus)
Ker se je simulacija izvajala pravilno, smo senzor (in 4,7 kΩ dvižni upor) povezali na
mikrokrmilnik (enako kot v simulatorju). Razpored priključkov senzorja DS18B20 v ohišju
TO-92 je razviden s slike 6.35. Vse je delovalo skladno s pričakovanji.
Slika 6.35: Razpored priključkov senzorja DS18B20 v TO-92 ohišju
84
Mobilna naprava od mikrokrmilnika preko BT-modula dobiva različne nize znakov in znake.
Nizi znakov predstavljajo vrednosti: pH, potencial redoks in temperaturo. Znaki pa: status
črpalke in 6-potnega ventila. Da mobilna naprava prepozna, v katerem nizu so vrednosti
katerih veličin, mora preverjati nize za začetni in končni znak. Tako za vrednost temperature
preverja, če ima niz začetni znak za temperaturo »t« in končni znak za temperaturo »T«.
Vsebovati mora oba, zato vidimo v kodi logični in (&&) med obema pogojnima stavkoma.
Seveda se ti dodatni znaki ne izpišejo na zaslonu mobilne naprave, zato jih je treba iz niza
znakov odstraniti, preden niz izpišemo. V kodi na sliki 6.36 so prikazani ukazi za brisanje
začetnega in končnega znaka v nizu. Nato je prikazana koda za izpis temperature. Na delu
zaslona, ki prikazuje temperaturo, se izpiše »temp:« in nato dejanska vrednost temperature,
izmerjene s senzorjem, brez predznaka in decimalk.
Slika 6.36: Koda mobilne naprave za zaznavo poslanega niza za temperaturo in izpis
temperature
Slika 6.37 prikazuje aplikacijo STROJNICA naloženo na mobilni telefon Samsung Galaxy
Trend Lite GT-S7390 z operacijskim sistemom Android 4.1.2.
Na vrhu zaslona so izpisane vrednosti temperature, redoks potenciala in vrednosti pH. Spodaj
levo so trije gumbi za krmiljenje črpalke: vklop, časovnik, izklop. Spodaj desno so trije gumbi
za krmiljenje 6-potnega ventila: filtriranje, praznjenje, pranje filtra.
Kot je razvidno s slike 6.37 je oznaka »temperatura« skrajšana v temp in prikazane vrednosti
nimajo enot, razlog za to je, da je tekst na mobilnem telefonu lahko večji, saj uporabnik
aplikacije pozna enote in ima raje večji tekst.
If ((readMessage.contains("t")) && (readMessage.contains("T"))) String str = readMessage.toString().trim(); if(str.length()!=0) str = str.substring( 0, str.length() - 1 ); temperatura.setText("temp:" + str);
85
Slika 6.37: Aplikacija STROJNICA naložena na mobilni telefon
Če bi želeli prikazati še enote, bi le spremnili vsa tri textView polja in po potrebi velikost
pisave (android:textSize). Ker je na zaslonu mobilnega telefona Samsung S7390 (pri tej
velikosti pisave) bilo še dovolj prostora, smo temperaturi dodali enoto °C (slika 6.38).
Slika 6.38: Temperaturi dodali enoto °C
86
7. REZULTATI
V tem poglavju so podani rezultati meritev vrednosti pH, potenciala redoks in temperature.
7.1. Meritev vrednosti pH
Na vhod ojačevalnika za ojačenje napetosti s sonde pH smo priključili nastavljiv
laboratorijski napajalnik s katerim smo simulirali sondo pH. Na vhod ojačevalnika za ojačenje
napetosti s sonde pH smo priključili tudi merilnik napetosti, saj je ta bolj natančen kot
napetost, prikazana na zaslonu laboratorijskega napajalnika. Izmerili smo celotno merilno
območje od -120 mV do +120 mV, torej območje pH od 5 do 9, v enajstih korakih. Ko smo
testirali vrednosti pH manjše od 7, smo na vhodu ojačevalnika pH zamenjali polariteto, saj se
na nastavljivem laboratorijskem napajalniku, ki smo ga uporabljali, ne da nastavljati
negativne napetosti. Tabela 7.1 prikazuje rezultate meritev vrednosti pH. Prvi stolpec
prikazuje vhodno napetost v ojačevalnik pH, to je napetost, ki bi prišla s sonde pH. Drugi
stolpec prikazuje idealni pH, to so matematično izračunane vrednosti pH glede na vhodno
napetost, torej te vrednosti bi bile idealni prikaz vrednosti pH. Tretji stolpec prikazuje
prikazan pH, to so vrednosti pH, ki so se prikazale na zaslonu mobilne naprave (mobilni
telefon z OS Android) v textView-ju za prikaz vrednosti pH v naši aplikaciji. Četrti stolpec
prikazuje absolutno napako. Te vrednosti smo izračunali tako, da smo od vrednosti v stolpcu
»prikazan pH« odšteli vrednosti v stolpcu »idelani pH«. V zadnjem stolpcu vidimo relativno
napako. To so vrednosti absolutnih napak, deljene z vrednostmi iz stolpca »idealni pH« in
množene s sto, da so izražene v odstotkih.
87
Tabela 7.1: Rezultati meritev pH vrednosti
Vhodna U
[mV]
Idealni pH Prikazan pH Absolutna napaka Relativna napaka v %
-122.9 4.95 5.1 0.15 2.99
-59.7 6.01 6 0.00 -0.08
-37.6 6.37 6.4 0.03 0.41
-18.4 6.69 6.6 -0.09 -1.39
-11.9 6.80 6.7 -0.10 -1.49
10.9 7.18 7.1 -0.08 -1.13
58.7 7.98 7.9 -0.08 -0.98
79.8 8.33 8.2 -0.13 -1.56
84 8.40 8.3 -0.10 -1.19
102.7 8.71 8.6 -0.11 -1.28
119.3 8.99 8.9 -0.09 -0.98
7.2. Meritev potenciala redoks
Na vhod ojačevalnika za ojačenje napetosti s sonde redoks smo priklopili nastavljiv
laboratorijski napajalnik, s katerim smo simulirali sondo redoks. Na vhod ojačevalnika za
ojačenje napetosti z sonde redoks smo priključili tudi merilnik napetosti. Izmerili smo celotno
merilno območje od 620 mV do 850 mV. V tabeli 7.2 vidimo v prvem stolpcu vrednosti
vhodne napetosti v ojačevalnik potenciala redoks, to so napetosti, ki bi prišle s sonde redoks.
V drugem stolpcu vidimo vrednosti potenciala redoks ki so bile prikazane na zaslonu mobilne
naprave v textView-ju za prikaz vrednosti potenciala redoks v naši aplikaciji. V tretjem
stolpcu vidimo absolutno napako. Te vrednosti smo izračunali tako, da smo od vrednosti iz
stolpca »Prikazana U« odšteli vrednosti iz stolpca »vhodna U«. V zadnjem stolpcu je
prikazana relativna napaka. To so vrednosti absolutnih napak deljene z vrednostmi iz stolpca
»vhodna U« in množene s sto, da so izražene v odstotkih.
88
Tabela 7.2: Rezultati meritev redoks potenciala
Vhodna U [mV] Prikazana U [mV] Absolutna
napaka [mV]
Relativna napaka
[%]
620 620 0 0.00
650 649 -1 -0.15
693 690 -3 -0.43
732 728 -4 -0.55
755 751 -4 -0.53
796 792 -4 -0.50
817 811 -6 -0.73
842 837 -5 -0.59
851 846 -5 -0.59
7.3. Meritev temperature
Senzor smo imeli na sobni temperaturi. V naši aplikaciji na mobilni napravi je bila prikazana
temperatura 23 °C, to se je ujemalo s sobno temperaturo, ki smo jo odčitali s živosrebrnega
termometra. Če smo senzor prijeli, smo videli, da se temperatura povečuje, tako smo videli,
da meritev temperature deluje.
Za natančne meritve z več temperaturnimi koraki čakamo vodoodporni senzor, nato pa bomo
dobili rezultate, tako da bomo senzor in digitalni termometer potopili v posodo z vodo. Voda
bo prej v hladilniku, tako da bodo temperature nizke (okoli 4 °C), potem pa jo bomo počasi
segrevali do npr. 80 °C in pri tem po korakih odčitavali vrednosti. Nato bomo te vrednosti
primerjali z vrednostmi, izpisanimi na zaslonu mobilne naprave.
Da pa smo opravili še nekaj meritev z nižjimi in višjimi temperaturami od sobne temperature,
smo izdelali vodoodporni senzor, tako da smo navaden senzor vstavili v cev in ga zalili s
plastiko. Izdelavo vodoodpornega senzorja prikazujejo slike 7.1, 7.2 in 7.3.
89
Slika 7.1: Senzor vstavljen v cevko
Slika 7.2: Cevka s senzorjem zalita s splastiko
V tabeli 7.3 so prikazani rezultati meritev temperature. V prvem stolpcu je prikazana
temperatura odčitana na digitalnem termometru, v drugem stolpcu je temperatura, prikazana
na mobilni napravi, v tretjem stolpcu je prikazana absolutna napaka in v zadnjem relativna
napaka.
90
Slika 7.3: Cevka s senzorjem povita z izolirnim trakom in izolirana s termo skrčljivo cevko
Tabela 7.3: Rezultati meritev temperature
Odčitana
temperatura [°C]
Prikazana
temperatura[°C]
Absolutna
napaka [°C]
Relativna napaka
[%]
6.20 6 -0.20 -3.22
15.50 15 -0.50 -3.22
35.20 35 -0.20 -0.56
Meritev temperature je delovala skladno z pričakovanji. Ker je senzor na mikrokrmilnik
povezan digitalno brez posebnih elementov, lahko predpostavimo, da bi morala biti točnost
takšna, kot jo navaja proizvajalec senzorja, torej ±0.5 °C.
91
8. SKLEP
Cilj magistrske naloge je bil izdelati prototip strojne in programske opreme, ki bo preko
brezžičnega vmesnika omogočala uporabniku, da lahko preko aplikacije na mobilni napravi
krmili črpalko in 6-potni ventil v strojnici bazena, obenem pa iz strojnice pridobiva podatke o
temperaturi vode, njeni vrednosti pH in vrednosti potenciala redoks. Ta cilj smo dosegli, saj
se krmiljenje črpalke in šest-potnega ventila z uporabo aplikacije na mobilnem telefonu izvaja
skladno z zastavljenimi cilji. Prav tako iz strojnice uspešno dobivamo podatke o temperaturi
vode, njeni vrednosti pH in vrednosti potenciala redoks in jih prikazujemo v okviru aplikacije.
Rezulati meritev so potrdili, da je točnost in natančnost teh vrednosti dovolj dobra. Saj so
vrednosti meritev pH in potenciala redoks dovolj točne in natančne, da uporabnik ve kdaj
mora uporabiti kemikalije za regulacijo kislosti in bazičnosti vode in/ali sredstvo za
dezinfekcijo vode (klor). Najmanj natančna od vseh meritev je bila meritev temperature z
pogreškom 0,5 °C, kar pa je za meitev temperature bazenske vode še sprejemljivo. Če bi
želeli natančneje meriti temperaturo vode bi morali uporabiti drug temperaturni senzor.
V prihodnje bi lahko izdelali tiskanino, saj je celoten prototip narejen na ločenih
eksperimentalnih ploščicah (vezje mikrokrmilnika, vezje ojačevalnika pH, vezje ojačevalnika
potenciala redoks, vezje z releji), ki imajo konektorje in so med seboj povezane z žicami.
Če bi se vezje izdelovalo v večjem številu, bi lahko raziskali možnost uporabe cenejšega
mikrokrmilnika. Cena Atmega8 v DIP-ohišju je od 3 do 4 EUR pri nakupu enega samega
kosa. Prav tako bi bilo ceneje, da bi za krmiljenje tipk 6-potnega ventila za element, ki
omogoča krmiljenje in galvansko ločitev, uporabili optosklopnike namesto relejev.
Lahko bi uporabili cenejši BT-modul, ki bi deloval le na 3,3 V. Za razvoj prototipa smo
potrebovali takega, ki ima možnost delovanja na 5 V, saj je mikrokrmilnik moral delovati na 5
V v fazi testiranja, v kateri smo uporabili alfanumerični zaslon LCD, ki ga je potrebno krmiliti
s signali 5 V.
Čeprav je napetost na sondi pH v okolici vrednosti pH = 7 v okolju, v katerem nas pH pri
bazenskih vodah zanima (od 5 do 9) zelo malo temperaturno odvisna in tudi temperatura
bazenskih vod niha le za nekaj stopinj, bi lahko vseeno v enačbi za izračun vrednosti pH
92
upoštevali temperaturo in tako naredili temperaturno kompenzacijo. To ne bi podražilo
izdelave, saj temperaturo že tako merimo. Zaenkrat tega nismo storili, ker bi vpliv bil tako
majhen, da ni bilo smiselno.
Največja izboljšava pa bi bila, da bi uporabnikom, ki uporabljajo tekoče kemikalije za
vplivanje na pH in potencial redoks vode, omogočali doziranje kemikalij. To bi naredili tako,
da bi dodali vezju z releji še dva releja za krmiljenje dveh motorčkov črpalk. Ti črpalki bi bili
krmiljeni s preprostima histereznima zankama, napisanima v kodi mikrokrmilnika, ena za pH,
druga za potencial redoks. Vrednost, na katero mora priti pH ali potencial redoks, da se vklopi
črpalka za kemikalije, bi lahko bila določena v mikrokrmilniku, še bolje pa bi bilo, če bi lahko
uporabnik sam izbral te vrednosti v aplikaciji na mobilni napravi in jih poslal mikrokrmilniku.
93
9. VIRI
[1] Arzenšek, Nejc. Nadgradnja vektorskega merilnika frekvenčnih odzivov: analogno
digitalna pretvorba. Maribor: Fakulteta za elektrotehniko, računalništvo in informatiko
Univerze v Mariboru, 2010
[2] Wikipedija, »Android (operacijski sistem)«. [Elektronski], dostopno na:
http://sl.wikipedia.org/wiki/Android_%28operacijski_sistem%29. [Dostopano: 5. 4.
2015].
[3] Wikipedia, »Bluetooth«. [Elektronski], dostopno na:
https://en.wikipedia.org/wiki/Bluetooth, [Dostopano: 4. 4. 2015].
[4] Atmel, »Datasheet Atmel AVR ATmega8/ATmega8L«. [Elektronski], dostopno na:
http://www.atmel.com/Images/Atmel-2486-8-bit-AVR-microcontroller-
ATmega8_L_datasheet.pdf, [Dostopano: 3. 2. 2015].
[5] Roving networks, »Bluetooth modul«. [Elektronski], dostopno na:
http://www.farnell.com/datasheets/1641068.pdf, [Dostopano: 1. 4. 2015].
[6] Wikipedia, »RS 232«. [Elektronski], dostopno na: http://en.wikipedia.org/wiki/RS-
232, [Dostopano: 2. 4. 2015].
[7] Maxim integrated, »RS-232 Drivers/Receivers«. [Elektronski], dostopno na:
http://datasheets.maximintegrated.com/en/ds/MAX220-MAX249.pdf, [Dostopano: 2.
4. 2015].
[8] Wikipedia, »1-wire«. [Elektronski], dostopno na: http://en.wikipedia.org/wiki/1-Wire,
[Dostopano: 3. 2. 2015].
[9] FRI, »FRI - Android Wiki«. [Elektronski], dostopno na: http://android.fri.uni-
lj.si/index.php/Platforma, [Dostopano: 6. 4. 2015]
[10] Ema-bazeni, »Osnovna oprema bazena«. [Elektronski], dostopno na: http://www.ema-
bazeni.si/osnovna-oprema-bazena, [Dostopano: 1. 2. 2015].
[11] Wikipedija, »Redoks reakcija«. [Elektronski], dostopno na:
https://sl.wikipedia.org/wiki/Redoks_reakcija, [Dostopano: 1. 2. 2015].
94
95
96