Add a potentiometer to your microbit

I had a 10k potentiometer lying around that I saved from some junked electronics – it may have been a volume control or something, I can’t remember. Today I found a use for it when I found this excellent web site called Microbit Playground. This shows you how you can hook a pot straight up to a microbit and take readings with a bit of Python. You connect the centre pin of the potentiometer to microbit pin 0, and the other 2 pins are connected to GND and 3v on the microbit. I just used some crocodile clip leads.

I found the code to change the brightness of a dot on the screen needed an int() adding to line 5 so it reads
brightness = int((pin0.read_analog() / 1023) * 9)

I decided to play around with this and did the following:

First I made the display get dimmer or brighter depending on the position of the potentiometer:

Then I made a level graphic go up or down depending on its position in 10 increments:

Next I made a phone-style wedge that goes up & down when you wiggle the knob (just a little bit).

Then with just ONE line of Python I added an analogue paddle controller to my totes awesome Kettle Run game to make… PotKettleRun! (See what I did there? I’m here all week.)

Finally, I wired up a microbit to a fader from an old BBC radio studio mixing desk. This was the main gain fader from BBC World Service studio S36 in Bush House, London. This was a lovely BBC-designed and built DK4/19 mixing desk which we auctioned off for charity in bits when it was dismantled. Note the non-linearity of the fade – one of the nice things about this desk was the sensitivity at low levels allowing for tasteful fades when some other faders fall off a cliff as you get close to 0.

In the highly unlikely event you have a Penny & Giles type 1520/C136/188 fader which you want to wire up to a microbit, the white wire goes to pin 0, green to GND and the brown one to 3v on the microbit:

All Python code at the end of this post. If you make a 2-player Pong game with real physical paddles before me, let me know!

All the Code that’s Fit to Print

Brighter/dimmer screen:

from microbit import *

img0 = Image("00000:"
             "00000:"
             "00000:"
             "00000:"
             "00000")

img1 = Image("11111:"
             "11111:"
             "11111:"
             "11111:"
             "11111")

img2 = Image("22222:"
             "22222:"
             "22222:"
             "22222:"
             "22222")

img3 = Image("33333:"
             "33333:"
             "33333:"
             "33333:"
             "33333")

img4 = Image("44444:"
             "44444:"
             "44444:"
             "44444:"
             "44444")

img5 = Image("55555:"
             "55555:"
             "55555:"
             "55555:"
             "55555")

img6 = Image("66666:"
             "66666:"
             "66666:"
             "66666:"
             "66666")

img7 = Image("77777:"
             "77777:"
             "77777:"
             "77777:"
             "77777")

img8 = Image("88888:"
             "88888:"
             "88888:"
             "88888:"
             "88888")

img9 = Image("99999:"
             "99999:"
             "99999:"
             "99999:"
             "99999")            

img_list = [img0,img1,img2,img3,img4,img5,img6,img7,img8,img9]           

while True:
	brightness = int((pin0.read_analog() / 1023) * 9)

	display.show(img_list[brightness])
	sleep(10)

Levels going up & down

from microbit import *

img0 = Image("00000:"
             "00000:"
             "00000:"
             "00000:"
             "00000")

img1 = Image("00000:"
             "00000:"
             "00000:"
             "00000:"
             "55555")

img2 = Image("00000:"
             "00000:"
             "00000:"
             "00000:"
             "99999")

img3 = Image("00000:"
             "00000:"
             "00000:"
             "55555:"
             "99999")

img4 = Image("00000:"
             "00000:"
             "00000:"
             "99999:"
             "99999")

img5 = Image("00000:"
             "00000:"
             "55555:"
             "99999:"
             "99999")             

img5 = Image("00000:"
             "00000:"
             "99999:"
             "99999:"
             "99999")             

img6 = Image("00000:"
             "55555:"
             "99999:"
             "99999:"
             "99999")  

img7 = Image("00000:"
             "99999:"
             "99999:"
             "99999:"
             "99999")  

img8 = Image("55555:"
             "99999:"
             "99999:"
             "99999:"
             "99999")      

img9 = Image("99999:"
             "99999:"
             "99999:"
             "99999:"
             "99999")    

img_list = [img0,img1,img2,img3,img4,img5,img6,img7,img8,img9]           

while True:
	brightness = int((pin0.read_analog() / 1023) * 10)

	display.show(img_list[brightness])
	sleep(10)

Signal-strength type wedge display:

from microbit import *

img0 = Image("00000:"
             "00000:"
             "00000:"
             "00000:"
             "00000")

img1 = Image("00000:"
             "00000:"
             "00000:"
             "00000:"
             "50000")

img2 = Image("00000:"
             "00000:"
             "00000:"
             "00000:"
             "90000")

img3 = Image("00000:"
             "00000:"
             "00000:"
             "05000:"
             "95000")

img4 = Image("00000:"
             "00000:"
             "00000:"
             "09000:"
             "99000")

img5 = Image("00000:"
             "00000:"
             "00500:"
             "09500:"
             "99500")             

img5 = Image("00000:"
             "00000:"
             "00900:"
             "09900:"
             "99900")             

img6 = Image("00000:"
             "00050:"
             "00950:"
             "09950:"
             "99950")  

img7 = Image("00000:"
             "00090:"
             "00990:"
             "09990:"
             "99990")  

img8 = Image("00005:"
             "00095:"
             "00995:"
             "09995:"
             "99995")      

img9 = Image("00009:"
             "00099:"
             "00999:"
             "09999:"
             "99999")    

img_list = [img0,img1,img2,img3,img4,img5,img6,img7,img8,img9]           

while True:
	brightness = int((pin0.read_analog() / 1023) * 10)

	display.show(img_list[brightness])
	sleep(10)

PotKettleRun game

# PotKettleRun: guide your ship using a potentiometer
# Guide your ship to home port and put the kettle on.
# Can you do the Kettle Run in less than 12 parsecs?
# Sound commands & buttons from original game commented out

from microbit import *
import random
#from music import play, NYAN, POWER_UP, FUNERAL, JUMP_UP, JUMP_DOWN

# edit terrain blocks to make game harder

teacup1 = Image("00000:"
                "99999:"
                "99909:"
                "99999:"
                "99900")

teacup2 = Image("05000:"
                "99999:"
                "99909:"
                "99999:"
                "99900")

teacup3 = Image("00500:"
                "99999:"
                "99909:"
                "99999:"
                "99900")

def teacup_animate(times):
    for x in range(times):
        display.show(teacup1)
        sleep(500)
        display.show(teacup2)
        sleep(500)
        display.show(teacup3)
        sleep(500)

def build_terrain(length):
    canyon_lines=["00000:00005:00055:00555:00055:00005:",
    "50000:55000:55500:55550:55000:",
    "50005:55005:50055:50005:00005:",
    "00055:00555:00005:55000:55005:50005:"]
    terrainString = "00000:00000:00000:00000:"
    for i in range(length):
        z = random.randint(0,3)
        terrainString = terrainString + canyon_lines[z]
    terrainString = terrainString + "50005:55055"
    terrainImage = Image(terrainString)
    return terrainImage

def game_run():
    global level
    global crash
    global speed
    terrain = build_terrain(2+(level*2))
    image_height = terrain.height()
    ship_height = 4
    for i in range(image_height):
        ship_height = int((pin0.read_analog() / 1023) * 5)
#       if button_a.was_pressed():
#            play(JUMP_UP, wait=False)
#           ship_height -= 1
#           if ship_height < 0:
#               ship_height = 0
#       if button_b.was_pressed():
#            play(JUMP_DOWN, wait=False)
#           ship_height += 1
#           if ship_height > 4:
#               ship_height = 4
        if terrain.get_pixel(ship_height, 0) == 5:
            crash = True
            break
        terrain.set_pixel(ship_height, 0, 9)
        display.show(terrain)
        sleep(speed)
        terrain = terrain.shift_up(1)

speed = 500
crash = False
won = False
level = 1

display.scroll('Kettle Run')

while level < 6:         # increase this number to add more levels
    display.show(str(level))
    sleep(1000)
    game_run()
    if crash:
#        play(FUNERAL, wait=False)
        break
    else:
#        play(POWER_UP, wait=False)
        teacup_animate(2)
        display.scroll('Tea up!')
        level += 1
        speed -= 20       # increase this number to speed up more on each level

if not crash:
#    play(NYAN, wait=False)
    display.show('YOU WIN')
    sleep(1000)
else:
    display.show('GAME OVER')
    sleep(1000)

while True:
    display.scroll('Press reset to play again')
This entry was posted in computers and tagged , . Bookmark the permalink.

Leave a Reply