Dette er en gammel utgave av dokumentet!
Innholdsfortegnelse
Bit:bot
Her kan du laste ned ferdige hex-filer for å programmere din bit:bot, eller du kan følge bruksanvisningen under for å programmere bit:bot selv. Les mer her om hvordan du programmerer en micro:bit.
Programmeringen gjør du i en vanlig nettleser, adressen er https://makecode.microbit.org/#. Du må muligens gå til innstillinger-menyen for å velge språk. Dersom det allerede ligger ferdige prosjekter på nettsiden kan du lage nytt prosjekt ved å velge Prosjekter→Nytt prosjekt.
Etter å ha overført programmet til micro:bit kan du slå på bit:bot. Merk at du må løfte opp bit:bot fra underlaget når du slår på; bit:bot har lyssensorer på undersiden, og dersom det er mørkt under bit:bot ved oppstart vil den gå i «pairing mode» (for bluetooth). Dersom du løfter den litt opp mot lyset ved oppstart unngår du denne modusen og ditt program vil starte i stedet.
Fjernkontroll
For å kunne styre bit:bot via fjernkontroll trenger vi en micro:bit med batteri. Denne skal vi programmere til å sende kommandoer til en annen micro:bit som er festet til bit:bot og som skal styre bit:bot. Lag et program som kan sende akselerometerets x- og y-verdier til bit:bot. Du trenger ikke regne på kreftene eller akselerasjonen, bare sende verdiene.
Oppdrag 1a. Radiosender
Nå skal du programmere den micro:biten du skal holde i og bruke til å styre bit:bot.
Bruk kommandoer fra Radio-menyen til å lage en radiosender. Du må velge deg en kanal du kan sende meldinger på, og du skal bruke samme kanalnummer som nummeret på datamaskinen du bruker. Dersom datamaskinen din heter Trigger-03 skal du bruke kanal nummer 3.
<hidden Tips 1:>Du velger kanal ved å bruke kommandoen «radio sett gruppe». Det er tilstrekkelig å gjøre dette én gang, f.eks. ved start.</hidden>
<hidden Løsningsforslag:>
</hidden>
Oppdrag 1b. Sende data
Les av akselerometerets x- og y-verdi og send disse ut på den valgte radiokanalen. Bit:bot må få hyppige oppdateringer fra fjernkontrollen.
<hidden Tips 1:>I Inndata-menyen kan du finne en kommando for å lese akselerometerets verdier.</hidden>
<hidden Tips 2:>Du trenger å sende en identifikator i tillegg til x- og y-verdiene. Dersom akselerometerets y-verdi er 1000, og du sender meldingen «1000» til bit:bot, så vet ikke bit:bot om det er x- eller y-verdien som er mottatt. Du må derfor sende en identifikator (f.eks. «acc_y») først. Dersom bit:bot mottar meldingen «acc_y 1000» kan mottageren finne ut at det er y-verdien av akselerometeret som er 1000. Du kan selv velge teksten til identifikatoren, men både sender og mottager må programmeres med samme identifikator.</hidden>
<hidden Tips 3:>I Radio-menyen finnes det mange måter man kan sende data på. F.eks. kan du bruke kommandoen «radio send verdi» til å spesifisere en identifikator.</hidden>
<hidden Løsningsforslag:>
</hidden>
Oppdrag 1c. Sende ekstra data
Dette er et oppdrag for avanserte brukere. Programmer radiosenderen til også å sende kommandoer for knappetrykk og andre input.
Motta data
Nå skal du programmere den micro:biten som skal sitte i bit:bot og motta kommandoer fra den håndholdte micro:biten med batteri. Her må du benytte enkel matematikk for at fjernkontrollens akselerometer kan styre motorene på bit:bot.
Oppdrag 2a. Nytt prosjekt
Gi programmet du har laget et fornuftig navn, f.eks. «Fjernkontroll» og lagre det. Lag deg deretter et nytt prosjekt, for bit:bot må programmeres annerledes enn fjernkontrollen du hittil har jobbet med. <hidden Tips:>Du kan lage et nytt prosjekt ved å velge Prosjekt→Nytt prosjekt. Du kan senere finne tilbake til fjernkontroll-programmet ditt ved å velge «Prosjekt» og finne ditt andre program i arkivet nederst på siden.</hidden>
Oppdrag 2b. Radiomottaker
Lag et program som mottar på samme radiokanal som fjernkontrollen sender på.
<hidden Løsningsforslag:>Merk at kanalnummeret må stemme med nummeret på din datamaskin
</hidden>
Oppdrag 2c. Motta data
Lag et program som mottar data fra den valgte radiokanalen og finner x- og y-akselerasjon og legger tallene i hver sin variabel.
<hidden Tips 1:>Du kan bruke kommandoen «når radio mottar» til å hente data fra radio. Hvilken variant av denne kommandoen du skal bruke kommer litt an på hvilken identifikator du valgte da du programmerte radiosenderen. Du kan bruke den blå knappen med tannhjulet til å velge hvordan du vil motta data. Dersom du valgte en tekst-identifikator (en identifikator som består av tekst, f.eks. «acc_y») kan du benytte en struktur som ligner på dette:
I eksemplet over vil de mottatte dataene bli oppdelt i to deler og lagret som to separate variabler, en som kalles «name» og en som kalles «value». Disse to variablene kan du bruke i ditt program. Hvis radioen f.eks. mottar dataene «acc_y 1000» vil den første delen (acc_y) bli lagret i variabelen «name» og den siste delen (1000) bli lagret i variabelen «value».</hidden>
<hidden Tips 2:>Du kan bruke Hvis-setninger til å filtrere om den mottatte meldingen inneholder x- eller y-verdi:
</hidden>
<hidden Løsningsforslag:>Merk at kanalnummeret må stemme med nummeret på din datamaskin
</hidden>
Styre motorer
Tanken er å bruke fjernkontrollens akselerometer-verdier til å kontrollere bit:bot. Akselerometerets verdier er vist på figuren under. Dersom mikro:biten blir tiltet i pilenes retninger (se bilde til venstre) sender akselerometeret positive verdier, og dersom den blir tiltet motsatt av pilene sendes negative verdier. Jo mer tiltet akselerometeret blir, jo større blir tallet som blir sendt.
For å kontrollere bit:bot må vi å laste ned et bibliotek med kommandoer spesiallaget for bit:bot. Et programbibliotek er en samling med ferdiglagde kommandoer som vi kan laste ned slik at vi slipper å lage alt selv, og dette biblioteket finner vi ved å først åpne Avansert-menyen, deretter trykke på «Hent tilleggsfunksjon». Der søker du etter «bitbot» og trykker på biblioteket som heter «bitbot - A BitBot package for pxt-microbit». Dette biblioteket inneholder kommandoer for å styre bit:bot. En av kommandoene har dessverre en bug: «kjør motor»-kommandoen gir deg mulighet til å bestemme hvor fort motoren skal kjøre. Kommandoen fungerer som den skal så lenge du kjører framover, men p.g.a. en programmeringsfeil vil bit:bot alltid kjøre på maks. fart bakover.
Oppdrag 3a. Bruke datavariabel til å styre motorer
Lag et program som bruker y-verdien fra akselerometeret til å styre motorene fram og tilbake. Bruk i første omgang «Kjør motor»-kommandoen til å kontrollere hjulene.
<hidden Tips 1:>Det er én motor for hvert hjul, og med tanke på at bit:bot før eller senere skal kunne svinges må disse hjulene kunne kjøres med hver sin hastighet. Det vil være en fordel for deg om du lager to variabler (f.eks. kalt «høyre» og «venstre») som skal inneholde farten til hver motor. For øyeblikket skal begge gå like fort, men det er likvel greit å lagre dette som to separate verdier.</hidden>
<hidden Tips 2:>«Kjør motor»-kommandoen kan kjøre en valgfri motor med en valgfri hastighet. Positive verdier er fremover, negative verdier kjører i revers. 0 betyr stillestående.</hidden>
<hidden Tips 3:>Legg merke til fortegnet til akselerometerets verdier. Y-verdien fra akselerometeret er negativ hvis du tilter fjernkontrollen forover og positiv dersom du tilter den bakover. Dette må du ta hensyn til når du skal bruke verdien til å styre motorene.</hidden>
<hidden Løsningsforslag 1:>
</hidden>
Oppdrag 3b. Svinge
Modifiser programmet slik at du kan bruke x-verdien fra akselerometeret til å svinge. Både x- og y-verdien vil variere mellom -1023 og +1023. Ved å bruke enkel regning (pluss og minus) kan vi beregne hvor fort hvert hjul skal gå.
<hidden Tips 1:>Dersom du vil svinge til høyre kan du bremse det høyre hjulet slik at det kjører saktere enn det venstre. Du kan også øke farten til det venstre hjulet for å svinge til høyre.</hidden>
<hidden Tips 2:>Matematisk kan vi skrive det slik: Høyre hjul kan kjøre med hastighet Y minus X (d.v.s. at høyre hjul går sakte) og venstre hjul kan kjøre med hastighet Y pluss X (altså fortere enn det høyre hjulet). Hvilke fortegn du bruker (+ eller -) vil avhenge av hvordan du har tenkt å bruke fjernkontrollen og hvordan du vil at bit:bot skal oppføre seg.</hidden>
<hidden Løsningsforslag:>
</hidden>
Oppdrag 3c. Bedre kontroll i revers
Du vil kunne oppleve at du har mindre kontroll på kjøringen i revers enn du har framover. Dette skyldes den tidligere omtalte programmeringsfeilen i biblioteket. For å forbedre kjøringen i revers må vi lage vår egen funksjon som skal styre motorene. Dersom du er fornøyd med kontrollen av bit:bot kan du hoppe over dette trinnet, men det er sterkt anbefalt å forbedre kjøreegenskapene til bit:bot. Dette er et vanskelig oppdrag som krever at du forstår hvordan akselerometeret fungerer, og det kreves også litt matematikk for å få verdiene vi sender til motorene riktig. Det er selvsagt lov å kopiere løsningsforslaget direkte dersom du føler at du ikke greier å få til dette oppdraget.
På undersiden av bit:bot (på selve kretskortet) står en liste over hvilke porter som styrer motorer og sensorer. Venstre motor styres av port 0 og 8, mens høyre motor styres av port 1 og 12.
Lag deg en ny funksjon (avansert → Funksjoner → Lag en funksjon) og kall den «kjør». Denne funksjonen må oppfylle følgende krav:
- funksjonen må bruke verdiene du har beregnet i oppdrag 3b (i løsningsforslaget kalt «høyre» og «venstre») til å styre motorene
- funksjonen må kontrollere at hver motor mottar riktige kontrollverdier i henhold til visse krav:
- portene 8 og 12 styrer retningen til motorene. For at bit:bot skal gå fremover settes portene til «0», og for revers settes portene til «1». Bruk funksjonen «Skriv digital til» når du styrer disse portene
- portene 0 og 1 styrer farten. Dersom du skal kjøre framover skal portene settes til et tall mellom 0 og 1023. Jo mindre tall, jo saktere bevegelse, jo høyere tall, jo raskere bevegelse. I revers blir det motsatt: jo høyere tall jo saktere bevegelse, jo lavere tall jo raskere bevegelse. Bruk funksjonen «Skriv analog til» når du styrer disse portene.
- portene 8 og 12 skal kun ha verdiene «0» eller «1». Det er ikke tillatt å sende andre verdier. Bruk «Skriv digital til»-funksjonen når du styrer disse to portene.
- Portene 0 og 1 skal ha verdier mellom 0 og 1023. Det er ikke tillatt å sende andre verdier. Bruk funksjonen «Skriv analog til» når du styrer disse portene.
Eksempler for å styre venstre motor. Høyre motor kan styres likedan ved å endre portnumre:
Her vil venstre motor gå for full fart framover. Port 8 (DIR pin) er «0», Port 0 (PWM pin) er 1023 (max):
Her vil venstre motor gå ca. 75% framover. Port 8 (DIR pin) er «0», Port 0 (PWM pin) er 765 (ca 75% av max):
Her vil venstre motor gå ca. 25% framover. Port 8 (DIR pin) er «0», Port 0 (PWM pin) er 255 (ca 25% av max):
I begge disse tilfellene vil venstre motor stå i ro.
Her vil venstre motor gå ca. 25% bakover. Port 8 (DIR pin) er «1», Port 0 (PWM pin) er 765 (ca 25% av max):
Her vil venstre motor gå i full fart bakover. Port 8 (DIR pin) er «1», Port 0 (PWM pin) er 0 (max):
<hidden Tips 1:>De variablene du beregnet i oppdrag 3b har verdier som kan være negative eller større enn 1023. Din kommando må begrense verdiene. Dette kan du gjøre med logikk-menyen og/eller matematikk-menyen.</hidden>
<hidden Tips 2:>Ved hjelp av en hvis-betingelse kan vi sette forskjellige verdier avhengig av om bit:bot skal gå framover eller bakover. For å omvandle en negativ verdi til en «gyldig» verdi kan vi legge til 1024. I eksemplet under er «venstre» en variabel som inneholder et tall mellom -1023 og +1023. Da vil f.eks. -1023 (altså full fart revers) bli forvandlet til -1023+1024, altså +1, som vil gi full fart revers.
</hidden>
<hidden Tips 3:>Når funksjonen er ferdig kan du «aktivere» den ved å bruke funksjonen som heter «anropsfunksjon». Når programmet møter kommandoen «anropsfunksjon: kjør» vil funksjonen «kjør» bli aktivert.</hidden>
<hidden Løsningsforslag:>
</hidden>
Oppdrag 3d. Endre følsomhet
Test bit:bot med programmet ditt. Du kommer til å merke at fjernkontrollen er veldig følsom. Bit:bot står i ro bare når fjernkontrollen ligger helt flatt. Det er derfor vanskelig å få bit:bot til å stå rolig. Endre programmet ditt slik at det blir enklere å få bit:bot til å stå i ro.
<hidden Tips 1:>Kommandoene du trenger finner du i Matematikk-menyen.</hidden>
<hidden Tips 2:>Årsaken til at det er vanskelig å få bit:bot til å stå i ro er at det kun er én verdi (nemlig 0) som får bit:bot til å stå helt i ro. Alle andre verdier vil få bit:bot til å kjøre. Dersom alle verdier fra f.eks. -40 til 40 ble ignorert ville man fått bedre kontroll.</hidden>
<hidden Tips 3:>Du kan bruke absoluttverdikommandoen fra Matematikk-menyen til å ignorere fortegnet. Absoluttverdien av 40 er 40. Absoluttverdien av -40 er også 40.</hidden>
<hidden Løsningsforslag:>
</hidden>
Når du er ferdig kan det endelige resultatet f.eks. se slik ut:
<hidden Mulig løsning>
</hidden>
Buzzer
Bit:bot er utstyrt med en buzzer som kan lage lyd.
Oppdrag 4a. Lage lyd
Endre programmet ditt slik at du får en sirene når bit:bot kjører bortover.
<hidden Tips 1:>Du kan bruke kommandoen «buzz lyd» fra bitbot-menyen til å lage lyd. Dersom «buzz lyd» settes til 1 får du en høy, skjærende sirene. Hvis den settes til 0 blir det deilig stille. Ikke sett denne kommandoen til 1 unødvendig lenge!</hidden>
<hidden Tips 2:>Dersom du vil ha en annen tone enn den du får med «buzz lyd» kan du bruke «skriv analog til»-kommandoen fra Tilkobling-menyen. Dersom denne kommandoen sender et lite tall (f.eks. 50) blir det en dyp, lav tone. Dersom du gir et høyt tall (f.eks. 1000) blir det en høy, kraftig lys tone. Ikke sett tall høyere enn 1023. Her må du passe på å sette porten til P14.</hidden>
<hidden Løsningsforslag 1:>
</hidden>
<hidden Løsningsforslag 1:>Bruk fortrinnsvis det andre løsningsforslaget
</hidden>
Oppdrag 4b. Lage av/på-knapp for lyden
Dette er et oppdrag for avanserte brukere. Greier du å slå lyden av og på med fjernkontrollen?
Neopixler
Bit:bot er utstyrt med 12 neopixler; en neopixel er en programmerbar lysdiode (LED) hvor ditt program kan bestemme hvilken farge den skal ha, og programmet ditt kan også skifte farge på lyset. Først må du bruke en eller flere av kommandoene for å endre på lyset (sett lysdioder til, nullstill lysdioderm skift/roter lysdioder eller sett styrke på lysdioder). Etterpå må du kjøre kommandoen «vis lysdioder». Det er denne kommandoen som «oppdaterer» diodene, og hvis den ikke blir kjørt vil ingenting skje.
Oppdrag 5a. Lage lys
Oppdrag 5b. Lage regnbue
Programmer bit:bot til å la neopixlene skifte farge hele tiden.
Oppdrag 5c. Av/på-knapp for lys
Dette er et oppdrag for avanserte brukere. Greier du å lage en fjernstyrt av/på-knapp til blålysene?
Videre oppdrag
Nå har du lært å bruke alle de viktigste funksjonene til micro:bit og bit:bot. Nå kan du fritt leke deg med å få bit:bot til å oppføre seg slik du vil. Greier du å få bit:bot til å sende meldinger tilbake til skjermen på fjernkontrollen? Dersom du bruker MI:powerboard til fjernkontrollen inneholder dette kortet en høyttaler. Greier du få bit:bot til å spille musikk på fjernkontrollen? Greier du å programmere bit:bot til å detektere bråstopp og spille en alarm når den krasjer i veggen?
Lenker
Her kan du lese om detaljert montering og styring av bit:bot: http://4tronix.co.uk/blog/?p=1490
Her kan du lese mer om hvordan du kan styre bit:bot ved hjelp av bluetooth: https://ukbaz.github.io/howto/bitbotRemoteControl.html

