LU-BST-b12:PD

From DiLab
Revision as of 11:39, 16 October 2012 by CaptSolo (talk | contribs) (Formulējums)
Jump to: navigation, search

Praktiskie darbi

Praktiskajos darbos jāizpilda sensoru mezgla programmēšanas uzdevums.

Lai nokārtotu kursu, sekmīgi jānokārto visi praktiskie darbi!

Praktiskais darbs ir sekmīgs, ja par to saņemts vismaz 40% vērtējums.

PD iesniegšanas procedūra:

  • Darbā izmantotos failus (izejas kodu) iesūtīt uz epastu, subjektā norādot "BST PDxx", kur xx ir PD numurs: 01, 02, ... .
    • Iesūtīšanai jāievēro norādītais termiņš!
    • Faili jānosūta uz pasniedzēja e-pasta adresi
  • Darbs jāatrāda uz vietas, 312. datorklasē, ieteicams, praktisko darbu laikā (pēc lekcijas). Atrādīšana var notikt arī pēc iesūtīšanas termiņa beigām.

Izstrādes platformas un vide

Pirmie divi obligātie praktiskie darbi (PD1, PD3) veicami TinyOS vidē.

  • labojums: precizēts, ka TinyOS prasība attiecas uz PD1, PD3 (neobligātajam PD2 nav programmēšanas uzdevums)

Turpmākos praktiskos darbus atļauts veidot jebkurā vidē: TinyOS, MansOS, Contiki, Mantis, SOS, ... .

Vēlams izmantot TMote Sky sensoru mezglus. Bet arī citas motes ir atļautas, to saskaņojot ar pasniedzēju (uzrakstiet epastā "vēlos izmantot platformu X, programmēšanas vidi Y").

Vērtēšana

Visi praktiskie darbi kopā sastāda 20% no kopējā kursa vērtējuma (2 balles).

Praktiskajiem darbiem ir atšķirīga sarežģītība, tāpēc tiem ir arī atšķirīgi svari kopējā vērtējuma veidošanā. PD svari tiks noteikti brīdī, kad būs pienācis pēdējā PD termiņš un kad būs redzams, cik daudz piepūles katrs konkrētais PD studentiem ir sagādājis.

Bonusa punkti

Praktiskajos darbos būs neobligātā daļa, par kuru iespējams saņemt papildus punktus. Rezultātā par PD kopā iespējams saņemt arī vairāk par 20% no kopējās atzīmes (2 ballēm). Šādā veidā ar padziļinātu darbu iespējams nopelnīt punktus kas zaudēti citās "disciplīnās": esejas, KD, projekts.

Praktisko darbu saraksts

Informācija par praktiskajiem darbiem tiks ievietota pēc to uzdošanas.

PD1

Morzes kods.

Uzdevums: izspīdināt uz sarkanās gaismas diodes savu vārdu Morzes kodā (bez mīkstinājuma zīmēm).

Lai kods būtu lasāms "ar neapbruņotu aci", izmantosim sekojošus signālu ilgumus (kuri ideālā gadījumā ir konfigurējami):

  • Punkta garums (P): 250ms
  • Svītras garums (S): 3 * P
  • Atstarpe starp signāliem viena burta ietvaros: P
  • Atstarpe starp diviem burtiem: S
  • Pauze pēc vārda beigām: 3 sekundes

Pēc pauzes vārds tiek izspīdināts atkal no sākuma.

Bonusa uzdevums 1: vienlaikus uz sarkanās diodes spīdināt savu vārdu, uz zaļās: uzvārdu. Ja vārds īsāks par uzvārdu, sarkanā diode sagaida, kamēr zaļā beidz savu signālu virkni, abas kopā nogaida vēl sekundi, un atkal viss sākas no sākuma. Ja uzvārds īsāks, zaļā diode sagaida sarkano, pauze, atkal no sākuma.

Bonusa uzdevums 2: uzlikt uz sava datora TOSSIM, nodemonstrēt praktisko darbu strādājošu (uz sava datora) iekš TOSSIM un atsūtīt step-by-step instrukcijas TOSSIM instalēšanā un iedarbināšanā.

Veiksmīgas bonusa uzdevumu izpildes gadījumā iespējams iegūt vēl līdz 100% no PD1 vērtējuma. Šo bonusu iegūst tad, ja ir izpildīts vismaz viens no bonusa uzdevumiem (t.i., kopā iespējams iegūt 200% par PD1).


Termiņš: Trešdiena, 03.10.2012. 10:00

Soda punkti, iesūtot novēloti:

  • pēc 03.10.2012. 10:00: -15%
  • pēc 10.10.2012. 10:00: -30%
  • pēc 17.10.2012. 10:00: -45%
  • pēc 24.10.2012. 10:00: -60%

PD2

PD2 ir neobligāts, ar iespēju nopelnīt papildus punktus.

Uzdevums: doties uz VieSenTIS projekta semināru (http://selavo.lv/viesentis/) 28.09.2012., noklausīties prezentācijas un uzrakstīt "eseju" par to, ko atceraties, kas patika, ko sapratāt, ko nesapratāt.

Seminārā ir 6 prezentācijas (pa trim katrā sesijā) + 1 ievadlekcija, par katru jāuzraksta savas pārdomas, īsas esejas formā (daži teikumi līdz dažas rindkopas). Plus viena eseja par visu semināru kopumā. Visu noformēt kā vienu dokumentu (nevis 7 esejas). Ja esat veikuši pierakstus papīra formā, drīkst iesūtīt skenētus/fotografētus papīra pierakstus, pie nosacījuma, ka rokraksts ir salasāms.

Vērtējums -- ir divas iespējas:

  • a) uzrakstīt par pilnu semināru (abām sesijām + semināru kopumā) un saņemt 100% punktu;
  • b) uzrakstīt par vienu sesiju (3 prezentācijām) + semināru kopumā un saņemt 50% punktu.

Termiņš: Trešdiena, 10.10.2012. 10:00

PD3

Sensoru datu pārsūtīšana uz bāzes staciju.

Termiņš: trešdiena, 24.10.2012. 10:00

Uzdevums

Izveidot divas aplikācijas: programmatūru sensoru mezglam, kas lasa analogos sensorus, un bāzes stacijai, kas pieprasa sensoru mezglam datus un nosūta tos uz seriālo portu.

Formulējums

Uzmanību: formulējumā ir dota saturīgo datu struktūra C valodā. Lai tā darbotos TinyOS, šīs struktūras ir jāpārveido par atbilstošiem typedef.

Gan pārraidi no sensoru mezgla pa radio, gan no bāzes stacijas uz seriālo portu veikt ar paketēm, ar sekojošu struktūru:

  • magicStart: 4 baiti, kas izmantoti paketes sākuma identificēšanai datu plūsmā. Šie baiti ir konstanti: { 0xde, 0xad, 0xbe, 0xef };
  • packetType: 2 baiti paketes tipa norādīšanai: 1 = SensorRequestMsg, 2 = SensorReportMsg, 3 = NetworkScanMsg
  • dataLen: 2 baiti saturīgo datu garums
  • data: <dataLen> baiti - saturīgie dati

Visās pakās datu daļā pirmais lauks ir counter: skaitītājs, kas tiek uzturēts individuāls uz katras motes. Pie katras pakas nosūtīšanas mote šo skaitītāju palielina par 1. Viens un tas pats skaitītājs tiek lietots VISĀM pakām, ko sūta šī mote, neatkarīgo no paketes tipa. Ja mote pārsūta citas motes sūtītu paku, visi lauki (tai skaitā, skaitītājs), tiek atstāti ar oriģinālajām vērtībām.

Ja tiek izmantota maršrutizācija, pakās drīkst ieviest papildus laukus, ko izmanto tīkla līmenis.

Saturīgie dati var būt šādā formā, atkarībā no paketes tipa:

SensorRequestMsg (packetType = 1, dataLen = 7) {
   // skaitītājs paku dublikātu identificēšanai
   uint16_t counter;
   // sensoru mezgla id
   uint16_t moteId;
   // kuru sensoru lasīt: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma, 3 = temperatūra, 4 = mitrums
   uint16_t sensorId;
   // ik pa cik sekundēm lasīt un sūtīt šī sensora lasījumus, (0 nozīmē "nolasīt tikai vienreiz")
   uint16_t period;
   // no cik lasījumiem vilkt vidējo vērtību (min = 1, max = 100)
   uint16_t avg;
}
SensorReportMsg (packetType = 2, dataLen = 7) {
   // skaitītājs paku dublikātu identificēšanai
   uint16_t counter;
   // sensoru mezgla id
   uint16_t moteId;
   // nolasītā sensora ID: 1 = pilnā gaisma, 2 = fotosintētiskā gaisma,
   // 3 = temperatūra, 4 = mitrums
   uint16_t sensorId;
   // nolasītā vidējā vērtība
   uint16_t value;
}
NeworkScanMsg (packetType = 3, dataLen = 2) {
   // skaitītājs paku dublikātu identificēšanai
   uint16_t counter;
}

Katrs students izvēlas sev unikālu sensoru tīkla identifikatoru (networkId): studentu apliecības pēdējos divus ciparus. MoteId tad izvēlas kā networkId * 100 + moteNr, numurējot motes no 1 uz priekšu. Vairāku vienādu tīkla ID gadījumā atrādīšanas laikā tiks izvēlēti citi, unikāli ID. Katram studentam paredzēta arī sava bāzes stacija, kura prasa datus tikai sev piederīgajam sensoru mezglam. Bāzes stacijai ID nav vajadzīgs. Citiem vārdiem, katrs students noprogrammē pāri: bāzes stacija un sensoru mezgls (vairāki mezgli), kas abi runājas savā starpā, netraucējot citu studentu motēm, kas vienlaikus atrodas tajās pašās telpās.

Sensoru mezgla un bāzes stacijas darbības protokols:

  • Bāzes stacija:
    • No datora seriālā porta saņem SensorRequestMsg, pārsūta to pa radio
    • Klausās ienākošos SensorReportMsg ziņojumus, atfiltrē no tiem tikai tos, kam ir atbilstošs moteId, derīgos pārsūta uz seriālo portu
  • Sensoru mezgls:
    • Klausās pa radio saņemtos SensorRequestMsg ziņojumus, atfiltrē tikai sev piederīgus (ar savu moteId).
    • Saņemot sev adresētu SensorRequestMsg, uzsāk norādītā sensora lasīšanu un sūtīšanu (SensorReportMsg) ar norādīto periodu. Ja periods = 0, sūtīšanu veic tikai vienreiz (uzreiz pēc šīs ziņas saņemšanas).
    • Katra sūtījuma izveidošanai sensors tiek lasīts tik reizes, cik norāda avg lauks saņemtajā SensorRequestMsg ziņojumā. Vidējā vērtība tiek izrēķināta uz sensoru mezgla un sūtīta SensorReportMsg ziņojumā
    • Vienlaikus uz sensoru mezgla var darboties vairāki procesi, kur katrs lasa savu sensoru ar atšķirīgu periodu. Tomēr visi periodi ir ar sekundes granularitāti.

Šis praktiskais darbs var noderēt kā bāze kursa projektam.

PD3 Vērtējums

Lai darbs būtu ieskaitīts, jāsaņem vērtējums >= 40%.

Vērtējums tiek saņemts par sekojošu punktu izpildi (pieļaujama kombinācija no jebkuriem punktiem):

  • Jāuzraksta bāzes stacijas (motes) programma, kas:
    • pārsūta no PC pa seriālo portu saņemtos SensorRequestMsg ziņojumus pa radio: 10%
    • pārsūta pa radio saņemtos sev piederīgos SensorReportMsg ziņojumus uz PC pa seriālo portu: 10%
  • Jāuzraksta sensoru mezgla (motes) prorgamma, kas:
    • saņem SensorRequestMsg ziņojumus pa radio un atfiltrē sev piederīgos: 10%
    • nolasa nepieciešamos sensorus ar norādīto periodu, atbilstoši saņemtajiem SensorRequestMsg ziņojumiem. Vienkāršākajā gadījumā programmai jāmāk atcerēties pēdējais SensorRequestMsg un nolasīt tikai vienu sensoru. Ideālā gadījumā: jāatceras katram sensoram pēdējais SensorRequestMsg un jālasa visi pieprasītie sensori paralēli. Vērtējums vienkāršākajā gadījumā: 10%, ideālā gadījumā: 20%.
    • izvelk katra sensora lasījumiem vidējo vērtību: 5%
    • nosūta izrēķināto vidējo vērtību pa radio kā SensorReportMsg ziņojumu: 5%
  • Papildināt PC programmu tā, lai saņemtās sensoru vērtība tiktu attēlotas sakarīgās (nevis jēlās) vērtībās: luksos, grādos, relatīvā mitruma %. Par šī punkta izpildi: 20%
  • Papildināt sensoru mezglu programmas tā, lai tiktu atbalstīts multi-hop tīkls: vai nu ar vienkāršu pludināšanu (flooding) - katrs sensoru mezgls tieši VIENU REIZI pārsūta katru pa radio saņemto ziņojumu -, vai ar kādu efektīvāku maršrutizācijas protokolu. Flooding gadījumā papildus 30% vērtējums, efektīvākas maršrutizācijas gadījumā: līdz 50%.
  • Papildināt PC, bāzes stacijas un sensoru mezgla programmas tā, lai tiktu atbalstīta tīkla skenēšana ar NetworkScanMsg: no PC iespējams noskaidrot, ar kādiem ID motes šobrīd ir tīklā. Vienkāršākajā variantā pietiek ar viena lēciena tīkla skenēšanu. PC nosūta NetworkScanMsg, ko bāzes stacija pārsūta tīklā (un sensoru mezgli pārsūta vēlreiz, ja tiek atbalstīts multi-hop tīkls). Atbildē motes drīkst sūtīt SensorReportMsg jebkuram sensoram pēc izvēles. Papildus vērtējums: 30%.
  • Papildus līdz 50% var iegūt, izveidojot grafisko interfeisu uz PC: gan tīkla skenēšanai, gan sensoru datu pieprasīšanai, gan rezultātu uzskatāmai apskatei. Vērtējums par šo punktu tiek aprēķināts pēc lietojamības viedokļa

PD3 Termiņš

Trešdiena, 24.10.2012. 10:00

PD3 Soda punkti, iesūtot novēloti

  • pēc 24.10.2012 10:00: -15%
  • pēc 31.10.2012 10:00: -30%
  • pēc 07.11.2012 10:00: -45%
  • pēc 14.11.2012 10:00: -60%


PD svari

PD svari tiks noteikti brīdī, kad būs pienācis pēdējā PD termiņš un kad būs redzams, cik daudz piepūles katrs konkrētais PD studentiem ir sagādājis.