Lavet af Svend, Valdemar og Frederik 2.3 HTX - Roskilde Overvågningskamera ~Af Svend, Valdemar og Frederik~ I dette forløb har vi arbejdet med overvågningskameraer. Det handlede om at lære, hvordan et kamera fungerer, og både dens hardware og software. Vi skulle kigge på hvordan kameraet var skruet sammen. Vi skulle også kigge på, hvordan kameraet fungerer med dens software, og selv lære at programmere det, så det er kompatible med en selv-programmeret app. Formålet med dette forløb var, at lære at programmere en app og et kamera, og lære om et kameras opbygning. Case Et kamera kan bruges på mange forskellige måder, og specielt når det kan styres over en app. Vi har leget med tanken om, at udvikle et form for legetøj for børn. Mange børn i dag er vant til at få en Ipad i hånden, og styrker på den måde deres motorik, reaktionsevne og generel styring af deres hænder. Dog lærer de ikke så meget af det. De sidder og spiller, men lære ikke at deres Ipad faktisk kan kobles på andre maskiner, som man kan lege med. Det ønsker vi at lave om på. Vi har leget med tanken om at skabe et spil til telefonen, som skal kræve et separat kamera. Børnene skal så koble sig til kameraet med deres telefon, Ipad eller lignende. Børnene skal så styre kameraet fra deres elektroniske enhed, og bruge det til at se rundt i rummet, der for eksempel er blevet lavet om til en jungle med en masse dyr. De skal så styre kameraet for at finde forskellige dyr, og når de så finder det givne dyr, som der står de skal finde, så skal de tage et billede af det. På den måde lære børnene lidt mere af IT, og lære at der er flere elektroniske enheder end telefoner eller lignende. Vi ønsker nemlig at lære børn, at der findes mange forskellige elektroniske enheder, som kan være sjove at lege og arbejde med. Udvikling Vi brugte internetsiden appinventor.mit.edu til, at programmere en app vores kamera kunne bruge, og som vi kunne styre vores kamera med. Appinventor er en online side, hvor man kan forbinde sin telefon med siden, og på den måde teste appen. Siden fungerer på den måde, at man kan trække knapper, layout, sliders osv. ind på en skærm, der skal forestille ens mobil skærm. Efter man har trukket de ting ind på skærmen man skal bruge, kan man gå videre til Blocks. Blocks er det sted hvor man kan programmere sine forskellige dele. Det fungerer på den måde, at man kan trække allerede-lavet koder, ind på ens dele. Man sætter derefter en masse Blocks sammen, som til sidst gør at delen fungerer, som vi vil have det.
Selve kameraet Kameraet var et Foscam Indoor Wireless Ip Camera, Model: FI8918W. Det er i stand til at filme i næsten alle retninger og kan overvåge wireless. Ved at følge instrukser givet til os af vores lærere kunne vi starte kameraet gennem skolens netværk. På denne måde kan vi bruge kameraet til at streame i real-time for os, eller tager et snapshot. Først og fremmest, så sætter man strømstikket i, bag på kameraet. Kameraet er bygget på den måde, at det kan dreje 180 grader til højre, og 180 grader til venstre. Det kan også kigge op og ned. Kameraet er bygget på den måde, at det både kan forbindes gennem et ethernet kabel, men hvis man opsætter det til trådløst, så kan man bruge den medfølgende antenne. Indtaster man kameraets IP, som man finder gennem et program som hedder IPCamera, så kommer man frem til en side, hvor man kan se live-stream fra kameraet af. Kameraet sørger for 30 frames per sekund. Hele kameraet er styret gennem ens browser, ved at skrive forskellige hjemmesider, der sender signal videre til kameraet. Dette kamera er hvad man kalder et netværkskamera. Hvad er et netværkskamera? Et netværkskamera eller et ip kamera er typisk et videoovervågningskamera. De kan styres over alle ip netværk, som LAN, intranet og internet. Ved at logge på en webbrowser kan man nemt se direkte optagelser. Hvordan virker et netværkskamera? Et ip kamera er udstyret med en indbygget web-server og en processor til behandling af optagelser, så det er nærmest en lille computer. I modsætning til andre overvågnings metoder behøver et ip kamera ikke ekstra software, eller at den
er sat i en computer. Dvs. at man kan sætte et op hvor man vil, så længe der er net. Kameraet har sin egen ip-adresse og tilsluttes til enten kabel eller trådløs forbindelse. Det kan så tilgås via fjernadgang 24/7. Men vores kamera fungere også som et digitalkamera. Hvad er et digitalkamera? Et digitalkamera er et kamera, hvor den lysfølsomme film er skiftet ud med en lysfølsom sensor. Hvordan virker et digitalkamera? Som i et traditionelt kamera ledes lyset ind via et objektiv. Selve billedet bliver så registreret af sensoren og gemmes på et hukommelsesmedie. Sensoren deler billedet op i pixel, og antallet af pixel opgives som kameraets opløsning. Billederne hentes ud fra kameraet enten via af et kabel, som f.eks. USB, eller ved at man tager lagringsmediet og sætter det ind i en computer. Her kan det bearbejdes videre i et billedbehandlingsprogram. Design Vi har forsøgt at gøre designet af appen, så simpelt og brugervenligt som muligt. Som vi ser på billedet ovenfor, så er dette et billede af vores startskærm Screen1. Vi har prøvet at gøre den, så brugervenlig som muligt. Dette har vi gjort ved, at lave forskellige menuer. Take A Picture, er en knap der tager et billede. Som illustreret på billedet, så viser den billedet med det samme, så snart man trykker på knappen. På den måde kan man tage et billede med kameraet.
Første knap Go To Controls, fører til denne menu: Denne menu er til styring af kameraet. Den er lavet på den vis, at hvis man holder fingeren inde på knappen, så bevæger kameraet sig for eksempel opad, indtil man slipper knappen igen, så stopper kameraet. Go Back knappen, fører kameraet tilbage til den forrige side. For at gøre strukturen lidt mere brugervenligt og overskueligt, har vi valgt at samle knapperne. Ved at samle knapperne på denne måde, er det nemmere for brugeren at nå alle knapper, i forhold til hvis de lå på en lang række som før. Ved at placere knapperne samlet, virker det mere overskueligt for brugeren. Vi har samtidig også sat en WebViewer ind. I denne WebViewer har vi skrevet kameraets IP ind. Dette gør, at vores WebViewer vil starte op på en side, hvor man skal log-in, som ekstra sikkerhed. Når man så har gjort det, så starter kommer man til en side, hvor man skal vælge knappen Server. Her kan man så se en Live-Video af kameraet.
Hvis vi prøver at tage tilbage til startskærmen, men denne gang trykke på Go To Status i stedet, fører den brugeren videre til denne side. Her har vi knappen Back, som tager brugeren tilbage til startskærmen. Knappen Get Status, henter statussen af kameraet, altså hvor hurtigt det bevæger sig, om det er aktivt, osv. Ved hjælp af en WebViewer, bliver kameraets status sendt direkte til appen, så brugeren kan se den i selve appen. Knappen Status in Browser, sender brugeren videre til sin browser, hvor de så får kameraets status. På den måde vil de altid kunne have en fane åben i deres browser, de bare skal opdatere for at få kameraets nuværende status, i stedet for at skulle åbne appen hver gang. Dette var altså sådan vores app kom til at se ud til sidst. Blocks Som sagt før, så fungere appinventor.mit.edu, sådan at man kan gå bagom sine dele og design, og bruge blokke til at programmere dem med. Ved at sammensætte blokke som et puslespil, får man til sidst en kode der kan virke. Dette billede viser den allerførste kode. Denne kode er en funktion til, at vores app skal kunne tage et billede. Den fungere på den måde, at vi i design delen satte en knap en, som
kom til at hedde Button1. Derefter kunne vi gå ind i Blocks delen, og vælge funktionen til, at hvis denne knap blev trykket på, så skulle noget ske. when Button1.Click do Herefter indsatte vi en billede del, Image1, som kunne vise et billede ved hjælp af en funktion. Derefter gik vi ind i Blocks igen, og valgte funktionen, som kunne sætte vores Image1, til at vise et ønsket billede. Dette billede skulle den så hente fra en hjemmeside. Vi kunne indsætte hjemmeside linket, ved at indsætte en text funktion. Hjemmesiden, som man kan se i den lyserøde boks i billedet, bestod af vores kamera IP, internet port, og derefter en funktion til et snapshot (billede). Derefter skulle vi også skrive vores log-in, altså usr=admin, eller brugernavn = admin. pwd= betyder password er lig med intet, da der ikke var password på. Herefter begyndte vi at udvide vores startskærm. Vi satte en knap Go To Status, som her hedder Button2. Vi satte en funktion der hedder, at hvis vi klikkede på Button2, så ville den åbne Screen2, altså den skærm med status. Vi satte derefter også en funktion der hedder, at så snart at Screen1, startskærm, ville være tændt, så skulle man kunne scroll på denne side.
Dette er koderne til Screen2, status siden. Button1, den første kode, er den som gør, at den WebViewer vi har indsat, viser kameraets status. Den fungere på den måde, at når vi klikker på knappen, så bruger vi en funktion, at vores WebViewer viser en given hjemmeside,.gotourl. Det link den så skal gå til er, ligesom da den skulle tage et billede, en hjemmeside der starter med vores kamera IP, og så en funktion som hedder get_misc, der kan oversættes til få status. Denne funktion åbner altså en hjemmeside op i vores WebViewer, som viser kameraets status. Button3 derimod, åbner op for status i brugerens browser. Den fungerer på den måde, at når knappen trykkes på, så sendes der besked til det der hedder en ActivityStarter. En ActivityStarter er noget, der for eksemepel kan åbne andre programmer, uden for den app man bruger. Derfor skal vi altså bruge en ActivityStarter, hvis vi skal åbne kameraets status i vores browser. ActivityStarter starter altså funktionen om at åbne browseren, og så åbne den givne hjemmeside. Den hjemmeside er den samme, som vi åbnede i vores WebViewer før. Button2 bruges til at sende tilbage til Screen1, som er vores hjemmeskærm. Det er altså en tilbage-knap.
Denne kode er til selve styringen af kameraet, fra appen af. TouchDown funktionen, vil sige at så snart at man trykker på knappen, og holder den nede, vil den aktivere den angivne funktion. TouchUp er altså funktionen til, når man så slipper knappen igen. Hvis vi tager et eksempel, som funktionerne på Button2. Når man trykker på denne knap, og holder den nede, så aktivere den vores WebViewer, og får den til at sende en funktion fra en hjemmeside, til vores kamera. Denne funktion er på den angivne URL. Disse url s til bevægelse af kameraet, er det som hedder en decoder_control, altså en kontrol over kameraets bevægelser. Efter hvad vej kameraet skal bevæge sig, er der forskellige commands. Den første funktion, hvor vi holder Button2 nede, sender den command 0. Dette vil sige at kameraet starter med at bevæge sig opad. Denne command gør dog, at
kameraet går op ad, men det stopper ikke igen, før det er helt oppe, og ikke kan komme længere. Det vil altså sige, at vi også skal bruge en command til at stoppe kameraet med at køre opad igen, for at vi kan stoppe kameraet midt på for eksempel. Denne command er tallet 1. Det vil altså sige, at funktionen TouchDown på Button2, får kameraet til at køre opad når man holder knappen nede. Funktionen TouchUp på Button2, får kameraet til at stoppe med at køre opad, når man slipper kameraet. Kameraet sender et signal tilbage, så man er sikker på at det har forstået funktionen. Denne sender derfor et browser signal tilbage, hvor der står order ok. Vi har ved at bytte rundt på ordet command, for i stedet at stå efter.cgi, så stå til sidst, sender den ikke vores telefon videre i browseren. I stedet har vi sat en WebViewer, hvor vores kamera så kommer til at skrive ok. Denne WebViewer har vi så gjort usynlig. Dette er altså hvordan vores kamera fungere. Refleksion over produkt Taget i betragtning af hvordan vores case ser ud, altså hvad det er vi ønsker at nå frem til, og hvad vores endelige produkt er, så er der stadigvæk lidt lang vej endnu. Vi har nu en grund app, som kan bruges til at styre kameraet med, og tage billeder. Så hvad vi har er en grund app, som der kan bygges videre på, som man har lyst til. Denne app kan kun styre kameraet, tage billeder, få live-video og få status på kameraet. Test I vores test fik vi en anden gruppe til, at kigge på vores kamera. Personen der kiggede på vores app var Silas Rindorf, som er elev på HTX - Roskilde, på teknologi, IT og programmerings linjen (vi har fået tilladelse af ham til at bruge hans navn). Grundet manglende tid blev det altså ikke optaget, så derfor kun hurtigt gået igennem vores app. Hvad Silas havde at sige var, at vores app er nem og brugervenlig at finde rundt i. Med knapper hvor alting står på, er man aldrig i tvivl om hvor man bevæger sig hen. Brugervenligheden af styring af kameraet er også godt, i det man skal holde knappen inde, og på den måde nemt kan bestemme, hvor kameraet skal kunne kigge hen, uden forsinkelser mellem app og kamera. Video-stream derimod var lidt mere forvirrende, da vores WebViewer går ind på en rigtig hjemmeside, men i en formindsket størrelse, som kan gøre det lidt svært at navigere. Silas supplere med, at han synes at vores app er nem at finde rundt i, da alting navigeres fra en forside. Han gav eksemplet, at man kan komme fra forside til status, så man altså ikke skal fra forside, til styring og så til status. Han fortalte, at dette gjorde appen meget nem at navigere sig rundt i. Dog var det en smule forvirrende, at vores styring af kamera, og knappen til at tage et billede, ligger på to forskellige billeder. Dette gør det lidt besværligt at skulle tage billeder, da man skal navigere mellem to forskellige sider hele tiden. Dette kan undgås ved at vi flytter de to funktioner til samme side.
Overordnet giver Silas vores app en god anmeldelse, og fortæller at det er en god grund app, som kan bygges videre på.