STEM: micro:bit Inventor's Kit - Review

Table of contents

RoadTest: STEM: micro:bit Inventor's Kit

Author: robogary

Creation date:

Evaluation Type: Electromechanical

Did you receive all parts the manufacturer stated would be included in the package?: True

What other parts do you consider comparable to this product?: Arduino Experimenter's kits, Parallax BoEbot robot kit

What were the biggest problems encountered?: The tutorial code in Experiment 8 didn’t work for me, perhaps due to MicroBit firmware updates. I resolved by rewriting code. Experiment 9 works, but poorly in my view, I suggested a couple code improvements in the detail section.

Detailed Review:

Kitronik Inventor’s Kit for BBC:MicroBit  Road Test Report

November 2018 by Gary Y

  1.  Qty 1 kit Stock Code 5603 Batch 3849


GY Test Plan

  1. Visual Inspection of container and contents, check parts list, record observations
  2. Assemble per instructions, check for parts, fit, record observations
  3. Power up assembled kit, familiarize, record observations
  4. Connect to IDE per manual, familiarize, record observations with Windows PC and then with a Linux PC.
  5. Follow tutorial book to check each experiment, familiarize, check accuracy of explanation, enough details and still keeping it simple, age appropriate explanations, did it work as indicated ?  record observations
  6. Review concepts introduced by each experiment for logical progression, successful structured learning, new science concepts, was it fun and interesting ? could something small be added to make a bigger impact ? improve ?
  7. Summarize final conclusions and recommendations, put in the report just after the test plan.


Kitronics Inventor’s Kit – Road Test Summary


  • The kit is great value for the money. This kit doesn’t have all the sensors an Arduino experimenter’s kit would have, but this kit is much smaller and costs less.  The MicroBit can do more than this kit exposes the experimenter to.


  • The tutorial was easy to follow and experimentation success can be made with little difficulty.

It is great for beginners to get a little exposure to basic electronic devices and also to programming concepts.


  • The Kitronik’s tutorial has enough information to complete the wiring and programming for each lesson, a nice description of operation, and some background on PWM. It isnt a self guided programmed learning guide like Parallax BoEbot, but it is streamlined to allow for short insightful projects, with background an educator can complement. 


  • The tutorial code in Experiment 8 didn’t work for me, perhaps due to MicroBit firmware updates. Experiment 9 works, but poorly in my view,

I suggested a couple improvements in the detail section.





Test Plan detailed observations and feedbacks


1. Observations – Visual Inspection

  • The Inventor kit Box was clean, clearly marked and undamaged from shipping
  • The MicroBit controller Box was clean, clearly marked and undamaged from shipping. It is not included with the Kit.
  • The overall appearance of the box when first opened gave a good first impression, as the packaging and content was neat and organized.

Parts check:

All parts were present as published on page 4 & 5 of the tutorial. There were no missing parts, altho I couldn’t find the screws at first. They were hard to see packed in with the hookup wires.

Users parts were organized in 3 different ziplock bags, which made it easy to find and track the parts.

  1. Page 5 of the tutorial listed the resistors with ohm values and identified with color band markings. Very good!
  2. Page 5 of the tutorial did not list the potentiometer with its ohm value, nor did I see the pot value anywhere throughout the manual.



2. Assembly and assembly Instructions: observations and feedback


  • The instructions in the tutorial page 3 were plain enough to assemble the prototyping plate correctly.
  • The assembly photo on page 3 shows a battery holder with batteries underneath the microbit controller, but there is no battery holder provided with the kit.  Replace photo in tutorial.
  • The screws for holding down the breakout header to the proto plate had coarse threads and were relatively hard to tighten. I was worried to break the plastic stem. I didn’t, and the header is held tightly.
  • The best feature: The assembled prototyping board with microbit fits back into the inventor kit box with the tutorial and parts !  If the box were another inch wider I would be more comfortable leaving the USB cable connected to the microbit controller.






3. Power up assembled kit, familiarize, record observations


Per Page 7 of the tutorial, The MicroBit plugs into the PC and powered. (Lucky I had the correct USB cable available, shame the MicroBit doesn’t come with one. )  . It was my first go with an out of the box MicroBit and didn’t know what was going on with it.

Please add a note to the tutorial page 7 , instructing users to read the Get Started Guide packed in the MicroBit Box.  I finally figured that out, after checking out

The tutorial Page 8 does say to go to microbit website for software info.


4. Connect to IDE per manual, familiarize, record observations


The tutorial page 8 refers users to for info on Python programming and editor options besides MakeCode and MakeCode Javascript.

This link has some good info, but is mostly a presentation of add on options for sale. The WS2812B LED strings are especially cool.

Please use this link to go directly to the additional learning tutorials, and Page 8 in the tutorial should refer to it:


Page 10 of the tutorial ACCELERATION block command refers to x, y, z directions.  X, Y, and Z are not labeled on the MicroBit silkscreen.  Finally found the  X,Y, and Z  vectors referenced to the Microbit on page 31.


Page 10 of the tutorial PLAY TONE block and Page 11 START MELODY block refers to an analog output on pin P0.  Both explanations should say to connect the piezo Element buzzer to P0.

  1. Several “practice” programs written using the microbit online editor were successfully created, downloaded, and loaded to MicroBit from a Windows 10 PC and a Linux Mint PC.  Linux took a bit to figure out, but wasnt too bad either. 


5. Tutorial’s experiment’s observations and feedbacks 



There should be a caution header before each experiment to unplug the Microbit from the PC, and/or remove battery power before wiring the experiment circuit. Always double check the wiring before repowering. 


Experiment 2 teaches using the photo resistor (LDR) as an input. Experiment 3 uses a pot to dim an LED.

There should be a tie in experiment – Experiment 3B - to use the photo resistor (LDR) to dim an LED, which is a true life type application.


Experiments 4 & 5 relate to variable speed DC motor control. In Experiment 5, the accelerometer is used to vary the DC fan speed.  There should be an Experiment 5B , or replace Experiment 5’s use of the accelerometer for control, and use a simple 10k thermistor in a series with a 10k resistor as a voltage divider analog input to turn the fan on & off., and do some crude variable speed fan control. This is closer to a true life example.  I selected NTC-MF52-103/3435 10K ohm 1% for this additional experiment.

Note the table shows calculated values, the thermistors are not received yet for testing. Will update the status when thermistors are received.


Experiment 1 is a good starting place to coordinate hardware and software thoughts together.

The circuit on page 17 was great.

My biggest comment and feedback is to the hookup drawing on page 16 uses 2 different colors of wires connected to 0V. It works, sure, but as the wiring gets more complex,

I find it better to always use the same color wire convention for common/ground ( green or black) and 3V (red). 

Note: The Block editor can set pause time to any number you want. Show string seems unlimited in the number of characters that can be entered.


Experiment 2 – LDR (?)  I know this device as a photo resistor.  The control explanation is on page 21 after the experiment construction.

I prefer to start the experiment with a photoresistor calibration check, but granted a 10 year old probably doesn’t own a DVM.


The Photoresistor resistance close to a bright light measures 100 ohms.

Under a 40W soft white fluorescent light measures approximately 6 Kohm.

With the photoresistor covered by a finger, it reads ~ 100 Kohms.


The experiments variable “Light” has to exceed value 512 ( 1.5V input to P0) to trigger sunshine. 1023 = 3V input.  Vin at P0 = 3 volts * [LDR reisistance/(LDR resistance+10 Kohms)]  so LDR resistance has to be greater than 10 Kohms to trigger the sunshine LED graphics. In my case, covering the photoresistor with my finger should work using the tutorial code, and it does. 

3V power supply reads 3.16Vdc. P0 measured with a DVM at ambient 40W light = 1.7V .  Using my measured value of LDR resistance of 6Kohms, PO volts = 3* (10 Kohms/ 16 Kohms ) =1.8  V pretty close.


Experiment 3 This is a vital experiment to teach the usefulness of the AnalogWrite command.


Page 24 – discusses the pot rotation operation and the explanation is correct as the pot is shown wired. However normal convention for a pot is full CCW is the lowest adjustment, I.e. dimmed, full CW is the highest “full” adjustment, i.e. bright. The wiring drawing on page 24 shows wiring the pot for the rotation where CCW is a higher setting.  The pot rotation convention should be noted and corrected in the manual and include a little explanation of how the pot works. 


Page 23 – I was puzzled that the code was written for an analogWrite when the LED is on, but a digitalWrite to 0 when the PB is turned off.  I created Experiment 3A using analogWrite for both states, and Experiment 3B using digitalWrite = 0.  Experiment 3A the LED was very dim when the pot was turned full CCW, and totally off when the PB turned it off. Experiment 3B was done using the software as shown in the tutorial, with the same results.  The output voltage measured at full dim was below the LED Vf, moved onto the next experiment at this point, attributing the LED being barely turned on to output current leakage. At the end, there was no difference.




VIDEO at: image



Experiment 3 "B" code

Video at :



Experiment 4 -  Another good reinforcing exercise to a vital code concept

AnalogWrite continues to mess me up logically as shown in the Blocks. Typically a code writes a value to a pin, these blocks say it backwards, writing pin # to a value.



Measuring motor output before test Video at


Experiment 5 -  using an accelerometer to control motor speed.

This is a subtle way to expose user to the accelerometer sensor and vectors without having to explain vector math.

This experiment, described in the tutorial, is self explanatory and straightforward. It worked well without incident.

I did hot glue the motor leads to the motor case for some stress relief and to keep the leads from getting hit by fan blades.


I made experiment code versions made for each individual axis, and each worked as expected by tipping the protoboard in the x, y, z planes. 

I’d suggest to do this same experiment using a thermistor for  on/off control , and another experiment using temperature feedback to control fan speed. A detailed explanation for this is already provided in the third paragraph of  5. Tutorial’s experiment’s observations and feedbacks  in this report. I have thermistors on order but not yet received,


Video can be seen at:  Video at


Experiment 6 – tone experiments with piezo buzzer

I played with the timing, tones, and settings, added graphic arrows showing which button was pushed. This experiment is straightforward, no additional technical suggestions. 

Strongly recommend doing this experiment in a quiet room and keeping a good ear pointed to the buzzer. It is hard to hear.



Experiment 7 – Wind Power tricky tricky 

With the fan motoring forward clockwise, the air was pushed up (and thankfully forcing the motor into the table to help hold it in place).  Blowing into the blades, the motor generates by running reverse, and the output polarity is reversed. see demo video at


Measuring the motor output leads using a DVM, blowing stiffly into the fan blades could generate negative 4 volts or more.

Note in the teeny tiny schematic on page 43 that the motor positive connection is tied to common.

Wiring the DC motor backwards, the positive lead to common then, references a positive voltage onto the motor negative lead.

This confirms the experiment’s voltage divider is needed, as well as the wiring of the motor is proper for the Microbit to be able to read the motor voltage.


After initially reading a display value of ~100, blowing harder, the value hit 561, then blowing like a hurricane,  I eventually was able to reach an analog value of 1023. It made me dizzy. I tried to watch the DVM to confirm the voltage, but was unable to blow hard and read volts at the same time. DVM is too slow.



Experiment 8  The compass – my first speed bump


The Javacode is entered into the MicroBit tool per the tutorial. If I save the file, it automatically downloads the HEX file regardless if it has errors or not.

The IDE did not clearly show me where the errors occurred in the code, but I was able to localize it to a section of code.


If the Javascript code has errors, going to the block editor does not attempt to create blockcode to help troubleshoot the error, it just erases all the Javascript. 

Comparing to other previous RoadTest reports on this kit, the code looks the same as in the tutorial.





Not making good troubleshooting progress, I coded the game in Blocks, making a couple subtle changes.

1st change is to calibrate the compass on start.

2nd change is to only reset the compass GOAL after winning.

I created a VAR for the flashing LED delay time, called differenceDelayTime.







The working Blocks code are converted to JavaScript by the MicroBit IDE to compare to the version in the tutorial.

JavaScript errors line up on the RANDOM call and the compass calibrate procedure.


let degrees = 0

let differenceDelayTime = 0

let goal = 0

let difference = 0

  1. input.onButtonPressed(Button.A, function () {

    if (difference < 15) {


        goal = Math.randomRange(0, 359)

    } else {

        basic.showString("LOSER TRY AGN")



  1. input.calibrateCompass()

goal = Math.randomRange(0, 359)

difference = 0

degrees = 0

differenceDelayTime = 0

  1. basic.forever(function () {

    difference = Math.abs(goal - input.compassHeading())

differenceDelayTime = difference * 5

    pins.digitalWritePin(DigitalPin.P0, 1)


    pins.digitalWritePin(DigitalPin.P0, 0)




At the end of the experiment, I learned a lot more of the Micro:Bit editor capabilities and surprised myself with gained knowledge of Blocks and JavaScript editor. 



Experiment 9  Capacitor volts indicator while charging


Another fun and informative experiment. The schematic and layout drawing with wiring was very well labelled and accurate. 


For beginners, it may help to label the unconnected leg of the pot with an X or N.C. for no connection.


It was appreciated the pot’s 3V connection was made in a way that the full clockwise was the lowest resistance, for fastest charge time when the pot was full clockwise and slowest charge time when the pot is full counterclockwise.


Good: caution note to watch the cap’s polarity marking while wiring.


Per the video, the LEDs were inexplicitly painfully slow to update as the capacitor charged. The capacitor voltage was monitored with a DVM measured at MicroBit P0. 

Please see the video


I also didn’t like that the LEDs did not go out as the capacitor was discharged. It required less than 25% capacitor voltage to clear any lit LEDs.


Here is my code rewrite, named Experiment 9 Rev 1 , which fixes the time lag by not printing a value to the LED matrix display , and clears LED status during capacitor discharge.

Please see the video of it in action at:



let percentage = 0

let cap_voltage = 0

  1. basic.forever(() => {

    cap_voltage = pins.analogReadPin(AnalogPin.P0)

    percentage = cap_voltage / 10

    if (percentage > 25 && percentage <= 50) {

        pins.digitalWritePin(DigitalPin.P1, 1)

        pins.digitalWritePin(DigitalPin.P2, 0)

        pins.digitalWritePin(DigitalPin.P8, 0)

        pins.digitalWritePin(DigitalPin.P12, 0)


    else if (percentage > 50 && percentage <= 75) {

        pins.digitalWritePin(DigitalPin.P1, 1)

        pins.digitalWritePin(DigitalPin.P2, 1)

        pins.digitalWritePin(DigitalPin.P8, 0)

        pins.digitalWritePin(DigitalPin.P12, 0)


    else if (percentage > 75 && percentage <= 90) {

        pins.digitalWritePin(DigitalPin.P1, 1)

        pins.digitalWritePin(DigitalPin.P2, 1)

        pins.digitalWritePin(DigitalPin.P8, 1)

        pins.digitalWritePin(DigitalPin.P12, 0)


    else if (percentage > 90) {

        pins.digitalWritePin(DigitalPin.P1, 1)

        pins.digitalWritePin(DigitalPin.P2, 1)

        pins.digitalWritePin(DigitalPin.P8, 1)

        pins.digitalWritePin(DigitalPin.P12, 1)


    else {

        pins.digitalWritePin(DigitalPin.P1, 0)

        pins.digitalWritePin(DigitalPin.P2, 0)

        pins.digitalWritePin(DigitalPin.P8, 0)

        pins.digitalWritePin(DigitalPin.P12, 0)




Experiment 10  RGB LED playtime


Another fun experiment !


Page 54 – The RGB LED supplied in the kit had the GRN and BLUE LED leads swapped per the pinout drawing on page 54.

Using a Fluke 73 diode checker, Red Vf = 1.7 V, GRN Vf = 1.33 V,  BLUE Vf  exceeded DVM ability to read Vf.   

The LED was close to white-ish when all colors were at their brightest, the individual LED dies inside are far enough apart, the individual colors can be seen around the LED edges.


Using temperature and barometric pressure inputs, this could become a color weather forecaster

Here is a program for flashing the LED between red & blue like police lights…experiment 11 .


Doing a program from scratch helped me a lot to learn the helpfulness of the Javascript editor.

Another fun experiment is to repeat Experiment #3 using an RGB LED, using the pot to adjust the flashing time between colors. 


  1. basic.forever(() => {

    pins.digitalWritePin(DigitalPin.P0, 1)

    pins.digitalWritePin(DigitalPin.P2, 0)


    pins.digitalWritePin(DigitalPin.P0, 0)

    pins.digitalWritePin(DigitalPin.P2, 1)




Top Comments