Optimering af fraværsregistrering

Relaterede dokumenter
Optimering af fraværsregistrering

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B

Arduinostyret klimaanlæg Afsluttende projekt programmering C

Arduino Programmering

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

Enes Kücükavci Roskilde Tekniske Gymnasium Mathias Turac Informationsteknolog B Vejleder: Karl Bjranasson Programmering C

Microcontroller, Arduino

Michael Jokil

Arduino kursus lektion 3:

Klasse 1.4 Michael Jokil

Lectio. Introduktion til Lectio Elevmodul. MaCom A/S Vesterbrogade 48, København V Telefon:

Af: Safa Sarac Klasse 3.4 Skole: Roskilde Tekniske Gymnasium, HTX Vejleder(e): Karl B Dato: 26. marts 2012

IT sikkerhed Whitelist

RF-ID Kompendium. RF-ID & Radio control. Dette kompendium indeholder materiale om RF-ID. Materialet er meget foreløbigt.

Microcontroller, Arduino

Cykel Score når chips sætter gang i cyklisterne

Betjening af SmartTID læseren version 2.0

5/11/2015. Programmering. Hussein Al-Saidi ROSKILDE TEKNINSK GYMNASIE VEJLEDER: CHRISTOFFER S.

Elevforudsætninger I forløbet indgår aktiviteter, der forudsætter, at eleverne kan læse enkle ord og kan samarbejde i grupper om en fælles opgave.

Visualiseringsprogram

Projekt Når maskinen reagerer - Dataopsamling og aktuatorer

Test af It-komponent

Automatisering Af Hverdagen

EKSEMPEL PÅ ELEVOPGAVE TIL ARBEJDET MED PROGRAMMERING AF ARDUIONO MED LED BÅND

Spil Rapport. Spil lavet i GameMaker. Kevin, Mads og Thor

Mircobit Kursus Lektion 3 (Du skal her vælge Lets Code Og nederst Microsoft Block Editor.)

Overvågningskamera. ~Af Svend, Valdemar og Frederik~

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0

IT projekt uge 4 9. Marie Vinter, Roskilde Tekniske Gymnasium, klasse 2.6 IT, bw, uge

TinkerCad - Arduino simulator

Kom godt i gang med Fable-robotten

Guide til din computer

Komunikation/It C Helena, Katrine og Rikke

Forberedelse. Forberedelse. Forberedelse

Procesbeskrivelse - Webprogrammering

SSI GSM Fjernbetjenings system for porte/garage døre

IT opgave. Informationsteknologi B. Vejleder: Karl. Navn: Devran Kücükyildiz. Klasse: 2,4

Fable Kom godt i gang

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Brugeradfærd i idræts- og kulturhuse - Målinger med RFID teknologi Suenson, Valinka

AVR MP Ingeniørhøjskolen i Århus Michael Kaalund

It-sikkerhedstekst ST8

Fable Kom godt i gang

Indholdsfortegnelse for kapitel 2

Software Dokumentation

Mini SRP. Afkøling. Klasse 2.4. Navn: Jacob Pihlkjær Hjortshøj, Jonatan Geysner Hvidberg og Kevin Høst Husted

Fremtiden er her PRY-ID. RFID KABELTEKNOLOGI Til identifikation og dokumentation af kabelinstallationer

Styringsteknik. Et projekt i faget styringsteknik. En rapport af Rune Zaar Østergaard

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4

CANSAT & ARDUINO step by step

Oversigt over kriterier for klarmelding af bølge 2-løsninger i 2013

Specialiseringen Rapport Lavede Af Rasmus R. Sørensen Side 1 af 6

Start på Arduino og programmering

Karen Marie Lei, Sektionsleder og civilingeniør, COWI A/S


Svendeprøve Projekt Tyveri alarm

Hvad skal du vide for at bygge din egen computer?

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX

ROSKILDE TEKNISKE GYMNASIUM. Læringsprogram. Lommeregner

DESIGN4OEE ANDROID MANUAL V.8

Postregistrering Eksamensprojekt i Programmering C Lavet af: Frantz Furrer Svendborg Erhvervsskole HTX Vejleder: Claus Borre

Fremtidens kassesystem

2. SEMESTER PROJEKT 3 INTERAKTIONSUDVIKLING

Mircobit Kursus Lektion 4 (Du skal her vælge Lets Code Og herefter Block Editor.)

Ved indkøring påtrykkes en kendt amplitude (HUSK 50 ohms afslutning) og displayet aflæses.

Matematik A og Informationsteknologi B

DANSK SKOLEDATA APS. Tlf DSA-Ventelisten

Undervisningsbeskrivelse

Vejledning til indberetningsløsning for statslige aktieselskaber m.v.

HTX. Afsluttende projekt. E-learning Komunikation/It C Helena, Katrine og Rikke

Undervisningsbeskrivelse

Netbaseret spørgeskemaundersøgelse

Arduino Programmering

Brugermanual 3D Webcam

Hos Podconsultsbutik kan du finde vandpumpen i 3 udgaver, hvilket har betydning for hvordan du samler og forbinder pumpen til din Micro:bit.

SKY. Kommunikations-IT. Alexander L, Anton og Mads Zillo

Indholdsfortegnelse Valg af opgave... 2 Introduktion... 2 Problem... 2 Målgruppe... 2 Afsender... 2 Budskab... 2 Kodning... 3 Effekt...

Programmering af CS7002 GSM/GPRS modul Version 5

Mircobit Kursus Lektion 1

DANMARKS TEKNISKE UNIVERSITET

Vi har valgt at analysere vores gruppe ud fra belbins 9 grupperoller, vi har følgende roller

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

1. Generelt om denne brugervejledning

Det skrå kast, en simulation

Undervisningsplan. Side 1 af 17. Termin Rybners Tekniske Gymnasium. Uddannelse. Fag og niveau. Informationsteknologi B

Der er i det følgende taget små udklip fra rapporten: Bedst i test

Making digital life simple on this small planet

Transkript:

Rapport Optimering af fraværsregistrering Eksamensprojekt i Informationsteknologi B, klasse 3.4, 2011 AFLEVERET 09-05-2014

Indhold Forord... 2 Indledende afsnit... 3 Problemanalyse... 3 Problemformulering... 3 Målgruppe... 4 Løsningsforslag... 4 Diskussion af valg af løsning... 4 Teori... 5 RFID... 5 Arduino... 6 Arduino s Programmeringssprog... 6 Produktet... 8 Design... 8 Hardware... 10 Softwaren... 11 Test... 16 Diskussion... 18 Konklusion... 20 Bilag... 21 Bilag 1 Produktkode, inklusiv kommentarer (software)... 21 Bilag 2 Arduino og RFID-system (hardware)... 21 1

Forord Denne rapport præsenterer og dokumenterer det endelige produkt, samt dets udvikling, der er produceret i sammenhæng med eksamensprojektet i Programmering C og Informationsteknologi B 2014 af. På trods af, at to fag indgår i projektet, så er denne rapport udelukkende tiltænkt som besvarelse af opgaven i forhold til Informationsteknologi B, mens en separat journal dokumenterer arbejdet i forhold i til Programmering C. Rapporten indeholder en række indledende afsnit, samt teori og dokumentation af produktet. I de indledende afsnit gives der et indblik i en problemstilling, hvor produktet er en potentil løsning; i teorien bliver der formidlet den vigtigste viden, der er benyttet i sammenhæng med produktudviklingen; og dokumentationsafsnittet beskrives det endelige produkt fra top til tå. Produktet, udviklet i projektet, benytter hovedsageligt Arduino og RFID-systemer, der også bliver arbejdet med i sammenhæng med den almindelige undervisning i de to indgående fag. Min inspiration til at arbejde med lige præcis denne software og disse komponenter oprinder fra, at jeg tidligere har arbejdet med det, og at jeg mener det er en intuitiv og interessant måde at kode på. Projektet er bygget op omkring mit ønske om, at udvikle et produkt, som indbringer netop disse ting Jeg ønsker at takke mine vejledere i dette projektforløb, Karl G Bjarnason (IT B) og Mette Frost Nielsen (Pro C), som har ydet faglig hjælp, når der har været brug for det. 2

Indledende afsnit I dette kapitel bliver der gjort rede for den analyse og de indledende overvejelser, der fungerer som udgangspunktet i udviklingen af produktet. Kapitlet er hovedsageligt tiltænkt som supplerende overvejeler til produktet, i forhold til i hvilket scenarie det kan bruges og eventuelt implementeres. Problemanalyse På Roskilde Tekniske Gymnasium registreres der personfravær for elever vha. det online website Lectio. Et system, der påkræver, at der på gammeldagsvis bliver ført protokol af læreren for hvert modul. Dette betyder, at der hvert modul bliver brugt undervisningstid på at registrere elevernes fravær. Systemet er ikke karakteristisk for RTG, da det er udbredt og brugt næsten blandt alle gymnasier i landet. I mange fag, sidder eleverne ofte og arbejder andre steder end i undervisningslokalet i grupperum og på gangene. Hvis eleverne er klar over, at de skal fortsætte et projekt, mødes man ofte kun i lokalet for at blive registreret som tilstedeværende, hvorefter man fordeler sig i grupperum og på gangene. Dette er en tendens, der er begyndt at blive særdeles udbredt blandt flere gymnasier - hovedsageligt på tekniske gymnasier (grundet deres fokus på projekter og gruppearbejde). En øget tendens i at søge væk til andre opholdssteder end klasselokalet, for at lave gruppearbejde, vil resultere i et øget omfang af problemet omhandlende fraværsregistrering. Ud over det centrale problem, er der enkelte faktorer, der gør fraværsregistrering via lectio til et uhensigtsmæssigt system. Her indgår registrering af elever, der kommer for sent til undervisning. Problemet heri ligger, at efter læreren har ført den oprindelige protokol, skal han / hun nu have fat i sin computer for at logge ind på lectio igen, således fraværsregistreringen kan blive gennemført. Samtidigt skal læreren vurdere betydningen af elevens fravær, og angive et passende procentdel af timen eleven ikke har været tilstedeværende i. Problemformulering Som opsummering og specificering af overvejelserne og analysen formidles en skarp og præcis problemformulering: Elevers tendens til arbejde i andre rum end klasselokalet, grundet det manuelle arbejde der ligger fraværsregisteringen, gør det registreringen, vha. Lectio, til et uhensigtsmæssigt system. 3

Målgruppe Det er skolens lærer, der står for klassernes fraværsregistrering, og det er deres system jeg ønsker at ændre. Dog forventer jeg, at min løsning skal øge automatiseringen af fraværsregistreringen, og i en vis grad udelukke lærerne fra systemet. Derimod vil jeg eventuelt inddrage eleverne i højere grad. Min målgruppe er derfor både lærere og elever, dog med fokus på lærerne. Løsningsforslag Som et udgangspunkt for problemløsningen har jeg overvejet og redegjort for 3 forskellige løsningsforslag: 1. Personligt Elev-ID Første forslag, er et system, der er inspireret af DSB s Rejsekort -system. Elever på skolen får, eventuelt i sammenhæng med studiekort, et personligt ID, som de kan scanne, når de ankommer til modulet. Når eleven afslutter (eller er nødt til at gå fra) modulet, scanner han / hun sit ID igen, og fraværet bliver angivet derefter. Hvert lokale kan eventuelt udstyres med en scanner, eller den pågældende lærer kan bære en scanner, så eleverne skal opsøge læren for at blive registreret. 2. GPS Andet forslag, er et system, hvor eleverne vil blive udstyret med en tracker. Når eleven er på skolen og gerne vil blive registreret som tilstedeværende, aktiverer de trackeren, således systemet kan godkende deres placering. Bliver eleven væk fra undervisningen vil han / hun derfor blive registreret som fraværende. 3. Netværksregistrering Det tredje forslag inddrager en manuel registrering af eleverne selv, som ed at logge på et website produceret af skolen, kan eleverne gå ind og registrere sig som ankommet til undervisningen. Ved hjælp af et system på serveren, vil elevens placering blive vurderet i forhold til undervisningslokalet, via elevens computer. Eleven vil derefter blive registreret som ankommet eller fraværende. Diskussion af valg af løsning Der ligger visse etiske problemer i at bruge en GPS system, som kan spore eleverne også selvom de selv kan styre, hvornår den skal være tændt og ikke skal. På trods af løsningens funktionalitet, gør det systemet til en problematisk løsning. Men at inddrage eleverne til selv at skal være aktive i deres egen fraværsregistrering, virker som en god idé. På den måde får de selv en ansvar for deres eget fravær, og læreren skal ikke bruge tid på at registrere de enkelte elever. 4

Den tredje løsning, netværksregistrering, skaber, ligesom løsning 2, visse etiske problematikker i forhold til overvågning. Skolen indsamler information fra elevens computer og benytter dem til at vurdere, om de nu også overholder reglerne. Samtidigt, så er det ikke praktisk at være tvunget til at alle skal tænde deres computere, hver gang de skal registreres. Og hvad sker der, hvis internettet ryger? Jeg vælger derfor at arbejde videre med den første af de træ løsningsmuligheder: det personlige elev-id. Denne løsning kan være praktisk, i form af et kort (eventuelt elevens studiekort), og kræver nødvendigvis ikke indgreb fra lærerne. Teori I dette kapitel redegøres der for centrale og vigtigste teori, der er benyttet i sammenhæng med udviklingen af produktet. RFID I mit fremtidige produkt ønsker jeg at benytte et system, som kan transportere data mellem to objekter (elevens ID og en læser). Til dette benytter jeg et kendt og velegnet system kaldet radio frequency identification, eller bedre kendt som RFID, der dækker over alle teknologier, der anvender radiobølger til at identificere objekter. Dette system er praktisk, grundet dets evne til at kunne identificere forskellige objekter og differentiere mellem deres unikke ID. En variation af RFID-tags (kort og nøgleringe). De spiller alle samme formål, og har samme længde ID. I et RFID-system bruges der, overordnet set, to objekter: et RFID-tag og en RFID-læser. Et tag er et objekt med en indbygget hukommelse (det kan eksempelvis være et kort eller en lille chip), hvis information kan aflæses af en RFID-læser. Er læseren f.eks. tilkoblet en server af data, behøver tagget nødvendigvis ikke indeholde andet end et enkelt ID-nummer (også kaldet EPC-nummer), som er forbundet til en specifik række data på denne server. Et sådan RFID-tag kan derfor være meget lille, da det ikke skal lagre information, bortset fra et enkelt ID-nummer. Der skelnes mellem aktive og passive RFID-tags. Forskellen på de to er taggets evne til at kommunikere med en vilkårlig læser. Det passive RFID-tag reflekterer et signal sendt af læseren tilbage til læseren, hvorimod det aktive tag er tilkoblet en energikilde (det kan 5

være et batteri) og det kan derfor selv sende et signal til læseren. Dette gør at læseren kan spore aktivt RFID-tagget på afstande op til ca. 100m, hvorimod et passivt tag kun kan læses på meget kort afstand. Arduino Arduino er et open-source værktøj til databehandling af data fra den fysiske verden via et fysisk platform, der baseret på en standard microcontroller. Det fysiske værktøj suppleres, og kan programmeres, med det tilhørende Arduino IDE -software. Denne software er gratis og bruges til alle typer Arduino-boards. Arduino en, kodet via softwaren, kan bruges som selvstændige værktøjer, men også bruges være koblet til et større serversystem og/eller kommunikere software på en computer. Værktøjet kan, som nævnt, bruges til databehandling fra den fysiske verden ved at være tilkoblet forskellige kontakter og sensorer. Derudover kan værktøjet sende output-signaler til, og derved manipulerer, lys og andre fysiske objekter. Arduino-softwarens programmeringssprog er det samme som, den der bruges af den lignende open-sourcesoftware og microcontroller Wiring. Derudover kan programmeringssproget udvides med C++ biblioteker. Hvorfor det er valgt som værktøj Arduino blev valgt som værktøj, eftersom jeg selv har arbejdet med de før i anledningen af andre projekter, og uden for undervisningen i IT og Programmering. Derudover er sproget let at arbejde med, og det er nemt at søge hjælp omkring det, da både Arduino selv og andre brugere udgiver guides og yder forum hjælp. Derudover ved jeg, at Arduino en let kan arbejde sammen med en RFID-læser, som er det centrale for projektet, og vi har i en kort periode arbejdet med netop sådan et system. Arduino s Programmeringssprog Som tidligere nævnt, så inddrager Arduino s IDE-software det samme programmeringssprog, der er brugt til den lignende Wire-platform. Der vil her blive uddybet, hvordan de vigtigste elementer i dette programmeringssprog fungerer. Void-Setup og Void-Loop Overordnet set er det to rammer for et program skrevet i IDE-softwaren. Den første ramme er void-setup. Dette er en række funktioner, som kun køres en enkelt gang, når programmet startes. Heri starter man ting som f.eks. aflæsning af sensorer og indledende beskeder. Den anden ramme er void-loopet, som gentages indtil programmet stoppes. Det er heri befinder den centrale del af koden sig, og man kan derfor sige at sproget er opbygget af en gentagende kode. 6

Void setup(){ >kode< Void loop(){ >kode< Serial.print Dette er en funktion, som skriver et stykke tekst til det, der på Arduino en kaldes for Serial -porten. Ved at bruge IDE-softwarens Serial-overvågningsfunktion kan man aflæse, dét som porten opfanger, og derved den tekst man har printet. Dette er en måde, hvorpå man kan formidle en tekst ud fra Arduino ens kode. Variabler Bruger man variabler i IDE-softwaren, skal de påkaldes inden de bruges og uden for nogen af de to rammer (void-setup og void-loop). Variabler gives, ligesom i andre sprog, en type og kan gives en værdi: int i = 20 string s = Hej string st void setup If-statement En if-statement tjekker om en et givent udsagn er sandt, og i så fald vil det gennemføre en række funktioner angivet af programmøren: if(x > 1){ >kode< While-løkke En while-løkke vil gentage det tildelte stykke kode, så længe den angivet betingelse er sand eksempel på dette: while(x <= 10){ x += 1 7

Denne løkke vil gentage sig selv 10 gange, hvorefter den betingelsen ellers ikke vil være sand. Resten af programmets kode fortsættes ikke før, denne while-løkke bliver lukket ved at betingelsen ikke længere er sand. For-løkke En for-løkke vil gentage et stykke et stykke kode et givent antal gange. Dette gøres ved bruge en variabel, som bliver en start værdi, som enten falder eller stiger for hvert gentagelse. Løkken vil gentage sig indtil denne variabel ikke længere møder den indstillede betingelse. for(int i=0; i<5; i++){ Serial.println((int)i); I denne løkke bliver der erklæret en integer-variabel i, der er stigende, og løkken vil gentage sig indtil i = 5. For hver gentagelse vil den printe værdien af i i Serial-porten. Produktet Dette kapitel er hovedsageligt en dokumentation af produktet og dets funktioner, samt uddybelse af de vigtigste kodeelementer der ligger bag. Derudover vil der blive udført dokumenteret og beskrevet enkelte tests. Design Produktet er bestående af et fysisk RFID-system forbundet til en Arduino-Uno, hvori der er lagret en virtuel kode (det reelle programmeringsprodukt). Ved at forbinde Arduino en til en computer, kan databehandling formidles i tekst via Arduino-softwarens SerialRead funktion. Den fysiske hardware vil ikke uddybes i denne journal, men en illustration af opsætningen er vedlagt i Bilag 2 Arduino og RFID-system (hardware). Programmet starter et loop der gentages et vilkårligt antal gange i sekundet (kan justeres og er i sammenhæng med journalen sat til 4 gange / sekundet), indtil der er gået 20 sekunder. De 20 sekunder skal imitere et skole forløb, hvor der starter en 10 sekunders undervisning efter 10 sekunder. Efter de 20 sekunder er gået vil programmet stoppe. Ved at benytte fysiske RFID-tags kan man integrere med programmet via RFID-læseren, der er tilkoblet Arduino en. Programmet vil registrere hvert unikt tag som enkelte elever og justere elevernes fravær alt efter tidspunktet i forløbet de bliver registreret. Efter de 20 sekunder vil en oversigt over alle elevers fravær blive fremvist. 8

Flowdiagram For at skabe et overblik over produktets funktion er der herunder illustreret et flowdiagram, der forklarer, hvordan programmet arbejder i forhold til hvilke ting det evaluerer og hvilke handlinger det tager på baggrund af de evalueringer. 9

Hardware Inden udviklingen af programmet blev påbegyndt, skulle der sammensættes et fysisk hardwarekomponent, som ville være stand til at aflæse RFID-tags og videregive den indsamlede information til Arduino en. Komponenterne - Arduino (Uno) - RFID læser (chip inklusiv) model / producent er ukendt - Fumlebræt - Ledninger, 3 stk Disse komponenter sammensættes som illustreret på billedet herunder (se Bilag 2 Arduino og RFID-system (hardware) for større og flere billeder): Anses den øverste pin på chippen (der hvor den røde ledning sidder) som Pin5, skal chippen og Arduino en forbindes på følgende måde: - Pin 5 -> 5V - Pin 4 -> Ground (Gnd) - Pin 3 - Pin 2 - Pin 1 -> Digital Pin 2 (denne pin kan ændres, hvis den ændres i koden også) 10

Til pin 5 & 4 tilsættes den nødvendige strømkilde, som i dette tilfælde er Arduino en selv, og pin 1 bruges til overførsel af dataene opsamlet af RFID-læseren. Hvordan systemet sammensættes er inspireret af internetguide: http://www.instructables.com/id/arduino-and-rfid-from-seeedstudio/, som tidligere er brugt i undervisningen til netop at opstille et RFID system. Softwaren Softwaren virker som den centrale del af produktet, og vil udføre databehandlingen på de data, som RFID-læseren opfanger. I dette afsnit beskrives de vigtigste elementer i programmet, og dett færdige program, der bruges i det endelige produkt, kan findes i bilaget. Variabler I programmet bliver der brugt en række variabler, og for at give et overblik over de vigtigste er de beskrevet herunder i tabellen herunder i forhold til type, navn og deres funktion. Type Navn Funktion string msg Midlertidig lager til tag-id char c Midlertidig lager til enkelte tegn af tag-id string elever Permanent lager til tag-id string ankommet Lager til elever der er tilstede i undervisningen Float counter1 Lagrer tiden integer counter2 Bruges til at holde styr på, hvornår der er gået ét sekund float (array [10] ) attendance Lagring af de enkelte elevers tilstedeværelse integer elevantal Antallet af elever, registreret i systemet Biblioteket For at Arduino en skal kunne aflæse de signaler, som RFID-læseren opfanger, benyttes de digitale porte. Portene kan kun sættes i gang ved at inddrage biblioteket SoftwareSerial. Med dette bibliotek kan der tildeles et navn, og derved en identifikation, til en indgangsport (RX) samt en udgangsport (TX) med følgende kode: #include <SoftwareSerial.h> SoftwareSerial RFID = SoftwareSerial(2, 3); 11

Portene bliver tildelt navnet RFID, og vi benytter port 2 som indgangsport og port 3 som udgangsport. Aflæsningen af portene igangsættes på samme måde som serial-porten i void setup, hvor det tildelte navn benyttes i stedet: void setup(){ Serial.begin(9600); RFID.begin(9600); Ved at sætte RFID-læseren til denne indgangsporten kan Arduino en opfange det modtaget data og bearbejde det. Tiden Programmet er bestående af to dele: et void setup, hvori portene igangsættes, og et void loop, hvori den aktive del af programmet er. Denne overordnede void-løkke er tildelt en justérbar forsinkelse, således man kan ændrer på antallet af gentagelser løkken skal tage hvert sekund. #define hastighed x delay(1000 / hastighed) Uden for både void-setup og void-loop defineres en værdi x som hastighed. Under kodens kompilering vil alle de steder, der står hastighed blive udskiftet med denne værdi. Således opnås den justérbare frekvensfunktion. En tæller, i form af en float-variabel, holder styr på, hvor lang tid der er gået. En separat integer -tæller holder styr på, hver gang der er gået et sekund således det kan formidles i serial-overvågningen. counter1 += 1.0 counter2 += 1; if(counter2 == hastighed && counter1 <= 20){ Serial.println("Tid: "+String((int)counter1)); counter2=0; Kortet opfanges For at registrere kortet, benyttes en while-løkke og den digitale port RFID. I forhold til programmet, bruges RFID.available() i løkkens betingelse, der giver et tal, hvis dét, der er sat til porten opfanger noget data. Dataene opfanges i et enkelt tegn ad gangen, indtil al informationen er blevet aflæst (da vil betingelsen ikke længere være sand). De enkelte 12

tegn kan aflæses vha. funktionen RFID.read() og lagres i en char variabel, hvorefter det hele stykkes sammen i én tekst variabel og beskriver det pågældende tag-id. Dette gøres med følgende kode: while(rfid.available() >0){ c = RFID.read(); msg += c; Tjekker og registrerer tag-id For at holde styr på alle registrerede tags samles de i en string variabel. Der bruges her en if-statement for at sikre, at det samme tag ikke bliver registreret to gange: if(elever.indexof(msg) >=0){ else{ elever += msg; Først tjekkes der, om det læste tag-id er en del af de allerede-registrerede ved at bruge.indexof( )-funktionen, der sammenligner teksten i parentesen med teksten i funktionens variabel. Hvis ikke det pågældende tag-id er en del af de registrerede ID, så tilføjer programmet det i den efterfølgende else-statement. Ankommet eller gået Som beskrevet i det tidligere flowdiagram, så skal programmet nu evaluere, hvorvidt eleven er på vej ind eller ud af undervisningen, og hvorvidt eleven kommer for sent eller går for tidligt. Dette opnås ved at bruge en overordnet if-statement samt flere sub-statements. En if-statement sammenligner det gældende tag-id med listen over de ID, som er tilstede i undervisningen (string-variablen ankommet ) ved igen at bruge.indexof()-funktionen. if(ankommet.indexof(msg) >=0){ Er eleven allerede tilstede (det gældende tag-id er en del af variable ankommet ), skal elevens ID fjernes fra variablen. Dette gøres ved at lokalisere positionen af det pågældende ID i variablen, og skære de to bider af variablen omkring ID et væk, for at sætte dem sammen igen. Derved fås den samme variabel uden det gældende ID. Hertil gøres der brug af, at de det bruge tags har et ID på 13 tegn. 13

int pos=ankommet.indexof(msg); msg=""; msg += ankommet.substring(0,pos); msg += ankommet.substring(pos+12,ankommet.length()); ankommet=""; ankommet += msg; Dette fjerner eleven fra databasen over ankommet elever. Herefter skal programmet vurdere, hvorvidt eleven forlader lokalet før undervisningen er slut. Dette gøres ved at gøre brug af en simpel if-statement samt programmets tidstæller: if(ankommet.indexof(msg) >=0){ int pos=ankommet.indexof(msg); msg=""; msg += ankommet.substring(0,pos); msg += ankommet.substring(pos+12,ankommet.length()); ankommet=""; ankommet += msg; if(counter1<20 && counter1 > 10) Serial.println("Elev "+String(elevnummer)+" er gaaet foer tid"); //Vurderer om eleven går for tidligt else Serial.println("Elev "+String(elevnummer)+" er gaaet"); Er eleven ikke ankommet til undervisningen vil betingelsen i den overordnede if-statement være falsk, og den fortsætter derfor til en else-statement. Her skal eleven tilføjes til ankommet -variablen, og programmet skal vurdere, vha. af en if-statement, hvorvidt eleven kommer til tiden eller for sent. else{ if(counter1 < 20){ ankommet += msg; if(counter1>10) Serial.println("Eleven er ankommet for sent"); else Serial.println("Elev er ankommet"); else Serial.println("Timen er slut - eleven er ikke blevet registreret"); Hvis timen er slut, er der ingen grund til at eleven bliver registreret i det permanente system, og eleven bliver derfor ignoreret. 14

Fraværsregistreringen Programmet bearbejder alle elevers fravær, hver gang det overordnede void loop gentages. Dette gøres ved at tildele alle elever i string -variablen ankommet et antal sekunders tilstedeværelse, afhængigt af frekvensen på løkken. Ved at identificere hvert tag (eller hver elev) med et nummer, kan de tildeles separat og personligt tilstedeværelse ved at gøre bruge af en float-variabel med et array. Elevnumrene virker som et indeksnummer i denne variabel, således man kan få adgang til den enkelte elevs tilstedeværelse. float var[4]; var[0] = 1; var[1] = 2; var[3] = 5; Elevnumrene kan produceres ud fra string-variablen, der indeholde listen over alle registrerede elever. Da hvert ID består af 13 tegn, kan der for hvert 13. tegn udledes et nummer, som er nummeret til det pågældende ID: string s; int elevnummer = 0; s = elever.substring(elevnummer*12, (elevnummer+1)*12); Svarer elevnummer 0 til 1, så vil dette udlede det første ID i listen over elever. Ved at øge int-variablen (altså elevnummeret) kan man finde et ID til en vilkårlig elev. Ved at bruge denne model og en array variabel sammen med for-løkke kan man opbygge en funktion, der kan vurdere elevernes tilstedeværelse. Benytter vi en float-variabel ved navn attendance kan den samlede kode for registrering af tilstedeværelse for eleverne beskrives ved hjælp af dette: if(counter1 >= 10.0 && counter1 < 20.0){ for(int i=0; i<=(elevantal-1); i++){ s = elever.substring(i*12, (i+1)*12); if( ankommet.indexof(s) >= 0){ attendance[i] += 0.25; Optælling af tilstedeværelse (for-løkke) 15

For hver gentagelse af den overordnede void-løkke, tjekkes tiden, og hvorvidt undervisningen er slut. Er undervisningen slut (der er gået 20 sekunder) stoppes tælleren ved at være styret af if-statements, og oversigten over fravær formidles via Serial.print() og en for-løkke. if(counter1==20){ Serial.println("Undervisningen er slut"); Serial.println(""); Serial.println("Oversigt over fremmoede for alle elever:"); for(int i=0; i<=(elevantal-1); i++){ Serial.println("Elev "+String(i+1)+ ": "+String((int)(attendance[i]*10.0))+"%"); Test Både under og efter udviklingen, er produktet blevet testet vha. forskellige metoder. Hvordan disse tests er blevet udført, samt deres formål, er beskrevet herunder. Under udviklingen I sammenhæng med udviklingen af produktet blev der udført adskillige tests, som skulle sikre, at produktet blev udviklet i den ønskede retning. Dette indebar at programmet løbende blev kompileret og overført til Arduino en for at blive testet, inden udviklingen fortsatte til næste stadie. Disse tests sikrer at programmets enkelte dele fungerer fejlfrit, således der ikke opstår større fejl i programmets helhed og at de i så fald let kan lokalisere og rettes. Arduino-softwaren kan lokalisere syntaksfejl i programmet under kompileringen, men for at lokalisere logic-errors benyttes softwarens Serial.print() samt Serial-overvågning. Ved at programmet informere vha. en tekstbesked at en vis handling er udført, kan der let holdes styr på, hvilke dele af programmet, der fungerer og hvor eventuelle fejl befinder sig. Denne testmetode blev f.eks brugt til udviklingen af den if-statement, der skal fjerne et pågældende tag fra listen over ankommet elever. 16

Denne funktion (Serial.println(ankommet);) printer listen over de resterende tag-id efter det pågældende ID er blevet fjernet, så det kan vurderes om det er blevet fjernet rigtigt. Test af det færdige produkt Det endelige produkt er blevet testet ved at køre en Serial-overvågning af programmet mens det kører og bliver brugt. Et eksempel på overvågningen af sådan en test kan ses til højre, hvor 3 elever løbende bliver registreret i systemet. Testen viser at eleverne bliver registreret korrekt, og at de bliver tildelt den rigtige status på baggrund af deres daværende status, når de registreres. Denne test givet et eksempel af det færdige produkt uden nogen former for test-print brugt af programmøren. Ændre på hastigheden Frekvensen af void-loopet kan justeres, hvilket er implementeret, da det har betydning for, hvor ofte der tjekkes, om et forsøger at blive læst. Der udføres tests ved at ændre på hastigheden: - I eksemplet programmets totale forløb er void-loopet sat til at gentage sig selv 2 gange i sekundet. Der ses her, at elev 1, efter 18 sekunder, forlader undervisningen for at ankomme igen med det samme. 17

- I denne test sættes frekvensen til 4 gentagelser i sekundet. Dette giver samme resultat som den forrige, dog forværres problemet. - Sættes frekvensen til én gentagelse i sekundet, opstår samme problem på trods af, at kortet fjernes inden den bør læses igen. Denne test med at justere hastigheden giver et indblik i, at produktet blot er en prototype. På baggrund af resultaterne, tyder det på, at produktet denne ikke umiddelbart skyldes variationen i hastigheden, men snarer en anden fejl i programmet. Diskussion Dette udviklede produkt er blot en prototype af en del at et større koncept, der kan løse den stillede problemformulering. Grundet dette, har produktet visse mangler, der gør at det ikke umiddelbart er en funktionel løsning. Det kan dog stadig overvejes, hvilke ting, der kan forbedres på produktet og hvilke ting der skal til for netop at gøre det til en funktionel løsning. Produktet er tiltænkt et større system, hvor der skal placeres læsere i adskillige lokaler, som sender data til skolens Lectio, hvor den nuværende fraværsregistrering foregår. Men det fysiske produkt kommunikerer den indsamlede og behandlede data med forbrugeren i gennem IDE-softwaren, hvilket gør at Arduino en er nødt til at være forbundet direkte til en computer. Produktet er derfor ikke særlig praktisk, og der gøres ikke fuld brug af Arduino ens funktioner. En måde at optimere dette på ville være at tilføre Arduino en en mobil strømkilde samt en, eventuelt trådløs, forbindelse til en større database. Dette vil give mulighed for at produktet netop kan videresende de bearbejdede data direkte til skolens Lectio og justere elevfraværet. Samtidigt kan der hentes information omkring modulerne fra Lectio, således programmet kan tilpasse tider og evaluere, hvorvidt eleverne kommer for sent til et modul eller ej. Her viser produktet derimod, hvordan dataene kan bearbejdes på en hensigtsmæssigmåde, og hvordan en lagring og brug af forskellige ID kan udføres. 18

På trods af adskillige overvejelser af forskellige mulige scenarier, der kan opstå i sammenhæng med systemet, er der enkelte mangler. Mest åbenlyst er det et problem, at når undervisningen er slut, så er det ikke påkrævet, at man registrerer sig igen. Dette betyder, at man kan registrere sig som ankommet til tiden og forlade lokalet uden at komme tilbage og man bliver vurderet som at være tilstedeværende i hele modulet. Manglet blev først opdaget efter at produktet blev erklæret færdigt, og det blev derfor ikke rettet. Hvis det skulle rettes, ville det kunne gøres ved at forlænge den til programmet er funktionelt i, og indføre en periode efter timens afslutning, hvori elever skulle være registreret ud. Ved hjælp af en if-statement kan tiden vurderes, og en anden ifstatement kan tjekke om eleverne er en del af ankommet string-variablen, og ud fra dét vurdere om de har registreret sig ud. Som dokumenteret i test-afsnittet, blev der fundet få problemer og fejl i programmet, der hovedsageligt bestod af problemer i aflæsningen af tag-id. Hvorfor fejlen opstår er usikkert, men det antages at det stammer fra læseren, som opfanger kortet som nyt inden man når at fjerne det. Dette er dog ikke sikkert, da problemet fortsatte efter at sætte frekvensen af loopet op. Hvordan dette problem kan løses er uklart, men formodentlig kan man, ved at indsætte en pause for det pågældende ID efter registrering, forhindre kortet i at blive læst igen. Eksempelvis kan det gøres ved at forhindre kort placeret i en string-variabel i at blive læst vha. en if-statement. Kortet kan efter at blive læst første gange indsættes i denne variabel, og efter få sekunder fjernes fra den igen. Ser man bort fra denne fejl i programmet, så antages det for at være stabilt og fejlfrit. Kompileringen forekommer uden problemer og programmer udfører opgaverne således de er tiltænkt. Da programmet kun forventes at være funktionelt i en kort periode (20 sekunder), er det uvist, hvorvidt der vil forekomme run time errors, hvis det f.eks. skulle køre en hel dag i træk. På trods af, at programmet umiddelbart er fejlfrit, er det muligt, og forventet, er det kan optimeres i forhold til længde, og derved størrelse og hastighed. Dog vil det kræve yderligere indblik i Arduino s muligheder og funktioner for at kunne udføre en optimering på produktet, hvilket der hverken har været resurser eller viden til. 19

Konklusion På trods af at produktet blot er tiltænkt som en tidlig prototype på et potentielt system, formår det at eksemplificere, hvordan sådan et system kan udføres. Her hentydes til adskillige af produktets funktioner, såsom tidsbestemmelse i forhold til moduler samt vurderinger af de enkelte elevers fraværsprocent. Programmet gør brug af en bred variation af både kompliceret og simple programsætninger og funktioner, samt inddragelse af biblioteker. På den måde kommer produktet bredt omkring programmeringsfaget. Da produktet ikke forventes at implementeres på nuværende stadie, er det åbenlyst, at det besidder visse mangler, såsom kommunikation med en online database og en automatisering af undervisningstider. Mange mangler har indflydelse både på produktets funktioner, men også hvor flydende disse funktioner udføres. Dette betyder også, at produktet ikke er vurderet som at værende fejlrit og det kan derfor besidde ukendte run time errors, samt uhensigtsmæssige funktioner og kodeelementer. En implementering af det endelige produkt, som det er tiltænkt, vil overlade ansvarer for de enkelte elevers fravær til dem selv, og derved skabe e mere flydende og mobil registrering af elevernes tilstedeværelse i undervisningen. Havde der været flere resurser i form af tid, såvel som havde de været administreret anderledes, ville det have været muligt at udvikle et mere funktionelt produkt i forhold til at kunne spille sammen med en online database (Lectio). Dette kunne også have resulteret i at flere fejl i programmet ville blive rettet, samt mangler blive tilføjet. Men på trods af dette, så er jeg som elev, tilfreds med resultatet af mit arbejde, og jeg udviklede ikke hverken mere eller mindre end, hvad jeg oprindeligt havde tiltænkt da jeg igangsatte projektet. 20

Bilag Bilag 1 Produktkode, inklusiv kommentarer (software) Se vedlagt mappe Programmet, hvori der ligger en.ino-fil. Åben filen vha. af Arduinosoftwaren. Bilag 2 Arduino og RFID-system (hardware) Opsætningen mellem chippen og Arduino er som følgende: Pin 5 -> 5v, Pin 4 -> Ground, Pin 1 -> Digital Pin 2. Billederne stammer fra http://www.instructables.com/id/arduino-and-rfid-fromseeedstudio/ (09-05-2014), og er den samme opstilling som benyttet i dette produkt. 21