Skip to content

Activity

Spirit level

Intermediate | MakeCode, Python | Accelerometer, LED display, Sound | Boolean logic, Relational operators, Selection, Sensors

Step 1: Make it

What is it?

Make a tool for making sure pictures, shelves or work surfaces are level. The new micro:bit's built-in speaker makes it easy to improve your spirit level with audio feedback.

Introduction

Coding guide

What you'll learn

  • How to use the accelerometer sensor to measure angles
  • What 'pitch' and 'roll' are
  • How to combine sensor readings in two dimensions to find a level surface

How it works

diagram showing pitch and roll on the micro:bit
  • The micro:bit's accelerometer can measure angles of tilt in two directions: up and down (pitch) and side to side (roll). This project uses this to show when the micro:bit is level on the LED display and by making a sound, which could be useful when hanging a picture or making a work surface.
  • A loop keeps the program constantly measuring the micro:bit's angle.
  • If the accelerometer measures an angle of tilt between +5 and -5 degrees of both pitch and roll, the micro:bit must be reasonably level. It then shows a tick on the LED display output and plays a musical tone.
  • To hear the tone attach headphones or a speaker to pin 0 and GND, or if you have a new micro:bit you will hear it on the built-in speaker.
  • If either the pitch or the roll is outside the range +5 to -5 degrees, it shows a cross on the LED display and stops the sound.

What you need

  • A micro:bit
  • MakeCode or Python editor
  • battery pack (optional)

Step 2: Code it

1from microbit import *
2import music
3
4# Uses accelerometer readings in the x and y axis 
5# and also allows the micro:bit to be slightly off-level
6# to make it work better in practice
7while True:
8    if accelerometer.get_x() > -10 and accelerometer.get_x() < 10 and accelerometer.get_y() > -10 and accelerometer.get_y() < 10:
9        display.show(Image.YES)
10        music.play('C5:1')
11        sleep(200)
12    else:
13        display.show(Image.NO)
14

Step 3: Improve it

  • Can you make the musical pitch change depending on the angle?
  • Could you code an LED 'bubble' that moves around the screen like a real spirit level?