České vysoké učení technické Fakulta elektrotechnická
Bakalářská práce Implementace klasifikátoru v bezdrátové senzorové síti
Tomáš Bárta 2011
2
Čestné prohlášení Prohlašuji, že jsem předloženou práci vypracoval samostatně a že jsem uvedl veškeré použité informační zdroje v souladu s Metodickým pokynem o dodržování etických principů při přípravě vysokoškolských závěrečných prací.
V Praze dne ................................
................................ Podpis autora práce
3
Poděkování Na tomto místě bych rád poděkoval vedoucímu bakalářské práce za ochotu a trpělivost. Děkuji mu také za poskytnuté materiály a zapůjčení senzorových uzlů. Chci také poděkovat svojí rodině za stálou podporu během mého studia.
4
Abstrakt Tato práce se zabývá vytvořením jednoduchého jednotřídního klasifikátoru hodnot snímaných veličin v uzlu bezdrátové sítě a jeho implementací v jazyce nesC. Aplikace je navržena pro senzor IRIS od firmy Crossbow.
Abstract This thesis is focused on creating a simple one-class classifier of condition values taken by wireless sensor network node and implementation of this classifier in the nesC. The application is designed for the IRIS sensor from Crossbow Company.
5
Obsah OBSAH ........................................................................................................................... 6 1
ÚVOD ....................................................................................................................... 8
1.1
Bezdrátové senzorové sítě .................................................................................................................................. 8
1.2
Senzorový uzel .................................................................................................................................................... 8
1.3
Struktura bezdrátové sítě .................................................................................................................................. 9
1.4
Aplikace pro bezdrátové sítě ............................................................................................................................. 9
2
SÍŤOVÉ STANDARDY ........................................................................................... 11
2.1
IEEE 802.15.4 ................................................................................................................................................... 11
2.2
ZigBee ............................................................................................................................................................... 11
2.3
Synchronizace sítě ............................................................................................................................................ 12
2.4
Síťové topologie ................................................................................................................................................ 12
3
KLASIFIKACE ....................................................................................................... 14
3.1
One-class klasifikace ........................................................................................................................................ 14
3.2
Minimalizace chybných rozpoznání ............................................................................................................... 15
4
TINYOS .................................................................................................................. 17
4.1
Komponenty ..................................................................................................................................................... 17
4.2 Architektura ..................................................................................................................................................... 18 4.2.1 Prezentační vrstva – Hardware Presentation Layer – HPL....................................................................... 19 4.2.2 Adaptační vrstva – Hardware Adaptation Layer – HAL .......................................................................... 19 4.2.3 Vrstva hardwarových rozhraní – Hardware Interface Layer – HIL .......................................................... 19 4.3
Plánování a úlohy ............................................................................................................................................. 19
4.4 Správa zdrojů ................................................................................................................................................... 20 4.4.1 Vyhrazený (dedicated) .............................................................................................................................. 20 4.4.2 Vizualizovaný (virtualized) ...................................................................................................................... 20 4.4.3 Sdílený (shared) ........................................................................................................................................ 20 4.5
Správa výkonu.................................................................................................................................................. 20
4.6
Správa paměti .................................................................................................................................................. 21
4.7
Síťová komunikace .......................................................................................................................................... 21
4.8
Bezpečnost přenosu dat ................................................................................................................................... 22
6
5
POUŽITÝ HARDWARE.......................................................................................... 23
5.1
XM2110 (IRIS) ................................................................................................................................................. 23
5.2
MIB520CB ........................................................................................................................................................ 24
5.3 MTS400 ............................................................................................................................................................. 24 5.3.1 Senzory na desce MTS400 ....................................................................................................................... 25 5.3.2 SHT11 ...................................................................................................................................................... 25 5.3.3 TAOS TLS2550 ........................................................................................................................................ 26
6
PRAKTICKÁ ČÁST ............................................................................................... 27
6.1 Návrh klasifikátoru .......................................................................................................................................... 27 6.1.1 Kruhový klasifikátor................................................................................................................................. 27 6.1.2 Lineární klasifikátor ................................................................................................................................. 28 6.2
Programování senzorového uzlu ..................................................................................................................... 29
6.3 Konfigurace ...................................................................................................................................................... 30 6.3.1 Main ......................................................................................................................................................... 30 6.3.2 SensirionHumidity.................................................................................................................................... 30 6.3.3 TaosPhoto ................................................................................................................................................. 31 6.3.4 ADCC ....................................................................................................................................................... 31 6.3.5 LedsC ....................................................................................................................................................... 31 6.3.6 TimerC...................................................................................................................................................... 31 6.3.7 HPLADCC a HPLClock .......................................................................................................................... 31 6.4 Modul ................................................................................................................................................................ 32 6.4.1 Implementace programu ........................................................................................................................... 32 6.4.2 Naměření trénovacích vzorků................................................................................................................... 32 6.4.3 Výpočet klasifikátoru ............................................................................................................................... 32 6.5
Klasifikace ........................................................................................................................................................ 33
6.6 Práce se senzorem ............................................................................................................................................ 33 6.6.1 Fyzické spojení ......................................................................................................................................... 34 6.6.2 OTAP ........................................................................................................................................................ 33
7
ZÁVĚR ................................................................................................................... 35
POUŽITÁ LITERATURA ............................................................................................... 36 PŘÍLOHA A:
NÁVRH KLASIFIKÁTORU V MATLABU ............................................. 38
PŘÍLOHA B:
PROGRAM V TINYOS – KONFIGURACE .......................................... 40
PŘÍLOHA C:
PROGRAM V TINYOS – MODUL ........................................................ 41
7
1
Úvod
1.1
Bezdrátové senzorové sítě Bezdrátové senzorové sítě (Wireless Sensor Network, WSN) se skládají z množství
prostorově distribuovaných zařízení, která používají různé senzory pro monitorování fyzikálních podmínek životního prostředí, jako jsou teplota, tlak, vlhkost, světlo a pohyb. Tato autonomní zařízení se nazývají senzorové uzly. Hlavním účelem senzorové sítě je monitorování a kontrola okolního prostředí. V počátečních fázích byl vývoj bezdrátových sítí zaměřen především na využití v oblasti vojenské činnosti, např. pro potřeby monitoringu situace na bojišti. Dnes se již technologie bezdrátových sítí využívají v nejrůznějších aplikacích nejen ve sféře průmyslu, ale stále více i v běžném občanském životě, např. v domácnostech. [23]
1.2
Senzorový uzel Senzorový uzel je samostatná entita sítě schopná získávat data ze senzorů připevněných
na jeho základní desce, dále tato naměřená data předzpracovat a pomocí komunikačního rozhraní je odeslat k uživateli. Na obrázku 1 je znázorněna architektura senzorového uzlu.
Obrázek 1:
Architektura senzorového uzlu podle [2]
Micro-controler – provádí výpočty, zpracování dat a kontroluje ostatní komponenty Transceiver – zajišťuje komunikaci s ostatními prvky v síti Memory – paměť pro ukládání dat ADC (Analog to Digital Converter) – převádí analogové signály ze senzorů na digitální Power source – napájení hardwaru 8
1.3
Struktura bezdrátové sítě Základními strukturálními prvky bezdrátové sítě jsou senzorové uzly (node, mote), které
se dále kombinují se směrovači (router) a bránami (gateway), čímž se vytvoří typický WSN systém. Rozmístěné měřicí uzly bezdrátově komunikují s centrální bránou, která zajišťuje spojení s výpočetním systémem, v němž se naměřená data zpracují, vyhodnotí a dále prezentují uživateli. Přestože samotné uzly komunikují mezi sebou a posílají data k bráně, jsou do systému přidávány tzv. směrovače, které vytvářejí další komunikační cestu mezi uzly a bránou a zvyšují tím spolehlivost a rychlost přenosu dat. [1]
1.4
Aplikace pro bezdrátové sítě V současné době aplikace vestavěných bezdrátových modulů pokrývá široké spektrum
oblastí v průmyslové i civilní sféře lidské činnosti. Oblasti použití bezdrátových sítí lze podle jejich charakteru rozdělit do sektorů, jako jsou např. vojenství, zdravotnictví, monitorování životního prostředí, průmyslová či zemědělská výroba, dopravní systémy, ale i automatizovaná domácnost a mnoho dalších. [23] Aplikace bezdrátových sítí je obvykle spojena s potřebou určitého druhu kontroly, sledování nebo řízení konkrétní oblasti. Jejich možností je však využíváno i tam, kde by kvůli energetickým nebo infrastrukturním omezením bylo kabelové řešení mnohem nákladnější nebo náročnější na vybudování či dokonce nemožné.
Obrázek 2:
Oblasti použití WSN podle [5]
Konkrétním příkladem využití systémů WSN jsou aplikace pro monitorování životního prostředí, kde je prioritou požadavek na dlouhodobá měření stavu a jeho změn (seizmická aktivita, klimatické změny, hledání vody či půdy pro zemědělství a těžbu nerostů). 9
Dalším velmi důležitým oborem, kde jsou systémy WSN využívány, je distribuce elektrické energie, vody a dalších médií. V této oblasti nabízejí senzory levný způsob sběru dat o technickém stavu celého distribučního systému, možných úsporách energie a lepší správě zdrojů. Systémy WSN se také již delší dobu využívají k tzv. „automatizaci“ kancelářských i obytných budov, především jako detektory požárů nebo kvůli monitorování prostor pro účely klimatizace či bezpečnosti. [23]
10
2
Síťové standardy V systémech napájených bateriemi, kam patří i systémy WSN, je základním požadavkem
minimalizace energetické náročnosti, a to nejen jednotlivých komponent. Je třeba také přizpůsobit aplikace danému hardwaru, protože vyšší rychlost přenosu dat a časté využívání rádiového spojení samozřejmě spotřebovává více energie. Standardním požadavkem ve WSN aplikacích je minimálně tříletá životnost baterií. Proto jsou dnešní systémy založeny na technologii ZigBee a protokolu IEEE 802.15.4.
2.1
IEEE 802.15.4 Protokol IEEE 802.15.4 je standard, který specifikuje fyzickou a MAC (Media Access
Control) vrstvu pro bezdrátové osobní sítě (LR-WPAN). Je základem pro technologie Zigbee, BlueTooth a další, z nichž každá se dále snaží nabídnout kompletní síťová řešení prostřednictvím vyšších vrstev, které nejsou pokryty standardem. Standard definuje tři základní režimy přenosu dat: periodický s krátkou dobou opakování (bezdrátové počítačové periferie) periodický s delší dobou opakování (přenos dat ze senzorů) nepravidelný (externí události) Standard IEEE 802.15.4 definuje několik základních radiových pásem, aby mohl být využit v různých zemích, kde jsou rozdílné národní předpisy a normy. Hlavním problémem u většiny bezdrátových technologii jsou rozdílné definice radiových pásem v Americe a Evropě.[4]
2.2
ZigBee ZigBee je bezdrátová komunikační technologie vystavěná na standardu IEEE 802.15.4.
Je určena pro spojení nízkofrekvenčních zařízení v síti PAN (Personal Area Network) na malé vzdálenosti do 75 metrů. Je navržena jako jednoduchá a flexibilní technologie pro tvorbu i rozsáhlejších bezdrátových sítí, u nichž není požadavek přenosu velkého objemu dat. Pracuje v bezlicenčních pásmech 868, 915 a 2400 MHz. Přenosová rychlost činí 20, 40 a 250 kbit/s. Přehled rádiových pásem je uveden na obrázku 3.
11
Obrázek 3:
Radiová pásma využívaná ZigBee podle [6]
Kvůli nutnosti implementovat standart ZigBee do nízko-výkonových mikrokontrolerů je důležitá maximální jednoduchost implementace protokolů, které zabírají málo místa v paměti (do 30 kB). Protokol se skládá ze tří základních vrstev. Vrstvy standardu IEEE 802.15.4, nad nimi je definována síťová vrstva (NWK) a aplikační vrstva (APL). Fyzická vrstva specifikuje přístup k přenosovému médiu. Síťová vrstva (NWK) zajišťuje připojení k sítí, zabezpečení, směrování a synchronizaci. V případě koordinátora sítě je ještě zodpovědná za start sítě a přiřazování adres nově nalezeným zařízením. Aplikační vrstva zajišťuje potřebné služby. Aplikační vrstva je zodpovědná za párování zařízení podle poskytovaných služeb a definici role jednotlivých zařízení v rámci sítě. Dále zajišťuje vyhledávání nových zařízení a zodpovídá za zabezpečení.
2.3
Synchronizace sítě Z důvodů minimalizace spotřeby koncových zařízení mohou být na základě
synchronizace mezi řadičem sítě a koncovou stanicí uspávána jednotlivá zařízení. K jejich probouzení dochází v předem definovanou dobu, a poté jsou přeneseny veškeré užitečné informace. Interval synchronizačních sekvencí může být v rozmezí 15 ms až přibližně 15 minut. Synchronizace je realizována pomocí „beacon“ rámce. Koncová zařízení jsou periodicky probouzena a přenáší data řadiči sítě. Data jsou uložena a následně přeposlána při probuzení zařízení, pro nějž jsou určena. Pokud síť funguje bez použití beacon sekvencí, jednotlivá zařízení se periodicky dotazují.
2.4
Síťové topologie Technologie ZigBee postavená na fyzické linkové vrstvě IEEE 802.15.4 definuje tři různé
síťové topologie. Znázornění jednotlivých topologií je na obrázku 4. 12
hvězdicová – základní topologie s centrálním řídícím uzlem (řadičem) stromová – struktura, jež umožňuje zvětšit vzdálenost mezi řadičem a koncovým zařízením pletená – typ topologie umožňující vytvořit redundantní spojení a tím libovolné uspořádání
Obrázek 4:
Síťové topologie WSN podle [5]
Výše uvedený obrázek popisuje tři základní topologie sítí. Nejjednodušší je hvězdicová (star) struktura, ve které je každý uzel spojen s bránou (gateway) a tedy brán jako koncový uzel (end node). Tato struktura má velkou nevýhodu. Aby senzory mohli komunikovat s bránou je potřeba dodržet jistou vzdálenost, tím je omezena monitorovaná plocha. Druhý typ je poněkud složitější, ale má mnohem větší monitorovanou plochu i na místech vzdálených od brány. Tato topologie se nazývá stromová, protože koncové body jsou jako listy na větvích poskládaných ze směrovačů (router node), které přeposílají pakety směrem k bráně. Pletená topologie (mesh) je typ sítě v níž každý uzel v síti, může působit jako nezávislý směrovač, bez ohledu na to, zda je připojen k jiné síti, či nikoli. Struktura je koncipována tak, že v ideálním případě je každý bod propojený s každým. Z toho vyplývá, když dojde k poškození jednoho zařízení, lze nalézt jinou cestu, kudy propojit komunikaci s bránou. Tato topologie je sice složitější, ale mnohem spolehlivější než a hlavně rychlejší než stromová. [5] Jednotlivá zařízení sítě jsou adresována pomocí binárního adresného kódu o délce 64 bitů či ve zkrácené podobě 16 bitů. Každá sestavená síť je ještě dále identifikována 16 bitovým PAN ID, jež slouží pro rozlišení překrývajících se sítí postavených na standardu IEEE 802.15.4. Každou síť zakládá a spravuje koordinátor, který jí přiděluje ID. Ostatní stanice pracují jako směrovače a koncová zařízení. [3][7]
13
3
Klasifikace Obyčejně je funkcí senzorového uzlu naměření hodnot a jejich odesílání k bráně, kde se
data následně zpracují. Tento proces je u větších sítí trochu problematický v případě, že potřebujeme rychle získat větší množství dat ze vzdáleného uzlu. Proto se snaží zavést různé výpočetní metody aplikovatelné již na uzlech, které předzpracují data nezávisle na bráně, a senzor potom odešle pouze informaci o výsledcích. Jednou z těchto možností je použití klasifikace. Klasifikace je proces řízeného strojové učení, v němž jsou jednotlivé položky umístěny do skupiny založené na kvantitativní informaci na základě již dříve označených vzorků. V podstatě se jedná o funkci, která přiřazuje (klasifikuje) jednotlivé vzorky do určené kategorie podle jejich vlastností. Cílem klasifikátoru je co nejpřesnější odhad přiřazení zpracovávaného objektu. [8]
Obrázek 5:
3.1
Příklad klasifikace jablek a hrušek podle velikosti a hmotnosti podle [8]
One-class klasifikace Jednotřídní (one-class) klasifikace je speciální typ klasifikace, která se zabývá dvěma
soubory dat (třídami), z nichž každá má svůj zvláštní význam. Situace je prezentována obrázkem 5. Tyto dvě množiny se nazývají target-class (cílová, trénovací) a outlier-class (okolí), která v jednodušších případech bývá prázdná. V podstatě se tento typ klasifikace snaží odlišit jednu třídu objektů od všech ostatních možných předmětů na základě připravené trénovací množiny obsahující pouze objekty této třídy. Tím se liší oproti tradiční klasifikaci, která se
14
pokouší rozlišovat mezi dvěma nebo více třídami podle školícího souboru dat, který obsahuje předměty ze všech tříd. Typickým příkladem jednotřídní klasifikace je diagnostika stroje. Pokud pracuje stroj správně a vyrábí např. pečivo, je vše v pořádku. Jakmile nastane situace, že v peci je teplota mnohem vyšší, než je potřeba k pečení a dochází tak ke spálení nebo nedopečení výrobku, je zřejmé, že selhal termostat a je třeba zavolat technického pracovníka. V tomto případě je možno aplikovat senzorovou techniku a kontrolovat teplotu v peci. Měření parametrů pracujícího stroje je relativně jednoduché (i když odběr vzorků ze všech situací vedoucích k poruše, může být poněkud rozsáhlejší). Na druhou stranu diagnostika rozbitého stroje a přené určení problému je složitý proces. Při komplexním měření se dostáváme do situace, kdy vytvoření vyvážené trénovací třídy je složité nebo by měření byla příliš nákladná. Dalším příkladem je detekce. Zde je úkolem odhalit konkrétní objekt (obličej, minu) v neurčitém prostředí (fototgrafie, půda). V rámci tohoto problému lze předpokládat, že trénovací třída je poměrně dobře definována, ale v okolí se může nacházet cokoliv. Při klasifikaci tohoto typu dat je pravděpodobnost nalezení objektu podobného s cílovým (blízkému trénovací množině) v okolním prostředí tak veliká, takže se dá předpokládat množství falešných detekcí.
3.2
Minimalizace chybných rozpoznání Za účelem nalezení dobrého klasifikátoru musí být nízká pravděpodobnost dvou typů
chyb. Jsou to falešně pozitivní a falešně negativní detekce. V následující tabulce jsou situace, které mohou nastat při jednotřídní klasifikací.
Tabulka 1:
Typy chyb vyskytující se při klasifikaci podle [9]
Dobrý jednotřídní klasifikátor musí mít malý počet falešných detekcí. Protože chyba se pomocí trénovací třídy odhaduje docela dobře, předpokládá se, že pro všechny klasifikátory můžeme přednastavit prahovou úroveň pro chybu rozpoznání cílového vzorku. Změnou této 15
hranice a následným měřením chyby na objektech z okolní třídy získáme křivku ROC (Receiver Operating Characteristic), která se může podobat příkladu na obrázku 6. Tato charakteristika znázorňuje, jak se podíl falešně pozitivní detekce liší v závislosti na falešně negativní. Čím menší jsou tyto části, tím lepší je klasifikátor. Tradičně se křivka ROC vykresluje jako závislost podílu správně pozitivních a špatně pozitivních.
Obrázek 6:
Příklad křivky ROC podle [9]
Přestože křivka ROC poskytuje velmi dobrý přehled o spolehlivosti klasifikátoru, je složité porovnávat křivky od více klasifikátorů mezi sebou. Jedním ze způsobů je vyjádřit křivku jediným číslem, neboli obsahem plochy pod křivkou (Area Under the Curve, AUC). Vyšší hodnoty tohoto parametru znamenají lepší oddělení mezi vzorky z jednotlivých tříd. V praxi je jasné, že při přípravě klasifikátoru nebude znám konkrétní pracovní bod na křivce ROC. Na druhou stranu, často mohou být uvedeny přibližné rozsahy výsledků, a proto lze omezit pásmo integrace AUC na tuto specifickou část. To bude mít za následek lepší porovnání různých klasifikátorů pro danou aplikaci. [8][9]
16
4
TinyOS TinyOS je „open-source“ operační systém vytvořený v programovacím jazyce nesC,
určený pro vestavěné bezdrátové senzorové sítě. Velikost jádra operačního systému (méně než 400 Byte) je minimalizována kvůli omezené paměti senzorových uzlů. Model TinyOS je založen na split-phase rozhraních, asynchronních událostech a tzv. úlohách.
4.1
Komponenty Systémové aplikace jsou sestaveny z komponent. Aplikace je v podstatě graf těchto
komponent. Struktura komponenty je na následujícím obrázku.
Obrázek 7:
Schéma komponenty TinyOS
Obsluhovače – jejich úkolem je obsluhovat příkazy a události ostatních komponent Rámec (framework) – datové úložiště komponenty, které má předem definovanou velikost Úloha - zatím neprovedené výpočetní operace Každá komponenta je nezávislá výpočetní součást pracující s rozhraními, která jsou používána pro vzájemnou interakci mezi dvěma komponentami. Rozhraní jsou obousměrná, protože obsahují příkazy, které mohou být implementovány jak poskytovatelem, tak uživatelem. Komponenta má k dispozici tři výpočetní abstrakce. Příkaz – žádost o vykonání nějaké operace (čtení ze senzorů) Událost – signalizace provedení příkazu Úloha – provedení čtení, výpočtu nebo jiné služby Rozhraní je označováno jako split-phase, protože obsahuje rozdělené operace, které na sebe navazují. Komponenta dále vysílá úlohu, která bude vykonána v pozdějším čase. Jazyk nesC rozlišuje dva typy komponent. Jsou jimi moduly a konfigurace. Úkolem modulů je implementovat rozhraní, čili všechny příkazy a události poskytovaných rozhraní. 17
Konfigurace je komponenta spojující ostatní komponenty přes rozhraní. Na následujícím obrázku je příklad konfigurace časovače. Modul TimerM je uživatel rozhraní Clock a komponenta HWClock je jeho poskytovatel.
Obrázek 8: Konfigurace časovače podle [12] Na obrázku 8 je zobrazena časová služba. Jde o konfiguraci připojující modul k hardwarové komponentě. Tímto je spojeno několik komponent do jedné a rozhraní StdControl a Timer jsou poskytovány dalším komponentám. Dále existuje tzv. parametrizované rozhraní. Jedná se o situaci, kdy komponenta může poskytovat nebo používat více instancí jednoho rozhraní, které má za parametr určitý identifikátor. Jak je vidět na výše uvedeném obrázku u rozhraní Timer, tento identifikátor bývá většinou typu integer. Takto označený identifikátor je parametrem příkazů a událostí, který od sebe odliší komponenty využívající dané rozhraní. [10][11][12][13]
4.2
Architektura Z důvodu zvýšení přenositelnosti a jednoduchosti vývoje aplikací se v operačním
systému TinyOS (od verze 2.x) zavedla tzv. architektura hardwarové abstrakce (Hardware Abstraction Architecture – HAA). Abstrakce tedy zobrazuje fyzický hardware do TinyOS modelu komponent. Její třívrstvý návrh přizpůsobuje rozhraní hardwaru k platformě, která se nachází mezi operačním systémem a aplikacemi. Každá vrstva je závislá na poskytovaných rozhraních nižšími vrstvami. Směrem od hardwaru k horním rozhraním se komponenty stávají méně závislé na hardwaru. Tato vlastnost dává větší volnost vývojářům při návrhu a implementaci opakovaně použitelných aplikací.[15]
18
4.2.1
Prezentační vrstva – Hardware Presentation Layer – HPL Komponenty obsažené v této vrstvě jsou umístěny přímo nad úrovní hardwaru. Jejich
hlavním úkolem je zajistit jeho funkčnost. Jednotlivé komponenty přistupují k hardwaru dvěma způsoby, Memory-mapped I/O a Port-mapped I/O. Jsou to dvě metody pro vykonávání vstupních a výstupních operací mezi mikro-kontrolerem a ostatním hardwarem. Každá komponenta je unikátní jako jednotlivý hardware, ale HPL skrývá hardwarovou složitost, protože všechny komponenty budou mít podobnou strukturu (poskytují základní operace jako čtení nebo zápis). [12][13] 4.2.2
Adaptační vrstva – Hardware Adaptation Layer – HAL Komponenty HAL vrstvy operují jádro architektury. Využívá rozhraní poskytované
komponentami HPL vrstvy. Komponenty HAL mohou ukládat informace o stavu hardwaru, které se dále využívají například při kontrole spotřeby energie. Abstrakce na HAL úrovni je přizpůsobena konkrétním platformám. [12][13] 4.2.3
Vrstva hardwarových rozhraní – Hardware Interface Layer – HIL Komponenty obsažené v poslední vrstvě architektury se starají o převod abstrakcí
poskytovaných vrstvou HAL na rozhraní nezávislých na hardwaru. Tato rozhraní poskytují abstrakci nezávislou na platformě, což ulehčuje vývoj aplikací. [12][13]
4.3
Plánování a úlohy Úlohy se používají při vykonávání procedur, které nemusejí být provedeny ihned. Bez
nich by mohly nastat různé kolizní situace. Příkladem je příjem paketů, kdy příchozí paket vyvolá událost pro příjem, která muže ještě paket zpracovávat nějakým delším výpočtem. Po dobu průběhu tohoto výpočtu by událost nevrátila prostředky pro příjem dalšího paketu. Tím dochází k odmítnutí a následnému zahození paketu. Využití úlohy tento problém vyřeší, neboť tím se odloží daný výpočet na později a buffer pro příjem může být využit ihned. Úloha je formou procedury s odloženým voláním (Deferred Procedure Call – DPC). To znamená, že nebude vykonána okamžitě, ale bude zařazena do fronty k pozdějšímu zpracování. Úlohy se navzájem nepředbíhají, takže běží synchronně s ohledem na ostatní. Pokud je třeba u nějaké komponenty spustit delší operaci, je vhodné ji rozdělit na více úloh, neboť úloha má tu vlastnost, že sama sebe může opětovně poslat do fronty. [22]
19
4.4
Správa zdrojů TinyOS rozlišuje mezi třemi druhy hardwaru. [16][17]
4.4.1
Vyhrazený (dedicated) Komponenta vždy potřebuje prioritní přístup k tomuto typu zdrojů. V této třídě není
potřeba sdílení, protože o použití žádá vždy jen jedna komponenta. Do té to skupiny patří například časovač na mikro-kontroleru Atmel Atmega128. Vyhrazené zdroje jsou užitečné, když je zdroj používán jen jednou komponentou. 4.4.2
Vizualizovaný (virtualized) Každá komponenta pracuje s tímto zdrojem jako s vyhrazeným. Jedná se zde
o softwarovou vizualizaci, a proto počet komponent používajících zdroj není omezen. Vizualizované zdroje jsou vhodné pro aplikace, kde není nutná úplná kontrola nad zdrojem a je možné ho jednoduše sdílet. 4.4.3
Sdílený (shared) V situacích, kdy větší množství komponent potřebuje kontrolu nad jedním zdrojem,
přichází na řadu tzv. multiplex. Jelikož všechny komponenty nemohou mít úplnou kontrolu najednou, je úkolem multiplexování efektivní využití daného zdroje. Mezi tento typ se řadí například sběrnice.
4.5
Správa výkonu V prostředí TinyOS jsou zařízení podle správy výkonu rozdělena do dvou kategorií,
mikro-řadiče a periferie. Mikrořadiče mají několik stavů výkonu s proměnným odběrem energie. K přesnému určení tohoto stavu je třeba vědět mnoho informací. Například, zpracovává-li řadič přerušení, přepíná se do aktivního stavu a kdykoliv plánovač zjistí prázdnou frontu úloh, vrátí mikrořadič do stavu s nízkou spotřebou (režim spánku). Zatímco mikrořadič je schopný vypočítat svůj stav s nejnižší spotřebou energie, jiná zařízení (jako senzor teploty) vyžadují externí informace, aby byly schopné změnit svůj stav. Mikrořadiče mají několik stavů spotřeby energie, oproti tomu periferie mají jen dva (zapnuto, vypnuto). [18]
20
4.6
Správa paměti Senzorové uzly používají paměti typu Flash, která může být mazána pouze po větších
jednotkách od 256 B do 128 kB. Záleží na technologii paměťového čipu (NAND, NOR) a různí výrobci používají různé technologie. Tyto rozdíly mezi velikostmi je nutné skrýt, aby aplikace byly použitelné na různých uzlech. TinyOS rozděluje paměti do svazků pevně dané velikosti a rozlišuje je mezi třemi paměťovými abstrakcemi. [19] Velké bloky – pro dlouhodobé uložení většího množství dat Malé bloky – ukládání konfiguračních dat (identifikace uzlu, komunikační frekvence) Logy – logování výsledků událostí
4.7
Síťová komunikace Komunikace v TinyOS je zprostředkována aktivními zprávami (Active Messages). Jsou
to malé pakety o velikosti 36 B. Další důležitá věc v architektuře je buffer zpráv (message_t). Hlavním účelem tohoto bufferu je předávání paketů mezi jednotlivými linkovými vrstvami. Každá linková vrstva (pokud má daný senzorový uzel více než jednu) definuje svoji hlavičku, zápatí a metadata. Data jsou předávána jako souvislá oblast paměti bez nutnosti jejich kopírování (zero-copy semantics). Každá platforma musí poskytovat komunikaci na paketové úrovni. Toto zaručuje základní linková komponenta operačního systému (ActiveMessageC) na úrovni HIL, jež využívá tři základní rozraní. Packet – zpřístupňuje datové oblasti paketu Send – odesílá pakety Recieve – obsluhuje události spojené s příjmem paketů Dalším běžným požadavkem na aplikace bezdrátových sítí je sbírání dat a jejich přeposílání na kořenový uzel (gateway). K tomu je používán protokol CTP (Collection Tree Protocol), který zaručuje „best-effort multihop“ doručování paketů. Což znamená, že protokol vynaloží přiměřené úsilí pro doručení paketu alespoň jednomu z kořenových uzlů sítě. Není ale zaručeno doručení paketu (nebo pořadí) a k tomu dochází k doručování duplikátů. Pakety putují postupně přes uzly nacházející se na cestě ke kořenovému uzlu. Každý uzel se také stará o přeposílání dat, která obdržel od jiných uzlů.[20]
21
4.8
Bezpečnost přenosu dat Z důvodu rozšíření bezpečnosti v senzorových sítích byl vytvořen protokol TinySec.
Protože senzorové uzly mají omezené výpočetní a komunikační schopnosti a malou paměť, není možné použít standardní bezpečnostní protokoly známé z běžných sítí jako. TinySec je první implementovaný šifrovací protokol na úrovni linkové vrstvy. Před vytvořením tohoto protokolu byl také řešen problém, jestli je možné dosáhnout přijatelného výkonu při softwarovém šifrování nebo je potřeba i hardwarová podpora. TinySec provádí šifrování a autentizaci pouze na softwarové úrovni a žádný speciální hardware nepoužívá. [21]
22
5
Použitý hardware V této kapitole jsou popsány použité senzory a senzorové desky. Informace byly získány
z manuálů k daným přístrojům.
5.1
XM2110 (IRIS) Tento typ je jednou z poslední generace senzorových desek firmy Crossbow Technology.
Senzor obsahuje základní desku s integrovaným mikroprocesorem ATmega1281 a vysílačem Atmel RF230 pracujícím podle protokolu ZigBee. Komunikuje přes rozhraní IEEE 802.15.4 na frekvenci 2,4 až 2,48 GHz. Toto nastavení mu umožňuje komunikovat s ostatními nody až na vzdálenost 50/300 m (venku/v budově) a má paměťové prostory pro uložení programu o velikosti 512 kB. Dále obsahuje konektor s 51 piny pro připojení přídavné senzorové desky a 4 MBit flash paměť pro uložení naměřených a dalších uživatelských dat. Je napájen dvěma alkalickými bateriemi a odhadovaná doba mezi výměnami je více než jeden rok.
Obrázek 9:
Fotografie senzorové desky XM2110 (IRIS) a její blokové schéma
Komunikace je realizována přes rozhraní IEEE 802.15.4 v ISM pásmu 2,4 GHz. Vysílač Atmel AT86RF230, který lze naladit na jeden z 15 kanálů odstupňovaných 5 MHz od sebe 23
a je navržen pro nízkonapěťové bezdrátové aplikace. Rozhraní využívá DSSS (digital direct sequence spread spectrum) modem, který poskytuje všesměrné zesílení 9 dB a efektivní datový tok 250 kb/s. [24]
5.2
MIB520CB Tento modul zajišťuje komunikaci mezi senzory a uživatelem, používá se pro něj název
„gateway“. K počítači je připojen přes USB rozhraní, což zároveň řeší problém s napájením. Na desce je integrován procesor (ISP) Atmega16L, který obsluhuje programování senzorového uzlu.
Obrázek 10: Fotografie základní desky MIB520CB Je potřeba nainstalovat ovladače FTDI FT2232C VSP, které umožní používat USB jako virtuální COM port. Po připojení desky k PC se vytvoří dva virtuální sériové porty, z nichž ten s nižší váhou se používá pro programování a druhý pro komunikaci se senzory. [24]
5.3
MTS400 Přídavná senzorová deska MTS400 obsahuje základní nástroje pro monitorování
okolního prostředí s možností přidání modulu GPS. Proto se tento senzor dá využít ve velkém množství rozmanitých aplikací, počínaje jednoduchou meteorologickou stanicí až po komplexní senzorovou síť pro sledování širokého okolí, například v zemědělství nebo velkých podnicích. GPS modul lze použít k poziční identifikaci jednotlivých senzorů, například k vyhledávání vozidel nebo sledování nákladů. Včetně senzorů jsou k dispozici tři LED (červená, žlutá a zelená). Při inicializaci se primárně všechny diody zhasnou a připojí se k ovladači. Každá dioda umožňuje tři příkazy. Zapnout (On), vypnout (Off) a přepnout (Toggle), která zhasnutou diodu rozsvítí a naopak. [25]
24
Obrázek 11: Fotografie MTS400CC bez přidaného GPS modulu
5.3.1
Senzory na desce MTS400 Sensirion SHT11 je jednočipový modul měřící teplotu (-40 až +125 °C) a relativní
vlhkost vzduchu (0 až 100%). Osahuje 14 bitový A/D převodník a sériové rozhraní. Intersema MS5534AM je čip obsahující piezoelektrický snímač tlaku (300 až 1100 hPa) a senzor teploty (-10 až +60 °C). TAOS TLS2550 je světelný senzor vytvořený ze dvou fotodiod. Dokáže měřit intenzitu světa o vlnové délce 400 až 1000 nm, což je viditelné spektrum pro lidské oko. ADXL202JE je dvouosý akcelerometr měřící maximální zrychlení do 2 G. Je možno ho použít k detekci pohybu, náklonu nebo vibrací. [25] 5.3.2
SHT11 Jedná se o digitální teplotní a vlhkostní čidlo vzduchu kalibrované už od výrobce, které je
aplikováno v pouzdře SIL 4 pin. Toto čidlo kromě uvedených vlastností jako je měření teploty, relativní vlhkosti a z toho vypočítaného rosného bodu je vybaveno vlastním vyhříváním a kontrolou nízkého napájecího napětí. Vnitřní vyhřívání čidla může být v případě zvýšené relativní vlhkosti a kondenzaci vody na čidlu ovládáno obslužným programem vytvářeného měřícího zařízení. Toto vyhřívání při odběru 8 mA a 5 V navýší teplotu čidla o 5 °C.
Obrázek 12: Fotografie digitálního senzoru SHT11 Nízký stav napájení čipu je indikován napětím pod hranici 2,45 V s přesností 0,05 V. Čidlo před každým měřením ze své kalibrační paměti přehrává kalibrační data senzorů, to má 25
za následek měření veličin o 8 ms pomaleji. Tento čas lze ušetřit, ale podstupujeme tak riziko ztráty nebo poškození výrobcem nahraných kalibračních dat vlivem přepětí či ESD. Z výroby je nastaveno, že čidlo poskytuje naměřená data s rozlišením 14 bitů (teplota) a 12 bitů (vlhkost). Hloubka rozlišení těchto AD převodů může být natavena i na 12 a 8 bitů. Pro délky čtení naměřených dat teploty nebo relativní vlhkosti platí tyto časy 11/55/210 ms při AD rozlišení 8/12/14 bit. [26] 5.3.3
TAOS TLS2550 TLS2550 je digitální senzor světla s SMBus sériovým rozhraním. Skládá se ze dvou
fotodiod a 12 bitového analogově-digitálního převodníku, který se stará o převod světelných hodnot na digitální jednotky. Fotografie senzoru je na následujícím obrázku (obr.13).
Obrázek 13: Fotografie digitálního senzoru TLS2550 Dvoukanálový výstup převodníku se používá k získání hodnoty intenzity světla, která se přibližuje reakci lidského oka v běžně používaných jednotkách Lux a pracuje se světlem o vlnových délkách 400 – 1000 nm. Senzor má také programovatelný spínač k připojování napájecího napětí a jiných ovládacích prvků. Senzor umožňuje i měření teploty v rozmezí -40 až 80°C, ale v této úloze byl využit výše zmínění SHT11. [25]
26
6
Praktická část V této části diplomové práce se zabývám tvorbou a funkcí klasifikátoru a samotného
programu nahraného do senzorového uzlu. K návrhu klasifikátoru byl využit program Matlab pro numerické výpočty a samotné programování a implementace klasifikátoru do jazyka senzorové sítě byli provedeny v textovém editoru s podporou jazyka nesC.
6.1
Návrh klasifikátoru Ze zadání práce vyplývá, že je potřeba vytvořit jednotřídní klasifikátor, který signalizuje
vzorky odlišné od dat v trénovací množině, která je získána při spuštění aplikace na senzoru. Při měření trénovacích vzorků se senzor nachází v prostředí s relativně stabilními podmínkami. Po dokončení počátečních měření je k dispozici množina hodnot navzorkovaných ze senzorů teploty a světla. Pro další výpočty a následné zpracovávání dalších dat byly vytvořeny dva typy klasifikátorů – lineární a kruhový.
Výpočet klasifikátorů v Matlabu je vložen v příloze A. 6.1.1
Kruhový klasifikátor Tento typ klasifikátoru byl vytvořen, protože je jednoduchý a velice dobře popisuje
trénovací množinu jako celek s velmi malou chybou. V podstatě se jedná o kruh, který obaluje získanou množinu dat (obr.13). Nachází-li se klasifikovaný bod uvnitř, patří do množiny cílových bodů a vše venku je detekováno jako okolí. Tento typ klasifikátoru má pouze dva charakteristické parametry – souřadnice středu a poloměr. Velikost chyby je způsobena rozptylem dat naměřených pro potřebu učení klasifikátoru. Protože je senzor při získávání trénovacích dat umístěn ve stabilním prostředí, očekává se, že tento rozptyl nebude příliš velký. X2 Y2
R2
(1)
Učení klasifikátoru tedy probíhá následovně. Po naměření trénovací množiny se ta ohraničí obdélníkem, který takto vytvoří její meze. Na průsečíku úhlopříček tohoto obdélníka se nachází virtuální střed množiny, a tedy i souřadnice středu kružnice. Poloměr se získá porovnáním vzdáleností bodů množiny od virtuálního středu a ta největší je uložena jako parametr. Z důvodu snížení citlivosti na změnu lze vypočtený poloměr ještě vynásobit konstantou a tím rozšířit klasifikovaný prostor. 27
Obrázek 14: 6.1.2
Příklad kruhového klasifikátoru
Lineární klasifikátor Úkolem tohoto typu klasifikátoru je pomocí přímky oddělit trénovací data od ostatních.
Protože se jedná o jednotřídní klasifikátor, který v tomto případě rozdělí souřadnicový systém na dvě části s různou velikostí ohraničené plochy (rozměry jsou limitovány hraničními hodnotami měřitelnými senzorem, v rámci práce uvažuji 0-100% rozsahu), je potřeba, aby ta část, ve které se nachází trénovací vzorky, měla plochu co nejmenší vůči okolí. Na obrázku 14 je znázorněn příklad lineárního klasifikátoru, kde pod přímkou bude bod detekován pozitivně a nad ní negativně.
a X
b Y
c
0
(2)
Přímka v dvourozměrném prostoru je popsána rovnicí (2), kde (a,b) je normálový vektor přímky, [x, y] jsou souřadnice bodů na přímce a parametr c udává posun souřadnic přímky. Při tvorbě tohoto klasifikátoru se vycházelo s předešlého typu. Po získání virtuálního středu trénovací množiny se vytvoří spojnice mezi ním a středem soustavy souřadnic, popřípadě jiným libovolným bodem. Vektor této spojnice je normálovým vektorem klasifikační přímky. Pak už jen dopočítat parametr c a získáme kompletní rovnici přímky, kterou lze následně použít ke klasifikaci.
28
Obrázek 15:
Příklad lineárního klasifikátoru
Do vytvořené aplikace byl implementován kruhový klasifikátor, z toho důvodu že se lépe ověřuje jeho funkce. Obklopuje totiž celou množinu dat a není tedy důležité, která veličina roste či klesá. Na rozdíl od lineárního klasifikátoru, kde je pro detekci odchylky potřeba, aby obě veličiny měnili směrem ke středu souřadného systému. Dojde li k opačnému jevu, tak k detekování odchylky nedojde u lineárního klasifikátoru nikdy. Lineární klasifikátor byl tedy pouze navržen v Matlabu, ale neimplementován.
6.2
Programování senzorového uzlu Aplikace pro senzorový uzel je vytvořena v jazyce nesC a na senzorech běží operační
systém TinyOS. Jazyk nesC je velmi podobný klasickému C. Hlavní rozdíl je v tom, že se program (manuálně) skládá z jedné nebo více složek (komponent) propojených do jednoho spustitelného souboru. Komponenta poskytuje a využívá různá rozhraní, která jsou pouze přístupovým bodem ke komponentě. Rozhraní deklaruje sadu funkcí (příkazů), které musí realizovat poskytovatel a další sadu funkcí (událostí), které uživatel musí implementovat. Jedna komponenta může používat a poskytovat více rozhraní a také více instancí stejného rozhraní. Na následujícím obrázku je graf komponent (propojení součástí aplikace).
29
Obrázek 16:
6.3
Graf komponent vytvořené aplikace
Konfigurace Pro účely této práce jsou potřeba následující komponenty.
6.3.1
Main Hlavní komponenta, která se stará o inicializaci a následné spuštění naší aplikace.
6.3.2
SensirionHumidity Tato komponenta slouží jako obsluha pro práci se senzorem teploty a vlhkosti, který je
používán k získávání dat o teplotě okolního prostředí. Teplotu měří i jiné senzory obsažené na desce, ale ne tak efektivně jako Sensirion. Komponenta umožňuje klasické operace jako inicializaci (naportování a připravení k použití), získání dat ze senzoru (v krátkém čase nevzorkuje teplotní úroveň z termistoru) a také přerušení práce (ukončení vzorkování a odpojení) z důvodu energetických nároků a šetření baterií. 30
6.3.3
TaosPhoto Komponenta, která se stará o práci se senzorem světla. Protože práce nevyžaduje přesné
určení intenzity, ale jen reakci na změnu, aplikace používá k detekci jen jeden kanál. S komponentou se pracuje stejně jako v případě senzoru teploty. 6.3.4
ADCC Komponenta, která poskytuje asynchronní rozhraní pro přístup a práci s analogově-
digitálními převodníky. 6.3.5
LedsC Toto je komponenta pracující s LED na desce senzorových uzlů.
6.3.6
TimerC Poslední, ale neméně důležitá, komponenta je Timer neboli časovač, který umožňuje
provádět události v pravidelných intervalech. Komponenta poskytuje dva příkazy pro funkci a generuje jednu událost. Časovač se inicializuje příkazem Start(typ, interval), který má dva parametry. Existují dva typy časovače – jednorázový a opakovaný. Jednorázový proběhne pouze jednou, tzn., že jedenkrát signalizuje událost Fired() a po uplynutí intervalu bude program pokračovat dále. Druhý typ se pravidelně opakuje a pokaždé po uplynutí intervalu vyvolá událost, až do doby kdy uživatel pošle příkaz Stop(). Potom už časovač další událost nevyvolá. 6.3.7
HPLADCC a HPLClock Tyto dvě komponenty pracují už se samotným hardwarem. Starají se o vzorkování hodnot
ze senzorů, jejich převod na digitální data a počítání taktů procesoru, a tak určování času.
Konfigurační komponenta aplikace se nachází v příloze B.
31
6.4
Modul Komponenta poskytuje pouze jedno rozhraní, a to StdControl, které umožňuje
inicializovat, spustit a ukončit aplikaci. Rozhraní, která komponenta používá, byla už popsána výše v sekci konfigurace. 6.4.1
Implementace programu
Implementace neboli tělo, programu lze rozdělit na tyto tři základní části. Navzorkování trénovací množiny Výpočet klasifikátoru Periodické získávání vzorků a jejich porovnání 6.4.2
Naměření trénovacích vzorků V první části programu se provádí inicializace základních komponent pro práci
s převodníky jednotlivých senzorů a ostatními součástmi přístroje. Po inicializaci následuje spuštění prvního časovače, který se stará o načtení trénovací množiny s periodou spouštění danou druhým parametrem nastaveným na 2 sekundy. Časovač má omezený počet běhů. Tento počet udává proměnná Counter. Při spuštění bloku Fired() se navzorkují senzory teploty a světla a získané hodnoty se uloží do proměnné, nazvané Pole, což je dvourozměrná matice, která má dva sloupce a počet řádků roven počtu prvních vzorkování. Data uložená do pole se rovnou předzpracovávají a určí se vrcholy obdélníka pro výpočet virtuálního středu trénovací množiny, aby se tak ušetřil jeden zbytečný cyklus na prohledávání pole vzorků. 6.4.3
Výpočet klasifikátoru Po dokončení první části aplikace je k dispozici naměřené pole vzorků a obdélník
k určení virtuálního středu trénovací množiny. Díky tomu lze vytvořit výše uvedené klasifikátory. Způsob návrhu kruhového klasifikátoru byl již uveden v předešlé kapitole. Parametry klasifikátoru jsou uloženy do proměnných (StredX, StredY, Polomer). Po dokončení výpočtu parametrů je na řadě samotná klasifikace.
32
6.5
Klasifikace V této části programu už je navržený jednotřídní klasifikátor a může se začít se samotnou
klasifikací. Nejprve je potřeba navzorkovat ze senzoru teploty a světla nové hodnoty okolních podmínek a následně je rozpoznat pomocí klasifikátoru. Při použití kruhového klasifikátoru se detekuje jako platná hodnotu ta, která se nachází uvnitř kružnice. Podle rovnice (1) platí tedy pravidlo, je-li délka spojnice mezi vzorkovaným bodem a středem kružnice menší než její poloměr, tak je bod uznán za platný. Lineární klasifikátor, po naměření souřadnic vzorku ze senzorů, jím vede přímku se stejným koeficientem směrnice a potom se dopočítá posun. Je-li nový posun větší (záleží na poloze vůči referenčnímu bodu – střed souřadnicového systému je níže než virtuální střed trénovací množiny, u menší to platí analogicky) tak se klasifikovaný vzorek určí jako platný.
Klasifikace vzorku je signalizována pomocí červené diody umístěné na senzorové desce. Je-li vzorek klasifikován jako platný, tak se nic nestane. Pokud se vzorek nachází mimo platnou oblast (vně kružnice, v druhé rovině než množina) je klasifikován jako neplatný a dojde k rozsvícení červené diody.
Komponenta modulu aplikace je v příloze C.
6.6
Práce se senzorem Existují dva způsoby jak nahrát novou aplikaci do senzoru. Každý senzor má 512 kB
flash paměti, která je rozdělena na 4 stejné části (nazývané sloty) o velikosti. Slot 0 je rezervován pro obsluhu OTAP. Sloty 1-3 jsou použity k nahrání uživatelské aplikace. 6.6.1
OTAP Over-the-air-programming
(programování
vzdušnou
cestou)
umožňuje
uživateli
bezdrátové programování senzoru přes wi-fi rozhraní. Tuto službu obsluhuje program MoteConfig, který do senzorového uzlu nahraje zkompilovanou aplikaci. V prostředí programu se kromě cesty k připravenému souboru zadávají ještě další parametry uzlu. Jedná se o identifikační číslo nodu v síti, přenosovou frekvenci komunikace atd. Během procesu bezdrátového programování je senzor restartován a načte obsluhu ze slotu 0. Potom je zkompilovaná uživatelská aplikace rozdělena na několik fragmentů a uložena ve slotech 1-3. Dále stačí jen senzor restartovat a ten načte z paměti uloženou aplikaci.
33
6.6.2
Fyzické spojení Senzorový uzel obsahuje dvě základní desky. Jednu s čipem M2110 starající se o provoz
programu, jeho uložení v paměti a komunikaci s bránou přes wi-fi rozhraní. A druhou (přídavnou) se senzory, diodami, apod. Uzel se tedy programuje tím způsobem, že se deska s procesorem připojí do konektoru na programovací desce MIB520. Můžeme tak nahrát program do paměti uzlu přímo. Stačí jen v našem programovacím nástroji napsat do příkazového řádku make iris install mib520,comX, kde X je číslo virtuálního sériového portu, který se vytváří při připojení přístroje přes USB rozhraní. Tento příkaz zajistí kompilaci kódu a jeho nahrání do senzoru. Samozřejmě k příkazu jdou přidat ještě další parametry jako číslo nodu v sítí, komunikační frekvence a další, ale ty jsou už nastaveny v lokální konfiguraci make (MakeXbowLocal).
34
7
Závěr Cílem této práce bylo navržení jednotřídního klasifikátoru, jeho implementace v
programovacím jazyce nesC a následné vyzkoušení v aplikaci detekování teploty a světla. Byly vytvořeny dva jednoduché klasifikátory v prostředí programu MATLAB a jeden z nich byl implementován do vytvořeného programu, který obsluhuje funkce senzorového uzlu. Tento klasifikátor porovnává teplotní a světelné podmínky okolí navzorkované na senzorech a přesahuje-li odchylka vypočtené meze, je signalizována chyba. Vytvořený kód se zatím nepodařilo nahrát do senzorového uzlu z důvodu hlášení chyby v binárních knihovnách programovacího jazyka, a proto nemohla být funkce ověřena. Tato chyba je pravděpodobně způsobena absencí nějaké komponenty, kterou aplikace využívá. Příčina chyby bude nalezena a opravena dodatečně po odevzdání práce před její obhajobou. Tato práce mi značně rozšířila orientaci v oblasti bezdrátových sítí a přinesla mnoho nových informací.
35
Použitá literatura [1]
Wsn. In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, 15.3.2006, last modified on 30.5.2010 [cit. 2010-06-02]. Dostupné z WWW: http://en.wikipedia.org/wiki/Wsn
[2]
Sensor node. In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, 11.6.2007, last modified on 1.6.2010 [cit. 2010-06-02]. Dostupné z WWW: http://en.wikipedia.org/wiki/Sensor_node
[3]
ZigBee. In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, 4.6.2005, last modified on 30.5.2010 [cit. 2010-06-02]. Dostupné z WWW: http://en.wikipedia.org/wiki/ZigBee
[4]
IEEE 802.15.4. In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, 1.8.2008, last modified on 1.8.2008 [cit. 2010-06-02]. Dostupné z WWW: http://en.wikipedia.org/wiki/IEEE_802.15.4
[5]
Communication Networks. In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, 22.8.2007, last modified on 12.9.2009 [cit. 2010-06-02]. Dostupné z WWW: http://en.wikibooks.org/wiki/Network_Topologies
[6]
National instruments [online]. 2009 [cit. 3.5.2010]. Wireless Sensor Networks. Dostupné z WWW: http://www.ni.com/wsn/
[7]
BRADÁČ, Zdeněk. Bezdrátový komunikační standard ZigBee. Automatizace [online]. Duben 2005, 48, 4, [cit. 3.5.2010]. Dostupný z WWW: http://www.automatizace.cz/article.php?a=638
[8]
TAX, David. One-class classification [online] : ASCI, 2001. 190 s. Dizertační práce. ASCI. Dostupné z WWW:
. ISBN 90-75691-05-x.
[9]
TAX, David. Data description toolbox : dd tools 1.5.0 [online]. Nizozemsko : Delft University of Technology, 26.7.2006 [cit. 4.5.2010]. Dostupné z WWW: http://homepage.tudelft.nl/n9d04/dd_manual.pdf
[10] GAY, David, et al. The nesC Language : A Holistic Approach to Networked Embedded Systems [online]. Berkeley : PLDI, 2003 [cit. 4.5.2010]. Dostupné z WWW: http://www.eecs.berkeley.edu/~pal/pubs/nesc-pldi03.pdf [11] GAY, David, et al. NesC 1.1 Language Reference Manual [online]. Berkeley : PLDI, květen 2003 [cit. 4.5.2010]. Dostupné z WWW: http://nescc.sourceforge.net/papers/nescref.pdf [12] LEVIS, Philip, TinyOS Programming [online]. Revize 1.2. Berkeley :, 28.6.2006 [cit. 4.5.2010]. Dostupné z WWW: http://csl.stanford.edu/~pal/pubs/tinyos-programming.pdf [13] LEVIS, Philip, et al. TinyOS: An Operating System for Sensor Networks [online]. Berkeley : 28.6.2006 [cit. 4.5.2010]. Dostupné z WWW: http://www.dbis.ethz.ch/education/ss2007/tatbul/hotdms/papers/tinyos_chapter.pdf
36
[14] ROSSI, Dario. Sensors as Software : TinyOS [online] : 16.3.2006 [cit. 5.5.2010]. Dostupné z WWW: http://www.telematica.polito.it/wsn/ppt/WSN2_TinyOS.pdf [15] HANDZISKI, Vlado, et al. TinyOS 2.0.2 Documentation [online]. 2007 [cit. 6.5.2010]. Hardware Abstraction Architecture. Dostupné z WWW: http://www.tinyos.net/tinyos2.1.0/doc/pdf/tep2.pdf [16] TinyOS Documentation Wiki [online]. 19.10.2007, 17.1.2009 [cit. 6.5.2010]. Modules and the TinyOS Execution Model. Dostupné z WWW: http://docs.tinyos.net/index.php/Modules_and_the_TinyOS_Execution_Model [17] KLUES, Kevin, et al. TinyOS Documentation [online]. Revize 1.7. 11.1.2006, 21.2.2007 [cit. 6.5.2010]. Power Management of Non-Virtualised Devices. Dostupné z WWW: http://www.tinyos.net/tinyos-2.1.0/doc/pdf/tep115.pdf [18] SZEWCZYK, Robert, et al. TinyOS Documentation [online]. Revize 1.7. 19.9.2005, 1.10.2007 [cit. 6.5.2010]. Microcontroller Power Management. Dostupné z WWW: http://www.tinyos.net/tinyos-2.1.0/doc/pdf/tep112.pdf [19] GAY, David, et al. TinyOS Documentation [online]. 2007 [cit. 6.5.2010]. Permanent Data Storage. Dostupné z WWW: http://www.tinyos.net/tinyos-2.1.0/doc/pdf/tep103.pdf [20] LEVIS, Philip. TinyOS Documentation [online]. Revize 1.10. 10.12.2004, 28.3.2007 [cit. 7.5.2010]. Packet Protocols. Dostupné z WWW: http://www.tinyos.net/tinyos2.1.0/doc/pdf/tep116.pdf [21] HAI, Yan. Xxx [online]. 27.4.2006 [cit. 7.5.2010]. TinySec: A Link Layer Security. Dostupné z WWW: http://uwsn.engr.uconn.edu/presentations/TinySec.ppt [22] LEVIS, Philip. TinyOS Documentation [online]. 2007 [cit. 7.5.2010]. Schedulers and Tasks. Dostupné z WWW: http://www.tinyos.net/tinyos-2.1.0/doc/pdf/tep106.pdf [23] Článek o WSN [online]. National Instruments Corporation, [cit. 2010-06-02]. Dostupné z WWW: http://www.ni.com/wsn/ [24] MPR-MIB Users Manual, Crossbow Inc. Revize A červen 2007, [cit. 2010-06-02]. PN: 7430-0021-08 Dostupné na přiloženém CD v adresáři /Datasheet [25] MTS/MDA Sensor Board Users Manual, Crossbow Inc. Revize A červen 2007, [cit. 201006-02]. PN: 7430-0020-05 Dostupné na přiloženém CD v adresáři /Datasheet [26] Datasheet SHT1x (SHT10, SHT11, SHT15) Humidity and Temperature Sensor, Verze 4.2 duben 2009, [cit. 2010-06-02]. Dostupné na přiloženém CD v adresáři /Datasheet [27]
37
Příloha A:
Návrh klasifikátoru v MATLABu
function OUT = klasifikator(A) % A - pole trenovacich vzorku % OUT - parametry klasifikatoru % OUT = [K,Q] - parametry klasifikacni primky (smernice a posun) % OUT = [StredX, StredY, R] - souradnice stredu a polomer klas. kruznice % % funkce nacte pole A, spocita klasifikatory a vrati jejich parametry StredSoustavyX = 50; StredSoustavyY = 50; pocet = size(A); % Urceni virtualniho stredu trenovaci mnoziny minX = min(A(:,1)); maxX = max(A(:,1)); minY = min(A(:,2)); maxY = max(A(:,2)); % Kruhový klasifikátor StredX = (minX+maxX)/2; StredY = (minY+maxY)/2; R = 0; inc = 1; P = [0 0]; pom = 0; while (inc <= pocet(1)) P = A(inc,:) pom = sqrt((abs(StredX - P(1)))^2 + (abs(StredY - P(2)))^2) if (pom > R) R = pom end inc = inc + 1 end % Lineární klasifikátor inc = 1; P = [0 0]; pom = 0; NormalovyVektor = [StredSoustavyX-StredX StredSoustavyY-StredY]; K = - NormalovyVektor(1) / NormalovyVektor(2); 38
C = 0; Q = 0; while (inc <= pocet(1)) P = A(inc,:); pom = -(NormalovyVektor(1) * P(1) + NormalovyVektor(2) * P(2)); if (inc == 1) C = pom end if (NormalovyVektor(1) >= 0 && NormalovyVektor(2) >= 0 && abs(pom) > C) C = pom; end if (NormalovyVektor(1) < 0 && NormalovyVektor(2) < 0 && abs(pom) > C) C = pom; end if (NormalovyVektor(1) >= 0 && NormalovyVektor(2) < 0 && abs(pom) < C) C = pom; end if (NormalovyVektor(1) < 0 && NormalovyVektor(2) >= 0 && abs(pom) < C) C = pom; end inc = inc + 1; end Q = - C / NormalovyVektor(2); return OUT = [K,Q, StredX, StredY, R]
39
Příloha B:
Program v TinyOS – Konfigurace
configuration Klasifikace { } implementation { components Main, KlasifikaceM, SensirionHumidity, TaosPhoto, ADCC, LedsC, TimerC; Main.StdControl -> KlasifikaceM; Main.StdControl -> TimerC; KlasifikaceM.ADCControl -> ADCC; KlasifikaceM.Leds -> LedsC; // Wiring for Taos light sensor KlasifikaceM.TaosControl -> TaosPhoto; KlasifikaceM.TaosCh0 -> TaosPhoto.ADC[0]; // Wiring for Sensirion humidity/temperature sensor KlasifikaceM.TempHumControl -> SensirionHumidity; KlasifikaceM.Humidity -> SensirionHumidity.Humidity; KlasifikaceM.Temperature -> SensirionHumidity.Temperature; KlasifikaceM.TemperatureError -> SensirionHumidity.TemperatureError; // Wiring for Timers KlasifikaceM.Timer1 -> TimerC.Timer[unique("Timer")]; KlasifikaceM.Timer2 -> TimerC.Timer[unique("Timer")]; }
40
Příloha C:
Program v TinyOS – Modul
module KlasifikaceM { provides interface StdControl; uses { //Sensirion interface SplitControl as TempHumControl; interface ADC as Humidity; interface ADC as Temperature; interface ADCError as TemperatureError; //Taos interface SplitControl as TaosControl; interface ADC as TaosCh0; //Casovace interface Timer as Timer1; interface Timer as Timer2; interface ADCControl; interface Leds; } } implementation { //Promenne pro cykly int count, counter; //Promenne pro ulozeni dat uint16_t DataTemp; uint16_t DataLight; uint16_t Pole[2][10]; //Promenne klasifikatoru uint16_t Xmin, Xmax, Ymin, Ymax; uint16_t StredX, StredY, Polomer; //pomocna promenna uint16_t pom = 0; command result_t StdControl.init() { // TOSH_MAKE_FLASH_OUT_OUTPUT(); // TOSH_MAKE_FLASH_CLK_OUTPUT(); //Inicializace call ADCControl.init(); call Leds.init(); call TempHumControl.init(); call TaosControl.init(); //Nastaveni krajnich hodnot pro klasifikator Xmin = 65534; Xmax = 0; Ymin = 65534; Ymax = 0; //Nastaveni poctu mereni count = 0; counter = 10; return SUCCESS; } 41
command result_t StdControl.start() { //Nacteni hodnot ze senzoru call Leds.greenOn(); call Timer1.start(TIMER_REPEAT, 2048); //Vypocet klasifikatoru call Leds.greenOff(); call Leds.yellowOn(); //Druha cast programu, samotny vypocet klasifikatoru count = 0; //pocet cyklu //Souradnice stredu soustavy StredX = (Xmax + Xmin)/2; StredY = (Ymax + Ymin)/2; //Urceni rozptylu namerenych hodnot pom = sqrt((Pole[0][count]-StredX)*(Pole[0][count]-StredX) + (Pole[1][count]StredY)*(Pole[1][count]-StredY)); if (pom > Polomer) Polomer = pom; //Real-Time klasifikace merenych vzorku call Leds.greenOn(); call Timer2.start(TIMER_REPEAT, 5120); return SUCCESS; } command result_t StdControl.stop() { //Konec programu call Timer2.stop(); return SUCCESS; } /****************************************************************************/ task void TempStop() { call TempHumControl.stop(); return; } task void PhotoStop() { call TaosControl.stop(); return; } event result_t Timer1.fired() { //Prvni cast programu, ktera s periodou 2 sekundy vycita hodnoty ze senzoru a ulozi do pameti call Leds.redOn(); call TempHumControl.start(); //Vycte data ze senzoru call TaosControl.start(); //Podle ziskanych dat se nastavi nove meze pro klasifikator atomic { if (DataTemp > Xmax) Xmax = DataTemp; if (DataTemp < Xmin) Xmin = DataTemp; if (DataLight > Xmax) Xmax = DataLight; if (DataLight < Xmin) Xmin = DataLight; //Ulozeni dat do pameti 42
Pole[0][count] = DataTemp; Pole[1][count] = DataLight; } //Omezeni poctu cyklu count++; if (count >= counter) call Timer1.stop(); return SUCCESS; } event result_t Timer2.fired() { //Treti cast programu (klasifikace), porovnava hodnoty ze senzoru s vypoctenym klasifikatorem call TempHumControl.start(); // vycteni dat ze senzoru call TaosControl.start(); //Porovnani namerenych dat s klasifikatorem a nasledna signalizace cervenou diodou atomic pom = sqrt((DataTemp-StredX)*(DataTemp-StredX) + (DataLightStredY)*(DataLight-StredY)); if (pom > Polomer) { call Leds.redOn(); } else { call Leds.redOff(); } return SUCCESS; } void Vypocet() { return; } /***************************************************************************** Sensirion SHT11 temperature sensor *****************************************************************************/ event result_t TempHumControl.initDone() { //Inicializace senzoru probela return SUCCESS; } event result_t TempHumControl.startDone() { //Navzorkuje data ze senzoru call Temperature.getData(); return SUCCESS; } async event result_t Temperature.dataReady(uint16_t data) { //Ulozeni pripravenych navzorkovanych dat do promenne atomic DataTemp = data; post TempStop(); return SUCCESS; } async event result_t Humidity.dataReady(uint16_t data) { 43
return SUCCESS; } event result_t TempHumControl.stopDone() { //Ukonceni probehlo v poradku, nasleduje vzorkovani dalsiho senzoru call TaosControl.start(); return SUCCESS; } event result_t TemperatureError.error(uint8_t token) { //Přerušení práce se senzorem dojde-li k chybě call TempHumControl.stop(); return SUCCESS; } /***************************************************************************** Taos light sensor *****************************************************************************/ event result_t TaosControl.initDone() { //Inicializace senzoru probela return SUCCESS; } event result_t TaosControl.startDone() { //Navzorkuje data ze senzoru call TaosCh0.getData(); return SUCCESS; } async event result_t TaosCh0.dataReady(uint16_t data) { //Ulozeni pripravenych navzorkovanych dat do promenne atomic DataLight = data; call Leds.redOff(); post PhotoStop(); return SUCCESS; } event result_t TaosControl.stopDone() { //Ukonceni probehlo v poradku return SUCCESS; } }
44