En micro:bit-robotbil gjør koden synlig: du flytter noen blokker, laster ned, og bilen kjører, svinger eller stopper foran veggen. Cutebot fra ElecFreaks er et nesten ferdigmontert robotbilsett der du setter micro:bit-kortet rett i bilen. Med Cutebot-utvidelsen i MakeCode styrer du motorer, frontlys, ultralydsensor og to linjesensorer med blokker eller JavaScript. Guiden tar deg gjennom tre nivåer, fra knappestyrt kjøring til en linjefølger som stopper for hindringer.
Cutebot: dette sitter på micro:bit-robotbilen
Cutebot robotbilsett for micro:bit er en liten bakhjulsdrevet bil. ElecFreaks oppgir to GA12-N20-girmotorer på 300 RPM, to RGB-frontlys, to RGB-LED-er på undersiden, to linjesensorer, en aktiv summer og en ultralydsensor av typen HC-SR04 som du plugger i selv. I esken ligger bilen, batteriholderen, ultralydsensoren, en bane for linjefølging og en brosjyre. Selve micro:bit-kortet og batteriene følger ikke med. micro:bit 2 GO gir deg kortet og USB-kabelen i samme pakke, i tillegg til en egen batteriholder for kortet og to AAA-batterier. Bilen trenger tre AAA-batterier i sin egen holder, så de to batteriene fra micro:bit 2 GO er ikke nok.
Bilen bruker faste pinner på micro:bit. Pinnene i tabellen er hentet fra kildekoden til utvidelsen og ElecFreaks' parameterliste. Ikke bruk dem til noe annet i samme program.
| Del | Koblet til | Blokk i utvidelsen |
|---|---|---|
| To motorer | Kontrolleren på bilen, over I2C (P19 og P20 på micro:bit) | «Set left wheel speed … right wheel speed …» |
| To RGB-frontlys | Kontrolleren på bilen, over I2C | «Set LED headlights …» |
| Ultralydsensor HC-SR04 | SONAR-kontakten: P8 sender, P12 tar imot ekko | «HC-SR04 Sonar unit cm» |
| To linjesensorer | P13 venstre, P14 høyre | «Tracking state is …», «Left line sensor Found» |
| To RGB-LED-er under bilen | P15 | Neopixel-blokkene |
| IR-mottaker | P16 | «On IR receiving» |
Motorene og frontlysene styres av en egen kontroller på bilen, ifølge kildekoden en STM8-brikke på I2C-adresse 0x10. Derfor har motorene ingen egne pinner.
Gjør bilen klar
- Batterier: sett tre AAA-batterier i holderen, med pluss og minus slik merkingen i holderen viser. Batteriene følger ikke med.
- Ultralydsensor: mens bilen er slått av, plugger du sensoren i pinneraden merket SONAR foran på bilen, med de to runde lydgiverne vendt fremover. Raden merket IIC er ikke for sensoren, og feil plassering kan hindre bilen i å kjøre.
- micro:bit: skyv kortet helt ned i sporet med LED-skjermen og knappene A og B vendt fremover, mot ultralydsensoren.
- Strøm: hovedbryteren sitter bak, ved siden av IR-mottakeren, og en LED ved bryteren viser om bilen er på. La bilen være avslått til programmet er lastet ned.
Legg til Cutebot-utvidelsen i MakeCode
Cutebot-blokkene kommer fra ElecFreaks' utvidelse med åpen kildekode, pxt-cutebot på GitHub. Blokktekstene og JavaScript-navnene i guiden er hentet fra kildekoden der.
- Åpne MakeCode for micro:bit og klikk New Project.
- Klikk Extensions i verktøykassen, under Advanced. Det samme valget finnes i tannhjulmenyen.
- Søk etter «cutebot» og velg utvidelsen «cutebot» fra ElecFreaks. Utvidelsen «Cutebot-Pro» hører til den større Cutebot Pro. Dukker ikke utvidelsen opp, limer du inn
https://github.com/elecfreaks/pxt-cuteboti søkefeltet. - En grønn Cutebot-kategori dukker opp i verktøykassen. Utvidelsen legger også til Neopixel-blokkene for LED-ene under bilen.
- Koble micro:bit til PC-en med USB-kabel og klikk Download. Første gang kan MakeCode be deg pare kortet med WebUSB. Ellers kopierer du .hex-filen til stasjonen MICROBIT.
Med MakeCode på norsk er de vanlige blokkene oversatt, mens Cutebot-blokkene står på engelsk fordi utvidelsen ikke har norsk oversettelse. Guiden bruker de engelske tekstene:
| Engelsk i MakeCode | Norsk i MakeCode |
|---|---|
| on start | ved start |
| forever | gjenta for alltid |
| on button A pressed | når knapp A trykkes |
| show icon / pause (ms) | vis ikon / pause (ms) |
| if … then … else | hvis … så … ellers |
| set … to / change … by | sett … til / endre … med |
| and / or | og / eller |
| pick random … to … | velg tilfeldig … til … |
| running time (ms) | kjøretid (ms) |
| Extensions / Download | Utvidelser / Last ned |
Simulatoren kan ikke kjøre bilen, og ifølge MakeCode virker heller ikke pulsmålingen bak ultralydblokken der. Test derfor på den ekte bilen.
Nivå 1: kjør, stopp og slå på frontlysene
Knapp A starter bilen med frontlysene på, knapp B stopper den og slukker lysene. Én blokk styrer begge hjulene, med farten i prosent fra -100 til 100.
- Fra Basic: legg «show icon» med hjertet i «on start». Hjertet viser at programmet er lastet ned.
- Fra Cutebot-kategorien: legg «Turn off all LED headlights» under ikonet.
- Fra Input: hent «on button A pressed». Legg inn «Set LED headlights ALL color R: 255 G: 255 B: 255» (velg ALL i listen) og «Set left wheel speed 50 % right wheel speed 50 %».
- Hent en ny knappeblokk og velg B. Legg inn «Stop car immediately» og «Turn off all LED headlights».
- Klikk Download, trekk ut USB-kabelen, sett bilen på gulvet, slå den på og trykk A.
input.onButtonPressed(Button.A, function () {
cuteBot.singleheadlights(cuteBot.RGBLights.ALL, 255, 255, 255)
cuteBot.motors(50, 50)
})
input.onButtonPressed(Button.B, function () {
cuteBot.stopcar()
cuteBot.closeheadlights()
})
basic.showIcon(IconNames.Heart)
cuteBot.closeheadlights()
cuteBot.motors(50, 50)er blokken «Set left wheel speed … right wheel speed …». Det første tallet gjelder venstre hjul, det andre høyre. Med negative tall kjører bilen bakover, og verdier utenfor -100 til 100 setter utvidelsen til nærmeste grense.- Bilen holder farten til neste motorblokk. Derfor trenger du B og
cuteBot.stopcar(), som setter begge hjulene til 0. - JavaScript har ingen «on start». MakeCode legger knappehendelsene først, og linjene etter dem er det som ligger i «on start».
RGBLights.ALLgjelder begge frontlysene. Vil du styre ett lys, velger du Left_RGB eller Right_RGB i blokken. Med ALL sender utvidelsen bare 0,38 ganger grønnverdien du skriver inn.
Prøv selv: bytt ut motorblokken under A med «Go Forward at speed 50 % for 2 seconds» (cuteBot.moveTime(cuteBot.Direction.forward, 50, 2)), som stopper av seg selv. Eller gi hjulene ulik fart, for eksempel 50 og 20, og se bilen kjøre i en bue.
Hvis bilen ikke kjører
- Hjertet vises, men hjulene står stille: sjekk bryteren, batteriretningen og at ultralydsensoren står i SONAR-kontakten. ElecFreaks anbefaler å prøve uten sensoren. Kjører bilen da, satt sensoren feil.
- Bilen kjører litt skjevt: motorene har ingen tilbakemelding om turtall, og ElecFreaks skriver at små avvik er normale. Juster farten på det ene hjulet, for eksempel 50 og 47, til bilen kjører rett nok.
- MakeCode mangler blokker eller viser feil: sjekk at det er utvidelsen «cutebot» og ikke Cutebot-Pro som er lagt til.
Nivå 2: unngå hindringer med ultralydsensoren
Slik måler ultralydsensoren
HC-SR04 sender en kort puls med ultralyd på 40 kHz og måler hvor lenge ekkoet er underveis. Ifølge databladet fra ElecFreaks måler den fra 2 til 400 cm, med en målevinkel på 15 grader. Blokken «HC-SR04 Sonar unit cm» regner om tiden til centimeter ut fra lydhastigheten 340 m/s og deler på to fordi lyden går frem og tilbake.
Verdiene hopper litt, og det er normalt. Databladet sier at flaten bør være minst 0,5 m² og så glatt som mulig for at målingen skal bli god. Hindringene i nivå 2 er mindre enn det, så test først med testprogrammet under «Hvis bilen snur feil». Et stolbein, en myk pute eller en vegg på skrå gir feil ekko eller ikke noe ekko. Måler du for ofte, kan et sent ekko fra forrige måling blandes med den nye, så databladet anbefaler minst 60 ms mellom målingene. Kommer det ikke noe ekko innen tidsgrensen, gir blokken 0.
Velg grenser som tåler støy
Programmet bruker tre regler. Grensen for «nær» er 20 cm, som i ElecFreaks' eksempel. Øker du farten, bør du også øke grensen, fordi bilen kjører lenger før den rekker å reagere. Målingen må dessuten være større enn 1, ellers blir 0 (ikke noe ekko) regnet som et hinder. Til slutt reagerer bilen først etter to nære målinger på rad, slik at én feilmåling ikke får den til å snu. Ulempen er at bilen reagerer én runde senere, rundt 0,1 sekund.
- Under Variables lager du variablene
kjorer,avstandognaer. - Knapp A setter
kjorertil true, knapp B setter den til false. - Bygg «forever» som i figuren: måling, teller, valget mellom å snu og å kjøre videre, og til slutt «pause (ms) 60».
let kjorer = false
let avstand = 0
let naer = 0
input.onButtonPressed(Button.A, function () {
kjorer = true
})
input.onButtonPressed(Button.B, function () {
kjorer = false
})
basic.forever(function () {
if (kjorer) {
avstand = cuteBot.ultrasonic(cuteBot.SonarUnit.Centimeters)
if (avstand > 1 && avstand < 20) {
naer += 1
} else {
naer = 0
}
if (naer >= 2) {
cuteBot.colorLight(cuteBot.RGBLights.ALL, 0xff0000)
cuteBot.motors(-40, -40)
basic.pause(400)
cuteBot.motors(0, -40)
basic.pause(randint(300, 600))
naer = 0
} else {
cuteBot.colorLight(cuteBot.RGBLights.ALL, 0x00ff00)
cuteBot.motors(40, 40)
}
} else {
cuteBot.stopcar()
cuteBot.closeheadlights()
}
basic.pause(60)
})
avstand > 1 && avstand < 20er «and»-blokken med to sammenligninger. Den slipper gjennom 2 til 19 cm og stenger ute 0, som betyr at ekkoet uteble.naerteller nære målinger på rad, og den første målingen uten hinder setter den tilbake til 0. Det er et enkelt støyfilter.cuteBot.motors(0, -40)lar venstre hjul stå stille og kjører høyre hjul bakover, så bilen svinger til høyre rundt venstre hjul, samme manøver som i ElecFreaks' eksempel. Den tilfeldige pausen gir litt ulik vinkel hver gang.basic.pause(60)holder minst 60 ms mellom målingene, slik databladet anbefaler.- De tre
let-linjene øverst blir ikke blokker. MakeCode lager dem selv for variabler som starter på 0 eller false. - Trykker du B midt i en manøver, fullfører bilen manøveren før den stopper, fordi pausene må gå ut først.
Prøv selv: sett grensen til 30 cm og farten til 60, og se hvor nær bilen kommer. Eller lag en bil som følger hånden din, som i ElecFreaks' eksempel: stå stille mellom 5 og 10 cm, rygg mellom 2 og 4 cm og kjør fremover ellers. Bruk samme filter som over, slik at 0 (ikke noe ekko) ikke får bilen til å rygge.
Hvis bilen snur feil
- Bilen snur hele tiden: lag et lite testprogram med «show number» og «HC-SR04 Sonar unit cm» i «forever», og se hva sensoren faktisk måler der bilen står.
- Avstanden er alltid 0: sjekk at sensoren står i SONAR-kontakten og peker rett frem. 0 betyr at ekkoet ikke kom tilbake.
- Bilen kjører inn i tynne ting: stolbein, ledninger og myke stoffer gir svakt ekko. Kjør saktere.
Nivå 3: linjefølger med to linjesensorer
Slik leser bilen linjen
Under fronten, ved det lille støttehjulet, sitter to linjesensorer, koblet til P13 (venstre) og P14 (høyre) sett ovenfra i kjøreretningen, slik utvidelsen navngir dem. Hver sensor gir bare to svar: linje eller ikke linje. I kildekoden betyr verdien 0 at sensoren står over den svarte linjen. Blokken «Tracking state is» viser de fire kombinasjonene med symboler, ● for linje og ◌ for ingen linje, med venstre sensor først.
| Venstre (P13) | Høyre (P14) | Blokkvalg | Hva det betyr | Handling |
|---|---|---|---|---|
| linje | linje | ● ● | Linjen er midt under bilen | Kjør rett frem: motors(fart, fart) |
| ingen linje | linje | ◌ ● | Linjen ligger til høyre | Sving til høyre: motors(fart, sving) |
| linje | ingen linje | ● ◌ | Linjen ligger til venstre | Sving til venstre: motors(sving, fart) |
| ingen linje | ingen linje | ◌ ◌ | Linjen er borte | Søk mot siden linjen sist lå på, stopp etter 1,5 s |
Bilen svinger ved at det ene hjulet går fortere enn det andre. ElecFreaks bruker 30 og 10 i eksempelet sitt, og det er et godt utgangspunkt. Eksempelet deres har ingen regel for ◌ ◌, så bilen fortsetter med siste motorkommando, og var kommandoen «rett frem», kjører bilen ut av banen. Nivå 3 husker derfor siden linjen sist lå på, svinger dit og stopper etter 1,5 sekunder uten linje. Bilen stopper også for hindringer nærmere enn 15 cm.
- Lag variablene fra koden nedenfor. Navnene er skrevet uten æ, ø og å, slik at de ser like ut i blokkene og i JavaScript.
- Bygg «on start» og knappene som i den første figuren. Bare
fartogsvingtrenger en startverdi; resten starter på 0 eller false. Bygg deretter løkken som i den andre figuren. - Last ned, sett bilen på banen med begge sensorene over linjen og trykk A.
let kjorer = false
let fart = 30
let sving = 10
let sist = 0
let avstand = 0
let maltTid = 0
let linjeTid = 0
let venstre = false
let hoyre = false
input.onButtonPressed(Button.A, function () {
linjeTid = input.runningTime()
kjorer = true
})
input.onButtonPressed(Button.B, function () {
kjorer = false
})
basic.forever(function () {
if (kjorer) {
if (input.runningTime() - maltTid >= 60) {
maltTid = input.runningTime()
avstand = cuteBot.ultrasonic(
cuteBot.SonarUnit.Centimeters)
}
venstre = cuteBot.trackSide(cuteBot.MbPins.Left,
cuteBot.MbEvents.FindLine)
hoyre = cuteBot.trackSide(cuteBot.MbPins.Right,
cuteBot.MbEvents.FindLine)
if (venstre || hoyre) {
linjeTid = input.runningTime()
}
if (avstand > 1 && avstand < 15) {
cuteBot.stopcar()
cuteBot.colorLight(cuteBot.RGBLights.ALL, 0xff0000)
linjeTid = input.runningTime()
} else if (venstre && hoyre) {
cuteBot.motors(fart, fart)
cuteBot.colorLight(cuteBot.RGBLights.ALL, 0x00ff00)
} else if (hoyre) {
cuteBot.motors(fart, sving)
cuteBot.colorLight(cuteBot.RGBLights.ALL, 0x00ff00)
sist = 1
} else if (venstre) {
cuteBot.motors(sving, fart)
cuteBot.colorLight(cuteBot.RGBLights.ALL, 0x00ff00)
sist = -1
} else if (input.runningTime() - linjeTid < 1500) {
cuteBot.colorLight(cuteBot.RGBLights.ALL, 0x0000ff)
if (sist == 1) {
cuteBot.motors(fart, 0)
} else {
cuteBot.motors(0, fart)
}
} else {
kjorer = false
}
} else {
cuteBot.stopcar()
cuteBot.closeheadlights()
}
})
input.runningTime() - maltTid >= 60: «running time (ms)» er tiden siden micro:bit startet. Bilen måler avstand høyst hvert 60. millisekund, mens linjesensorene leses i hver runde. En måling uten ekko tar opptil 25 ms, fordi utvidelsen venter i 500 × 50 µs, så hyppigere målinger ville gjort linjefølgingen tregere.cuteBot.trackSide(cuteBot.MbPins.Left, cuteBot.MbEvents.FindLine)er blokken «Left line sensor Found», som er sann når venstre sensor står over linjen. «Tracking state is» leser pinnene på nytt ved hver bruk. Når begge sensorene leses inn ivenstreoghoyreén gang per runde, bruker alle reglene det samme øyeblikksbildet.if (venstre || hoyre)oppdatererlinjeTidhver gang minst én sensor ser linjen.linjeTidbetyr dermed «sist gang bilen så linjen».else if-kjeden følger logikken i tabellen. Hinderet sjekkes først, fordi stopp går foran alt. Deretter kommer ● ●. Når kjeden nårelse if (hoyre), er ● ● allerede utelukket, så tilstanden er ◌ ●.sist = 1ogsist = -1husker siden linjen sist lå på. Når begge sensorene mister den, svinger bilen rundt ett stillestående hjul mot den siden.input.runningTime() - linjeTid < 1500gir søket 1,5 sekunder. Etter det setteskjorertil false, og neste runde stopper motorene og slukker lysene.linjeTidsettes også mens bilen står for et hinder, slik at ventetiden ikke regnes som søketid.- Løkken har ingen egen pause. «forever» venter selv omtrent 20 ms mellom rundene og gir da tid til resten av programmet, så knappene virker. Jo oftere sensorene leses, jo raskere retter bilen seg inn.
- Frontlysene viser tilstanden: grønt når bilen følger linjen, også i svingene, blått når den søker, og rødt når den står for et hinder.
Prøv selv: øk fart til 40 og prøv deg frem med sving. Mister bilen linjen i krappe svinger, senker du farten eller øker forskjellen mellom hjulene. Gjør gjerne 15 og 1500 om til variabler i «on start», slik at du kan justere alt på ett sted.
Hvis bilen mister linjen
- Bilen kjører rett over linjen: senk
fart, og test først på banen som følger med. Linjen må være mørk mot et lyst underlag. - Bilen stopper uten synlig grunn: noe ved banen gir ekko nærmere enn 15 cm. Senk grensen, eller mål avstanden som i nivå 2.
Batterier, montering og trygg testing
Cutebot går på tre AAA-batterier, som ikke følger med. Tre alkaliske celler på 1,5 V gir rundt 4,5 V, innenfor arbeidsspenningen på 3,5 til 5 V som ElecFreaks oppgir. Oppladbare NiMH-celler gir 1,2 V hver, til sammen rundt 3,6 V, nær den nedre grensen. Motorene har ingen tilbakemelding om turtall, så fart og svinger som du har justert med nye batterier, må kanskje justeres på nytt når batteriene blir svakere.
Ifølge ElecFreaks er det bare batteriene og ultralydsensoren som må monteres. Følg brosjyren i esken, og sjekk før hver kjøring at skruene sitter godt.
Cutebot eller et annet micro:bit-robotsett?
Cutebot er nesten ferdigmontert og har innebygde sensorer. Vil du bygge mer selv, gir andre sett mer mekanikk å jobbe med. Alle tre krever et micro:bit-kort i tillegg.
| Sett | Bygging | Drift og hjul | Sensorer på bilen | Passer når |
|---|---|---|---|---|
| Cutebot | Nesten ferdigmontert: bare batterier og ultralydsensor | To GA12-N20-girmotorer | Ultralyd, to linjesensorer, IR-mottaker | Du vil programmere med en gang |
| TinkerGen BitCar | Byggesett med paneler, hjul og skruer | To hjul og to dreiehjul | Reflekssensor og ultralydsensor | Du vil bygge selv og utvide med Grove |
| Ring:bit Car V2 | Byggesett med baseplate og servoer | To servoer | Ingen faste, én GPIO-kanal til egen sensor | Du vil starte med bevegelse og tegning med penn |
Vil du heller øve på elektronikk enn robotikk, samler eksperimentsettet for BBC micro:bit LED-er, knapper, sensorer, servo og motor på ett kretskort. Flere sett finner du blant roboter for nybegynnere og i micro:bit-kategorien.
Vanlige spørsmål
Følger micro:bit med Cutebot?
Nei. micro:bit-kortet må kjøpes separat og settes i sporet foran batteriholderen. micro:bit 2 GO gir deg kortet og USB-kabelen samlet.
Hvilke batterier bruker Cutebot?
Tre AAA-batterier i holderen på toppen av bilen. ElecFreaks oppgir at batteriene ikke følger med, og at arbeidsspenningen er 3,5 til 5 V.
Hvorfor kjører ikke Cutebot helt rett?
Motorene har ingen tilbakemelding om turtall, og ElecFreaks skriver at små avvik er normale. Juster farten på det ene hjulet noen prosent til bilen kjører rett nok.
Kan jeg programmere Cutebot i Python?
Ja. ElecFreaks har et Python-bibliotek, Cutebot.py, som du legger til i prosjektet i micro:bit Python Editor. Knappene i editoren kan se annerledes ut enn i ElecFreaks' veiledning. I biblioteket heter funksjonene blant annet set_motors_speed(), get_distance() og get_tracking(). Merk at get_tracking() gir 11 når begge sensorene står på svart. Se ElecFreaks' Python-eksempler for Cutebot.
Kan jeg bruke Cutebot Pro-blokkene med Cutebot?
Nei. Cutebot Pro har sin egen utvidelse og annen maskinvare, blant annet fire linjesensorer og motorer med tilbakemelding om turtall.
Når bilen følger linjen, er neste steg å bli trygg på selve kortet: kom i gang med micro:bit viser blokker, JavaScript og Python fra bunnen av, og micro:bit i skolen har oppgaver fra enkle til avanserte. Lurer du på hvilken plattform som passer for barn, skole eller voksne, får du en oversikt i guiden om å lære programmering med elektronikk.




