| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- The accelerometer
- =================
- Here you will learn how to read the accelerometer and signal using LEDs states like tilt left and tilt right.
- Using the accelerometer
- -----------------------
- The pyboard has an accelerometer (a tiny mass on a tiny spring) that can be used
- to detect the angle of the board and motion. There is a different sensor for
- each of the x, y, z directions. To get the value of the accelerometer, create a
- pyb.Accel() object and then call the x() method. ::
- >>> accel = pyb.Accel()
- >>> accel.x()
- 7
- This returns a signed integer with a value between around -30 and 30. Note that
- the measurement is very noisy, this means that even if you keep the board
- perfectly still there will be some variation in the number that you measure.
- Because of this, you shouldn't use the exact value of the x() method but see if
- it is in a certain range.
- We will start by using the accelerometer to turn on a light if it is not flat. ::
- accel = pyb.Accel()
- light = pyb.LED(3)
- SENSITIVITY = 3
- while True:
- x = accel.x()
- if abs(x) > SENSITIVITY:
- light.on()
- else:
- light.off()
- pyb.delay(100)
- We create Accel and LED objects, then get the value of the x direction of the
- accelerometer. If the magnitude of x is bigger than a certain value ``SENSITIVITY``,
- then the LED turns on, otherwise it turns off. The loop has a small ``pyb.delay()``
- otherwise the LED flashes annoyingly when the value of x is close to
- ``SENSITIVITY``. Try running this on the pyboard and tilt the board left and right
- to make the LED turn on and off.
- **Exercise: Change the above script so that the blue LED gets brighter the more
- you tilt the pyboard. HINT: You will need to rescale the values, intensity goes
- from 0-255.**
- Making a spirit level
- ---------------------
- The example above is only sensitive to the angle in the x direction but if we
- use the ``y()`` value and more LEDs we can turn the pyboard into a spirit level. ::
- xlights = (pyb.LED(2), pyb.LED(3))
- ylights = (pyb.LED(1), pyb.LED(4))
- accel = pyb.Accel()
- SENSITIVITY = 3
- while True:
- x = accel.x()
- if x > SENSITIVITY:
- xlights[0].on()
- xlights[1].off()
- elif x < -SENSITIVITY:
- xlights[1].on()
- xlights[0].off()
- else:
- xlights[0].off()
- xlights[1].off()
- y = accel.y()
- if y > SENSITIVITY:
- ylights[0].on()
- ylights[1].off()
- elif y < -SENSITIVITY:
- ylights[1].on()
- ylights[0].off()
- else:
- ylights[0].off()
- ylights[1].off()
- pyb.delay(100)
- We start by creating a tuple of LED objects for the x and y directions. Tuples
- are immutable objects in python which means they can't be modified once they are
- created. We then proceed as before but turn on a different LED for positive and
- negative x values. We then do the same for the y direction. This isn't
- particularly sophisticated but it does the job. Run this on your pyboard and you
- should see different LEDs turning on depending on how you tilt the board.
|