funkcijska in izvedbena specifikacija projekta...

39
FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA PAMETNO STANOVANJE Daniel Pahič TK-MAG 2

Upload: others

Post on 19-Mar-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA PAMETNO STANOVANJE

Daniel Pahič TK-MAG 2

Page 2: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

2

KAZALO

1. NAMEN ............................................................................................................................................ 5

2. REFERENČNI DOKUMENTI .............................................................................................................. 5

3. SPECIFIKACIJA ZAHTEV ................................................................................................................... 6

4. FUNKCIJSKA SPECIFIKACIJA ............................................................................................................ 6

4.1 Blokovna shema ............................................................................................................................ 6

4.2 Uporabljene tehnologije ................................................................................................................ 7

4.2.1 Senzorji temperature.............................................................................................................. 7

4.2.2 Luči ......................................................................................................................................... 7

4.2.3 Arduino ................................................................................................................................. 11

4.2.4 Ethernet Shield ..................................................................................................................... 12

4.2.5 MQTT klient za Arduina ........................................................................................................ 12

4.2.6 Strežnik RSMB....................................................................................................................... 14

4.2.7 PHP/HTML spletna stran na apache ..................................................................................... 14

4.2.8 Android aplikacija ................................................................................................................. 14

4.3 Blokovna shema .................................................................................................................... 15

4.3.1 Blokovna shema realiziranega projekta ............................................................................... 15

4.3.2 Blokovne sheme komercialnega projekta.................................................................... 16

4.4 Možne razširitve .................................................................................................................... 17

5. IMPLEMENTACIJA PROJEKTA ....................................................................................................... 18

5.1 Stroški razsvetljave ...................................................................................................................... 18

5.2 Cena ostalih komponent ............................................................................................................. 18

5.3 Postavitev spletnega strežnika ............................................................................................. 18

5.4 Postavitev spletne strani ....................................................................................................... 19

5.5 Uporaba RSMB ...................................................................................................................... 21

5.6 Programiranje Arduina brez brezžičnih modulov .................................................................. 21

5.7 Postavitev sistema ................................................................................................................ 23

5.7.1 Povezava temperaturnih senzorjev z Arduinom .................................................................. 23

5.7.2 Povezava brezžičnih modulov z Arduinom .................................................................... 23

5.8 Programiranje Arduina z brezžičnimi moduli ...................................................................... 24

5.9 RGB LED luč ........................................................................................................................... 26

5.10 Priključitev in programiranje RGB na Arduinu ..................................................................... 27

5.11 Izgradnja ohišja oddaljenega Arduina .................................................................................. 29

5.12 Android aplikacija ................................................................................................................. 30

6. KONČNI SISTEM ............................................................................................................................ 35

7. TESTIRANJE.................................................................................................................................... 37

Page 3: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

3

7.1 Domet .......................................................................................................................................... 37

7.2 Testiranje delovanje ................................................................................................................... 37

8. STROŠKI ......................................................................................................................................... 37

8.1 Optimizacija stroškov ........................................................................................................... 38

9. NADALJNO DELO ........................................................................................................................... 39

Page 4: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

4

KAZALO SLIK

Slika 1 - Blokovna shema ......................................................................................................................... 6 Slika 2 - DS18S20 temp. senzor ............................................................................................................... 7 Slika 3 - Delovanje X10 protokola ............................................................................................................ 8 Slika 4 - X10 Lamp Module ...................................................................................................................... 8 Slika 5 - Shema povezave ........................................................................................................................ 8 Slika 6 - Brezžično komuniciranje .......................................................................................................... 10 Slika 7 - Razvojni ploščici Duemilanove in UNO .................................................................................... 11 Slika 8 - Ethernet shield ......................................................................................................................... 12 Slika 9 - Heklo Word MQTT arduino ...................................................................................................... 13 Slika 10 - Spletna stran .......................................................................................................................... 14 Slika 11 - Android aplikacija ................................................................................................................... 15 Slika 12 - Shema končnega sistema ....................................................................................................... 16 Slika 13 - Primer projekta brez strežnika ............................................................................................... 16 Slika 14 - Logo XAMP ............................................................................................................................. 19 Slika 15 - v1 in v2 prijavne strani ........................................................................................................... 19 Slika 16 - v2 spletne strani ..................................................................................................................... 20 Slika 17 - Baza uporabnikov ................................................................................................................... 20 Slika 18- Baza temperatur ..................................................................................................................... 20 Slika 19 - Razvojno okolje Arduino ........................................................................................................ 22 Slika 20 – Sistem brez modulov ............................................................................................................. 23 Slika 21 - Povezava Arduina z RFM12BDP ............................................................................................. 24 Slika 22 - Sestava header-ja ................................................................................................................... 24 Slika 23 - RGB mešanje barv .................................................................................................................. 27 Slika 24 - Shema piramidnega ohišja ..................................................................................................... 29 Slika 25 - Izdelava ohišja ........................................................................................................................ 29 Slika 26 - Pametni telefon brskalnik ...................................................................................................... 30 Slika 27 - Login zaslon in Menijski zaslon prve verzije aplikacije ........................................................... 34 Slika 28 - Login zaslon in Menijski zaslon končne verzije aplikacije ...................................................... 34 Slika 29 - Blokovna shema končnega sistema ....................................................................................... 35 Slika 30 - Končni produkt ....................................................................................................................... 35 Slika 31 - Končni produkt (Levo v Magenta barvi) ................................................................................. 36 Slika 32 - Projekt z uporabo ATmega 328 .............................................................................................. 38

KAZALO TABEL

Tabela 1 - Tabela spreminjanja barv RGB luči ....................................................................................... 26

Page 5: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

5

1. NAMEN

Namen funkcijske specifikacije je prikaz postopka izgradnje danega projekta in podroben opis. S pomočjo tega dokumenta želimo bralca informirati, o podatkih potrebnih za izgradnjo lastnega pametnega stanovanja. V dokumentu najdemo vse informacije, ki so potrebne za izgradnjo danega projekta.

2. REFERENČNI DOKUMENTI

[1] Ardiono MQTT klient. Privzeto 15. 11. 2011 iz: http://knolleary.net/arduino-client-for-mqtt/

[2] Temperaturni senzor DS18S20. Privzeto 15. 11. 2011 iz: http://datasheets.maxim-ic.com/en/ds/DS18S20.pdf

[3] Steven Goodwin. (2010). Smart Home Automation with Linux. Apress.

[4] Arduino. Privzeto 15. 11. 2011 iz: http://www.arduino.cc

[5] IBM. RSMB. Privzeto 15. 11. 2011 iz:

https://www.ibm.com/developerworks/community/alphaworks/tech/rsmb

[6] X10 Europe. Privzeto 15. 11. 2011 iz: http://www.x10europe.com/

*7+ Arduino knjižnica DallasTemperature. Privzeto 10. 12. 2011 iz:

[8] XAMPP. Privzeto 10.12.2011 iz: http://www.apachefriends.org/en/xampp.html

[9] Arduino knjižnica Jeenode. Privzeto iz: http://jeelabs.org/2009/02/10/rfm12b-library-for-arduino/

[10] Michael Margolis. (2011). O'reillys Media. O'reillys Arduino Cookbook 2nd Edition.

[11] Michael McRoberts. (2010). Apress. Beginning Arduino.

[12] w3schools. (2012). Privzeto iz: http://www.w3schools.com

Page 6: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

6

3. SPECIFIKACIJA ZAHTEV

Uporabnik želi, da mu stanovanje spremenimo v delujoč primer pametne hiše (avtomatizacija stanovanja). Z mobilnim telefonom Android želi dostopati do spletnega strežnika, ki bi mu izpisoval trenutno temperaturo v posameznih sobah stanovanja. Rad bi prav tako z mobilnim telefonom krmilil luči, vse pa naj bo dostopno tudi na spletni strani. Projekt naj bo zasnovan tako, da bo v prihodnosti omogočal razširitev sistema.

4. FUNKCIJSKA SPECIFIKACIJA

Funkcijska specifikacija je zasnovana tako, da nudi podrobnejši vpogled v sestavo in izgradnjo zadanega sistema.

4.1 Blokovna shema

Slika 1 - Blokovna shema

1. Temperaturni senzor in luči – na najvišjem nivoju naše blokovne sheme se nahajajo temperaturni senzorji in pa luči. Temperaturni senzor bo digitalen in bo z Arduinom povezan direktno. Luči bodo z Arduinom povezane bodisi preko brezžičnega modula kot je XBEE ali pa žično.

2. Arduino z ethernet shieldom – Glavno gonilo našega sistema bo mikrokontrolnik Arduino. V zgornji smeri bo povezan s senzorji in lučmi, v spodnji pa bo preko ethernet shielda sporočal stanje strežniku.

3. RSMB Strežnik na Linux/Windows – Prejemal bo sporočila od klienta, ki bo tekel na Arduinu.

Page 7: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

7

4. PHP spletna stran – PHP ali HTML spletna stran, ki bo tekla na apache, bo predvajala vsebine, ki jih bo strežnik posredoval od Arduina. Prav tako pa bo uporabniku omogočala kontrolo nad prižiganjem in ugašanjem luči.

4.2 Uporabljene tehnologije Za delujočo različico sistema, bomo v končni fazi potrebovali več komponent, ki bodo del zaključenega sistema. V tem poglavju bodo opisane tako programske kot strojne komponente, ki jih bomo potrebovali pri izdelavi.

4.2.1 Senzorji temperature Senzorji so elektronske komponente, ki omogočajo interakcijo z okoljem. Ker je mikrokrmilnik v osnovi zelo preprost računalnik, lahko procesira samo električne signale. Da zazna svetlobo, temperaturo in druge fizikalne količine potrebuje senzorje, ki te signale pretvorijo v električne signale. Ko so podatki iz senzorjev prebrani, ima naprava informacijo potrebno za odziv. Podatke iz senzorjev beremo z uporabo V/I nožic, ki so na razpolago na vseh ploščah Arduino. Za preverjanje temperature v posameznih sobah stanovanja bodo potrebni temperaturni senzorji. Senzorji bodo nameščeni v vsakem prostoru, in sicer ne preveč blizu izvorom toplote (radiatorji, klime). Temperaturni senzorji bodo digitalni. Za programiranje senzorjev bomo uporabili knjižnico DallasTemperature (v kolikor bomo izbrali senzor DS18S20).

Slika 2 - DS18S20 temp. senzor

4.2.2 Luči

X10 – Linux for smart homes Pri opravljanju luči na daljavo je naša prva ideja upravljanje luči s pomočjo protokola X10. Protokol X10 deluje na principu uporabe že obstoječe električne napeljave. Slabosti:

Večina obstoječih modulov uporablja ameriški

Cena

Praktičnost? (vsaka naprava mora biti povezana v električno omrežje preko vtičnice) Prednosti

Uporaba obstoječega električnega omrežja

Page 8: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

8

Slika 3 - Delovanje X10 protokola

Pri raziskovanju sem naletel tudi na evropejsko različico, ki bi nam v končni fazi omogočala enostavnejšo implementacijo projekta. Najenostavnejša in najcenejša opcija bi bila uporaba »Screw in Lamp modula« in enega izmed cenejši X10 kontrolerjev, ki bi bil povezan na Arduina.

Slika 4 - X10 Lamp Module

X10 krmilnik bi na Arduina povezal preko RJ-11 konektorja, ki ga najdemo na telefonskih slušalkah. Shema sestave tega bi bila kot je na spodnji Sliki 5. Programiranje bo potekalo s pomočjo Arduinove knjižnice X10.

Slika 5 - Shema povezave

Primer kode bi bil sledeč:

x10(int strLength) // Ustvari instanco X10 na dveh pinih

void write(byte houseCode, byte numberCode, int numRepeats) //Pošlje X10 sporočilo myHouse.write(A, ALL_LIGHTS_ON, 1); //Pošlje ukaz v tem primeru prižge vse luči ki so povezane na module

Page 9: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

9

Drugi primeri ukazov, ki so definirani v knjižnici:

ALL_UNITS_OFF

ALL_LIGHTS_ON

ON

OFF

DIM

BRIGHT

ALL_LIGHTS_OFF

EXTENDED_CODE

HAIL_REQUEST

HAIL_ACKNOWLEDGE

PRE_SET_DIM

EXTENDED_DATA

STATUS_ON

STATUS_OFF STATUS_REQUEST

Page 10: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

10

4.2.3 Brezžično vodenje luči

Obstaja veliko načinov kako spraviti podatke iz ene na drugo napravo brezžično, pri tem nimamo na voljo le bee, ZigBee in X10 ampak tudi druge metode. Na spodnji, sliki lahko vidimo primerjavo glavnih načinov brezžične komunikacije.

Slika 6 - Brezžično komuniciranje

Med raziskovanjem najbolj učinkovite metode brezžičnega kontroliranja luč, smo naleteli na dva brezžična modula, ki bi jih lahko uporabili za naš projekt. Pri raziskovanju smo bili pozorni predvsem na: ceno, frekvenčni spekter in podporo.

RFM12B

Frekvenca 433MHz – v Sloveniji odprto

Poraba 2,2- 3,8 V

cena 7,58€- med najcenejšimi

na zalogi (13)

modulacija: FSK

domet: zunaj >200m

na voljo android knjižnica: http://jeelabs.org/2009/02/10/rfm12b-library-for-arduino/

http://www.quasaruk.co.uk/acatalog/RFM12B.pdf

http://si.farnell.com/quasar/rfm12b-433-d/module-transceiver-5db-433mhz/dp/1878282 Knjižnica omogoča pošiljanje paketkov posameznim napravam (ID 1..30) ali pa brodcasting (ID 0).

ALPHA TRX433S TRANSCEIVER

Frekvenca 430,24 MHz do 439,75 MHz

Poraba 2,2- 3,8 V

Cena 8,30€

Na zalogi (237)

modulacija: FSK

http://si.farnell.com/rf-solutions/alpha-trx433s/module-transceiver-trx433s/dp/1718689

http://www.farnell.com/datasheets/1442999.pdf

Page 11: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

11

4.2.3 Arduino Arduino je odprtokodna prototipna platforma, ki temelji na fleksibilni strojni in programski opremi. Strojni del opreme predstavlja vhodno/izhodna (V/I) plošča z mikrokrmilnikom, ki obstaja v različnih oblikah in velikostih, odvisno od namena uporabe. Programsko opremo tvorita programski jezik Wiring in prevajalnik, s katerima generiramo kodo za mikrokrmilnik in poenostavimo naloge pri delu s strojno opremo, ter razvojno okolje, ki temelji na okolju Processing IDE in ponuja preprost vmesnik med strojno in programsko opremo. V našem primeru bomo uporabili eno izmed različic Arduino ploščice. Odločili se bomo med Arduino Uno in Arduino Duamilanove, obe lahko vidimo tudi na spodnji Sliki. Obe ploščici temeljita na mikrokontrolerju ATmega328, katerega specifikacije so slednje:

pomnilnik: o neizbrisljivi pomnilnik tipa »flash« 32 KB, o EEPROM 1 KB, o RAM 2 KB;

periferne funkcije: o 16 digitalnih vhodov, o 6 analognih vhodno-izhodnih priključkov z 10-bitno ločljivostjo, ki se lahko uporabijo

tudi kot digitalni vhodno-izhodni priključki, o 6 kanalov PWM, o programirani serijski vmesnik, o 6 različnih stanj pripravljenosti, o integriran analogni komparator, o prekinitve in zbujanje preko menjave stanja na vhodnem priključku, o programirani čuvaj (watchdog timer), o podpora za Philipsovo serijsko komunikacijo I2C;

delovanje: o delovna napetost 1,8 V – 5,5 V, o delovna temperatura -40 °C do 85 °C, o maksimalna frekvenca oscilatorja 20 MHz.

Slika 7 - Razvojni ploščici Duemilanove in UNO

Na Arduinu bomo prav tako namestili MQTT clienta, kar bo procesiralo podatke iz digitalnega termometra in jih v obliki sporočil pošiljalo na strežnik.

Page 12: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

12

4.2.4 Ethernet Shield V/I povezave mikrokrmilnika omogočajo da se mikrokrmilnik poveže z velikim številom razširljivih modulov ali drugače imenovanimi ščiti (shield). Eden izmed takih ščitov, ki ga bomo potrebovali pri realizaciji projekta je ščit za povezavo na lokalno omrežje. Ta nam bo omogočal oddaljen dostop do podatkov, ki jih bo mikrokontrolnik pridobil od senzorjev in nam omogočal komunikacijo tudi v drugi smeri.

Slika 8 - Ethernet shield

Ščit prav tako nosi prostor kamor lahko vstavimo SD kartico in nam omogoča shranjevanje spletne strani nanjo. Ščitu moramo dodeliti MAC in fiksen IP naslov.

4.2.5 MQTT klient za Arduina

MQTT je protokol za povezavo med dvema napravama. Bil je ustvarjen kot zelo preprost publish/suscribe sporočevalni protokol. V našem primeru ga bomo uporabili za komunikacijo med Arduinom in RSMB strežnikom, ki bo tekel na računalniku. Spodaj lahko vidimo primer MQTT aplikacije, mi teče na Arduinu in RSMB strežniku pošlje »Heklo Word«.

Page 13: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

13

#include <SPI.h>

#include <Ethernet.h>

#include <PubSubClient.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

byte ip[] = { 192, 168, 1, 4 };

byte server[] = { 192, 168, 1, 1 };

void callback(char* topic, byte* payload,int length) {

// handle message arrived

}

PubSubClient client(server, 1883, callback);

void setup()

{

Ethernet.begin(mac, ip);

if (client.connect("arduino")) {

client.publish("foo","hello world");

client.subscribe("bar");

}

}

void loop()

{

client.loop();

}

Slika 9 - Heklo Word MQTT arduino

Page 14: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

14

4.2.6 Strežnik RSMB Really Small Message Broker je majhen strežnik ki uporablja MQTT (MQ Telemetry Transport) za lahko in enostavno pošiljanje sporočil. Strežnik omogoča pošiljanje sporočil od/do majhnih naprav kot so senzorji. "Publisherji" pošiljajo sporočila brokerjem (strežniku), ki nato distributira sporočila "suscriberjem" (naročnikom), ki so zahtevali prejemanje teh sporočil. RSMB je majhen program, ki pošilja in sprejema informacije v obliki sporočil od/do aplikacij in naprav vse pa poteka preko TCP/IP omrežne povezave. V našem primeru bomo RSMB namestili na računalnik na katerem teče bodisi Windows ali pa Linux operacijski sistem.

4.2.7 PHP/HTML spletna stran na apache V končni fazi grajenja našega projekta bomo postavili tudi PHP/HTML spletno stran, ki bo tekla na apache strežniku. Stran bo postavljena bodisi na Windows ali Linux operacijskem sistemu. Dostop do pregledovanja in krmiljenja stanja bo uporabniku omogočala spletna stran. V prvi fazi se bo v spletno stran potrebno prijaviti z uporabniškim imenom nato bomo napredovali do glavne strani kjer bomo lahko videli posamezna stanja po sobah in krmilili luči. Na spodnji sliki lahko vidimo končni primer izgleda naše spletne strani.

Slika 10 - Spletna stran

Pri izgradnji spletne bomo pa prav tako potrebovali MQTT klient knjižnico za PHP, ki bo sprejemala sporočila od RSMB.

4.2.8 Android aplikacija

Page 15: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

15

Do končnega izdelka bo mogoče dostopati tudi iz mobilnih telefonov z operacijskim sistemom Android. Aplikacija, ki jo bomo izdelali bo dostopala do spletnega strežnika in iz njega izločila pomembne informacije, ki jih bo predvajala na zaslonu. Kako bo končna aplikacija izgledala lahko vidimo na spodnji sliki.

Slika 11 - Android aplikacija

4.3 Blokovna shema

4.3.1 Blokovna shema realiziranega projekta

Page 16: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

16

Slika 12 - Shema končnega sistema

4.3.2 Blokovne sheme komercialnega projekta

Prvi primer komercialnega projekta bi lahko bil izločitev strežnika, s čim bi zmanjšali stroške in prostor pri uporabniku, vseeno bi pa omogočili uporabniku nadzor nad spletno stranjo, saj bi se ta nahajala na ethernet shieldu Arduina, spletna stran bi sicer bila okrnjena ampak bi še vedno služila namenu. V tem primeru bi stroški bili zmanjšani za ceno strežnika, prav tako bi pa prihranili tudi na kompleksnosti projekta.

Slika 13 - Primer projekta brez strežnika

Page 17: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

17

V našem projektu bi pa lahko odstranili tudi potrebo po ethernet shieldu in s tem prenesli spletno stran na enega izmed ponudnikov gostovanja, v končni fazi smo lahko to tudi mi.

4.4 Možne razširitve

Projekt bo izgrajen tako, da bodo v prihodnje možne razširitve sistema. Sistem bi razširili v tej smeri da bi bil uporabniku čim bolj prijazen. Pri tem bi lahko dodali veliko senzorjev kot so senzor vlage senzor gibanja…

Sistem bi lahko razširili prav tako z RFID dostopom, avtomatičnim dvigom/spustom rulet, alarmnim sistemom…

Povezava X10 kontrolerja bi nam omogočala mnogo kasnejših razširitev.

Page 18: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

18

5. IMPLEMENTACIJA PROJEKTA

Pri implementaciji projekta smo se najprej lotili preračunavanja stroškov izgradnje končnega projekta.

5.1 Stroški razsvetljave

Največji problem prve faze projekta predstavlja cena dodatnih elementov razsvetljave. Ponudniki za evropske različice izdelkov x10 imajo precej visoke cene in se nam nakup modulov za luči ne izplača. Tako bi nas implementacija tega dela projekta stala (5 podprtih luči v različnih prostorih):

5 Screw in lamps 5*17,83 € = 89,15€

Mini kontroler (podpira do 8 modulov) 43€ Nar skupaj nanese na 132€.Druga možnost pa je tudi da bi uporabili module ki se namestijo za stikala od luči. Na žalost nisem našel prav tako nobenih cenejših. Cena implementacije tega dela projekta se mi zdi prevelika, zato menim da bi bilo bolje pozornost nameniti na kakšno drugo implementacijo te zamisli, ali pa se lotimo kakšne druge razširitve tega projekta. Primera drugačne implementacije tega problema sta na primer: Z-Wave ali bee. Ampak se na žalost cena obojega približa ali celo preseže ceno modulov x10.

5.2 Cena ostalih komponent

Ostale komponente našega projekta ne presežejo cene razsvetljave:

Arduino UNO = 24€

Ethernet Shield = 39€

Temperaturni senzorji DS18S20 * 3 = 12€

Ostale komponente

5.3 Postavitev spletnega strežnika Spletni strežnik, MySQL bazo in spletno stran smo najprej postavili na prenosnem računalniku, saj nam je to omogočalo lažje delo, kasneje bomo vse prestavili na domač stacionarni računalnik. Za postavite Apache in MySQL smo uporabili XAMPP. XAMPP nam omogoča enostavno namestitev vse potrebne programske opreme, ki jo potrebujemo za domač strežnik. Z namestitvijo naenkrat namestimo Apache strežnik, MySQL bazo ter programska jezika PHP in Pearl. Namestitev tega veliko hitrejša in manj kompleksna kot nameščanje posameznih komponent. Podobna stvar je tudi LAMP, ki nam ob enem namesti tudi distribucijo Linuxa.

Page 19: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

19

Slika 14 - Logo XAMP

5.4 Postavitev spletne strani

Izdelave spletne strani sem se lotil v več fazah. Najprej sem izdelal osnovno stran, ki je omogočala samo prijavo in nosila eno stran na kateri se je prikazovala slika tlorisa stanovanja s temperaturo.

Slika 15 - v1 in v2 prijavne strani

V drugi različici spletne strani sem izdelal logotip, za izdelavo katerega sem združil gumbke, ki sem jih izdelal za namene drugega projekta, ampak tistega projekta nikoli nisem uspel dokončati. Združili smo jih v nekakšno smiselno zaporedje, ki bi naj predstavljala projekt pametne hiše (hiša, razsvetljava, človek in znanost). Prav tako sem v drugi verziji izdelal uporabniško prijaznejši vmesnik. Glavni strani sem dodal meni z naslednjimi menijskimi elementi; DOMOV, PAMETNO STANOVANJE, STATISTIKA, O MENI in KONTAKT. Stran domov bo nosila informacije o stanju in posodobitvah spletne strani, stran pametno stanovanje nosi tloris stanovanja in izpisano temperaturo, v končni fazi je naš cilj da bo omogočala tudi krmiljenje luči. Stran statistika bo s pomočjo orodja JpGraph izrisovala graf spreminjanja temperature v preteklih dneh. Stran o meni, bo v prihodnje nosila informacije o avtorju projekta, stran kontakt pa bo omogočala enostavno pošiljanje elektronske pošte na moj poštni naslov. Kakšen izgled ima druga verzija spletne strani lahko vidimo na spodnji Sliki 15.

Page 20: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

20

Slika 16 - v2 spletne strani

Spletna stran za prijavo dostopa do ene baze podatkov ki nosi uporabnike, imam pa tudi drugo bazo podatkov do katere dostopa stran pametno stanovanje in pobira zadnje vpisane podatke po najvišjem indexu. Funkcija za klicanje najvišjega indexa v MySQL je naslednja.

Na spodnjih slikah lahko vidimo primere baze uporabnikov in baze, ki shranjuje temperature.

Slika 17 - Baza uporabnikov

Slika 18- Baza temperatur

Baza uporabnikov ima naslednje atribute id, ki nosi zaporedno številko prijavljenega uporabnika, name, kar nosi ime uporabnika, username kar nosi uporabniško ime uporabnika, password, ki je v tem primeru zaščiteno z MD5, email kar je poštni naslov uporabnika na katerega lahko v primeru registracije prejme aktivacijsko povezavo ali pa druga obvestila, datum kar nosi datum prijave, random številko in pa informacijo o tem ali je uporabnik že aktiviral račun ali ne.

Baza temperatur nosi index kar je podobno id iz zgornje baze. Date, kar nosi informacijo o času vnosa temperature ter posamezne temperature vzete iz prostorov.

Page 21: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

21

5.5 Uporaba RSMB

Pri izgradnji našega projekta smo naprej računali na lažje pošiljanje podatkov iz v omrežje s pomočjo RSMB strežnika. Strežnik smo ustrezno namestili na naš »strežniški« računalnik, uporabili smo IBM-ovo različico, ki se imenuje broker. Prav tako smo na Ardinovi strani preizkusili kodo, ki je Arduina spremenila v MQTT klienta, in strežniku pošiljala pozdravno sporočilo, različico te kode lahko vidimo na Sliki 9. Nato smo se kot zadnje odločili, katero različico MQTT knjižnice za PHP bomo uporabili v naši spletni strani. Odločili smo se pa phpMQTT, saj je bila druga različica SAM preveč kompleksna tako pri namestitvi, kot pri implementaciji v projekt. Pri Programiranju kode smo naleteli na težavo, saj je phpMQTT knjižnice še dokaj nova in ne nudi podpore za funkcijo »Suscribe«, kar pa bi bilo bistveno v našem projektu, zato smo se odločili da bomo uporabili drug pristop, za udejstvovanje tega dela našega projekta.

5.6 Programiranje Arduina brez brezžičnih modulov

Programiranja Arduina smo se lotili tako, da smo najprej preučili nekaj testnih primerov, ki so pred-nameščeni v razvojno okolje Arduino. Pri programiranju smo uporabljali različico Arduino 0023, saj se je izkazalo, da zadnja različica Arduino 1 ne nudi podpore za vse knjižnice, ki jih potrebujemo pri našem projektu, kakšen izgled ima razvojno okolje, lahko vidimo na spodnji Sliki 19. Pri programiranju smo se najprej lotili izdelave programa, ki bi samo prebral temperaturo iz enega toplotnega senzorja in jo izpisal na »Seriski Monitor« razvojnega okolja. V ta namen smo uporabili knjižnici OneWire in DallasTemperature. Knjižnica OneWire nam pomaga pri razpoznavi več senzorjev na isti žici, kar nam bo pomagalo pri postavitvi senzorjev po prostorih. DallasTemperature pa uporabljamo za prebiranje temperature iz senzorjev, saj so naši senzorji tipa Dallas. S spodnjo kodo smo prebrali količino senzorjev, in izpisovali temperature vseh:

OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); sensors.begin(); int numSensors = sensors.getDeviceCount(); int temparray[numSensors]; int numSensors = sensors.getDeviceCount(); int temparray[numSensors]; sensors.requestTemperatures(); delay(750); for(i=0; i<numSensors; i++) { int temp = sensors.getTempCByIndex(i); temparray[i] = temp; Serial.print(temparray[i]); }

Page 22: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

22

Koda prebere senzorje in s pomočjo zanke izpisuje temperaturo po vseh senzorjih glede na njihov index. V drugem delu programiranja smo se lotili povezave na našo lokalno bazo, Arduina moramo sprogramirati tako, da bo vsake nekaj časa poslal podatek o temperaturah v obliki GET na naš strežnik. Spodaj lahko vidimo kako izgleda naša koda za pošiljanje temperature na strežnik.

Slika 19 - Razvojno okolje Arduino

uint8_t hwaddr[6] = {0x90, 0xA2, 0xDA, 0x00, 0x98, 0xBB}; uint8_t ipaddr[4] = {192, 168, 1, 99}; uint8_t serverip[4] = {192, 168, 1, 100}; uint8_t serverport = 80; Client client(serverip, serverport); void setup(void){ Ethernet. begin(hwaddr, ipaddr); } void loop(void){ if(!connected) { Serial.println("Not connected"); } if (client.connect()){ connected = true; client.print("GET /room/writetemplocalserv.php?"); Serial.print("GET /room/writetemplocalserv.php?"); for (i=0; i<numSensors; i++) { client.print("t"); Serial.print("t"); client.print(i); Serial.print(i); client.print("="); Serial.print("="); client.print(temparray[i]); Serial.print(temparray[i]); if (i < numSensors-1) { client.print("&&"); Serial.print("&&"); } else { } }

Page 23: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

23

5.7 Postavitev sistema

5.7.1 Povezava temperaturnih senzorjev z Arduinom

Na spodnji Sliki 20 lahko vidimo kako izgleda sistem, ki meri temperaturo iz dveh različnih senzorjev in jo pošilja v bazo. Na sliki lahko vidimo tudi drugega Arduina, ki je napajan preko baterijskega adapterja.

Slika 20 – Sistem brez modulov

5.7.2 Povezava brezžičnih modulov z Arduinom

Za vzpostavite brezžične komunikacije med moduli smo uporabili že zgoraj omenjene module RFM12BDP. Module nam je uspelo uspešno povezati z razvojno ploščico po veliko truda in neuspeha. Za programski del smo uporabil knjižnico JeeNode, pridobljeno iz strani http://jeelabs.org. Na forumu so nam prav tako nudili pomoč pri vzpostavitvi sistema in povezave. Končna shematika kako smo povezali module s ploščico je takšna kot jo lahko vidimo na spodnji Sliki 21.

Page 24: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

24

Slika 21 - Povezava Arduina z RFM12BDP

Preden nam je uspelo vzpostaviti povezavo smo dobro preučili knjižnico. Knjižnica nam omogoča pošiljanje koristne informacije preko brezžičnih modulov. Paketki so sestavljeni iz glav (header) in koristne informacije (payload). Glava je sestavljena iz sledečih informacij, ki jih lahko vidimo na Sliki 22.

Slika 22 - Sestava header-ja

Pri vzpostavitvi sistema sem naletel na tri ovire, ki so mi zelo otežile in upočasnile izdelavo. Prva in druga težava sta ležali v napačni povezavi sistema. Kot prvo smo modul napačno zvezali, nato pa smo uporabili napačne upore, saj smo sledili izdelavi po knjigi O'reilly Arduino Cookbook 2nd Edition, ki pa očitno nosi napačne informacije. Zadnja težava je bila še ugotovitev, da tako EthernetShield kot modul uporabljata isti pin na Arduinu. Ta pin je 10 (SPI Select). Zato smo morali narediti manjše modifikacije trenutnemu sistemu in knjižnici JeeNode. To smo naredili tako, da smo pin 10 prestavil na pin 9 tako v sistemu kot v knjižnici. Delovanje sistema smo preverili s testnim programom RF12demo, ki omogoča pošiljanje in sprejemanje paketkov na obeh straneh modula.

5.8 Programiranje Arduina z brezžičnimi moduli

Naslednji korak v izdelavi sistema je bil prilagajanje trenutne kode Arduina, da bo deloval-a na sprejemni in oddajni strani sistema. Kodo je bilo potrebno razdeliti in opremiti z brezžičnim prenosom komunikacije. Program je ustvarjen tako, da s senzorja prebere temperaturo, jo shrani v koristno vsebino, vključno s številko, ki jo nosi (temperatura prostora t0,t1). In oboje pošlje na brezžični naslov glavnega Arduina. Kakšna je koda oddaljenega Arduina lahko vidimo spodaj.

Page 25: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

25

#include <DallasTemperature.h> #include <RF12.h> #include <Ports.h> #include <OneWire.h> #define myNodeID 1 #define network 212 #define freq RF12_433MHZ #define RADIO_SYNC_MODE 2 #define COLLECT 0x20 #define ONE_WIRE_BUS 7 #define TEMPERATURE_PRECISION 10 typedef struct { int seq; int temp; } Payload; static Payload payload; OneWire oneWire(ONE_WIRE_BUS); int i = 0; DallasTemperature sensors(&oneWire); void setup() { rf12_initialize(myNodeID,freq,network); Serial.begin(9600); payload.seq =0; payload.temp = 0; sensors.begin(); int numSensors = sensors.getDeviceCount(); int temparray[numSensors]; Serial.println("Enumerating and scanning for I2C sensors."); if(numSensors > 0) { Serial.print("Enumerated "); Serial.print(numSensors); Serial.println( " sensors."); } else { Serial.println("No sensors enumerated."); } } void loop() { int numSensors = sensors.getDeviceCount(); int temparray[numSensors]; sensors.requestTemperatures(); delay(100); for(i=0; i<numSensors; i++) { int tempa = sensors.getTempCByIndex(i); temparray[i] = tempa; } payload.temp = temparray[0]; payload.seq = 0; while (!rf12_canSend()) rf12_recvDone(); rf12_sendStart(rf12_hdr, &payload, sizeof payload, RADIO_SYNC_MODE); Serial.print(payload.seq); Serial.print(" "); Serial.println(payload.temp); delay(95000); }

Page 26: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

26

Na strežniški strani oziroma glavnem Arduinu se koda sprejme in posreduje v bazo, kot smo to naredili pred dodatkom brezžične povezave. Kodo za sprejem brezžičnih podatkov lahko vidimo spodaj.

5.9 RGB LED luč

Zaradi težav in pomanjkanja znanja s področja elektrotehnike, smo idejo o krmiljenju luči opustili. Dobili pa smo drugo idejo, ki je kontrola LED luči, ki se imenuje tudi RGB mood light (razpoloženjska luč). Idejo bomo udejstvovali na podlagi povezave treh led lučk na našo oddaljeno Arduino ploščico. Led luči bodo naključno spreminjale barvo in tako omogočale tako imenovan razpoloženjski efekt. V prvi fazi bi na oddaljen način le krmilili vklop in izklop luči v nadaljevanju pa tudi njihovo stanje (trenutna barva). Pri izgradnji bomo uporabili 3 ali pa več LED lučk, ki bodo priklopljene na Arduina. Vsaka izmed barv (rdeča, modra, zelena) bo priklopljena na svoj pin Arduina, in nam bo tako omogočala kontrolo barv. V spodnji tabeli in sliki lahko vidimo kako vpliva spreminjanje jakosti posamezne barve na trenutno barvo RGB luči.

Tabela 1 - Tabela spreminjanja barv RGB luči

Rdeča Zelena Modra Barva 255 0 0 Rdeča

0 255 0 Zelena 0 0 255 Modra

255 255 0 Rumena 0 255 255 Cyan

255 0 255 Magenta 255 255 255 Bela

#define myNodeID 2 #define network 212 #define freq RF12_433MHZ #define RADIO_SYNC_MODE 2 #define COLLECT 0x20 typedef struct { int seq; int temp; } Payload; static Payload payload; void setup() { rf12_initialize(myNodeID,freq,network); Serial.begin(9600); Serial.println("RF12B sprejemnik SQL"); if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); } Void loop(){ if (rf12_recvDone() && rf12_crc == 0 && (rf12_hdr & RF12_HDR_CTL) == 0) { payload=*(Payload*) rf12_data; … }

Page 27: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

27

Slika 23 - RGB mešanje barv

5.10 Priključitev in programiranje RGB na Arduinu

Pri programiranju RGB luči smo si zadali cilj, da se bodo luči vklopile, ko bo uporabnik to želel s pomočjo bodisi spletne aplikacije ali Android aplikacije. Za RGB smo definirali šest led diod: dve rdeči, dve zeleni in dve modri. S tem smo dobili učinek mešanja barv s katerim lahko pod belim ohišjem dobimo tako imenovano razpoloženjsko luč. Led diode smo priključili na Arduina tako, da smo vsako barvo vezali na drug pin. Tako lahko uravnavamo jakost posameznih barv in dobimo mešanje barv kot ga vidimo na Sliki 23. Led diode smo priključili na proste pine: 6,5 in 3. Tako nam je na Arduinu ostal prost le še pin 4. Uporabnik ima v spletni aplikaciji možnost izbrati kakšne barve želi, da se obarva razpoloženjska luč. Pri tem v oddaljenem Arduinu spreminjamo jakost na posameznem pinu, na katerega so priklopljene LED diode. Pri tem lahko izbiramo vrednost med 0 in 255 po jakosti. Kakšne so nastavitve za posamezno barvo lahko vidimo na Tabeli 1. Spletna aplikacija pri izbiri posamezne nastavitve proži (GET) določen URL, ki ima na koncu še posamezno vrednost (0 –izklop, 1 – spreminjanje barve, 2 – modra…). Tako glavni Arduino na drugi strani prebere URL ter izloči končni del ter preko brezžične komunikacije pošlje številko oddaljenem Arduino, ki nato izvede za vsako številko specifično akcijo. Kodo glavnega Arduina lahko vidimo spodaj.

EthernetClient client1 = serverport1.available(); if (client1) { connected = false; while (client1.connected()) { if (client1.available()) { char c = client1.read(); if (readString.length() < 100) { readString.concat(c); } if (c == '\n') { if (readString.length() >0) { Serial.println(readString); info = readString.substring(10, 11); if (info =="T") { info = readString.substring(7, 8); } Serial.println(info); readString=""; } client1.stop(); }}} if(info == "1"){ payload2.vklop = 1; while (!rf12_canSend()) rf12_recvDone(); rf12_sendStart(rf12_hdr, &payload2, sizeof payload2, RADIO_SYNC_MODE); Serial.println("Poslem!"); Serial.println(payload2.vklop); }

Page 28: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

28

Najprej ustvarimo novega klienta, ki čaka na sporočilo od spletne aplikacije ali Android telefona. Preberemo celotno sporočilo, izločimo številko, ki se nahaja med 10 in 11 mestom ali če ni GET na 7 ali 8 mestu. Številko shranimo nato pa primerjamo s številkami od 1 do 6 in pošljemo oddaljenemu Arduinu ustrezno številko. Arduino čaka, da prejme pakete od glavnega Arduina ter z if stavkom preverja katero številko je prejel v koristni vsebini. Nato pa odvisno od številke ustrezno nastavi parametre na izhodu pinov. V primeru, ko želimo spreminjanje barve Arduino prebere vrednost z analognega vhoda nič, na katerem je tudi šum in ustrezno nastavlja vrednost pinov. Tako dobimo efekt spreminjanja barve. Ker Arduino nima Multithreading smo morali, preverjanje temperature izvesti tako, da oddaljen Arduino preveri temperaturo, ko dobi ukaz za izključitev. Medtem glavni Arduino čaka na to informacijo.

if(rf12_recvDone() && rf12_crc == 0 && (rf12_hdr & RF12_HDR_CTL) == 0) { payload2=*(Payload2*) rf12_data; Serial.println(payload2.vklop); if(payload2.vklop == 1){ randomSeed(analogRead(0)); for (int x=0; x<3; x++) { INC[x] = (RGB1[x] - RGB2[x]) / 256; } for (int x=0; x<256; x++) { red = int(RGB1[0]); green = int(RGB1[1]); blue = int(RGB1[2]); analogWrite (RedPin, red); analogWrite (GreenPin, green); analogWrite (BluePin, blue); delay(100); RGB1[0] -= INC[0]; RGB1[1] -= INC[1]; RGB1[2] -= INC[2]; } for (int x=0; x<3; x++) { RGB2[x] = random(556)-300; RGB2[x] = constrain(RGB2[x], 0, 255); delay(1000); } Serial.println("LAHKO"); } else if(payload2.vklop == 2){ analogWrite (RedPin, 0); analogWrite (GreenPin, 0); analogWrite (BluePin, 255); } else if(payload2.vklop == 3){ analogWrite (RedPin, 255); analogWrite (GreenPin, 0); analogWrite (BluePin, 0); } else if(payload2.vklop == 4){ analogWrite (RedPin, 0); analogWrite (GreenPin, 255); analogWrite (BluePin, 0); } else if(payload2.vklop == 5){ analogWrite (RedPin, 255); analogWrite (GreenPin, 0); analogWrite (BluePin, 255); } else if(payload2.vklop == 6){ analogWrite (RedPin, 0); analogWrite (GreenPin, 255); analogWrite (BluePin, 255); } }

Page 29: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

29

5.11 Izgradnja ohišja oddaljenega Arduina

Pri grajenju ohišja smo najprej imeli v mislih postavitev piramide z merami (15, 12). Kako je izgledala shema te piramide lahko vidimo na spodnji sliki.

Slika 24 - Shema piramidnega ohišja

Nato smo se pa zaradi olajšanega dela odločili za polkrožno različico premera 16cm, ki je bila na voljo v trgovini in nam je ni bilo potrebno izdelati.

Slika 25 - Izdelava ohišja

Page 30: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

30

5.12 Android aplikacija

Do sistema bomo v končni fazi iz pametnih telefonov lahko dostopali na dva načina. Prvi način bo z uporabo brskalnika. Tako bomo lahko do naše spletne aplikacije dostopali isto kot bi do nje dostopali z domačega računalnika. Kako dostopanje do našega sistem izgleda iz brskalnika pametnega telefona lahko vidimo na spodnji Sliki 25.

Slika 26 - Pametni telefon brskalnik

Drugi način dostopa pa bo z uporabo posebej za to ustvarjene aplikacije za pametne telefone z operacijskim sistemom Android. Za izdelavo aplikacije smo uporabili razvojno okolje Eclipse in Android SDK razširitev. Aplikacijo smo izdelali na principu prej zastavljenega cilja. Želimo imeti vstopno okno kjer se uporabnik mora prijaviti v sistem im glavno okno kjer so na voljo funkcije in informacije, ki so uporabniku na voljo. Kodo vstopnega okna lahko vidimo na prvi spodnji sliki in kodo glavnega menija na drugi sliki. V kodi lahko vidimo da smo dostop omejili na uporabniško ime Daniel in geslo daniel. Tako smo se izognili ponovni potrebi po dostopanju do baze podatkov. Aplikacija bo v končni fazi omogočala vpogled v podatke in krmiljenje vseh komponent našega sistema. Do podatkovne baze našega strežnika dostopamo z uporabo http post. S tem prožimo .php spletno aplikacijo na našem strežniku, ki dostopa do podatkovne baze in zahtevane podatke predstavi s pomočjo JSON. Vklop in izklop komponent našega sistema prav tako krmilimo s pomočjo http POST.

Page 31: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

31

package com.stanovanje.pametno;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class PametnoStanovanje extends Activity {

private EditText etUsername;

private EditText etPassword;

private Button btnLogin;

private Button btnCancel;

private TextView lblResult;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

etUsername = (EditText)findViewById(R.id.username);

etPassword = (EditText)findViewById(R.id.password);

btnLogin = (Button)findViewById(R.id.login_button);

btnCancel = (Button)findViewById(R.id.cancel_button);

lblResult = (TextView)findViewById(R.id.result);

btnLogin.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

String username = etUsername.getText().toString();

String password = etPassword.getText().toString();

if(username.equals("Daniel") && password.equals("daniel")){

lblResult.setText("Prijava uspešna.");

Intent i = new Intent();

i.setClassName("com.stanovanje.pametno",

"com.stanovanje.pametno.mainmenu");

startActivity(i);

} else {

lblResult.setText("Prijava neuspešne!");

}

}

});

btnCancel.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

finish();

}

});

}

}

Page 32: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

32

public class mainmenu extends Activity {

private Button pridobiInfo;

private Button lucModro;

private Button lucRdece;

private Button lucZeleno;

private Button lucRandom;

private Button lucIzklop;

private TextView tempa1;

private TextView tempa2;

private TextView tempa3;

JSONArray jArray;

String result = null;

InputStream is = null;

StringBuilder sb=null;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main2);

pridobiInfo = (Button)findViewById(R.id.pridobi);

tempa1 = (TextView)findViewById(R.id.temp1);

tempa2 = (TextView)findViewById(R.id.temp2);

tempa3 = (TextView)findViewById(R.id.temp3);

lucModro = (Button)findViewById(R.id.buttonModro);

lucRdece = (Button)findViewById(R.id.buttonRdeco);

lucZeleno = (Button)findViewById(R.id.buttonZeleno);

lucRandom = (Button)findViewById(R.id.buttonRandom);

lucIzklop = (Button)findViewById(R.id.buttonIzklop);

lucModro.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

HttpClient httpclient = new DefaultHttpClient();

HttpGet httpget = new HttpGet("http://192.168.1.99:84/?-2");

try {

httpclient.execute(httpget);

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

});

lucRdece.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

HttpClient httpclient = new DefaultHttpClient();

HttpGet httpget = new HttpGet("http://192.168.1.99:84/?-3");

try {

httpclient.execute(httpget);

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

});

lucZeleno.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

HttpClient httpclient = new DefaultHttpClient();

HttpGet httpget = new HttpGet("http://192.168.1.99:84/?-4");

try {

httpclient.execute(httpget);

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

});

lucRandom.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

HttpClient httpclient = new DefaultHttpClient();

HttpGet httpget = new HttpGet("http://192.168.1.99:84/?-1");

try {

httpclient.execute(httpget);

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

});

lucIzklop.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

HttpClient httpclient = new DefaultHttpClient();

HttpGet httpget = new HttpGet("http://192.168.1.99:84/?-0");

try {

httpclient.execute(httpget);

} catch (ClientProtocolException e) {

e.printStackTrace();

Page 33: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

33

Za ustrezno delovanje aplikacije, smo morali ustvariti tudi .php stran, do katere aplikacija dostopa. Spletna stran dostopa do zadnjega vnosa v bazo in vrne informacije aplikacije. Informacije vrne s pomočjo JSON (Javascript Object Notation). Kodo spletne strani lahko vidimo spodaj.

<?php mysql_connect("localhost","root","XXXXXXXXX")or die ("NEO SLO"); mysql_select_db("tempdb") or die ("NI NI BAZE"); $query = mysql_query("SELECT * FROM table1 WHERE `index` = ( SELECT MAX( `index` ) FROM table1 )"); $numrows= mysql_num_rows($query); if($numrows !=0) { while($row = mysql_fetch_assoc($query)) { $temperatura1 = $row['temp1']; $temperatura2 = $row['temp2']; $temperatura3 = $row['temp3']; $datum = $row['date']; $output[]=$row; } } print(json_encode($output)); mysql_close(); ?>

pridobiInfo.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

try{

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost("http://192.168.1.100/room/android.php");

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpclient.execute(httppost);

HttpEntity entity = response.getEntity();

is = entity.getContent();

}catch(Exception e){

Log.e("log_tag", "Error in http connection "+e.toString());

}

try{

BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);

StringBuilder sb = new StringBuilder();

String line = null;

while ((line = reader.readLine()) != null) {

sb.append(line + "\n");

}

is.close();

result=sb.toString();

}catch(Exception e){

Log.e("log_tag", "Error converting result "+e.toString());

}

try{

jArray = new JSONArray(result);

JSONObject json_data=null;

for(int i=0;i<jArray.length();i++)

{

json_data = jArray.getJSONObject(i);

temp1=json_data.getInt("temp1");

temp2=json_data.getInt("temp2");

temp3=json_data.getInt("temp3");

date=json_data.getString("date");

}

}catch(JSONException e){

}

String myNum1 = String.valueOf(temp1);

String myNum2 = String.valueOf(temp2);

String myNum3 = String.valueOf(temp3);

tempa1.setText(myNum1);

tempa2.setText(myNum2);

tempa3.setText(myNum3);

datum.setText(date);

}

});

}}

Page 34: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

34

Izgled prve verzije aplikacije in končane aplikacije lahko vidimo na spodnjih slikah.

Slika 27 - Login zaslon in Menijski zaslon prve verzije aplikacije

Slika 28 - Login zaslon in Menijski zaslon končne verzije aplikacije

Page 35: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

35

6. KONČNI SISTEM Blokovno shemo in opis končnega sistema lahko vidimo na spodnji sliki. V blokovno shemo so vpisani tudi vsi načini komunikacije med komponentami sistema.

Slika 29 - Blokovna shema končnega sistema

Na spodnji sliki lahko vidimo končni izgled izdelka, zraven so napisane tudi posamezne komponente

sistema.

Slika 30 - Končni produkt

Page 36: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

36

Na spodnji Sliki 31, pa lahko levo vidimo kako izgleda končni produk vključen, ko so barve med modro in rdečo. Na desni pa kako produkt izgleda izključeno.

Slika 31 - Končni produkt (Levo v Magenta barvi)

Page 37: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

37

7. TESTIRANJE

7.1 Domet

Pri testiranju dometa sistema, smo prišli do ugotovitve, da lahko naprave med seboj komunicirajo do več kot 50 metrov na prostem in do 30 metrov v notranjih prostorih. Kar nam omogoča enostavno postavitev celotnega sistema po vseh prostorih našega stanovanja. Pri tem bi morali upoštevati, da mora postavitev glavnega Arduina biti v središču stanovanja, saj lahko tako najlažje komunicira z ostalimi komponentami.

7.2 Testiranje delovanje

Delovanje bomo preizkusili na nekaj testnih primerih, kot so:

izpostavitev sistema dolgotrajnemu delovanju (celoten dan),

klicanje več funkcij zaporedoma,

klicane iste komponente z več napravami hkrati. Sistem je brez večjih težavah prestal vsa testiranja.

8. STROŠKI

Zaradi uporabe nekaterih dražjih komponent in ker je sistem pravzaprav PROF-OF-CONCEPT, so stroški višji kot bi lahko bili. Spodaj so navedeni stroški vseh komponent in časa izdelave. Delo je zapisano namesto v denarju v urah. Komponente:

2xArdunio UNO = 24€ x 2 = 48€

Ethernet Shield = 39€

Temperaturni Senzor DS18B20 = 4€

Modul RFM12BDP x2 = 2x7€ = 14€

Žice, Upori, LED = 5€ Delo:

Razmišljanje od ideji: 5h

Pisanje/raziskovanje prve verzije FS (14 strani - risanje blokovne sheme, sheme projekta, primeri kode): 10-15h

Pisanje druge verzije FS (ocena cene izvedbe/ komercialne različice): 2h

Pisanje tretje verzije FS (izvedbeni specifikaciji dodal opis procesov postavljanja strežnika, strani (izdelava logike, izdelava logotipa), baze): 3h

Pisanje četrte verzije FS (izvedbeni specifikaciji dodajanje opisa kode Arduina, povezave Arduina in senzorjev, dodajanje opisa toplotnih senzorjev…): 8h

Izdelava vstopne strani z bazo (login): 2h

Izdelava grafičnega izgleda strani (logo, preoblikovanje templata): 3h

Izdelava kode za izpis temperature in baza temperature: 2h

Postavitev MQTT klienta na Arduinu, strežnika RSMB na računalniku in raziskovanje implementiranje MQTT strežnika v php (phpMQTT, SAM): 5h

Programiranje senzorjev na Adruina brez Ethernet Shielda: 2h

Programiranje senzorjev na z Ethernet Shieldom: 5h

Raziskovanje brezžičnih modulov: 2h

Spajkanje, preizkušanje Arduina + brezžičnih modulov: 20h

Page 38: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

38

Spreminjanje kode Arduina za vključitev brezžičnih modulov: 3h

Raziskovanje RGB luči: 1h

Udejstvovanje RGB in spreminjanje prejšnje kode:10h

Izgradnja ohišja: 5h

Android aplikacija: 10h

Optimizacija, spreminjanje in popravljanje spletne strani: 5h

Popravljanje tlorisa stanovanja: 1h

Pisanje končne dokumentacije (končna blokovna shema, testiranje, programiranje androida, programiranje RGB, ohišje, popravljanje…):10h

Popravljanje napak, človeške napake (izklopljen kabel, neustrezni senzorji...): 20h

Udeležba na vajah/predstavitvah: 10h Skupna ocena dela in stroškov: okoli 150 ur in 110€.

8.1 Optimizacija stroškov

Sistem bi lahko optimizirali z uporabo cenejših komponent. Najbolj bi v končni fazi prihranili na ceni Arduina, saj bi lahko namesto Arduina uporabili le mikrokontroler ATmega328,in tako stroške zmanjšali za okoli 20€ pri vsakem dodatnem Arduinu. To bi nam omogočilo nakup večjega števila komponent, ki bi jih lahko namestili po celotnem stanovanju.

Slika 32 - Projekt z uporabo ATmega 328

Page 39: FUNKCIJSKA IN IZVEDBENA SPECIFIKACIJA PROJEKTA …matrix.uni-mb.si/fileadmin/datoteke/projekti/studentski... · 2013-12-04 · Funkcijska in izvedbena specifikacija projekta Daniel

Funkcijska in izvedbena specifikacija projekta Daniel Pahič

39

9. NADALJNO DELO

Sistem je izgrajen tako, da je razširjanje mogoče in preprosto. Brez večjih sprememb v kodi lahko dodamo več komponent, ostalim komponentam bi morali dodeliti le druge identifikatorje skupine. Dodali bi lahko še 29 dodatnih komponent, ki bi bile razdeljene po celotnem stanovanju in bi omogočale popolno avtomatizacijo stanovanja. Brez večjih težav bi tako lahko krmilili: veliko število RGB razpoloženjskih luči, avdio-video sistem, merjenje temperature in vlage itd. S poglobitvijo pa bi lahko povezali naš sistem v že obstoječe električno omrežje in tako krmilili luči in ostale komponente.