daljinsko upravljanje i dijagnostika fluoroscentnih rasvjetnih tijela
Transcript of daljinsko upravljanje i dijagnostika fluoroscentnih rasvjetnih tijela
SVEUČILIŠTE U SPLITU
FAKULTET ELEKTROTEHNIKE, STROJARSTVA I
BRODOGRADNJE
DIPLOMSKI RAD
DALJINSKO UPRAVLJANJE I DIJAGNOSTIKA FLUOROSCENTNIH
RASVJETNIH TIJELA
Tino Filipović
Split, rujan 2015
SADRŽAJ
1. UVOD ................................................................................................................................................. 1
2. OPIS I STRUKTURA KONTOLERA ............................................................................................ 3
2.1 Mikrokontroler ............................................................................................................................ 4
2.2 Arduino UNO ............................................................................................................................... 4
2.2.1 Arduino sklopovlje ............................................................................................................... 5
2.2.2 Spajanje napajanja i povezivanje s računalom ................................................................. 6
2.3 Komunikacijski modul nRF24L01 ............................................................................................. 7
2.3.1 Dijagram stanja .................................................................................................................. 11
2.3.2 Načini rada i konfiguriranje nRF24L01 ........................................................................... 13
2.3.3 Cijevi podataka (Data Pipes) ............................................................................................. 14
2.4 Relej s optozaštitom ................................................................................................................... 15
2.5 Fototranzistor ............................................................................................................................ 17
2.6 PIR (eng. Passive Infrared) senzor .......................................................................................... 21
3. OBRADA PRIKUPLJENIH PODATAKA ................................................................................... 23
3.1 AD pretvorba ............................................................................................................................. 23
3.2 Usrednjavanje ............................................................................................................................ 25
3.3 Postupak obrade prikupljenih podataka ................................................................................. 26
3.4 Analiza mjerenja u Matlabu .................................................................................................... 27
4. REALIZACIJA ............................................................................................................................... 31
4.1 Software „Diag“ ......................................................................................................................... 31
4.2 Opis programa ........................................................................................................................... 32
4.3 Upravljanje ................................................................................................................................ 36
4.4 Kućište kontrolera ..................................................................................................................... 37
4.5 Prednosti i nedostatci realiziranog rješenja ............................................................................ 39
4.6 Primjer moguće primjene ......................................................................................................... 41
5. ZAKLJUČAK .................................................................................................................................. 43
SAŽETAK ............................................................................................................................................ 44
KLJUČNE RIJEČI ............................................................................................................................. 44
LITERATURA .................................................................................................................................... 45
POPIS OZNAKA I KRATICA .......................................................................................................... 47
DODATAK .......................................................................................................................................... 48
A. Kod programa za dijagnostiku .................................................................................................. 48
B. Kod uređaja za daljinsko upravljanje ...................................................................................... 57
C. Kod kontolera rasvjete ............................................................................................................... 59
1
1. UVOD
U današnjem industrijskom okruženju obično smo suočeni sa potrebom nadzora i upravljanja
raznim procesima. U najjednostavnijem slučaju to znači da je proces opremljen nekom vrstom
uređaja za mjerenje (senzorom) te uređajem za upravljanje. Tek kada sustav posjeduje mjerni
i izvršni član može kontrolirati proces za koji je odgovoran. Čest je slučaj da se tehničko-
tehnološki procesi sastoje iz više funkcionalno različitih podsustava i prostorno su dislocirani
[1].
Cilj diplomskog rada je stvoriti sustav daljinskog upravljanja i dijagnostike rasvjetnih tijela,
odnosno potrebno proučiti mjerljive parametre kvarova fluorescentnih lampi te realizirati
sustav koji će bežično upravljati radom rasvjetnih tijela. U radu je realizirano upravljanje
rasvjetnim tijelom, te je stvoren sustav za praćenje parametara rada rasvjetnog tijela
(fluorescentne lampe).
Naime kod fluorescentnih (kod nas se nazivaju i neonske jer u sebi sadržavaju plemeniti plin
neon) cijevi vidljiva se svjetlost dobiva na fluorescentnom sloju koji se pobudi
ultraljubičastim zračenjem. To ultraljubičasto zračenje nastaje kao posljedica električnog
izboja u smjesi živine pare i plemenitih plinova [2].
U odnosu na običnu žarulju sa žarnom niti, fluorescentnu cijev odlikuje veća efikasnost
pretvaranja električne energije u svjetlost i dulji životni vijek. Uobičajena fluorescentna
žarulja ima efikasnost pretvaranje električne energije u svjetlosnu energiju od 17 – 21 % [3].
Tako fluorescentna žarulja od 14W daje svjetlost kao obična žarulja sa žarnom niti od 60W
[4].
Početna investicija u fluorescentne žarulje (cijevi) je nešto veća nego za korištenje žarulja sa
žarnom niti, no trošak njihova rada je znatno manji. Tako je, na primjer u velikim prostorima
(npr. skladišta, fakulteti i sl.) energetska efikasnost rasvjete bitan parametar uštede koje je
dugoročno isplativ. Sustav za dijagnostiku koristan je također zato što ukazuje na kvar na
rasvjeti, i otkriva potencijalne kvarove te se na osnovu tih podataka može vršiti planiranje
servisa rasvjete.
Još jedna stvar koja razlikuje fluorescentnu cijev od žarulje je ta što cijev pred sam istek
svoga roka trajanja počinje pokazivati određene nepravilnosti u svom radu kao što su učestalo
treperenje, kašnjenje pri paljenju, porast u vremenu potrebnom da postigne određen intenzitet
osvijetljenosti. Da bi se te pojave mogle detektirati bilo je potrebno konstruirati kontroler koji
2
će uz to još dodatno moći i upravljati rasvjetom i obavještavati korisnika na nepravilnosti u
radu. Uz kontroler koji upravlja radom rasvjete i očitava vrijednosti sa senzora koji prate
razinu osvijetljenosti, razvijen je i računalni program „Diag“ preko kojega se upravlja
rasvjetom i u kojemu se vrši grafički prikaz svih vrijednosti sa senzora. Preko programa je
moguće detektirati i nestanak struje. U tom slučaju kontroler se prebacuje na baterijsko
napajanje i zadržava svoju potpunu funkcionalnost.
U narednim poglavljima bit će predstavljen kontroler, njegova struktura, opis pojedinih
komponenti,a zatim i način prikupljanja i obrade podataka te na samom program za
dijagnostiku i njegova funkcionalnost.
3
2. OPIS I STRUKTURA KONTOLERA
Da bi se uopće moglo upravljati procesom, odnosno da bi realizirali projektirani sustav bilo je
potrebno odabrati odgovarajući kontroler koji može izvršavati zahtjeve koje korisnik postavi
pred njega, te da ima mogućnost prikupljanja podataka da bi se mogla izvršiti dijagnostika
sustava. Zbog svojih mogućnosti i jednostavnosti korištenja izabran je kontroler Arduino
UNO. Budući da je komunikacija sustava realizirana bežično bilo je potrebno koristiti dva
mikrokontrolera s dvosmjernim komunikacijskim modulom. Postavljeni su na dvije lokacije:
• Prvi mikrokontroler koji upravlja procesom postavljen je na rasvjetnom tijelu,
mjeri razinu osvjetljenja te šalje izmjerene podatke prema drugom
mikrokontroleru koji ih prosljeđuje računalu;
• Drugi mikrokontroler postavljen je u kontrolnoj sobi. Njegova uloga je da
prima podatke, prosljeđuje ih računalu te prima naredbe od računala koje
prosljeđuje prvom mikrokontroleru.
Način rada sustava prikazan je blok shemom na Slici 2.1
Slika 2.1. Blok shema sustava
4
2.1 Mikrokontroler
Za mikrokontroler možemo reći da je „mozak“ koji upravlja radom nekog sustava umjesto
čovjeka, te je karakteriziran malim dimenzijama i niskom potrošnjom energije.
Mikrokontroler se može definirati kao elektronička komponenta koja objedinjuje, u formi
integriranog kruga, procesor i periferne sklopove poput memorije, digitalnih i analognih ulaza
i izlaza, sklop za kontrolu napona i ispravnost rada, oscilator, brojače, vremenske sklopove
itd. To je ona kategorija sklopovlja koja je u modernom svijetu praktički nevidljiva, a nalazi
se svugdje: u automobilima, perilicama rublja, mikrovalnim i običnim pećnicama te praktički
svugdje gdje je potrebno nešto pametno napraviti s uređajem.
2.2 Arduino UNO
Razvojna platforma Arduino je alat za dizajn i razvoj ugradbenih računalnih sustava [5].
Središnja komponenta Arduino okruženja je 8 bitni Atmelov ATmega328P mikroprocesor.
Arduino platforma temelji se na otvorenom sklopovlju dostupnom svima, što znači da svatko
može izraditi svoj vlastiti Arduino uređaj.
Sama cijena, fleksibilnost, te laka dostupnost doprinijeli su iznimnoj popularnosti ovog
uređaja. Međutim najveća prednost Arduina u odnosu na ostale razvojne okoline je njegova
lakoća korištenja. Svatko kome elektronika nije bliska, može u relativno kratkom vremenu
savladati osnove korištenja i započeti vlastite projekte.
Također postoji i velika zajednica ljudi koji koriste Arduino, dijele svoje kodove, biblioteke i
električne sheme te na taj način pomažu drugima. Iz svih tih nabrojanih razloga za rješavanje
zadatka ovog diplomskog rada odabran je Arduino UNO R3 (Slika 2.2.), prikladan zbog broja
ulaza i performansi.
5
Slika 2.2. Korišteni Arduino UNO
2.2.1 Arduino sklopovlje
Kao što je u uvodu rečeno, sam sklop se sastoji od 8 bitnog Atmelovog procesora [6].
ATmega328P osigurava sljedeće mogućnosti: 32KByta ISP flash memorije za pohranu
programa, 2 KByta SRAM memorije za varijable, 1 KByte EEPROM memorije za podatke
koji ostaju pohranjeni u programu za naknadnu uporabu, 23 ulazno izlazne linije opće
namjene, 32 radna registra opće namjene, tri brojača (timera) s modom za uspoređivanje,
vanjske i unutarnje prekide, univerzalni predajnik/prijemnik za prijenos sinkronih/asinkronih
podataka (USART – Universal Synchronous/Asynchronous Reciever/Transmitter), serijski
port za dvožično sučelje(TWI- Two Wire Interface), port za sučelje za serijsku periferiju(SPI
– serial peripheral interface) i 6 kanalni 10 bitni analogno/digitalni pretvornik (Slika2.3) [7].
Svi ovi periferni uređaji upravljaju se preko registara. To su manje memorijske jedinice
ugrađene u samom procesoru. Registri služe za privremeni smještaj programskog koda i
podataka iz radne memorije te rezultata aritmetičko-logičkih operacija koje se izvršavaju u
samom procesoru. Upravljanje registrima vrši se korištenjem odgovarajućih adresa preko
pokazivača realiziranih korištenjem C programskog jezika (ili asemblera) [8].
6
Slika 2.3. Shematski prikaz Arduino UNO sklopovlja
2.2.2 Spajanje napajanja i povezivanje s računalom
Arduino kontroleri napajaju se vanjskim istosmjernim naponom u opsegu od 6 – 20 V.
Preporučeni naponski opseg je od 7 – 12 V. Glavni razlog je taj što napon manji od 7 V može
za posljedicu imati nestabilan radni napon cijelog sklopa, kao i nestabilan i manji napon na
izvodima 5 V. Napon veći od 12 V može uzrokovati pretjerano i nepotrebno zagrijavanje
stabilizatora napona, pa i trajno oštećenje regulatora napona od 3.3 V. To posebno dolazi do
izražaja u ovom radu, budući da je naponski izlaz od 3.3 V prijeko potreban za napajanje
bežičnog modula nRF24L01. Budući da je cijeli sustav prostorno dislociran bilo je potrebno
osigurati zasebno napajanje za svaki od kontrolera.
Napajanje od prvog Arduina, onoga povezanog s računalom, riješeno je na trivijalan način
tako što je povezano putem USB kabela. Preko tog istog USB kabela odvija se i serijska
komunikacija mikrokontrolera i računala.
Drugi Arduino, onaj koji mjeri parametre rasvjetnog tijela i vrši upravljanje, napajan je
direktno iz mreže putem AC-DC ispravljača.
Ispravljač ima sljedeće karakteristike:
• Ulazni napon: AC 100
• Izlazni napon: DC 5 V
• Maksimalna struja: 1000 mA
• Minimalna struja: 150 mA
Slika 2.4
Transformator pretvara izmjenični napon mreže u
vrijednosti 9 V. Preko Graetzov
kondenzator ima ulogu filtriranja istosmjernog napona, odnosno da dodatno „ispegla“
punovalno ispravljeni napon.
napon i na svom izlazu daje
automatski prebacuje na baterijsko napajanje
ono s većim naponom, potrebno je baterijsko napajanje preko regulatora napona spustiti ispod
6.6 V da bi ono bilo zadržano kao sekundarno
ispravljača baterija 9 V) .
U tom slučaju ne dolazi do prekida komunikacije
funkcionalnost. Tako će korisnik koji vrši nadzor rasvjete biti obaviješten o nepravilnostima u
radu rasvjete ili o nestanku električne energije.
2.3 Komunikacijski modul nRF
Nordic Semiconducor nRF24L01 je
aplikacije s niskom potrošnjom
Ispravljač ima sljedeće karakteristike:
V - 250 V 50/60 Hz
V
Maksimalna struja: 1000 mA
Minimalna struja: 150 mA
Slika 2.4. Shema kruga za pretvorbu napona
izmjenični napon mreže u izmjenični napon sekundara efektivne
Graetzov-a spoja izmjenični napon se punovalno ispravlja. Elektrolit
kondenzator ima ulogu filtriranja istosmjernog napona, odnosno da dodatno „ispegla“
. Integrirani krug LM7805 ima ulogu da
stabilnih 5V. U slučaju nestanka električne energije sustav se
ebacuje na baterijsko napajanje. Pošto Arduino kao primarno napajanje od
, potrebno je baterijsko napajanje preko regulatora napona spustiti ispod
6.6 V da bi ono bilo zadržano kao sekundarno (shema kao na Slici 2.4. samo što je umjesto
slučaju ne dolazi do prekida komunikacije i kontroler zadrža
funkcionalnost. Tako će korisnik koji vrši nadzor rasvjete biti obaviješten o nepravilnostima u
o nestanku električne energije.
nRF24L01
nRF24L01 je jedinstveni 2.4 GHz primopredajnik dizajniran za bežične
aplikacije s niskom potrošnjom [9]. nRF24L01 je pronašao svoju primjenu na mnogo mjesta.
7
enični napon sekundara efektivne
ispravlja. Elektrolitski
kondenzator ima ulogu filtriranja istosmjernog napona, odnosno da dodatno „ispegla“
LM7805 ima ulogu da stabilizira filtrirani
U slučaju nestanka električne energije sustav se
Pošto Arduino kao primarno napajanje odabire
, potrebno je baterijsko napajanje preko regulatora napona spustiti ispod
samo što je umjesto
kontroler zadržava svoju potpunu
funkcionalnost. Tako će korisnik koji vrši nadzor rasvjete biti obaviješten o nepravilnostima u
dizajniran za bežične
nRF24L01 je pronašao svoju primjenu na mnogo mjesta.
8
Ponajprije valja istaknuti bežične PC periferije (bežični miš, tastatura, jojstick), zatim tu su
ultra nisko potrošačke senzorske mreže, VOIP (eng. Voice over Internet Protocol) slušalice,
alarmni i sigurnosni sustavi, aktivni RFID (eng. Radio-frequency identification) te mnogi
drugi sustavi koji za svoj rad zahtijevaju bežični prijenos podataka. Domet korištenog modula
je oko 20 m u zatvorenom prostoru, te 100 m u otvorenom prostoru. Poboljšana verzija
modula nRF24L01+ koja posjeduje dodatnu antenu, ima domet do 1000 m u otvorenom
prostoru. Izgled nRF24L01 prikazan je na Slici 2.5 [9].
U ovom projektu uloga komunikacijskog modula je bežično povezivanje kontrolera koji
upravlja rasvjetom s prijemnikom spojenim na računalu. Prednost ovog nad ostalim ovakvog
tipa je mogućnost istovremenog slanja i primanja podataka, niska cijena, jednostavnost i
potpuna kompatibilnost s Arduino razvojnom okolinom budući da postoje gotove biblioteke
koje olakšavaju programiranje i korištenje.
Primopredajnik sadrži potpuno integrirani frekvencijski alat za sintezu, pojačalo, kristalni
oscilator, demodulator, modulator i Enhanced Shock Burst protokol. nRF24L01 je projektiran
za rad na širokopojasnom ISM frekvencijskom rasponu od 2.400 - 2.4835 GHz. Izlazna snaga,
frekvencijski kanali i protokol lako se unose otvorenim SPI interfejsom.
Pomoću mikrokontrolera, nRF24L01-a i nekoliko dodatnih pasivnih komponenti moguće je
realizirati jednostavan radio prijemnik. Sklop u svom dizajnu ima implementiranu automatsku
potvrdu o primitku poruke, mogućnost spajanja s do 6 različitih uređaja u istom
frekvencijskom kanalu, te još neke druge mogućnosti.
Slika 2.5. Izgled nRF 2401l
nRF24L01 je konfiguriran i upravljan preko serijskog komunikacijskog protokola (eng. Serial
Peripheral Interface – SPI).
9
Ovaj protokol omogućava dvosmjernu komunikaciju i preko njega je moguće ostvariti veće
brzine prijenosa nego kod ostalih komunikacijskih standarda. Brzina prijenosa podataka kod
nRF24L01 kreće se do 2 Mbps što ga uz izuzetno nisku potrošnju energije svrstava u
poželjnije uređaje ovog cjenovnog razreda. Na Slici 2.6. prikazan je blok dijagram uređaja te
raspodjela pinova .
Slika 2.6. Blok dijagram nRF24L01
Slika 2.7. Raspodjela pinova chipa
10
Na Slici 2.7. prikazan je raspored pinova nRF240l primopredajnika. Funkcionalni opis dat je
u Tablici 2.1.
Tablica 2.1. Tablica funkcionalnosti pinova i njihov opis
Pin Ime Funkcija pina Opis
1 CE Digitalni ulaz Aktivira RX ili TX način rada
2 CSN Digitalni ulaz SPI odabir chipa
3 SCK Digitalni ulaz SPI takt
4 MOSI Digitalni ulaz Pomicanje podataka(master out slave in)
5 MISO Digitalni izlaz Pomicanje podataka(master in slave out)
6 IRQ Digitalni izlaz Interapt pin
7 VDD Napajanje Napajanje (1.9V – 3.6V DC)
8 VSS Napajanje Uzemljenje (0V)
9 XC2 Analogni izlaz Oscilator pin 2
10 XC1 Analogni ulaz Oscilator pin 1
11 VDD_PA Vanjsko napajanje Napajanje(1.8V) za unutarnje pojačalo. Mora
biti povezano na ANT1 i ANT2
12 ANT1 RF Priključak za antenu 1
13 ANT2 RF Priključak za antenu 2
14 VSS Napajanje Uzemljenje (0V)
15 VDD Napajanje Napajanje (1.9V – 3.6V DC)
16 IREF Analogni ulaz Referentna struja; priključiti 22k otpornik
prema uzemljenju
17 VSS Napajanje Uzemljenje (0V)
18 VDD Napajanje Napajanje (1.9V – 3.6V DC)
19 DVDD Vanjsko napajanje Interni digitalni izlaz za svrhe prespajanja
20 VSS Napajanje Uzemljenje (0V)
Na Slici 2.8. dana je shema nRF24L01 komunikacijskog modula. Sklop je napajan direktno s
Arduino mikrokontrolera koji u sebi sadrži linearni naponski regulator koji generira izlazni
napon od 3,3 V potreban za napajanje nRF24L01. Uređaj ne može započeti s radom sve dok
je napon napajanja manji od 1.9 V. Ukoliko je napon napajanja veći od 3.6 V dolazi do
pregrijavanja komunikacijskog modula.
11
Slika 2.8. Shema nRF24L01
2.3.1 Dijagram stanja
Dijagram stanja prikazuje modove u kojima nRF24L01 može raditi te na koji su način se
njima pristupa. Uređaj počinje raditi kada je napon VDD 1.9 V ili veći. Kada se to dogodi
nRF24L01 resetira stanje u kojemu je posljednji put bio, tu ostaje 10.3 ms, a zatim ulazi u
„Power down“ mod. Čak i dok se uređaj nalazi u „Power down“ modu mikrokontroler ga
može kontrolirati kroz SPI protokol i CE (eng. Chip enable) pin (zauzeta tri stanja u
dijagramu). “Recommended operating mode” – (preporučeni način rada) je stanje koje se
12
koristi tijekom normalnog rada. “Possible operating mode” – (mogući način rada) je stanje
koje je dozvoljeno za koristiti, ali se ne koristi tijekom normalnog rada. Treće stanje je
transition state (prijelazno stanje) koje je limitirano stanje – u njemu se nalazi u vrijeme
starta. Na Slici 2.9. [9] prikazana su stanja u kojima se nRF24l01 može nalaziti i načini
prelaska iz jednog u drugo stanje.
Slika 2.9. Prikaz dijagrama stanja (prikazani uvjeti prijelaza iz jednog načina rada u drugi)
13
2.3.2 Načini rada i konfiguriranje nRF24L01
Ovdje će biti opisani različiti modovi rada nRF24L01 modula i parametri iskorišteni za
kontrolu.
U „Power Down“ modu rada nRF24L01 je onemogućen i tada troši najmanje struje. U ovom
načinu rada sve vrijednosti iz registra dostupne su iz SPI-a i zadržane te SPI može biti
aktiviran. Ovaj mod rada se pokreće tako da se PWR_UP bit u CONFIG registru postavi na
LOW.
Ako postavimo PWR_UP bit u CONFIG registru na 1 (HIGH), uređaj ulazi u standby-I način
rada. Standby-I način rada se koristi da se smanji prosječna potrošnja struje. U ovom modu
kristalni oscilator je djelomično aktivan. Ovo je mod rada na koji se vraća nRF24L01 nakon
TX ili RX moda kada je CE bit postavljen na 0 (LOW).
U Standby II modu, aktivni su taktni buffer-i i usporedno s standby I modom povećana je
potrošnja do deset puta. Standby II mod se može ostvariti kada je CE u visokom stanju PTX
uređaja sa praznim TX FIFO registrom. Za vrijeme Standby modova sadržaj konfigurirane
riječi je održan i aktiviranje SPI protokola je moguće.
RX način rada je aktivan kada nRF24l01 radi kao prijemnik. Ovaj mod pokrećemo tako da
postavimo PWR_UP bit u 1, PRIM_RX bit u 1, te CE pin na HIGH. U ovom načinu rada
nRF24l01 demodulira signale iz RF kanala. Uređaj ostaje u RX modu rada sve dok ga
mikrokontroler ne vrati u Standby-I režim ili Power down mod.
TX mod je aktivan onda kada nRF24L01 šalje podatke. Da bismo pokrenuli ovaj način rada
nRF24L01 mora imat PWR_UP bit postavljen u 1, PRIM_RX bit u 0 i visoki impuls na pinu
CE (jedinica u tom pinu) mora biti duži od 10µs.
nRF24L01 ustaje u TX režimu rada sve dok ne završi slanje trenutnog paketa podataka. Ako
je pin CE u 0 uređaj se vraća u standby-I režim rada (mod).
14
Tablica 2.2. Modovi nRF24L01
MOD PWR_UP
registar
PRIM_RX
registar CE
TX FIFO (eng. First In
First Out) stanje
RX mod 1 1 1 -
TX mod 1 0 1 Podaci u TX FIFO
TX mod 1 0 1 → 0
Ostaje u TX modu prije
nego što je prijenos paketa
završen
Standby-II 1 0 1 TX FIFO- prazan
Standby-I 1 - 0 Nema prijenosa podataka
Power Down 0 - - -
2.3.3 Cijevi podataka (Data Pipes)
nRF24L01 konfiguriran kao PRX može primiti podatke kroz šest različitih cijevi podataka u
jednom frekvencijskom kanalu. Svaka cijev ima svoju jedinstvenu adresu i može biti
konfigurirana da ima vlastito ponašanje. Podatkovne cijevi dostupni su za adresiranje u
EN_RXADDR_PX registru. Već unaprijed zadane su samo „0“ i „1“ cijev podataka. Uvijek
se mora osigurati da svaka podatkovna cijev ima različitu adresu. Prva podatkovna cijev
(indeks [0]) ima jedinstvenu 5 Byte-nu konfiguriranu adresu. Ostale cijevi (1-5) dijele iste
visoko definirane bajtove (4 Byte zajednička). Zadnji Byte mora biti jedinstven za svaku
cijev. Adresiranje svake cijevi podataka izvršava se u RX_ADRR_PX registru. Slika 2.10. [9]
pokazuje adresiranje podatkovnih cijevi.
15
Slika 2.10. Adresiranje cijevi podataka
Adresiranje cijevi podataka u programskom kodu riješeno je na sljedeći način:
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
radio.openWritingPipe(pipes[1]); // otvaranje cijevi za pisanje
radio.openReadingPipe(1,pipes[0]); // otvaranje cijevi za čitanje
2.4 Relej s optozaštitom
Postoje mnoge situacije u kojima je potrebno prenijeti podatke i signale u okviru elektronskog
uređaja iz jednog podsustava u drugi, ili između različitih uređaja, bez postojanja direktne
galvanske veze. Čest razlog za ovo je taj da izvorište i odredište rade sa različitim naponskim
nivoima (npr. procesor, koji radi na 5 V DC treba upravljati radom trijaka koji
prekida/uključuje 230 V AC. U takvim slučajevima, veza između ova dva bloka treba biti
galvanski izolirana, kako bi se omogućila zaštita u radu procesora. Galvanska izolacija je
princip izoliranja funkcionalnih cjelina električnog sustava u cilju sprečavanja toka neželjenih
16
struja. Komponente koje se koriste za opto-izolaciju, a objedinjuju u jednom kućištu foto-
predajnik (LED) i foto-prijemnik (fototranzistor) zovu se optokapleri [10].
U primjeru daljinskog upravljanja rasvjetom optokapler galvanski izolira mikrokontroler od
proboja izmjenične struje s trošila.
U ovom slučaju preko optokaplera upravljamo radom releja koji uključuje i isključuje
rasvjetu. To je integrirani chip koji u sebi sadrži diodu i fototranzistor. Kada digitalni izlaz
mikrokontrolera D5 bude u stanju HIGH, dolazi do pada napona na diodi te ona zasvijetli. U
tom trenutku fototranzistor provede, zatvori se strujni krug između tranzistora i releja
prikazan na Slici 2.11. Dakle tranzistor radi kao sklopka. U shemu je još dodana i tzv.
Flyback dioda. Postavljamo je paralelno s relejom, ali s različitim polaritetom.
Naime relej se ponaša kao induktivitet i u sebi akumulira energiju. Da se ta akumulirana
energija ne bi prenijela na mikrokontroler i ostale komponente, potrebno je postaviti diodu i
preko nje discipirati tu energiju natrag prema trošilu.
Slika 2.11. Shema strujnog kruga za upravljanje rasvjetom
17
2.5 Fototranzistor
Fotometrija je mjerenje svjetla definirano kao elektromagnetsko zračenje koje detektira
ljudsko oko. Ograničeno je na valne duljine od oko 360 do 830 nanometara. Ljudski vid je
subjektivan i složen proces. Naime kada se promatra fluorescentna (neonska) svijetlost
ljudsko oko ne može zapaziti treperenje neonske lampe te se stječe dojam da neonka radi
stabilno i bez oscilacija [11]. Međutim ostvarena mjerenja ukazuju na konstantno treperenje
svijetla koje ljudsko oko ne može primijetiti.
U radu je za preciznu detekciju svijetla korišten Siemensov npn BP 103-3 fototranzistor (Slika
2.12.) [12]. Odlikuje ga visoka linearnost u radu, radno područje valnih duljina od 420 –
1130 nm, te brzi odziv na svjetlosnu pobudu. Koristi se u za mjerenje bljeskova, opto-
izolaciju, regulaciju svijetla i ostalu primjenu u industrijskoj elektronici.
Slika 2.12. Fizički izgled fototranzistora
Detaljne specifikacije dane su u Tablici 2.3.
18
Tablica 2.3. Specifikacija BP 103-3
Opis Simbol Vrijednost Jedinica
Radna temperatura Top – 40 ... + 80 °C
Temperatura
lemljenja TS 260 °C
Napon kolektor-
emiter UCE 50 V
Struja kolektora ICE 100 mA
Napon baza-emiter UBE 7 V
Termalni otpor RthJA 500 K/W
Valna duljina
maksimalne
osjetljivosti
λS max 850 nm
Raspon osjetljivosti λ 420 ... 1130 nm
Površina osjetljivog
područja S 0.12 mm
Kut upada φ ±55 grad
Relativna spektralna osjetljivost tranzistora prikazana je na Slici 2.13.
19
Slika 2.13. Osjetljivost BP 103-3 fototranzistora
Mjerenja su vršena na dva mjesta, na sredini neonske lampe i na početku lampe, gdje su
primijećene najveće oscilacije u radu. Mjerenje započinje tako što se baza fototranzistora
dovede na analogni ulaz od mikrokontrolera. Struja baze se mijenja s promjenom svijetla.
Veći intenzitet svijetla iznad tranzistora rezultira većom strujom baze. Da bi se povećala
rezolucija očitanja, odnosno raspon struje koja teče kroz bazu u odnosu na osvijetljenost
potrebno je kalibrirati fototranzistor. Zbog toga je dodan otpornik na emiter tranzistora i na taj
način povećana struja kroz bazu i time povećana rezolucija analognog očitanja. Shema
senzora svijetla prikazana je na Slici 2.14.
Za ova mjerenja izabran je fototranzistor zbog svojih jako dobrih specifikacija. Osim izuzetno
velikog raspona osjetljivosti, treba istaknuti i njegov jako brzi odziv na promjenu svijetla. Ova
ista mjerenja nisu mogla biti obavljena s fotootpornicima jer o
imaju jako spor odziv, odnosno sporo mijenjaju svoj otpor i ne mogu zabilježiti
u radu neonske lampe. Jedan fototranzistor je postavljen na sredinu neonske cijevi, a drugi je
postavljen na rub neonske cijevi z
svijetlosti.
Slika 2.14. Shema senzora svijetla
Za ova mjerenja izabran je fototranzistor zbog svojih jako dobrih specifikacija. Osim izuzetno
velikog raspona osjetljivosti, treba istaknuti i njegov jako brzi odziv na promjenu svijetla. Ova
ista mjerenja nisu mogla biti obavljena s fotootpornicima jer oni za razliku od fototranzistora
imaju jako spor odziv, odnosno sporo mijenjaju svoj otpor i ne mogu zabilježiti
. Jedan fototranzistor je postavljen na sredinu neonske cijevi, a drugi je
postavljen na rub neonske cijevi zbog toga što je na rubovima zabilježeno najveće treperenje
20
Za ova mjerenja izabran je fototranzistor zbog svojih jako dobrih specifikacija. Osim izuzetno
velikog raspona osjetljivosti, treba istaknuti i njegov jako brzi odziv na promjenu svijetla. Ova
ni za razliku od fototranzistora
imaju jako spor odziv, odnosno sporo mijenjaju svoj otpor i ne mogu zabilježiti brze promjene
. Jedan fototranzistor je postavljen na sredinu neonske cijevi, a drugi je
bog toga što je na rubovima zabilježeno najveće treperenje
21
2.6 PIR (eng. Passive Infrared) senzor
PIR senzor (Slika 2.15.) je senzor za detekciju ljudskog pokreta u području njegova dosega.
Karakterizira ih mala potrošnja struje, laka implementacija u sustav i dug vijek trajanja.
Upravo iz tih razloga PIR senzori su našli raznoliku primjenu u jednostavnim alarmima i
ostalim uređajima u kojima je potrebno detektirati ljudsku prisutnost [13].
Slika 2.15. PIR senzor
Osnovni dio svakog PIR senzora je piroelektrični element koji detektira različite stupnjeve
infracrvenog zračenja i podijeljen je na dva dijela. Ukoliko jedan dio primi više zračenja od
drugog, stanje na izlazu senzora će se promijeniti. Svaki PIR senzor sadrži tzv. Fresnelovu
leću izrađenu od plastike, koja omogućuje podjelu vidljivosti na manja područja. Na
korištenom senzoru bilo je moguće kalibrirati mogući domet, od maksimalnih 7 metara do
minimalnih tri metra. Također je moguće kalibrirati dužinu vremenskog intervala u kojem će
izlaz PIR senzora biti u stanju HIGH.
Svrha PIR senzora u ovom sustavu je da detektira prisutnost ili kretanje u prostoriji gdje je
kontroler postavljen te da se pošalje obavijest programu za nadzor i dijagnostiku. Stanja
senzora (HIGH, LOW) se bilježe na grafu, te je moguće naknadno utvrditi da li je bilo
kretanja u prostoriji u nekom prijašnjem trenutku (Slika 2.16). Dijagnostika je zamišljena na
način da kontroler kada je senzor u stanju LOW (nema kretanja) šalje programu vrijednost 50,
22
a u stanju HIGH (pokret) šalje vrijednost 5. Pošto graf svakih 0,1 s iscrtava stanje senzora,
vrijednost 100 na vremenskoj osi x označava 10 sekundi odnosno 100 iscrtanih uzoraka.
Slika 2.16. Stanja PIR senzora u programu za dijagnostiku
23
3. OBRADA PRIKUPLJENIH PODATAKA
3.1 AD pretvorba
Da bi se uopće moglo govoriti o obradi signala potrebno je izvršiti pretvorbu iz analognog u
digitalni signal. Komponenta koju koristimo za to je analogno digitalni pretvarač koje je
implementiran u Arduinu. U njemu se vrše sljedeće radnje (Slika3.1):
• Kvantizacija (diskretizacija) po vremenu,
• Kvantizacija po amplitudi uz zadržavanje trenutne vrijednosti cijeli diskretni interval
vremena,
• Kodiranje u n-bitnu binarnu formu.
Slika 3.1. Shematski prikaz A/D pretvarača
A/D pretvarač je određen s dvije temeljne značajke:
• Frekvencijom uzorkovanja
• Stupnjem kvantizacije (brojem bita pretvorbe) koji se najčešće naziva vertikalna
rezolucija.
Postupak pretvorbe analogne u diskretnu digitalnu veličinu nazivamo diskretizacija [14].
Arduino u sebi posjeduje 10-bitni A/D pretvarač koji radi na principu sukcesivne
aproksimacije.
Važnost postojanja više analognih ulaza nije potrebno posebno pojašnjavati. Većina signala
koji se detektiraju preko senzora su analogni i smješteni su u intervalu Vmin < VA < Vmax.
24
Ukoliko je napon preko Vmax postavlja se naponsko dijelilo. Shema sukcesivnog AD
pretvarača prikazana je na Slici 3.2 [15] .
Slika 3.2. Shema sukcesivnog AD pretvarača
AD pretvorba započinje tako što se na pozitivni ulaz komparatora dovodi nepoznati napon
VA, a na negativni ulaz se dovodi izlazni napon iz D/A pretvarača. Izlaz komparatora (koji
može biti 1 ili 0 ovisno o tome je li Ux < UA) dovodi se na ulaz sklopa LOGIKA, a izlaz iz tog
sklopa upravlja radom D/A pretvarača.
Vertikalna rezolucije određuje prirast napona ∆� izmeđju dvije kvantizacijske razine. Što je
prirast ∆� manji to je AD pretvarač bolji. U Tablici 3.1 dana je veza između broja bitova
pretvorbe i broja kvantizacijskih razina.
Tablica 3.1. Ovisnost broja kvantizacijskih razina o bitovima pretvorbe
Broj bitova pretvorbe [n] 4 8 12 16
Broj razina [ 2�] 16 256 4096 67538
Arduino u sebi posjeduje 10bitni AD pretvarač i može mjeriti napone u rasponu od 0 – 5 V. Iz
ta dva podatka možemo izračunati prirast napona ∆� između dva susjedna broja:
∆� = ��2� − 1 = 5
1023 = 0.0048876� (3.1)
Mjerenje svjetline se odvija na način da se mjeri napon baza - emiter fototranzistora. Kolektor
fototranzistora spojen je na 5 V, a emiter na masu. Za neku srednju osvijetljenost (UBE=3.88
V) sukcesivnom pretvorbom AD pretvarač daje vrijednost od 1100011010(2) =794(10) . Ta
25
vrijednost odgovara naponu od 3.8807429 V što znači da je pogreška mjerenja u ovom
slučaju:
∆� = � − �������� = 0,00074929� (3.2)
Izračunata greška je mala za primjenu i osigurava detektiranje oscilacija u rasvjeti.
3.2 Usrednjavanje
Od različitih tehnika potiskivanja smetnje i izvlačenja signala iz šuma najčešće se
upotrebljava metoda usrednjavanja. Usrednjavanje signala je tehnika koja se odvija u
vremenskom području. Usrednjavanje se često koristi pri obradi EEG prilikom obrade
evociranih potencijala (prate se odzivi u mozgu prouzrokovano svjetlosnim bljeskovima) kada
je potrebno odvojiti komponentu signala od komponente šuma. Usrednjavanjem se nastoji
povećati snaga signala u odnosu na šum koji ga ometa, tj. nastoji se izvući osnovni signal iz
šuma. Na Slici 3.3. je prikazano usrednjavanje na osnovu odabira različita broja uzoraka [16].
Slika 3.3. Usrednjavanje signala
Usrednjavanje vršimo prema formuli za aritmetičku sredinu
� = 1
!"�#�
#$%
(3.3)
Signal i šum mogu se razdvojiti na dvije komponente:
26
� = 1
! "�š#�
#$%+ 1
!"�'#�
#$%
(3.4)
gdje je prvi član komponenta šuma, a drugi komponenta signala. Prvi član, odnosno
komponenta šuma približava se nuli zbog toga što je šum sam po sebi slučajan te u sebi sadrži
pozitivne i negativne amplitude koje se zbrajanjem poništavaju odnosno zbroj im teži nuli. S
drugim članom je drukčije budući da su njemu amplitude istog predznaka tako da se
povećanim brojem uzoraka njegova vrijednost povećava u odnosu na šum.
Usrednjavanje je u ovom radu važno zbog velikih oscilacija u razinama intenziteta svjetla
fluorescentne lampe koje su izazvane njenim načinom rada.
3.3 Postupak obrade prikupljenih podataka
Sama realizacija svih prethodno opisanih postupaka vršila se na slijedeći način. Signal je
doveden na analogni ulaz mikrokontrolera, gdje se preko AD pretvarača vrši njegova
pretvorba u digitalni rezolucijom od 10 bita, odnosno postiže vrijednost od 0-1023. Zatim,
zbog same prirode signala fluorescentnog (neonskog) svijetla koje nema stalnu – kontinuiranu
vrijednost, bilo je potrebno izvršiti usrednjavanje signala.
Neonsko svijetlo treperi jako brzo, te stoga ne bi bilo moguće detektirati ikakve promjene bez
da se signal ne usrednji. Sam taj postupak odvijao se na način da je se prikupi po 10 očitanja
te se računa aritmetička sredina. Zatim bi se ta vrijednost u paketu zajedno s drugim podacima
slala bežično na mikrokontroler koji komunicira s računalom, gdje je ta vrijednost iscrtana na
grafu i vrši se dijagnostika. Konkretno, s programerskog stajališta događa se sljedeće:
• Izvršava se očitanje analognog ulaza i vrijednost se šalje funkciji za računanje
sredine
• inicijaliziran je niz od 10 članova
• svaki član niza predstavlja jedno očitanje senzora
• članovi niza se periodično zbrajaju
27
• kada dođe do zadnjeg člana, izračuna se prosjek, vrijednost se vraća u glavni
program i šalje se u paketu drugom mikrokontroleru koji ga prosljeđuje računalu
3.4 Analiza mjerenja u Matlabu
Na Slici 3.4 prikazan je razina osvjetljenja prostorije pri normalnom dnevnom svijetlu. Da se
primijetiti da je se svijetlost ustalila na vrijednostima oko vrijednosti 230 s AD pretvarača.
Signal lagano oscilira zbog toga što nije izvršeno prethodno usrednjavanje, te kad ga se
usporedi oscilacijama kod neonske svijetlosti može se zaključiti da su oscilacije zanemarive.
Slika 3.4. Osvijetljenost prostorije po danu
Međutim kada je u pitanju neonska svijetlost na senzoru dobijemo sasvim drugačija očitanja.
Na Slici 3.5. prikazano je očitanje s neonke bez dodatne obrade signala.
28
Slika 3.5. Očitanje s neonske svjetiljke
Signal ima ovakav oblik zbog samog načina rada neonke, te zbog toga što je frekvencija
uzorkovanja 10 Hz, a frekvencija mreže 50 Hz. Iz priloženog se vidi da je ovakva slika
neupotrebljiva u daljnjem postupku dijagnostike, te da je nužno izvršiti obradu signala,
odnosno u ovom slučaju usrednjavanje. Prilikom usrednjavanja uzeti su uzorci od po deset
vrijednosti što predstavlja vrijeme od 1 sekunde (period uzorkovanja 0,1 s) i zamijenjeni sa
srednjom vrijednošću. Dakle dobije se signal koji izgleda kao na Slici 3.6.
Slika 3.6. Prikaz usrednjenog signala
29
Na slici se jasno vidi da se vrijednost osvjetljenja ustali na neku vrijednost od oko 6000 lx.
Sada se već mogu detektirati prekidi u radu neonske lampe, odnosno kašnjenja u dostizanju
određene osvijetljenosti što također može ukazivati na kraj životnog vijeka žarulje.
Prilikom paljenja svijetla bilo je potrebno određeno vrijeme da neonka počne svijetliti punim
intenzitetom. Općenito u automatici vrijeme porasta se definira kao vrijeme potrebno da odziv
sustava poraste sa 10% na 90% (Slika 3.7). U programu za dijagnostiku definirana je posebna
funkcija koja mjeri vrijeme porasta, odnosno vrijeme od kada korisnik pritisne tipku za
paljenje svijetla do porasta svjetline na određenu vrijednost. Program zatim ispisuje vrijeme
porasta te ukoliko je ono preveliko, znači da je došlo do kvara na starteru neonske lampe.
Slika 3.7. Vrijeme porasta(s lijeva) i isječak iz programa gdje se korisnik upozorava (za
slučaj kada je vrijeme starta predugo)
Budući da je senzor fiksiran na jednom mjestu, na tom mjestu je izmjerena vrijednost
osvjetljenja te se ta vrijednost uzima kao ustaljeno stanje osvijetljenosti prostorije. Mjerenje
ustaljenog stanja vrši se na osnovu informacija s jednog senzora.
30
Na Slici 3.7 s lijeve strane obilježeno je vrijeme porasta, odnosno vrijeme paljenja rasvjete. S
desne strane prikazano je na koji način program upozorava korisnika ukoliko se cijev kasno
pali.
Simulacija prekida rada lampe prikazana je na Slici 3.8. Fototranzistorom je mjerena je
osvijetljenost prostorije u vremenu od 40 sekundi te su prouzročena dva treptaja sa svrhom da
se provjeri može li fototranzistor detektirati tu nepravilnost odnosno pokvarenu lampu.
Budući da je period uzimanja uzoraka kod ovog mjerenja bio 0.1 s, sve promjene koje su
trajale duže od perioda uzorkovanja su detektirane. Na realiziranom kontroleru period
uzimanja uzoraka još je kraće, te je moguće detektirati promjene reda veličine par
milisekundi.
Slika 3.8. Treperenje u radu neonske žarulje
4. REALIZACIJA
Realizacija projekta podrazumijevala
modulom i ostalim sklopovljem
realizirati odgovarajuće softversk
Razvijen je računalni program „Diag“
sustavu, a detaljnije je opisan u nastavku.
4.1 Software „Diag“
Program „Diag“ izrađen je u razvojnoj okolini Microsoft Visual Studio 2010
cijelosti je kompatibilan s Windows
programskom jeziku, te se posebno
programom na mikrokontroleru. Bilo je bitno postići potpunu usklađenost ovih dvaju
jer bi i najmanja pogreška u komunikaciji dovela
Slika 4.1. Razvoj
Za grafički prikaz vrijednosti sa senzora korištena je biblioteka ZedGraph
programskom jeziku, a koristi se za crtanje 2D grafova i dijagrama. Moguće je prilagoditi
podrazumijevala je povezivanje Arduino kontrolera s komunikacijskim
modulom i ostalim sklopovljem, te izrada kućišta za cijeli sklop. Također
softverske potpore preko koje će se moći nadzirati cijeli sustav.
Razvijen je računalni program „Diag“, u kojem je grafički prikazano sve što se događa u
, a detaljnije je opisan u nastavku.
“ izrađen je u razvojnoj okolini Microsoft Visual Studio 2010
Windows 7 i novijim operativnim sustavima. Pisan je u C#
, te se posebno vodilo računa o tome da se program izvršava
programom na mikrokontroleru. Bilo je bitno postići potpunu usklađenost ovih dvaju
pogreška u komunikaciji dovela do pucanja programa „Diag“.
Razvoj programa u okolini Visual Studio 2010
Za grafički prikaz vrijednosti sa senzora korištena je biblioteka ZedGraph [17]
programskom jeziku, a koristi se za crtanje 2D grafova i dijagrama. Moguće je prilagoditi
31
je povezivanje Arduino kontrolera s komunikacijskim
, te izrada kućišta za cijeli sklop. Također je potrebno
preko koje će se moći nadzirati cijeli sustav.
u kojem je grafički prikazano sve što se događa u
“ izrađen je u razvojnoj okolini Microsoft Visual Studio 2010 (Slika 4.1.), i u
operativnim sustavima. Pisan je u C#
izvršava paralelno s
programom na mikrokontroleru. Bilo je bitno postići potpunu usklađenost ovih dvaju sustava,
do pucanja programa „Diag“.
programa u okolini Visual Studio 2010
[17]. Pisana je u C#
programskom jeziku, a koristi se za crtanje 2D grafova i dijagrama. Moguće je prilagoditi da
32
se prikaže više grafova odjednom, a što je najvažnije za ovaj projekt, moguće je crtati graf u
stvarnom vremenu, i time imati grafički uvid u sva prošla i sadašnja stanja senzora. Samo
crtanje vrijednosti na grafu je složen proces i da bi bio moguć potrebno je pravilno sortirati i
prilagoditi vrijednosti te ih pakirati u niz iz kojeg se kasnije crtaju. Proces crtanja se odvija
ciklički u for petlji, na način da se iscrta točka po točka te se zatim pomiče u desno. Samo
crtanje se odvija u klasi timer. Kada Timer otkucava (pokrenut event Timer_tick) izvršava se
metoda ZedGraphControl.AxisChange(). Timer pokrećemo u onom trenutku kada se
uspostavi serijska veza između računala i mikrokontrolera. Brzina crtanja grafa ovisi o
intervalu otkucaja timera i o brzini serijske komunikacije.
Veza između računala i mikrokontrolera ostvarena je preko serijskog porta. Serijski port
zasniva svoj rad na UART (Universal Asynchronous Receiver/Transmitter) kontrolorskom
čipu, koji predstavlja ključnu komponentu serijske komunikacije. Ovaj čip, s jedne
strane prihvaća bajtove podataka od mikroprocesorskog sustava, transformira ih u niz
bitova i šalje bit-po-bit. S druge strane, prihvaća niz bitova koji stižu od nekog
vanjskog uređaja, pakira ih u bajtove i predaje mikroprocesorskom sustavu. Za
komunikaciju se koriste dva pina, Tx - predajni i Rx - prijemni. Na razini UART-a
komunikacija je dvosmjerna (full duplex) što znači da je moguć istovremeni prijem i predaja
podataka.
Microsoft Visual Studio u sebi posjeduje već ugrađenu klasu SerialPort koja u sebi sadrži
metode i evente koji su potrebni za rad programa. Posebno je potrebno istaknuti metodu
GetPortNames() koja dohvaća imena korištenih portova na računalu. Na taj način lako se
odabere port na koji je priključen mikrokontroler putem ComboBoxa, što je omogućilo
korištenje programa na bilo kojem računalu budući da isti uređaj na različitom računalu
rezervira različit port. Na isti način definirana je brzina prijenosa podataka preko serijske
linije odnosno baud rate. Zbog stabilnije komunikacije nRF24L01 modula i mikrokontrolera
brzina prijenosa podataka postavljena je na 57600 bps.
4.2 Opis programa
Grafičko korisničko sučelje omogućava korisniku interakciju s računalom pomoću aktivnih
grafičkih elemenata kao što su tipke (eng. buttons), grafovi, indikatori itd. Grafičko sučelje
predstavlja značajan odmak od sučelja temeljenih na tekstualnom prikazu i unosu. Rad unutar
grafičkog sučelja je intuitivniji i ne zahtjeva prethodno poznavanje tekstualnih naredbi.
Nakon pokretanja programa nužno je odabrati port preko kojeg se odvija serijska
komunikacija. Program će automatski na grafu početi prikazivati vrijednosti sa senzora.
Moguće je pratiti stanje svakog senzora posebno ili svih senzora skupa na jednom grafu.
problem koji je se javio prilikom iscrtavanja grafa na računalu bio je taj kako posebno
grupirati vrijednosti s jednog senzora, s drugog senzora, vrijeme paljenja rasvjete itd.
Računalo kada prima vrijednosti od mikrokontrolera, ono dobiva sve u jednom paketu. Stoga
je trebalo pronaći način kako odvojiti
predstavlja svjetlinu, koji PIR
Riješiti problem nije bilo moguće samo na računalu ili samo na mikrokontroleru, nego je bilo
bitno sinkronizirati programe, odnosno poslati podatak u takvom obliku da ga računalo može
prepoznati, zatim ih kasnije obraditi.
Slika 4.2. Slanje paketa podataka
Zato je između svake dvije vrijednosti poslane na serijski port umetnut znak „ , “ kao na
4.2. Zatim program „Diag“ prima paket podataka, formira niz znakova
dobivene vrijednosti baš na način da traži znak „ , “.
rama nužno je odabrati port preko kojeg se odvija serijska
e automatski na grafu početi prikazivati vrijednosti sa senzora.
Moguće je pratiti stanje svakog senzora posebno ili svih senzora skupa na jednom grafu.
se javio prilikom iscrtavanja grafa na računalu bio je taj kako posebno
grupirati vrijednosti s jednog senzora, s drugog senzora, vrijeme paljenja rasvjete itd.
Računalo kada prima vrijednosti od mikrokontrolera, ono dobiva sve u jednom paketu. Stoga
rebalo pronaći način kako odvojiti podatke s različitih senzora, a uz to
senzor itd.
Riješiti problem nije bilo moguće samo na računalu ili samo na mikrokontroleru, nego je bilo
e, odnosno poslati podatak u takvom obliku da ga računalo može
kasnije obraditi.
podataka preko serijskog porta i odvajanje vrijednosti senzora na
računalu
Zato je između svake dvije vrijednosti poslane na serijski port umetnut znak „ , “ kao na
4.2. Zatim program „Diag“ prima paket podataka, formira niz znakova
dobivene vrijednosti baš na način da traži znak „ , “.
33
rama nužno je odabrati port preko kojeg se odvija serijska
e automatski na grafu početi prikazivati vrijednosti sa senzora.
Moguće je pratiti stanje svakog senzora posebno ili svih senzora skupa na jednom grafu. Prvi
se javio prilikom iscrtavanja grafa na računalu bio je taj kako posebno
grupirati vrijednosti s jednog senzora, s drugog senzora, vrijeme paljenja rasvjete itd.
Računalo kada prima vrijednosti od mikrokontrolera, ono dobiva sve u jednom paketu. Stoga
a uz to znati koja broj
Riješiti problem nije bilo moguće samo na računalu ili samo na mikrokontroleru, nego je bilo
e, odnosno poslati podatak u takvom obliku da ga računalo može
preko serijskog porta i odvajanje vrijednosti senzora na
Zato je između svake dvije vrijednosti poslane na serijski port umetnut znak „ , “ kao na Slici
4.2. Zatim program „Diag“ prima paket podataka, formira niz znakova – string, i parsira
Na Slici 4.3. prikazana je glavna forma programa za dijagnostiku i upravljanje.
Na desnoj strani sučelja nalazi se indikator koji je žut kada je uključena rasvjeta, a crven kada
je isključena. Ovdje valja istaknuti da indikator neće promij
prikazana je glavna forma programa za dijagnostiku i upravljanje.
Slika 4.3. Izgled programa
Na desnoj strani sučelja nalazi se indikator koji je žut kada je uključena rasvjeta, a crven kada
Ovdje valja istaknuti da indikator neće promijeniti boju onda kada se pritisne
34
prikazana je glavna forma programa za dijagnostiku i upravljanje.
Na desnoj strani sučelja nalazi se indikator koji je žut kada je uključena rasvjeta, a crven kada
eniti boju onda kada se pritisne
35
tipka uključi ili isključi, nego tek onda kada se s mikrokontrolera dobije povratna informacija
da je svijetlo stvarno uključeno ili isključeno. Ukoliko korisnik pritišće tipku za paljenje, a
indikator ne reagira, detektira se kvar u rasvjetnom tijelu. Odmah iznad indikatora bilježi se
vrijeme porasta intenziteta svijetla. Vrijeme porasta svjetline važno je za dijagnostiku stanja
neonske cijevi. Definirano je vremenom od pritiska tipke „Upali svijetlo“ do vremena kada
senzor vrati vrijednost određene razine osvjetljenja. U normalnim uvjetima (senzor priključen
na pravu lokaciju) vrijeme ne prelazi 3-4 sekunde maksimalno. Ukoliko se ne upali na vrijeme
prijavljuje se obavijest o grešci.
Stanje PIR senzora prikazano je na tri mjesta: na grafu (plavom bojom), desno od grafa u
tekstualnom obliku i na indikatoru koji je plav ukoliko se detektira pokret, a u suprotnom je
siv. Graf ima vrijednost 50 za stanje LOW (nema pokreta) i 5 za stanje HIGH (kretanje).
Pri testiranju uređaja korištena su dva senzora svijetla, gdje je jedan bio postavljen na sredini
neonske cijevi gdje su zabilježeno manje treperenje, a drugi na kraju cijevi pokazujući veće
smetnje u radu fluorescentne lampe (Slika 4.4). Također mjerenjem je utvrđeno da intenzitet
svijetlosti nije jednak duž cijele cijevi, odnosno da je najjače osvjetljenje oko sredine neonske
lampe (korišteni su isti senzori).
Slika 4.4. Treperenje svijetlosti uz kraj cijevi u odnosu na sredinu
U programu je dodana mogućnost spremanja slike u .jpg datoteku. Također je moguće
spremiti i vrijednosti senzora u .txt datoteku (Slika4.5.), što je korisno kod daljnje obrade
podataka i analize parametara u programskim paketima kao što je Matlab.
36
Slika 4.5. Spremanje podataka
4.3 Upravljanje
U prethodnom poglavlju je već objašnjen način paljenja i gašenja rasvjetnog tijela, ali samo iz
hardverske perspektive. Da bi uopće mogao dati na svom izlazu 5V i tako pobuditi optokapler
koji dalje otvara relej, mikrokontroler mora dobiti naredbu. Korisnik pali svijetlo klikom na
tipku „Upali Svijetlo“, čime se na serijski port šalje određena vrijednost koju mikrokontroler
zaprima i izdaje naredbu za paljenje. Bilo je potrebno voditi računa o sinkronizaciji svih triju
programa; na računalu, na mikrokontroleru koji radi kad daljinski upravljač i na
mikrokontroleru koji upravlja samom rasvjetom.
Korisnik pritiskom na pritiskom na tipku „Upali svijetlo“ šalje „1“ daljinskom upravljaču,
koji dalje bežičnim putem prosljeđuje naredbu kontroleru koji pali ili gasi rasvjetu. U Tablici
4.1. nalaze se dijelovi koda, paralelno pisani na računalu i na mikrokontrolerima, koji su
vezani isključivo za upravljanje.
37
Tablica 4.1. Dio koda koji upravlja paljenjem/gašenjem rasvjete
Računalo Daljinski Kontroler
private void Upali_Click(object
sender, EventArgs e)
{
if (SerialPort.IsOpen)
{
SerialPort.Write("1");
}
else
MessageBox.Show("Greška! \n
Niste povezani.");
}
private void Ugasi_Click(object
sender, EventArgs e)
{
if (SerialPort.IsOpen)
{
SerialPort.Write("8");
}
else
MessageBox.Show("Greška!
\nNiste povezani.");
}
radio.stopListening();
// Prekidamo slušanje
if ( c == '1')
{
PaliGasiVrijeme[0] = 1;
radio.write
(&PaliGasiVrijeme, sizeof
(PaliGasiVrijeme) );
//šaljem stanje tipkala
}
if ( c == '8')
{
PaliGasiVrijeme[0] = 0;
radio.write(&PaliGasiVrijeme,
sizeof (PaliGasiVrijeme) ); //
šaljem stanje tipkala
}
radio.startListening();
// Nastavljamo slušati
.read( &PaliGasiVrijeme,
sizeof(PaliGasiVrijeme) );
If(PaliGasiVrijeme[0]==1)
{
stanje = HIGH;
svijetlina[3] = 10;
}
digitalWrite(5, stanje);
/// Svijetlo se pali
4.4 Kućište kontrolera
Oba uređaja imaju svoja zasebna kućišta. Prvi uređaj koji radi kao daljinski u sebi ima manje
komponenti i zbog toga je i manjih dimenzija. U njemu se nalaze Arduino i nRF24L01
primopredajnik, nalazi se na Slici 4.6. Moguće je proširiti mogućnosti daljinskog uređaja
ugradnjom LCD ekrana za prikaz vrijednosti senzora i ugradnjom tipki za direktno
upravljanje rasvjetom.
38
Slika 4.6. Uređaj za daljinsko upravljanje (prikaz izvana i iznutra)
Kontroler rasvjete je svojim dimenzijama nešto veći od daljinskog. To je ponajprije zbog toga
što u sebi posjeduje više komponenti. Kućište u sebi sadrži Arduino, nRF24L0l za bežičnu
komunikaciju, PIR senzor za detekciju pokreta, relej za upravljanje i konektore za lakše
priključivanje senzora. Na Slici 4.7. s lijeve strane, prikazan je ožičeni kontroler. S lijeve
strane u jedan konektor, spojen je fazni vodič COM (točka na potencijalu 230 V), a u drugi
konektor - NO (normally open), spojena je žica koja dalje vodi do rasvjetnog tijela. Kada relej
preklopi, ove dvije žice se spajaju i pali se rasvjeta. Ovo je najkritičniji dio uređaja zbog toga
što je pod stalnim naponom i jako je bitno voditi računa da su sve žice dobro izolirane, jer u
suprotnom postoji mogućnost strujnog udara ili požara.
Na desnoj strani kontrolera ostavljen je dodatni konektor na koji je moguće priključiti još
jednu neonsku lampu kojom će se upravljati ili neki novi senzor, u slučaju da se želi proširiti
mogućnosti sustava.
39
Slika 4.7. Kontroler rasvjete(prikaz izvana i iznutra)
4.5 Prednosti i nedostatci realiziranog rješenja
Na kraju valja istaknuti da je ovakvo rješenje upravljanja i dijagnostike cjenovno prihvatljivo
u odnosu na neka alternativna rješenja (Siemens LOGO 12/24 RCo, cijena 848,7 kn) [18].
Sklop je testiran u radnim uvjetima. Cjelokupan sustav sastavljen je od niza relativno jeftinih
dijelova, ali obavlja svoj zadatak jednako dobro kao što bi ga obavljali neki skuplji PLC.
Glavna prednost ovakvoga rješenja nadzora, dijagnostike i upravljanja rasvjetom je svakako
cijena uređaja (Tablica 4.2.) i to što sam po sebi ne zahtjeva ništa osim računala. Cjenovno je
prihvatljiv ponajprije jer je sastavljen od niza jeftinih i lako dostupnih komponenti. Također
treba istaknuti i jako pouzdanu bežičnu komunikaciju između RF uređaja, koji imaju jako brz
odziv i brzo uspostavljaju međusobnu komunikaciju što je jako bitno u slučajevima kada je
potrebno pratiti brze promjene signala.
Nedostatak je svakako otežano programiranje ovakvog kontrolera. Sinkronizacija bežičnih
uređaja, prijenos podataka na računalo, daljnja obrada na računalu nisu jednostavan proces za
nekoga tko se prvi put upušta u ovakvo nešto. Da bi ovaj kontroler dobio neku drugu
namjenu, bilo bi mu potrebno u cijelosti reprogramirati kod, a što je znatno jednostavnije kod
ostalih uređaja na tržištu koji se programiraju pomoću grafičkih blokova, ledder diagrama i sl.
40
Još jedan od nedostataka ovakvog sustava je i sama sigurnost, budući da komunikacija nije
kodirana, ali je i to moguće realizirati.
Tablica 4.2. Popis elektroničkih komponenti s cjenikom
Naziv Količina Trgovina Mjesec /
Godina Cijena
UNO R3 Development Board
Microcontroller MEGA328P
ATMEGACH340G Compat
fo Arduino
2
eBay
siječanj, 2015
61,35 kn
5V 1-Channel Relay Module
with Optocoupler 1 eBay
siječanj, 2015 7,98kn
Dupont wire jumper cables
20cm 40 eBay
siječanj, 2015 14kn
NRF24L01+ 2.4GHz Wireless
Transceiver Module
2
eBay
travanj, 2015
27,3kn
HC-SR501 IR Pyroelectric
Infrared PIR Motion Sensor
Detector
1
eBay
travanj, 2015
7,15kn
Kućište za kontrolere 2 Bauhaus srpanj, 2015 18 kn
Čahurasta stezaljka,
plastična 1 Bauhaus srpanj, 2015 8 kn
OPTO BP 103-3 (foto
trans.100mA 50V) 2 Chipoteka travanj, 2015 48 kn
Otpornik 4.7k 10 Chipoteka siječanj, 2015 1,8 kn
Led red 3mm 2 Chipoteka siječanj, 2015 1,06
Vijak M3 X 10mm ravni
cilindrični + matica 10 Chipoteka travanj, 2015 2,7kn
Ukupno: 197,34 kn
4.6 Primjer moguće primjene
Na Slici 4.8. prikazana je moguća
prostoriji. U prostoriji se nalaze tri neonske lampe i dva PIR
Kontroler je moguće podesiti da pali rasvjetu ukoliko se zabilježi pokret preko pir senzora
postavljenih uz neonske lampe.
Slika 4.8
U nadzornoj prostoriji (Slika 4.9
dijagnostiku. Računalo je spojeno s daljinskim uređajem koji komunicira s kontrolerom
rasvjete. Ukoliko dođe do nepravilnosti u radu, program obavještava korisnika koji vrši
nadzor.
primjene
prikazana je moguća implementacija sustava. Slika prikazuje kretanje
laze tri neonske lampe i dva PIR senzora za detekciju pokreta.
podesiti da pali rasvjetu ukoliko se zabilježi pokret preko pir senzora
postavljenih uz neonske lampe.
8. Prikaz prostorije u kojoj se vrši nadzor
lika 4.9.) nalazi se računalo na kojem se izvodi program za
dijagnostiku. Računalo je spojeno s daljinskim uređajem koji komunicira s kontrolerom
rasvjete. Ukoliko dođe do nepravilnosti u radu, program obavještava korisnika koji vrši
41
prikazuje kretanje osobe u
senzora za detekciju pokreta.
podesiti da pali rasvjetu ukoliko se zabilježi pokret preko pir senzora
) nalazi se računalo na kojem se izvodi program za
dijagnostiku. Računalo je spojeno s daljinskim uređajem koji komunicira s kontrolerom
rasvjete. Ukoliko dođe do nepravilnosti u radu, program obavještava korisnika koji vrši
Slika 4.10 prikazuje sučelje programa za dijagnostiku. S lijeve
zabilježena su neka prošla kretanja u prostoriji, te razine osvjetljenja. S desne strane prikazuje
se trenutno stanje. Indikator PIR
pod 1 i 3 je upaljeno (žuta boja), a svijetlo pod 2 ugašeno (crvena boja).
Slika 4.
Slika 4.9. Nadzorna prostorija
prikazuje sučelje programa za dijagnostiku. S lijeve strane na grafičkom sučelju
zabilježena su neka prošla kretanja u prostoriji, te razine osvjetljenja. S desne strane prikazuje
Indikator PIR 2. je crvene boje što znači da je detektiran pokret. Svijetlo
pod 1 i 3 je upaljeno (žuta boja), a svijetlo pod 2 ugašeno (crvena boja).
Slika 4.10. Stanje u programu za dijagnostiku
42
strane na grafičkom sučelju
zabilježena su neka prošla kretanja u prostoriji, te razine osvjetljenja. S desne strane prikazuje
2. je crvene boje što znači da je detektiran pokret. Svijetlo
43
5. ZAKLJUČAK
Daljinsko upravljanje i dijagnostika rasvjete je projekt koji zahtjeva mnogo vremena i truda.
Glavna ideja projekta bila je bežičnim putem osigurati upravljanje rasvjetom i prijenos
podataka iz kojih se vrši dijagnostika sustava. Osim u sam razvoj programskog rješenja, dosta
vremena uloženo je u izradu kontrolera i uređaja za daljinsko upravljanje. Bilo je potrebno
smjestiti sve komponente u kućište i osigurati izolaciju da ne dođe do kratkog spoja ili nekog
drugog neželjenog događaja.
Razvojna okolina Arduino pokazala kao se pravi odabir za kontrolu jednostavnih sustava gdje
nije potrebna velika procesorska snaga. U odnosu na ostala hardverska rješenja, dolazi sa već
izvedenim sklopovima perifernim sklopovima (napajanje, serijsku komunikaciju, takt i sl.) te
je na taj način ušteđeno dosta vremena i olakšan sam postupak projektiranja regulatora.
Iako je u radu detaljno opisan kontroler sa svim svojim komponentama, posebno treba
istaknuti komunikacijski modul nRF24L01 zadužen za bežično komuniciranje. Osim jako
dobrih specifikacija, modul nRF24L01 odlikuje niska cijena, a prilikom testiranja nije
zabilježeno niti jedno slučajno pucanje veze (svaki prekid veze bio je izazvan ili lošim
ožičenjem ili predalekim udaljavanjem primopredajnika).
Moguće su daljnje dorade i poboljšanja sustava u vidu poboljšanja upravljanje, nadogradnje
software-a za dijagnostiku (promjena dizajna, poboljšavanje biblioteke za iscrtavanje
grafova). Moguće je realizirati upravljanje cijelim objektom na način da se preko
komunikacijskog modula nRF24l01 poveže s programom „Diag“ i iz njega odvija upravljanje
i nadzor više sustava.
Ovaj sustav svoju primjenu može naći u skladištima, poslovnim prostorima ili dvorištima
obiteljskih kuća gdje može raditi kao alarmni uređaj (detektira svako kretanje, bilježi ga u
programu, izdaje svjetlosno upozorenje i upozorava korisnika).
Pošto fluorescentne žarulje karakterizira veća efikasnost pretvaranja električne energije u
svjetlosnu, njihovom kombinacijom s PIR senzorom pokreta postižu se značajne uštede
električne energije na osvjetljenju prostora.
Iz svega prethodno navedenog može se zaključiti da su predstavljeni kontroler zasnovan na
Arduino platformi i program za dijagnostiku potpuno funkcionalni te je uz neke manje
nadogradnje moguće postići njihov potpuno autonomni način rada.
44
SAŽETAK
Glavni cilj ovoga rada bio je realizirati sustav koji će bežično upravljati radom rasvjetnih
tijela, kontinuirano pratiti njihov rad te obavještavati ukoliko se primijeti znatna promjena
parametara. Na kontroler je moguće spojiti više rasvjetnih tijela, ali su sva testiranja i
mjerenja zbog jednostavnosti rađena na jednoj neonskoj lampi.
U radu su detaljno opisane sve elektroničke komponente koje su bile potrebne za izradu
kontrolera. Opisano je na koji se način odvija bežična komunikacija između daljinskog
uređaja i kontrolera rasvjete, te na koji način mikrokontroler upravlja električnom rasvjetom.
Predstavljen je komunikacijski modul nRF24L01, način na koji se on programira i povezuje s
mikrokontrolerom.
Da bi se uopće moglo govoriti o obradi signala potrebno je izvršiti pretvorbu iz analognog u
digitalni signal. Komponenta koju koristimo za to je analogno digitalni pretvarač. Nakon što
senzori pošalju vrijednosti mikrokontroleru, izvodi se usrednjavanje podataka, a zatim se te
vrijednosti šalju računalu preko serijskog porta.
Dijagnostika sustava odvija se kroz računalni program „Diag“, gdje se vrijednosti sa senzora
prikazuju grafički i može se točno utvrditi svaka promjena parametara. U programu se može
detektirati treperenje svijetla, slaba osvijetljenost prostorije, kašnjenje u paljenju neonskih
cijevi, kretanje u prostoriji te je sva izvršena mjerenja moguće pohraniti u slikovnom ili
tekstualnom formatu.
KLJUČNE RIJEČI
Arduino, daljinsko upravljanje, dijagnostika, nRF24L01
45
LITERATURA
[1]. Božičević J.; „Temelji automatike I“, Zagreb, Školska knjiga, 1992.
[2]. Fluorescentne svjetiljke, s Interneta, 20.8.2015,
https://hr.wikipedia.org/wiki/Fluorescentna_cijev
[3] Energetska efikasnost rasvjete, s Interneta, 20.8.2015.
http://www.greenhome.co.me/index.php?IDSP=451&jezik=lat
[4]. Philips katalog sijalica i predspojnih sprava, s Interneta, 27.8.2015.
http://www.elektrotehna-sistem.co.rs/philips.html
[5]. Arduino – HomePage, s Interneta, 24.5.2015.
https://www.arduino.cc/
[6]. ATmega 328P – Atmel Corporation, s Interneta, 24.5.2015.
http://www.atmel.com/devices/atmega328p.aspx
[7]. Bonković, M.; Musić J.; Stančić I.; „Mikroregulatori i ugradbeni mrežni sustavi u
Arduino razvojnom okruženju“, Split, FESB, 2013.
[8]. Mateljan I.; „Programiranje C jezikom“, Split, FESB, 2013.
[9]. Datasheet nRF24L01, s Interneta 20.5.2015.
https://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01P
[10]. Beroš S.; „Digitalna instrumentacija, I dio - temelji tehničke i programske
potpore“, Split, FESB, 2008.
[11]. Parametri svjetla u kontekstu javne rasvjete, s interneta, 20.8.2015
http://www.elicom.hr/dokumenti/opcenitojr.pdf
[12]. NPN Silizium BP 103-3 - Fototransistor, s Interneta 20.5.2015.
http://pdf.datasheetcatalog.com/datasheet/siemens/BP103-2.pdf
[13]. Detekcija pokreta primjenom PIR senzora, s Interneta 20.5.2015.
46
http://www.automatika.rs/projekti/detekcija-pokreta-primenom-pir-senzora.html
[14]. Virtualna učionica diskretnih regulacijskih sustava, s Interneta, 22.5.2015.
http://laris.fesb.hr/digitalno_vodjenje/
[15]. Slapničar P.; „Impulsna i digitalna tehnika“, Split, FESB, 2001.
[16]. Synchronous Averaging, s Interneta, 22.5.2015.
http://azimadli.com/vibman/synchronousaveraging.htm
[17]. Plotting graphs in C# with ZedGraph, s Interneta, 29.6.2015.
https://codeabout.wordpress.com/2012/02/10/plotting-graphs-in-c-with-zedgraph- and-vs-2010/
[18]. Katalog Siemens PLC-ova, s Interneta 20.8.2015.
http://www.imbrija-promet.hr/katalog/siemens/niski-napon/nadzor-upravljanje-i- javljanje/p-logo-12-24rco/
47
POPIS OZNAKA I KRATICA
AC (eng. Alternating current), izmjenična struja
A/D Analogno/Digitalna pretvorba
Arduino IDE (eng. Arduino Integrated Development Enviroment), Arduino
razvojno okruženje
DC (eng. Direct current), istosmjerna struja
FIFO (eng. First In First Out), metoda upravljanja i organiziranja
podataka na sabirnici
Itd. Kratica od i tako dalje
JPEG (eng. Joint Photographic Experts Group), komprimirani slikovni
format
LSB (eng. least significant bit) najmanje značajan bit
MSB (eng. most significant bit) najviše značajan bit
Npr. Kratica od na primjer
PIR (eng Passive Infrared), senzor pokreta
PLC (eng. Programmable Logic Controller), programabilni logički
regulator
RFID (eng. Radio-frequency identification), tehnologija koja koristi
radio frekvenciju kako bi se razmjenjivale informacije između
prijenosnih uređaja
SPI (eng. Serial Peripheral Interface), serijski protokol za
komunikaciju s perifernim uređajima
USB (eng. Universal Serial Bus), vanjska sabirnica računala
VOIP (eng. Voice over Internet Protocol), komunikacijska tehnologija
koja omogućava prijenos zvučne komunikacije preko Internet
mreže
48
DODATAK
A. Kod programa za dijagnostiku
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using System.IO.Ports;
using ZedGraph;
namespace DataPlot3
{
public partial class Form1 : Form
{
String COMRx; // string u koji se ispisuje vrijednost s serijskog porta
int NoOfCurves, Samples; // broj grafova(senzora) koja biramo i broj
uzoraka po koliko se prikazuje
int[,] colourList =
{{128,0,0},{0,128,0},{0,0,128},{0,128,128},{128,128,0},{255,0,0},{0,255,0},
{0,0,255},{255,255,0},{255,0,255},{0,255,255}};
List<PointPairList> Data = new List<PointPairList>(); // lista
delegate void SerialDataReceivedDelegate(object sender,
SerialDataReceivedEventArgs e);
delegate void SerialErrorReceivedDelegate(object sender,
SerialErrorReceivedEventArgs e);
public Form1()
{
InitializeComponent();
49
}
private void Form1_Load(object sender, EventArgs e)
{
saveFileDialog2.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif
Image|*.gif";
saveFileDialog2.Title = "Spremi sliku";
saveFileDialog1.Title = "Spremi tekst";
saveFileDialog1.Filter = "Tekstualna datoteka|*.txt";
// Postavljanje naziva osi X Y
// MAA
ZedGraphControl1.GraphPane.Title.Text = "Vrijeme";
ZedGraphControl1.GraphPane.XAxis.Title.Text = "Uzorci";
ZedGraphControl1.GraphPane.YAxis.Title.Text = "";
ZedGraphControl1.GraphPane.XAxis.Scale.MaxGrace = 0;
ZedGraphControl1.GraphPane.YAxis.MajorGrid.IsVisible = true;
ZedGraphControl1.GraphPane.XAxis.MajorGrid.IsVisible = true;
ZedGraphControl1.GraphPane.Legend.Position = ZedGraph.LegendPos.Right;
}
private void COMConnectBtn_Click(object sender, EventArgs e)
{
COMConnectButton.Enabled = false;
COMPortStatusLight.Value = 3;
if (SerialPort.IsOpen)
{
timer1.Enabled = false;
SerialPort.Close();
50
COMPortStatusLight.Value = -1;
COMConnectButton.Text = "Povezivanje";
}
else
{
SerialPort.PortName = COMPortComboBox.Text;
SerialPort.BaudRate = 57600; // moguće mijenjati, ali zbog nrf-a
stavljeno ovoliko
try
{
SerialPort.Open();
MessageBox.Show("Povezano\n" + SerialPort.PortName.ToString() +
" " + SerialPort.BaudRate.ToString());
}
catch
{
COMPortStatusLight.Value = -1;
MessageBox.Show("Greška pri povezivanju " +
COMPortComboBox.Text);
}
if (SerialPort.IsOpen)
{
COMPortStatusLight.Value = 1;
COMConnectButton.Text = "Prekini vezu";
Data.Clear();
deleteCurves();
initCurves();
timer1.Enabled = true;
}
}
COMConnectButton.Enabled = true;
} // prepoznavanje i odabir serijskog porta
private void initCurves() // graf, riješena iscrtavanja
{
51
Samples = int.Parse(SampleTextBox.Text); // broj uzoraka po koliko
crta
NoOfCurves = (int)NoOfDataNumericUpDown.Value; // broj grafova
string[] oznake = { "Fototranzistor", "Fototranzistor", "Detektor
svijetla","Pir senzor" };
for (int j = 0; j < NoOfCurves; j++)
{
PointPairList tempppl = new PointPairList();
for (double x = 0; x < Samples; x++)
{
tempppl.Add(x, 0);
}
Data.Add(tempppl);
ZedGraphControl1.GraphPane.AddCurve(oznake[j] , Data[j],
Color.FromArgb(colourList[j, 0], colourList[j, 1], colourList[j, 2]),
SymbolType.None);
}
}
private void deleteCurves()
{
ZedGraphControl1.GraphPane.CurveList.Clear();
} // brisanje grafa
// event za prikupljanje podataka sa serijskog porta
private void ProcessCOMRx(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(COMRx))
{
string[] parsed = COMRx.Split(',');
int curveNo;
if (parsed.Count() > ZedGraphControl1.GraphPane.CurveList.Count())
// crta onoliko grafova koliko je zadao
curveNo = ZedGraphControl1.GraphPane.CurveList.Count();
52
else
curveNo = parsed.Count();
for (int k = 0; k < curveNo; k++)
{
for (int j = ZedGraphControl1.GraphPane.CurveList[k].NPts - 1;
j > 0; j--)
{
ZedGraphControl1.GraphPane.CurveList[k].Points[j].Y =
ZedGraphControl1.GraphPane.CurveList[k].Points[j - 1].Y;
}
double temp = 0;
try
{
temp = double.Parse(parsed[k]);
}
catch
{
RawTextBox.AppendText("Parse Error\n");
}
ZedGraphControl1.GraphPane.CurveList[k].Points[0].X = 0 ;
ZedGraphControl1.GraphPane.CurveList[k].Points[0].Y = temp;
}
string[] s = COMRx.Split(','); // razdvaja se string COMRx po
',' i trazi se član koji određuje vrijeme potrebno za doseg zadane osvijetljenosti
label3.Text = s[4] + " s";
long aa = long.Parse(s[4]);
if (aa> 5)
{
label8.Text = "Provjerite starter";
53
ovalShape3.BackColor = Color.Red;
}
else
{
ovalShape3.BackColor = Color.LightGray;
label8.Text = "";
}
if (s[3].Equals("5"))
{
label7.Text = "Detektiran pokret";
ovalShape2.BackColor = Color.BlueViolet;
}
else
{
label7.Text = "Nema kretanja";
ovalShape2.BackColor = Color.LightGray;
}
if (s[2].Equals("10"))
{
ovalShape1.BackColor = Color.Yellow;
label4.Text = "Uključeno";
}
else
{
ovalShape1.BackColor = Color.Red;
label4.Text = "Isključeno";
}
RawTextBox.AppendText(COMRx + '\n');
COMRx = "";
}
}
private void ReadLineError(object sender, EventArgs e)
{
54
RawTextBox.AppendText("Read Line Error\n");
} // javlja gresku ocitanja
private void SerialPort_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e) /// isčitavanje serijskog
{
int BufferLength = SerialPort.BytesToRead;
while (BufferLength > 0 && SerialPort.IsOpen)
{
try
{
COMRx = SerialPort.ReadLine();
this.BeginInvoke(new EventHandler(ProcessCOMRx));
if (SerialPort.IsOpen)
BufferLength = SerialPort.BytesToRead;
}
catch
{
this.BeginInvoke(new EventHandler(ReadLineError));
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
SerialPort.Write("7");
ZedGraphControl1.AxisChange();
ZedGraphControl1.Invalidate();
} // timer iscrtava
private void Upali_Click(object sender, EventArgs e)
{
if (SerialPort.IsOpen)
55
{
SerialPort.Write("1");
}
else
MessageBox.Show("Greška! \nNiste povezani.");
} // za paljenje i gasenje
private void Ugasi_Click(object sender, EventArgs e)
{
if (SerialPort.IsOpen)
{
SerialPort.Write("8");
}
else
MessageBox.Show("Greška! \nNiste povezani.");
}
private void COMPortComboBox_DropDown(object sender, EventArgs e)
{
// Prikuplja imena serijskih portova
string[] ports = System.IO.Ports.SerialPort.GetPortNames();
// Čisti comboBox list
COMPortComboBox.Items.Clear();
foreach (string port in ports)
{
.
COMPortComboBox.Items.Add(port);
}
}
private void izlazToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
56
}
private void probaToolStripMenuItem_Click(object sender, EventArgs e)
{
saveFileDialog1.ShowDialog();
}
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
using (StreamWriter sw = new StreamWriter(saveFileDialog1.OpenFile()))
{
for (int i = 0; i < RawTextBox.Lines.Length; i++)
{
sw.WriteLine(RawTextBox.Lines[i]);
}
sw.Flush();
// MessageBox.Show("Mjerenja spremljena");
sw.Close();
}
}
private void spremiSlikuToolStripMenuItem1_Click(object sender, EventArgs
e)
{
saveFileDialog2.ShowDialog();
}
private void saveFileDialog2_FileOk(object sender, CancelEventArgs e)
{
string ime = saveFileDialog2.FileName;
ZedGraphControl1.GetImage().Save(ime);
}
}
}
57
B. Kod uređaja za daljinsko upravljanje
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
RF24 radio(9,10);
int tipkalo = 6;
char c;
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
void setup(void)
{
Serial.begin(57600);
printf_begin();
radio.begin();
radio.openWritingPipe(pipes[1]); // otvaranje cijevi za pisanje
radio.openReadingPipe(1,pipes[0]); // otvaranje cijevi za citanje
radio.startListening();
radio.printDetails();
}
void loop(void)
{
if( Serial.available())
{
c = Serial.read();
if ( radio.available() ) // ako ima podataka za preuzet
{
unsigned long svjetlina[5]; // svjetlina[0] - senzor 1;
unsigned long PaliGasiVrijeme[2]; // podaci koji se šalju;
bool done = false; // upravljanje
while (!done)
58
{
done = radio.read( &svjetlina, sizeof(svjetlina) ); /// očitanje
poslane vrijednosti
delay(2);
}
radio.stopListening();
if ( c == '1')
{
PaliGasiVrijeme[0] = 1;
radio.write( &PaliGasiVrijeme, sizeof(PaliGasiVrijeme) ); //
šaljem stanje tipkala
}
if ( c == '8')
{
PaliGasiVrijeme[0] = 0;
radio.write( &PaliGasiVrijeme, sizeof(PaliGasiVrijeme) ); //
šaljem stanje tipkala
}
radio.startListening();
Serial.print(svjetlina[0]); // prvi fototranz
Serial.print(',');
Serial.print(svjetlina[2]); // drugi fototranz
Serial.print(',');
Serial.print(svjetlina[3]); // svijetlo je li upaljeno ili
ugašeno
Serial.print(',');
Serial.print(svjetlina[1]); // pir senzor
Serial.print(',');
Serial.print(svjetlina[4]); // vrijeme porasta; brzina paljenja
Serial.print(',');
Serial.println(0);
delay(10);
}
}
}
59
C. Kod kontolera rasvjete
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
RF24 radio(9,10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
int calibrationTime = 5; //vrijeme potrebno PIR senzoru da se kalibrira
(10-60 sekundi prema datasheetu)
int pirPin = 7; //izlazni pin od pir senzora
int ledPin = 8;
const int numReadings = 10; // broj očitanja koja se usrednjavaju
int readings[numReadings];
int index = 0; // index trenutnog očitanja
int total = 0; // ukupna vrijednost
unsigned long average = 0; // prosjek
const int numReadings1 = 10;
int readings1[numReadings1];
int index1 = 0;
int total1 = 0;
unsigned long average1 = 0;
int inputPin = A0;
int inputPin1 = A2;
long brojac;
int pomocna;
void setup(void)
{
Serial.begin(57600); // početak serijske komunikacije
pinMode(pirPin, INPUT); //PIR
pinMode(ledPin, OUTPUT); //PIR
digitalWrite(pirPin, LOW); //PIR
digitalWrite(ledPin, HIGH);
60
pinMode(5, OUTPUT); // svijetlo(glavni izlaz), nisam ga
deklarirao
printf_begin();
radio.begin();
printf("calibrating sensor ");
/* for(int i = 0; i < calibrationTime; i++) //PIRRRRR
{
Serial.print(".");
delay(1000);
}
*/
printf(" done");
printf("SENSOR ACTIVE");
for (int thisReading = 0; thisReading < numReadings; thisReading++)
// postavljanje svih očitanja na 0
readings[thisReading] = 0;
for (int thisReading1 = 0; thisReading1 < numReadings1;
thisReading1++)
readings1[thisReading1] = 0;
radio.openWritingPipe(pipes[0]); // otvaranje "cijevi" za pisanje
radio.openReadingPipe(1,pipes[1]); // otvaranje "cijevi" za slušanje
radio.startListening();
radio.printDetails();
brojac= millis();
}
void loop(void)
{
radio.stopListening(); // prvo prestani slušati da može započeti slanje
unsigned long svijetlina[5];
61
svijetlina[0]= funkcija(analogRead(A0));
svijetlina[2]= funkcija2(analogRead(A1));
svijetlina[4] = 0;
bool stanje;
if( svijetlina[0] < 400 ) // čekanje da dosegne odreñenu vrijednost
osvjetljenja
{
pomocna = millis()- brojac; // pomoćna varijabla
pomocna = pomocna/1000;
}
if( svijetlina[0] > 400 )
{
svijetlina[4]= pomocna;
}
if(digitalRead(pirPin) == HIGH)
{
svijetlina[1] = 5; //PIRRR pokret
}
if(digitalRead(pirPin) == LOW)
{
svijetlina[1] = 50; // PIR nema pokreta
}
radio.write( &svijetlina, sizeof(svijetlina) ); // šalje podatke
radio.startListening(); // Nastavljamo slušati
unsigned long started_waiting_at = millis();
bool timeout = false;
while ( ! radio.available() && ! timeout )
if (millis() - started_waiting_at > 200 )
timeout = true;
if ( timeout ) // ako nije ništa primljeno
62
{
printf("Svijetlo upaljeno\n\r"); // svijetlo ostaje upaljeno
}
else // inače palimo/ gasimo svijetlo
{
unsigned long PaliGasiVrijeme[2];
radio.read( &PaliGasiVrijeme, sizeof(PaliGasiVrijeme) );
if (PaliGasiVrijeme[0] ==1 )
{
stanje = HIGH;
brojac = millis();
svijetlina[3] = 10; /// Svijetlo se pali
printf("Palim Svijetlo %lu \n\r" ,PaliGasiVrijeme[0]);
}
else if (PaliGasiVrijeme[0] ==0)
{
stanje = LOW;
svijetlina[3] = 0; // Svijetlo se gasi
printf("Gasim Svijetlo %lu \n\r", PaliGasiVrijeme[0]);
}
digitalWrite(5, stanje);
}
}
int funkcija(float x) // funkcija za usrednjavanje
{
total= total - readings[index]; // oduzmemo zadnje očitanje
readings[index] = x; // očitanje sa senzora
total= total + readings[index]; // sumiranje očitanja
index = index + 1; // uvećanje indeksa
if (index >= numReadings) /// ako smo došli do kraja niza
63
index = 0; // početak novog niza
average = total / numReadings; // izračunaj prosjek
return average; // vraća prosjek u glavnu funkciju
delay(10); // čekanje izmeñu dva očitanja radi stabilnosti
}
int funkcija2(float x) // ista kao i funkcija jedan ali samo za drugi
senzor
{
total1= total1 - readings1[index1];
readings1[index1] = x;
total1= total1 + readings1[index1];
index1 = index1 + 1;
if (index1 >= numReadings1)
index1 = 0;
average1 = total1 / numReadings1;
return average1;
delay(10);
}