Professional Documents
Culture Documents
MATURSKI RAD
Članovi komisije:
1. , predsjednik
2. , član
3. , član
Ocjena:
1. Uvod .................................................................................................................... 1
2. Arduino ................................................................................................................ 2
2.1. Razvojne ploče ................................................................................................................... 2
2.2. Mikrokontroler.................................................................................................................... 3
5. Zaključak ........................................................................................................... 18
6. Literatura ............................................................................................................. 19
1. Uvod
Uređaj Arduino je mikrokontroler koji je u zadnjih nekoliko godina pronašao svoju primjenu
u raznim područjima ljudskog života, ponajviše u Internetu Stvari (engl. Internet of Things). Baš zbog
svoje prilagodljivosti, proširljivosti i programirljivosti Arduino se počeo koristiti u razne svrhe, od
pametnih kuća, daljinskih upravljača, GPS lokatora do mnogih drugih funkcija.
Arduinov hardver je daleko slabiji od hardvera prosječnog osobnog računala, pa mu je za rad potrebna
i manja količina energije. Kako je Arduino često korišten u projektima koji nemaju direktan pristup
električnoj energiji gradske mreže, on može raditi i na bateriji.
Zbog toga je važno posvetiti pažnju optimizaciji i minimalizaciji kod projektiranja sistema, kako bi
se smanjila potrošnja električne energije kao i zahtjevi na hardver. Jedan od načina na koji nam sam
Arduino omogućuje uštedu energije su njegova stanja mirovanja (engl. Sleep Modes) koja će biti
detaljnije opisana i objašnjena u nastavku ovog rada.
1
2. Arduino
2
Razvojna ploča osim mikrokontrolera sadrži i druge sklopove kao što su sklop za programiranje
mikrokontrolera, sklop za napajanje, razne priključke i pinove i mnoge druge.
2.2. Mikrokontroler
Mikrokontroleri jesu središnja komponenta svake Arduino razvojne ploče. Mikrokontroler je maleni
računar u obliku integriranog kruga koji posjeduju vlastitu memoriju, procesor, ulaze i izlaze. Ti
računari su znatno slabija od klasičnih osobnih računara. Dok se kod klasičnih računara takt procesora
kreće u redovima veličine nekoliko GHz, takt procesora mikrokontrolera se kreće od nekoliko MHz
do nekoliko desetaka MHz. Količina memorije mikrokontrolera je također mnogo manja od količine
memorije klasičnog računara te iznosi od nekoliko kB do nekoliko desetaka kB. Iz gore navedenih
karakteristika proizlazi da će i potrošnja energije mikrokontrolera biti manja od one klasičnog
računara što je jedan od razloga njihove široke upotrebe. Mikrokontrolere danas možemo pronaći
gotovo posvuda oko nas, najčešće kao dio ugradbenih računarnskih sistema, primjerice u
3
automobilima, alarmnim sistemima, pametnim kućama, bijeloj tehnici, sistemima za navodnjavanje
i slično.
Pri pokretanju Arduina svi pinovi postavljeni su kao INPUT (ulazni). Izuzetak je digitalni pin13, koji
je definiran kao OUTPUT (izlaz). Razlog tome je što Arduino pri svakom pokretanju pokreće
program bootloader.
INPUT (ulaz) je svaki pin definiran da čita ulazno stanje, npr. foto-otpornik, prekidač, potenciometar
i neki senzori. Stanje pina se određuje tako da mikrokontroler čita napon na pinu. Razlikujemo
analogni i digitalni ulaz. Analogni su, za razliku od digitalnih, spojeni na muliplekser, a svaki od njih
na A/D (analog to digital) konverter.
OUTPUT definiramo izlazne pinove, odnosno izlazni napon. Kao i kod ulaznih razlikujemo digitalne
i analogne pinove. Primjer komponenti i modula koje koristimo kao OUTPUT: LED
diode, buzzer, releji, motori i dr.
4
Slika 4: Digitalni pinovi sa oznakama
Postoje i ploče za proširenje funkcionalnosti, takozvani štitovi (engl. shield). Štitovi se spajaju na
Arduino i najčešće imaju dodatne ulazne ili izlazne priključke kojima se sklopovski dodaju nove
funkcionalnosti. S donje strane štita nalaze se nožice koje su postavljene u jednak raspored kao i
priključci na Arduino ploči, a s gornje strane štita su priključci, također u istom rasporedu. Štit se
spaja na Arduino ploču umetanjem svih njegovih nožica u odgovarajući priključak. Neke od
priključaka će štit možda „rezervirati“ za vlastitu komunikaciju s Arduinom, a ostale će „proslijediti“
na svoje priključke da se ostali uređaji mogu spojiti direktno na njega. Ovim načinom spajanja
dobivamo i mogućnost da spajamo više štitova jednog na drugi i koristima istovremeno, dokle god ti
štitovi ne koriste iste priključke ili koriste protokole koji to dopuštaju.
5
3. Arduino programski jezik
Arduino programski jezik ima sintaksu i jezična pravila identična C++-u. Podržava sve glavne
funkcionalnosti koje podržavaju izvedbe C++-a za mikrokontrolere, međutim postoje dvije ključne
razlike. Prvo, jezici imaju različitu strukturu glavnog programa. C++, kao i C, ima obaveznu „main“
funkciju koja se slijedno izvršava kad program počne s radom i izvršava se dok program ne dođe do
kraja te funkcije. Arduino programi umjesto maina imaju dvije obavezne funkcije: setup i loop.
Sadržaj setup funkcije se izvršava samo jednom i to prilikom reseta ploče.
Loop funkcija će se izvršavati u petlji dokle god je ploča upaljena. Drugu ključnu razliku čine
ugrađene standardne Arduino biblioteke koje nije potrebno dodavati. Te biblioteke pružaju temeljne
funkcionalnosti za rad, pristup interfejsu, analogne priključke i slično.
6
Slika 6: Primjer dodavanja biblioteka
7
Pored standardnog napajanja, može se ostvariti i parazitno napajanje. U tom slučaju se linija za
napajanje kratko spaja sa linijom za uzemljenje, a signalna linija se razdvaja na ulazni pin
mikrokontrolera i preko otpornika na napajanje od 5V. Iako je jako dobra osobina ovog pretvarača
da ima samo tri žice sa ovim se postiže povezivanje samo preko dvije žice. Ovaj metod je opravdan
ukoliko koristimo udaljene senzore, ali i kada ima veći broj senzora. Još jedna izvrsna karakteristika
ovog senzora je ta što je moguće povezivanje više senzora (11 najviše) na jedan pin. Dakle pomoću
parazitnog napajanja dovodi se napajanje na sve senzore i koristi se samo jedna signalna linija a time
i jedan pin na mikrokontroleru. Ovo je omogućeno činjenicom da se svaki DS adresira, odnosno da
unutar 64 bitnog izlaza kojeg šalje postoji njegova adresa. Mikrokontrolerom ispitujemo ulaze,
pregledamo adrese sa kojih su poslati te ih na taj način odvojeno tretiramo kao što će biti pokazano u
primjeru. Ovaj senzor može da mjeri temperaturu u opsegu od - 55 C do 125 C sa tačnošću od 0.5 C
na intervalu od -5 C do 95 C a to znači da postiže najveću tačnost na temperaturama od oko 30 C-40
C. Ono što je još potrebno navesti je da se preciznost senzora mijenja sa brojem bita kojeg koristimo
za zapisivanje temperature. Tako za 9 bita odgovara preciznost od 0.5 C, za 10 bita to je 0.25 C, za
11 bita je 0.125 C i za 12 bita imamo 0.0625 C.
Blok šema i princip rada Iako ima dimenzije reda 1 cm, ovaj senzor, odnosno mjerni pretvarač ima
jako složenu strukturu. Blok dijagram unutrašnje strukture je:
Dakle vidimo da postoji primarni osjetilni element, odnosno senzor koji mjeri temperaturu i čiji se
izlaz uspoređuje sa 3 već denisanim stanjima u registrima. Na osnovu toga određuje se temperatura
8
tj. zapisuje se odgovarajućim bitima. Look-up tabela za zapisivanje temperature u DS18B20 je:
Zapisi o temperaturi se zajedno sa ostalim podacima zapisuju u memoriju ovog uređaja koja je
denisana prema tabeli:
Kako je ranije naglašeno, preciznost mjerenja ovisi o broju bita određenih za zapisivanje podatka o
temperaturi. Pored toga, od ovog parametra ovisi i vrijeme konverzije, odnosno vrijeme koje je
potrebno da se podatak o temperaturi pretvori u digitalni zapis. Stoga, što je uređaj precizniji potrebno
mu je više vremena, odnosno najveće brzine se postižu za 9 bitni zapis temperature:
9
REZOLUCIJA(BITS) MAX CONVERSION TIME
9 93.75ms (tconv/8)
10 187.5ms (tconv/4)
11 375ms (tconv/2)
12 750ms (tconv)
Zapis iz memorije se šalje u mikrokontroler, tako što tzv. CRC generator proizvodi signal
ekvivalentan datom zapisu. Ovaj generator proizvodi signal po polinomskoj funkciji, a koji je
kompatibilan sa TTL logikom (jer ima 5 V na raspolaganju).
Kao što je već spomenuto DS18B20 senzor ima tri žice: signalnu DQ, uzemljenje GND i napojnu
+5V (VCC). U slučaju parazitnog povezivanja koristimo samo dvije, ali u ovom maturskom koristimo
samo jedan senzor te stoga nije potrebno takvo uključivanje. Na arduino ploči smo vidjeli da postoje
pinovi za uzemljenje GND i napajanje koje nama treba tj. 5 V. Signalnu liniju uključujemo u digitalni
pin broj 2 (može i neki drugi), osim prva dva označenih sa 0 i 1 odnosno Rx i Tx jer oni služe za
serijsku komunikaciju a mi koristimo One Wire (jednožičnu) komunikaciju.
Za korištenje ovog pina potrebno ga je proglasiti ulaznim, što ćemo u kodu uraditi. Još jedna
neizostavna stvar je otpornik od oko 5 kΩ kojem je najbliži 4.7 kΩ. Ovaj otpornik se priključuje
između signalne linije i linije za napajanje.
10
4.2. Softverska podrška za DS18B20
Nakon povezivanja senzora sa arduinom, za programiranje arduina potrebni su nam paketi odnosno
biblioteke koje omogućavaju ispravno učitavanje. U opisu senzora vidjeli smo look-up tabelu,
odnosno ekvivalent temperature i odgovarajućeg zapisa. Kako to ne bi unosili samostalno postoje
denisane biblioteke koje je napisao proizvođač. Ta biblioteka se naziva DallasTemperature biblioteka.
Druga biblioteka potrebna za ovaj projekat je OneWire koja služi za ispravnu komunikaciju pomoću
One Wire protokola.
11
type_s = 0; Serial.print(OneWire :: crc8(data, 8), HEX);
break; Serial.println();
def ault : int16_traw = (data[1] << 8)|data[0];
Serial.println(”DeviceisnotaDS18x20familyde if(type_s){
vice.”); raw = raw << 3;
return; if(data[7] == 0x10){
} raw = (raw&0xF F F0) + 12 − data[6];
ds.reset(); }
ds.select(addr); }else{
ds.write(0x44); bytecfg = (data[4]&0x60);
delay(1000); if(cfg == 0x00)raw = raw&7;
present = ds.reset(); elseif(cfg == 0x20)raw = raw&3;
ds.select(addr); elseif(cfg == 0x40)raw = raw&1;
ds.write(0xBE); }
Serial.print(”Data = ”); celsius = (float)raw/16.0;
Serial.print(present, HEX); f ahrenheit = celsius ∗ 1.8 + 32.0;
Serial.print(””); Serial.print(”Temperature = ”);
for(i = 0;i < 9;i + +){ Serial.print(celsius);
data[i] = ds.read(); Serial.print(”Celsius, ”);
Serial.print(data[i], HEX); Serial.print(fahrenheit);
Serial.print(””); Serial.println(”Fahrenheit”);
} }
Serial.print(”CRC = ”);
Ako posmatramo ovaj kod primijetimo u redu 2 da je definisan ulazni pin kojeg smo koristili, stoga
ako se koristi neki drugi pin potrebno je navesti. U sljedećem redu je navedena količina podataka
koja se prenosi serijskom komunikacijom računara i arduina. U sljedećem dijelu koda ispituje se vrsta
senzora iz DS serije, što znači da se ovaj kod može koristiti i za druge senzore pored DS18B20 kojeg
mi koristimo. Sa funkcijom ds.write(0x44) navodimo adresu DS senzora a ukoliko koristimo
parazitno napajanje (i više senzora) potrebno je navesti i broj senzora sa kojeg se očitava pa bi se ova
linija zamijenila sa ds.write(0x44,1) u slučaju jednog senzora ali parazitnog napajanja. Funkcija
delay(1000); omogućava uzimanje podatka svakih 1000 ms, s obzirom da koristimo 12 bita dovoljno
13
bi bilo i 750 ms ali na ovaj način smo sigurni da neće doći do greške pri uzimanju podataka. Nakon
toga se vrši učitavanje i pretvaranje temperature koju dobijemo u celzijusima u faranhajte, što nije
obavezno. Nakon ovoga možemo preći na mjerenje temperature.
Na ovoj slici vidimo trenutnu sobnu temperaturu na kojoj je vršeno mjerenje, te vidimo da bez
promjena položaja ili kakvog strujanja zraka temperatura je prilično konstantna. Ukoliko počnemo
lagano puhati u senzor, pošto je temperatura ljudskog tijela veća od sobne očekujemo porast
temperature:
14
Slika 12: Izgled Serial Monitora
Na ovoj slici se upravo vidi povećanje temperature prouzrokovano puhanjem u senzor. To ide u prilog
osjetljivosti ovog senzora, puhanje je kratkotrajno i nema ogromnu razliku temperature ali to ovaj
senzor uspješno prati. Također znamo da temperatura u cijeloj prostoji nije ista, pa ćemo sada
provjeriti promjenu temperature sa pomjeranjem senzora nekoliko centrimetara prema podu gdje
očekujemo nižu temperaturu:
Iz ovih jednostavnih testova vidimo da je ovakav senzor idealan za praćenje brzih i malih promjena
temperature i da mu je to velika prednost u odnosu na ostale senzore. Naime, ovaj senzor je sposoban
da registruje promjenu od 0.06C unutar 0.75 sekundi.
15
4.5. Tačnost senzora
Tačnost senzora se deniše kao mogućnost pokazivanja tačne temperature. Pri proizvodnji senzora,
proizvođač kalibriše senzor, te daje njegov mjerni opseg kao i tačnost u tom mjernom opsegu. Da bi
se provjerila ispravnost dobivenih podataka, kao i izvršilo ponovno kalibrisanje postoje posebni
instituti na državnom nivou koji pomoću etalonskihinstrumenata vrše mjerenja i određuju tačnost
drugog instrumenta. Međutim da li je tačnost onakva kakvu proizvođač deniše možemo jednostavno
provjeriti i svakodnevnim prirodnim fenomenima. Jedan od fenomena kojeg možemo iskoristiti za
provjeru tačnosti je ključanje i mržnjenje vode. U ovom maturskom radu je senzor postavljen u
električno kuhalo, iznad površine vode tako da mjeri temperaturu pare. Razlog zbog kojeg senzor
nismo ubacili u samu tečnost je jer nema adekvatnu zaštitu i može doći do njegovog oštećenja.
Rezultati dobiveni ovim mjerenjem su:
Vidimo da je pokazivanje senzora 99.5 C, što je u granicama tačnosti denisane od strane proizvođača.
U obzir se može uzeti činjenica da senzor nije uronjen u tečnost nego mjeri temperaturu pare a čija
se temperatura smanji pri napuštanju tečnosti i dizanjem u vazduh. Međutim ovaj pad temperature je
manji od 0.1 C pa ga možemo i zanemariti. Drugi fenomen kojeg možemo iskorisiti za provjeru
tačnosti je tačka mrženjenja vode, odnosno tačka topljenja leda. Prije ove vježbe u jednu posudu je
nasuta voda koja je držana u hladnjaku tako da se smrzne i da možemo izmjeriti temperaturu vode
koja nastane kada se led otopi. Dobiveni su sljedeći rezultati:
16
Slika 15: Izgled Serial Monitora
Dobivene vrijednosti od 0.94 C mogu biti posljedica više stvari: na senzor smo postavili tanku foliju
tako da voda ne bi došla do njega, led je izvađen iz hladnjaka i njegovo topljenje je bilo na sobnoj
temperaturi koja također ima uticaj kao i greška samog senzora.
17
5. Zaključak
DS18B20 je senzor, odnosno mjerni pretvarač koji temperaturu pretvara u digitalni zapis. To je
ujedno jedna od njegovih glavnih prednosti, jer se sa lakoćom može povezivati sa mikrokontrolerima,
mikroprocesorima, računarima i slično. Druga dobra osobina je što mu je potrebna samo jedna žica
za komunikaciju tj. služi se One-Wire protokolom pa dolazi i do uštede materijala i prostora. Također
prednost ovog protokola i senzora je njegovo adresiranje pa se pomoću jedne žice može povezati više
senzora a samim time im je potreban i samo jedan ulaz. Pored tih konstruktivnih karakteristika, ovaj
senzor ima jako dobru tačnost koja ga svrstava u najuži krug pri izboru senzora za mjerenje. Druga
osobina zbog koje ovaj senzor ima veliku upotrebu je njegova niska cijena. Ovaj senzor ima relativno
malen mjerni opseg pa ima malu upotrebu u industrijskim mjerenjima visokih temperatura, međutim
zbog svojih karakteristika je na prvom mjestu na niskim temperaturama odnosno u opsegu od 10-100
C. Dobre karakteristike su velika tačnosti i osjetljivost, kao i brzina odziva. Ovaj senzor mjeri
temperaturu unutar 750 ms sa preciznošću od 0.06 C i definisanom tačnosti od 0.5 C. S obzirom na
ove osobine i jako malu cijenu, ovaj senzor je idealan za mjerenje temperature u prostim sistemima
gdje je potrebna velika tačnost i pouzdanost pri mjerenju i regulaciji temperature. U prilog tome ide
i osjetljivost i brzina odziva, tako da je idealan za regulaciju temperature u dinamičkim sistemima, sa
malim opsegom promjena temperatura kao što su inkubatori.
18
6. Literatura
19