Programmering C Eksamensprojekt Lavet af Suayb Köse & Nikolaj Egholk Jakobsen
Indledning Analyse Læring er en svær størrelse. Der er hele tiden fokus fra politikerne på, hvordan de danske skoleelever kan lære så meget som muligt. Problemet er bare at de løsninger som politikerne kommer med ikke altid holder ude i den virkelige verden. Disse løsninger er ofte udarbejdet på baggrund af økonomi og eksperter indenfor undervisning og læringsmetoder. Derfor er der tit ikke taget højde for, hvordan undervisningen i den virkelige verden forløber. Undervisningsforløbet skal tage hensyn til både lærer og elev. Dette gælder for alle fag, lige meget af hvilken karakter faget har. I de fleste løsninger i forhold til læring bliver der mest taget hensyn til lærerne. Det er et problem, da eleverne i mange tilfælde har den nødvendige viden i forhold til, hvordan undervisningen forløber, og hvor meget eleverne egentlig lære. Hvis undervisningen er mere interessant for eleverne, får man også mere engagerede og motiverede elever, som dels synes det er sjovt, men også lærerigt. I forhold til at udvælge løsninger til at forbedre læringen, skal man ikke kun tage hensyn til eleverne. Der skal være den rette balance mellem, hvad politikerne finder nødvendigt at lære, hvad lærerne føler vil være den bedste læring, samt hvad eleverne mener. På den måde burde man få en mere varieret undervisningsplan, samt nogle gladere og mere motiverede elever. Definition af målgruppe Vores målgruppe består af gymnasieelever, da vi mener at vores problem vil tage større udgangspunkt i studerende end i folkeskoleelever. Vi mener dog at problemet ikke egner sig til universitetsstuderende, hvorfor at gymnasieelever er en passende målgruppe. Teori Vi anvender i dette projekt hardware og software i form af Arduino. Det er nemt at bruge, og fleksibiliteten er høj, for både hardwaren og softwaren. Det er en open source software som alle har adgang til, mens hardwaren skal købes. Den ene del, hardware, består henholdsvis af et board med indbyggede sensorer, digitale og analoge indgange, strømforsyning og stel, samt USB indgang. Den anden del, software, består af et program på en computer, hvor man kan skrive kode, som derefter kan uploades til Arduino boardet. Man kan anvende Arduino til mange forskellige ting, men nogle af tingene er f.eks. at styre dioder, motorer og andre lignende ting der er åbne for styring. Der findes forskellige udgaver af hardware boardet, men grundlæggende kan de det samme. Forskellen ligger i
hvad der er repræsenteret på boardet. Nogle er færdigbyggede, som f.eks. vores Arduino Uno, mens andre er mere gør det selv boards. 1 Software programmet til Arduino anvender forskellige funktioner til at kode. Det inkluderer udtryk som void, if, for, while, else og loop. Vi vil i dette afsnit gøre rede for, hvad de enkelte funktioner har af betydning. En void bliver kun brugt, når en ny funktion skal introduceres, som f.eks. en loop. Det indikerer at funktionen som bliver introduceret ikke sender informationer tilbage, hvilket vil sige at der ikke kommer andet tilbage end resultatet på boardet. En loop eller løkke er en funktion, hvis indhold bliver gentaget enten et vidst antal gange eller uendeligt. Indholdet i en løkke kan f.eks. være if, for og while. If bruges til at angive nogle muligheder. Det bruges f.eks. til at få dioder til at lyse på et bestemt tidspunkt. Kort fortalt kan man sige at if funktionen tjekker om et eller andet kriterium er opfyldt. Hvis det gældende kriterium er opfyldt vil f.eks. dioden tænde, mens den vil være slukket, når kriteriet ikke er opfyldt. Det kan også bruges i andre sammenhænge ved f.eks. programmet Python. Her kan en if funktion bruges til registrere hvad brugeren giver programmet af input. Funktionen else hører derfor meget sammen med if, da der skal ske noget andet, hvis kriteriet for if funktionen ikke er opfyldt. Her bruger man else til at definere hvad der ellers skal ske. For bruges typisk til at lave et givent interval, som løkken skal køre efter. Det kan f.eks. være antallet af dioder som skal anvendes eller noget i den stil. While løkken fungerer lidt på samme måde som if, bare med den forskel at der her fokuseres mere på konkrete værdier. Det kan f.eks. være at en motor skal køre, når to dioder lyser. 1 http://arduino.cc/en/main/arduinoboarduno
Vores produkt er som sagt et Tetris spil, hvilket vil sige at der på forhånd er defineret nogle mønstre, som vores diodesystem skal følge. Der er følgende brikker vi gerne skulle have med i spillet: 2 Vi vil i dette projekt anvende systemudviklingsmetoden fra Medialab. Systemudviklingsmetoden går ud på at starte med en indledende aktivitet, hvor tankerne om projektet skrives ned og idéer udtænkes, og hvor et projekt tager form. Dernæst kommer der nogle aktiviteter ind i mellem den indledende og afsluttende aktivitet, hvor man laver en prototype, hvorefter man får en tilbagemelding fra målgruppen. Dernæst tager man tilbagemeldingerne til sig og laver forbedringer af spillet. Projektet afsluttes med en afsluttende aktivitet. Vi ønsker dog ikke at få tilbagemeldinger fra en målgruppe, idet at vi kommer til at lave en del prototyper, som vi selv mener er bedre egnede til at vurdere. Krav til produktet Vi har i undersøgelsen af dette projekt fået nogle erfaringer og user stories fra brugere som godt tænke sig et bud på vores løsning. Vi har her 3 user stories: 1. I tilfælde at man har brug for at øge sin reaktionsevne eller tænkeevne, kan man bruge vores produkt til samle flest linjer på kortest tid. Der er selvfølgelig grænser for hvor meget der kan øges, men undersøgelser viser at man kan komme op på at øge sin reaktionsevne med over 500%. 2. En gymnasieklasse har problemer med motivationen i forhold til at ville lære at programmere. De ved ikke hvad de skal bruge undervisningen til og savner konkrete praktiske løsninger, som programmering kan løse. Læreren kan ikke finde en løsning på problemet, idet vedkommende ikke er i øjenhøjde med eleverne. 3. En gruppe i teknikfaget EL på HTX er lige gået i gang med faget, da de får at vide at de skal lave et projekt, hvor man kan styre nogle dioder. Styringen er op til dem selv, så der er frit valg på alle hylder. 2 http://en.wikipedia.org/wiki/tetris
Udover de ovennævnte user stories har vi også selv nogle specifikke krav til produktet. Vi skal selv kunne styre spillet enten med et joystick eller med knapper, man skal kunne se udviklingen i det enkelte spil. Det vil sige at man skal kunne se på dioderne, hvor brikken befinder sig. Overordnet design I forhold til vores indsamlede user stories og vores egne krav er vi kommet frem til følgende krav fra brugerne og os selv af vores kommende løsning: Man skal selv kunne styre spillet enten med joystick eller knapper Reaktionen skal være hurtig fra spillet, fordi der ønskes en træning i reaktionsevne Spillet skal være en anderledes mere interaktiv måde at lære på Der skal være fokus på at styre dioder, og man skal kunne se hvor brikken befinder sig Ud fra kravene mener vi at kunne udarbejde et design, som burde opfylde dem alle sammen. Den indre funktion mener vi kommer til at bestå af en del if og else funktioner, som kommer til at definere, hvornår de enkelte dioder skal være tændt. Derudover skal vi også have defineret en styring enten med joystick eller knapper. Vi tænker at det bedste, og nemmeste, for os er en løsning med knapper. Derfor kommer der til enten til at være en while løkke eller if funktion, der definerer hvad der sker når man trykker på én af knapperne.
Designet for brugerfladen har vi forsøgt at skitsere og kan ses nedenfor: Skitsen skal forestille vores board og en styringsenhed. Fra venstre er det vores hoved board, hvor selve Tetris foregår. De farvede prikker viser de dioder der er tændt, mens de hvide ikke er tændt. De forskellige farver skyldes brikkernes facon, og kommer ikke til at se sådan ud i virkeligheden, da vi ikke har dioder som kan skifte farve. Øverst til højre er det den næste brik som vises. Denne del af designet er sekundær og vil kun blive gennemført, hvis tiden og ressourcerne er til det. Nederst til højre er det styringsenheden med 4 knapper. De fungerer som fire piletaster, hvilket er op, venstre, ned og højre. Kort abstract Vi har i dette eksamensprojekt valgt at tage udgangspunkt i, hvordan man kan optimere læringen på folkeskoler og /eller gymnasier. Projektet tager sit udgangspunkt i programmeringsværktøjet Arduino. Her vil vi forsøge at skabe et produkt som kan skabe et bedre undervisningsmiljø ved at kombinere en sjovere læringsmetode, hvor man selv aktivt skal engagere sig, med mere målrettet læring.
Problemformulering Hvordan kan man lave et læringsmateriale ud fra Arduino, som kombinerer sjov og leg med procesorienteret læring? Funktionsbeskrivelse Vi har valgt at lave et Tetris spil på Arduino. Vi mener at man her kan lære rigtig meget af at programmere spillet selv, da man får en god forståelse for, hvordan programmering fungerer. Vi har valgt at tegne det board design som vi nåede at lave i programmet Fritzing, som vist på billedet til højre for. Det gør det hele mere overskueligt, da ledningerne ikke står som man helst vil have dem til, for at få et godt og overskueligt billede. Der er forskellige indtastningsmuligheder i spillet, som dog ikke har så meget at gøre med om man kan indtaste noget på en computer. Man kan vælge hvornår man vil skifte række vha. knappen til venstre på billedet. I princippet skal der egentlig være fire knapper, da man skal kunne rykke sin brik henholdsvis op, ned, højre og venstre. Funktionaliteten eller egenskaben ved spillet er selvfølgelig at kunne registrere, hvad der skal ske når man trykker på knappen. Derudover er der defineret en måde, hvorpå at der registreres hvor signalet befinder sig henne altså, hvor brikken i spillet befinder sig. Dokumentation af selve programmet Endelige produkt Planlægning Nu da vi har fået nogenlunde styr på styringen af dioderne, mener vi godt at vi kan gå videre med en af de andre user stories, og vores egne krav. User story nummer 1, hvor der fokus på reaktionsevne, mener vi at kunne bringe i spil nu. Derfor vil vi også have vores eget krav med styring implementeret i denne prototype.
Kontrol af krav Kravene er lidt løst sammensat til denne prototype, men kravet om styring er rimelig klart. Vi skal have som krav at man skal kunne styre spillet med nogle knapper. Træning i reaktionsevne er ikke et direkte krav, men vi forventer at det indgår i styringen med knapper. Design Vi har den grundlæggende brugerflade fastsat for denne prototype. Det eneste der mangler er tilføjelsen af en knap. Den indre funktion kommer til at få tilføjet defineringen af knapperne, samt nogle funktioner til at styre rækkerne. Implementering Der er tilføjet en del nyt til den indre funktion i denne prototype. Der er øverst oppe blevet tilføjet en konstant som definerer knappen til port 2. Derefter er der tilføjet en slags status for knappen som siger, at den er på 0, hvilket vil sige at den er Low så længe man ikke trykker på knappen. Herefter defineres knappen til at være et input, fordi knappen jo får noget udefra i form af et tryk. Til sidst i koden er der defineret at når knappen er High skal den ene række have signalet, mens hvis knappen er Low skal den anden række have signalet.
Test af programmet Test Vi har lagt flere rækker med dioder. Formålet med dette var at vi skulle få knappen til at rykke lyset, som er vores tetris brik, til en anden række. Dioderne virkede som de skulle. Når man trykkede på knappen ændrede signalet sig fra den ene række til den anden, således at det lignede at en brik flyttede sig enten til højre eller venstre. Det vil sige at der kun er en række der kører af gangen. Vi havde dog tænkt os at man kun skulle trykke på knappen en enkelt gang for at få signalet til at flytte række, men løsningen blev i stedet at man skulle holde knappen nede. Konklusion Vi fik som problem at vi skulle lave et læringsmateriale, som var både sjovt og lærerigt på samme tid. Kravet var at det skulle foregå på Arduino. Vi kom på en løsning med spillet Tetris. Vi ville lave spillet med nogle dioder, som kunne vise hvor brikken befandt sig henne. Resultatet blev et delvist spil, hvor man kunne styre, hvor man ville have sin brik til at være henne på én af de to rækker. Problemet var bare at der ikke var så meget spil over dette, men princippet til et Tetris spil kom i hvert fald på plads. Til videre arbejde er det derfor oplagt at tage fat på at færdiggøre spillet, da vi langt fra nåede det vi skulle.
Bilag Litteratur Vi har i udarbejdelsen af vores endelige løsningsforslag ladet os inspirere af et eksisterende projekt, som fint bliver illustreret på følgende video: https://www.youtube.com/watch?v=tjftskeb2eg Derudover har vi en hjemmeside til køb af dioder: http://el supply.dk/ http://playground.arduino.cc/main/ledmatrix#.uzveqpldu U Eksempel Test 2 http://arduino.cc/en/tutorial/button Budget Vi har i projektet brug for følgende materialer: Fumlebræt 9 modstande 2,2kΩ 1 knap(størrelse 1x1cm) 4 røde og 4 gule dioder 1 Arduino UNO 3 gange 20cm ledning(brun, rød og gul)