Automatisering Af Hverdagen Programmering - Eksamensopgave 10-05-2011 Roskilde Tekniske Gymnasium (Kl. 3,3m) Mads Christiansen & Tobias Hjelholt Svendsen
2 Automatisering Af Hverdagen Indhold Introduktion:... 3 Udviklingsforløb:... 6 Sideprojekt:... 8 Temperaturmåler... 8 Videreudvikling:... 9 Program Endelige Prototype:... 10 Temperaturmåler:... 12 Tobias Hjelholt Svendsen & Mads Christiansen Side 2
3 Automatisering Af Hverdagen Introduktion: Arduino er en open-source platform, der har mange egenskaber. Arduinoen har formålet, at gøre elektronik-projekter og programmering mere tilgængeligt og nemmere for studerende og professionelle. Arduino er et projekt der er blevet udviklet og forbedret over flere år. Det startede i 2005, i Italien. Meningen var at lave et redskab der kunne bruges til studerende, som skulle være billigt og nemt at bruge. Før Arduiono en blev skabt, blev der hovedsageligt brugt et redskab der hed BASIC Stamp, hvilket også var en nem og simpel platform at bruge, problemet med BASIC Stamp var prisen, da den kostede omkring 100$ på tidspunktet, hvilket der var mange studerende der ikke havde råd til, derfor var der brug for en billig alternativ løsning. Vores produkt vil kunne hjælpe ved at indkøbslister nemme at lave. Hvis man åbner køleskabet og ser at der er mangler, er man ofte ikke villig til at skrive en indkøbsliste med det samme, og man glemmer derfor ofte hvad der manglede. Vores produkt vil gøre det muligt at skrive en liste nemt og hurtigt, uden det store besvær. Produktet er en LCD der vil vise hvad man skal købe, skærmen vi blive styret af en Arduino, som får input af brugeren, som selvfølgelig vil blive nødt til at fortælle manglerne i køleskabet. Dette kan gøres ved at trykke på en knap, med et label hvor der står den specifikke vare. Den information vil så blive sendt videre til Arduinoen og til sidst LCD en. Fordelen ved at have skærmen sat op på selve køleskabet, er at den vil være så tæt som muligt på varerne, hvilket jo er relevant når man skal lave sin liste. Produktet i sig selv er simpelt, da det bare en input fra brugeren som skal vises på en skærm. Det er selve brugerfladen der er vigtig, da den skal være praktisk, og samtidig være indbydende at se på, da den vil være iøjenfaldne for de fleste, på grund af dets placering. Produktets omgivelser spiller altså en stor rolle, da der ofte bliver brugt meget tid køkkenet i en normal familie, og der er derfor brug for et produkt som man kan holde ud at se på i længere tid. Produktet skal også være kompakt, da de fleste gerne vil have plads til at hænge ting på deres køleskab, med magneter osv. Hele pointen med produktet er, at den skal være praktisk, det indebærer derfor også at den ikke skal stjæle for meget plads, da det kan være meget upraktisk, ikke at have plads på sit køleskab til eventuelle huskenoter, som ikke omhandler indkøb, eller kalendere osv. Det gode ved a bruge en Arduino med en LCD er, at de kan bruges til flere forskellige ting, det vil derfor også være muligt at lave flere funktioner til LCD en, for eksempel en temperatur-måler, der kan fortælle hvor mange grader der er i køleskabet, så når der ikke længere er brug for en indkøbsliste, kan den have et andet formål. Vores produkt vil derfor være multifunktionelt, og gøre det muligt for brugeren at vælge imellem flere egenskaber, som er relevante i forhold til indkøb og vedligeholdelse af varer. Det virker underligt at mange køleskabe, som er store redskaber, der fylder meget i huset, ikke har nogle andre egenskaber end at køle varer ned, derfor synes det at være en god idé at ændre på dette. Der vil være et stort marked for sådan et redskab, da køleskabe er et udbredt produkt, som i de fleste tilfælde er et must i husstande verden over. Tobias Hjelholt Svendsen & Mads Christiansen Side 3
4 Automatisering Af Hverdagen Programmet er skrevet i Python og skulle senere forbindes til Arduino og dens LCD funktion. Projektet startede med at der blev lavet en tidsplan, som skulle guide gruppen gennem forløbet, så man ikke endte med at have for travlt den sidste uge, eller i værste fald ikke nåede at lave produktet færdigt. Foruden Python brugte vi sub-programmet i Python, som hedder TKinter. TKinter er standard hos Python hvilket betyder at det følger med i pakken, og der vil derfor ikke være problemer med at skaffe kompatible pakker, som kunne skabe problemer. Der var overvejelser om vi skulle benytte pyqt, men det blev valgt fra, på grund af dårlige erfaringer. GUI (Graphical User Interface) er et vigtigt redskab, når man skal udforme et produkt, som der er brugere der skal benytte. GUI er et redskab der gør det muligt, for brugerne at give informationer til et program, for eksempel ved at have knapper, der giver information, som programmet bag interfacet kan behandle og give videre, så brugeren får de informationer der er nødvendige. GUI bliver brugt til mange ting inde for computere, mp3 og andre redskaber som er elektroniske. Faktisk er GUI et meget vidt begreb, da de fleste elektroniske komponenter(med skærm) har en form for interface, der kan behandle information som brugeren giver. Disse komponenter indebærer for eksempel; computere, mp3-afspillere, lommeregnere og mange, mange flere. Ting som kaffemaskiner og toastere, har ikke en GUI da de ikke har en grafisk brugerflade. TKinter er standard med Python, og er et redskab der laver GUI. TKinter passer godt med vores projekt, da der mulighed for at lave en simpel GUI, som samtidig er kompakt og nem at bruge. Vi udviklede programmet ved at teste det hele tiden, så vi ikke endte med at have et produkt fyldt med fejl (Extreme Programming), dette gjorde fejlfinding meget lettere, da vi vidste præcist hvad vi havde gjort efter test. Denne systemudviklingsmetode er især god, hvis man har problemer med det brugte programmeringssprog, da man sikrer sig at man ikke laver fejl i starten i programmet, som man senere skal lede efter og rette. Udover programmeringsprogrammer, har vi brugt Arduino og LCD (Liquid Crystal Display), som skulle fungere som de redskaber der sender selve informationerne ud til brugeren. Arduino er nem at programmere, da den har mange hjælpe-programmer og flere skabeloner, som passer til vores produkt + sideprojekter som også har spillet en stor rolle i vores projekt. Sideprojekterne som vi har lavet under udviklingsfasen, er hovedsageligt lavet på grund af Arduinoens mange egenskaber, som gør det muligt at tilslutte/programmere mange forskellige programmer til den. Derfor ville det være interessant at vise nogle af disse egenskaber, og samtidigt prøve at kombinere dem, så produktet kan være mere dækkende i forhold til de egenskaber, man kunne ønske sig i sammenhængen. Tobias Hjelholt Svendsen & Mads Christiansen Side 4
5 Automatisering Af Hverdagen Værktøjer Til udviklingen af vores prototype program og temperaturmåler brugte vi en række værktøjer både i form af software til programmeringen, og hardware til opsamling af data. Til temperaturmåleren brugte vi Arduino enheden sammen med elektroniske komponenter som modstande og temperaturmålere, til at kommunikere mellem den virkelige verden og computerprogrammerne som omformulerede informationerne til brugbare resultater. Vi brugte også kort et almindeligt digitalt termometer til kalibreringen af temperaturmålerens resultater. Af software til dette produkt brugte vi Arduinoens egen program Arduino.exe, til at vise og behandle informationerne sendt fra Arduino enheden. Et andet fysik værktøj (hardware) vi havde tænkt os at bruge var et LCD display som vi havde gjort os tanker om kunne vise informationerne fra temperaturmåleren og/eller indkøbslisten fra vores andet program. Til de andre programmer brugte vi Python.exe at programmere i. Tobias Hjelholt Svendsen & Mads Christiansen Side 5
6 Automatisering Af Hverdagen Udviklingsforløb: Vores program skulle være simpelt for brugeren at benytte, derfor blev der tænkt meget på brugerfladen. vi tænkte også meget på selve koden, da det er vigtigt at kunne udvide programmet, ved for eksempel at tilføje flere knapper/varer. Derfor delte vi den op i afsnit, som det er nemt at redigere i programmet, uden at ødelægge noget. I dette segment, blev der lavet konstanter for størrelsen på buttons. Det betød at alle buttons der blev lavet fremover, ville være samme i samme størrelse. Det er smart hvis man vil tilføje nye knapper hurtigt, uden at skulle angive størrelse på hver eneste. Knapperne skulle dog være i mycontainer1, da det kun er der størrelsen er blevet angivet. Der er også brugt en funktion kaldt mylastbuttoninvoked, hvilket gør det muligt at huske flere knapper der er blevet trykket på. Her er den = None, dette er fordi at der ikke er trykket på nogen knapper endnu, da programmet lige er startet op. Dette er en button, som ikke defineret. Det vil sige at selve funktionen ikke er til stede, men i stedet kun udseende, label, placering og farve. Der er ikke angivet nogen størrelser i dette segment. Det er fordi det ikke er nødvendigt pga. tidligere konstanter, som der nu bliver refereret til. Det gøres der ved at sige at knappen tilhører mycontainer1, hvor størrelsen på knapperne allerede er angivet. Tobias Hjelholt Svendsen & Mads Christiansen Side 6
7 Automatisering Af Hverdagen Her bliver knappen defineret, hvilket betyder at selve funktionen bliver beskrevet. I dette tilfælde skal knappen, når der bliver trykket på den skrive Toast, samt huske det når der bliver trykket på den næste knap (self.mylastbuttoninvoked), i skrive det bag den nye input. På den måde fungerer alle knapper i programmet, bortset fra Cancel -knappen. Den har til formål at afslutte programmet. Den bruger derfor en kort og simpel kode: Denne kode har en destroy -funktion, som afslutter programmets rod, og derfor lukker hele programmet. Hvis man kører programmet, vil man lægge mærke til at, efter man her trykket på Cancel, vil programmet automatisk vise Cancel. Her kan man se at efter mainloop, står der print Cancel, hvilket betyder at efter programmet er sluttet, skal der stå Cancel. Dette kunne også opnås ved at give Cancel -knappen en funktion så den skriver Cancel når man trykker på den, ligesom der gjort hos de andre knapper. Den brugte mulighed er dog meget simpel og nem at bruge, og viser tydeligere hvad der bliver gjort. For at Python skal kunne sende informationerne videre til Arduino, skal Denne kode implementeres i programmet. Men før dette kan gøres skal man have en pakke kaldt serial, da denne pakke ikke er standard hos Python skal den findes et andet sted. Pakken skal downloades fordi den indeholder alle de funktioner, der er nødvendige for at Python kan snakke med Arduino. Derefter importerer man den, ligesom der er gjort i det viste program. Tobias Hjelholt Svendsen & Mads Christiansen Side 7
8 Automatisering Af Hverdagen Sideprojekt: Samtidigt med vores hovedprojekt arbejdede vi med flere sideprojekter, fordi vi gerne ville sammenkoble projekterne til sidst, så vores produkt ville være multifunktionelt. Det kunne gøres ved at udvikle et program i python, der kan indeholde flere programmer. Flere af sideprojekterne blev ikke brugt i projektet, da vi ikke havde tid til at udvikle dem alle. Et af sideprojekterne var en temperaturmåler: Temperaturmåler Som en ekstra funktion til vores prototype lavede vi også en simpel temperaturmåler. Idéen var at den enten kunne bruges til at holde styr på temperaturen i køleskabet, eller bare være monteret udenfor eller i køkkenet så man vidste hvad temperaturen var. Fremgangsmåde: vi startede med at låne komponenterne til enheden, en almindelig modstand og en modstand som varierer ved temperaturforskel, i el-laboratoriet. Derefter monterede vi delene direkte på Arduinoen, og sluttede den til computeren. På computeren kørte vi programmet Arduino, hvori informationerne fra temperaturmåleren blev vist som tal, men ikke som temperaturer. For at få programmet til at vise temperaturer, opstille vi et fysikforsøg hvori vi undersøgte temperaturen i grader celsius, samtidig med at notere hvilken værdi temperaturmåleren i Arduinoprogrammet viste. Herefter udregnede vi den koefficient værdien fra vores temperaturmåler skulle divideres med for at få temperaturen i grader celsius, og fik programmet til at gøre dette, inden den viste målingerne fra temperaturmåleren. Tobias Hjelholt Svendsen & Mads Christiansen Side 8
9 Automatisering Af Hverdagen Videreudvikling: Evt. Touchscreen eller QWERTY LCD Dette er en model af vores endelige produkt, som ikke vil blive lavet i projektet, da vi ikke har nok tid til at programmere det. Programmet som er lavet i projektet er altså en prototype, som skulle illustrere designet og formålet ved vores endelige produkt. Det færdige produkt indeholder en Arduino(kan ikke ses på modellen), LCD og et QWERTY-tastatur eller en touchscreen. Ved at bruge QWERTY/touchscreen, kan man have et produkt som kan være på køleskabet, uden at den behøver en computer, med mus eller keyboard. Dette er smart på grund af pladskravet, og brugervenligheden Det er klart at have hele programmet samlet på ét sted har sine fordele, da det ikke kræver at man skal gå frem og tilbage, mellem komponenterne. Evaluering: Der var givet lang tid til projektet, hvilket selvfølgelig var nødvendigt, hvis man tager alle de afsluttede opgaver der skal samtidigt i betragtning. Så det var stadig svært at nå det hele. Det var en stor hjælp at have en tidsplan, selvom den ikke blev holdt hele vejen igennem, da der var mange problemer, med selve programmeringen i projektet. Især da Python skulle forbindes til Arduinoen. Det var interessant at prøve nye systemudviklingsmetoder af, da det er en stor del af forløbet, og kommer til at spille en stor rolle, i fremtidige projekter. Det sværeste i projektet var programmeringsdelen, på grund af det nævnte problemer, selve rapporten var nem, da vi havde dokumenteret forløbet godt, og der var derfor ikke nogle problemer med at skrive om det i rapporten. Tobias Hjelholt Svendsen & Mads Christiansen Side 9
10 Automatisering Af Hverdagen Program Endelige Prototype: Tobias Hjelholt Svendsen & Mads Christiansen Side 10
11 Automatisering Af Hverdagen Tobias Hjelholt Svendsen & Mads Christiansen Side 11
12 Automatisering Af Hverdagen Temperaturmåler: Tobias Hjelholt Svendsen & Mads Christiansen Side 12
13 Automatisering Af Hverdagen Tobias Hjelholt Svendsen & Mads Christiansen Side 13