Introduktion
Når du er færdig med lektionen:
- Kan du tilkoble en Micro:Bit med servo motor
- Kender du til hvordan en servo motor virker.
- Kender du til hvordan en nestede hvis-sætninger og do-whiles virker.
- Kan du gennem kode styre en servo motor.
- Kan du gennem kode arbejde med "start" og "for altid" funktionerne på Micro:Bit’en sideløbende med hinanden.
- Kan du gennem kode sætte random værdier for at introducere tilfældighed i koden.
Hardware
Hvad er en micro:bit?
En micro: Bit er det, man kalder for en Mikrokontroller . ‘Mikro’ betyder at den er lille og ‘kontroller’ betyder, at den kan styre noget. Du skal bruge et program for at fortælle micro: Bit , hvordan den skal styre noget. Når du bygger et Kredsløb , kan du bruge micro: Bit til at styre dit Kredsløb . Micro: Bit kan styre kredsløbet gennem det, man kalder Pins. Pins kan give en Spænding til kredsløbet eller måle en Spænding fra kredsløbet.
Hvad er en servo motor?
En servomotor er en slags elektrisk motor, der anvendes i mange forskellige projekter og produkter. Det er en speciel type motor, der kan bevæge sig til præcise positioner og holde sig der, frem for hele tiden at dreje rundt som en almindelig motor.
Forestil dig at du har et gammeldags ur, og du vil have armene i uret til at bevæge sig til en bestemt position. Med en servomotor kan du programmere motoren til at bevæge urets arm til den præcise position du ønsker, og holde armen der. Med en normal motor ville armen blive ved med at kører rundt uden at stoppe hvor du gerne ville have den til det.
Servomotorer findes i mange størrelser og former, og de kan bruges til en række forskellige opgaver, fx i modelfly, robotter, elektrisk legetøj og meget mere. Billedet herunder viser hvordan jeres servo motor ser ud.
Software
Programmering
Installer udvidelsen “servo”.
Dette gøres ved at klikke på “Udvidelser”:
Derefter søge på “servo”:
Sidst så klik på udvidelsen med det billede i kan se herunder:
I denne opgave vil i blive introduceret for det man kalder for nestede hvis-sætninger.
En nestede hvis-sætning er en hvis-sætning inde i en anden hvis-sætning. Det kan sammenlignes med en russisk dukke som kan ses på billedet herover. Hver hvis-sætning er som en dukke der har en anden hvis-sætning indeni sig selv, ligesom en dukke indeholder en mindre dukke.
Det man kan bruge dem til er at kigge efter om visse betingelser (også kaldet argumenter) er opfyldt i en bestemt rækkefølge. Et eksempel kan ses herunder:
Første betingelse for koden er at “runder”-variablen skal være lig med 0. Hvis, og KUN hvis den er det, så går vi ind i løkken, ellers bliver vi uden for.
Næste betingelse er faktisk 2 betingelser.
- Hvis “scoreA”-variablen er større end “scoreB”-variablen, så går vi ind i den løkke som så skriver “A har vundet!”
- Hvis “scoreB”-variablen er større end “scoreA”-variablen, så går vi ind i den løkke som så skriver “B har vundet!”
I bliver også introduceret til random funktionen.
Denne funktion laver en tilfældig værdi mellem 2 tal man selv bestemmer. I eksemplet herunder bliver der lavet en værdi mellem 1000 og 5000. Grunden til at vi bruger en tilfældig værdi er for at sikre at ingen af spillerne ved hvornår de kan trykke på knappen.
Sidst vil i blive introduceret til det man kalder for do-while (på dansk “udfør-mens”).
Do-while udfører som navnet antyder en handling mens en betingelse er sand. Det vil sige at hvis den betingelse man kigger efter stopper med at være sand, så stopper løkken med at køre.
I eksemplet herunder udføres koden i blokken så længe at “rundetæller” variablen er forskellig fra 0. Når rundetæller bliver lige præcis 0, så er vores betingelse ikke længere sand, og vi går derfor ud af løkken.
Supplerende materiale:
Link til video om servo udviddelsen og hvordan den fungerer: Video om servo udviddelsen
Link til video om hvis-sætninger og hvordan de fungerer: Video om hvis sætninger
Link til video om do-whiles (udfør-mens) og hvordan de fungerer: Video om do-whiles
I dette forløb skal vi lave et Mini-Spil. Den første opgave her går ud på at lave vores "Når-programmet-starter" blok. Inden vores spil starter rigtigt, har vi brug for at sætte nogen startværdier og andre ting som programmet senere kan bruge som udgangspunkt. Vi har lært om hvordan variable, som navnet antyder, er noget der kan variere. Vi har lært om servo-motorer og hvordan de virker. Vi har også lært om pause funktionen, og nu skal vi bruge det hele til at opsætte vores starter blok. I skal tage følgende skridt:
- Lav og sæt en variabel der kontrollerer, hvor mange runder vi har lyst til at spille. Husk at sæt det til en ulige værdi så der altid kun er en vinder. Brug følgende blok:
- Sæt en startposition på 90 grader for servo-motoren. Brug følgende blok:
- Sæt en tilfældig værdi for, hvor lang tid der skal gå før i ser jeres skydeskive. Husk, at tiden er i millisekunder, så 1000 ms = 1 sekund. Brug følgende blokke:
- Til sidst skal i indsætte/selv lave et ikon, ved at trykke på felterne, der indikerer at nu skal der trykkes på knappen. Husk at det er en god ide at genbruge det samme ikon gennem hele koden, så det ikke er forvirrende. Brug følgende blok:
- Ekstra: Hvis i har lyst kan i indsætte en tekststreng der f.eks. skriver "START!" når spillet starter. Tænk over, hvor den passer bedst i vores starter blok, da dens lokation har betydning for hvordan resten af blokken kører.
Nu har i udført de første skridt og har en start-blok der gør følgende:
- Sætter en variabel der styrer antallet af runder, og sikrer at der altid kun findes én vinder.
- Sætter en startposition for servo-motoren.
- Indstiller en tilfældig pauseværdi mellem runderne.
- Viser et ikon for at indikere, at knappen skal trykkes på.
I denne opgave skal vi kigge på "For-altid" blokken. Det er her resten af vores kode skal være. Denne opgave kommer til at blive splittet op i to dele. Den første del fokuserer på runderne og at de bliver kørt. Den anden del fokuserer på når spillet er færdig og en vinder er fundet. Vi har lært om "kører så længe en variabel eller et udsagn er sandt" blokken. Vi har lært om "hvis" blokken som kører hvis noget er sandt. Vi har lært hvordan vi kan ændre på variabler vi tidligere har lavet. Vi har lært hvordan man ændre på servo-motorens position.
Del 1
Som sagt handler første del af koden om at køre runderne. Vi vil gerne have at spillet fortsætter så længe runder ikke er lig med 0. Når en spiller trykker på en knap skal deres score gå op. Når runden er ovre skal displayet nulstilles så der ikke er noget på det. De første skridt i skal tage er følgende:
- Lav en mens-udfør blok, der kører så længe at vores runder ikke er lig med 0. Brug følgende blokke:
(Husk at ændre lighedstegnet til det tegn vi vil bruge)
- Lav en hvis-blok der kigger på om knap A er trykket ned. Brug følgende blokke:
- Inde i denne hvis-blok tag følgende skridt:
- Ryd skærmen
- Ændre scoren for spiller A med 1
(Husk at ændre navn)
- Ændre runde variablen så den går ned med 1.
- Indsæt en tilfældig pause mellem runderne så vi ikke ved hvornår vi kan trykke på knappen igen. Brug følgende blokke:
- Til sidst skal i lave det ikon i brugte i start blokken der viser i skal trykke på knappen. Brug følgende blok:
- Ryd skærmen
- Hele den hvis-blok i nu har lavet skal i kopiere, sådan i har to hvis-blokke efter hinanden. I den nye hvis-blok skal den kigge efter om knap B trykkes og ændre scoren for spiller B i stedet for spiller A med 1. Udover dette er resten det samme.
Nu er første del af "For-altid" blokken færdig. Jeres blok burde gøre følgende:
- Så længe at variablen for runder ikke er 0, så kører alt vores kode.
- Når en spiller trykker på enten knap A eller B, så bliver skærmen ryddet, og den spiller der har trykket får et point.
- Herefter går der et tilfældigt stykke tid før næste runde starter og jeres valgte ikon bliver vist.
Del 2
Denne del fokusere på, når spillet er færdig. Vi vil gerne have at når runder rammer 0, så kan vi ikke spille længere og en slutskærm bliver vist. Når vi afslutter vil vi gerne nulstille LED'erne på Micro:Bit'en så de er klar til at starte med noget andet. Vi vil have servo-motoren til at dreje over mod den spiller der har vundet. De skridt i skal tage er:
- Lav en hvis-blok der holder øje med om runder er lig med 0. Brug følgende blokke:
- Inde i denne hvis-blok skal vi:
- Indsæt en måde at rydde skærmen på så Micro:Bit'en er klar til noget nyt. Brug følgende blok:
- Indsæt en hvis-blok der drejer servo-motoren mod spiller A hvis deres point er højere end spiller B. Brug følgende blokke:
- Indsæt en hvis-blok der drejer servo-motoren mod spiller B hvis deres point er højere end spiller A. Brug de samme blokke som skridt 2.
- Indsæt en måde at rydde skærmen på så Micro:Bit'en er klar til noget nyt. Brug følgende blok:
- Ekstra: Hvis i har lyst kan i indsætte en tekststreng der f.eks. skriver "SLUT!" når spillet slutter. Tænk over hvor den skal være henne.
- Ekstra: Tilføj i slutningen af den store hvis-blok i "for-altid" nogle blokke der viser hvor mange point hver spiller har fået.
Al den kode vi lige har lavet skal være inde i "For-altid" blokken, under vores mens-udfør blok. Den kode vi lige har lavet kigger på om runder er lig med 0, hvis den er det stopper spillet og en vinder bliver vist ved at dreje på servo-motoren mod den spiller der har flest point. Hvis man har lavet ekstra skridtene vil jeres score også vise på Micro:Bit'en.
Nu er anden del af opgave 2 færdige og i burde have en blok der gør følgende:
- Når variablen for runder er lig med 0, afsluttes spillet.
- Der bliver kigget efter, hvilken spiller der har højst score og servo-motoren drejes mod vinderen.
Følgende opgave er ikke obligatorisk at udføre, men foreslås, at der bliver givet et forsøg, hvis der er ekstra tid at bruge fra undervisningsforløbet.
Fysisk opstilling med servo-motor:
Da mini-spillet nu er programmeret færdigt kan det overføres til en Micro:Bit og derved blive spillet på den. Selvom Micro:bit'en kan køre spillet uden noget ekstra hardware så er der en lille del af koden der ikke bliver brugt, nemlig servo-motor delen. Det ville være sjovere at sætte en servo-motor til Micro:Bit'en, ligesom i simulation på makekode hjemmesiden og se det i aktion når man spiller.
Husk at bruge den Blå servo-moter i kassen da det er den der fungerer med Mirco:bit'en. Herunder har vi en tegning af kredsløbet i skal bygge og en virkelig opstilling.
I skal bruge følgende komponenter:
- Blå servo-motor
- Dragontail
- Micro:Bit
- Ledninger
- Batteri kasse
- Batterier
- Byg følgende kredsløb: