|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MicroPython教程之TPYBoard开发板加速度传感器* v1 S" O7 h- N
1、加速度传感器的使用
$ X" x3 t: F( v8 r( J* [ 开发板上有一个能够检测角度和运动状态的加速度传感器(小封装小模块?)。X ,Y, Z 轴上各有不同的传感器。通过创建一个 pyb.Accel( ) 对象和调用 x( ) 方法可以获取加速度传感器的数值。萝卜教育tpyboard。com >>> accel = pyb.Accel() >>> accel.x()
. U7 k* X8 x4 P& x* j, E9 Y. |, ]
上述例子返回-30 到 30 之间的带符号的角度值。注意其测量结果不算精准,着意味着即使保持 tpyboard 的完全静止不动依旧会有测量数据出现。因此,x( ) 方法得到的数据不能当成精确值使用,而应视其为一定精度的范围值。萝卜教育tpyboard。com
% ~- S8 L5 u. \3 K 倾斜开发板,通过加速度传感器点亮 LED 灯的 代码如下所示:6 F: {1 ^" \, d, F
- 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)( ?- I1 d# w- R5 P2 `
上述代码中我们创建了 Accel 和 LED 两个对象,然后直接获得加速度传感器在 X 方向上的数值。如果 x 值的大小比定值 SENSITIVITY 大,LED 灯将被点亮,否则将被熄灭。循环中调用了 pyb.delay( ) 函数,否额当 x 的值接近 SENSITIVITY 时LED灯将闪烁得十分频繁。尝试在 tpyboard 开发板上运行该程序,直到左右倾斜开发板使 LED 灯亮或灭。萝卜教育tpyboard。com
5 b& ]8 x7 M* ^" a: V- ^ 练习:改变上述脚本使得倾斜的角度越大蓝色的LED灯更加亮。 提示: 你需要重新调整数值,其大小在 0 到 255 之间
; @5 ]+ A G3 y 2、制作水平仪 上述例程仅只使用了 x 方向上的角度值,然而我们可以通过 y( ) 函数的值和更多的LED灯将 tpyboard 开发板打造成一个水平仪。
" f9 r& n$ ^" x8 m# exlights = (pyb.LED(2), pyb.LED(3))
! X4 u* n4 Z1 S( j7 l3 fylights = (pyb.LED(1), pyb.LED(4))0 M! `& _$ y6 w6 }
F2 I8 D$ T# n6 r' Jaccel = pyb.Accel()! f( ^& z, w+ F
SENSITIVITY = 3! H& G: Y% a. n' y; u. O. d" _
' _/ [* Q' a6 ]6 D" T3 n
while True:' b- j# }8 ^4 U5 t
x = accel.x()
. F4 J) e* D6 \& O, n* f, z( }1 d) | if x > SENSITIVITY:
( I T' O L, [' U M( C1 n2 h xlights[0].on()
/ T8 @: E6 e8 V! C/ e# m xlights[1].off()% }" F4 Y7 ?: K/ Y
elif x < -SENSITIVITY:
4 {# D) Q/ W0 U8 V2 O/ P/ R xlights[1].on()$ K0 H3 D6 Y- x: g! N0 _) n+ d
xlights[0].off()1 }6 y8 I/ r8 M9 }1 W
else:
3 `. t: R; ~* M1 `$ m: v, L3 g xlights[0].off()6 W" q; T c" _. s: J- s' A
xlights[1].off()
! I9 Y; D6 R4 [) K5 G. }3 p% P
y = accel.y()
6 k; T7 Y" }; G if y > SENSITIVITY:
; `8 b5 X/ G$ d6 n2 ]. [" ` ylights[0].on()- f2 h- _: `! c) g8 L, Q3 L! E
ylights[1].off()
: z, g! C! ?5 D elif y < -SENSITIVITY:
$ M6 M" y3 B0 b' R% O ylights[1].on()- D/ W; \+ W J) C3 I
ylights[0].off()
+ S* I. w6 U% `: C else:
4 i6 C; E, d. [. n2 n ylights[0].off()# e. A; k! e3 z3 f2 n
ylights[1].off()
" \- o4 G1 Y! J6 w6 O* K8 o$ _" D+ a7 a3 |7 v* g
pyb.delay(100)
- e, r( O& P6 N, C/ f3 r8 x
/ V& x4 M! A' v# u) `0 q5 k# s. T! G一开始我们创建了 一个包含 x 和 y 方向上的 LED 对象的元组。python 语言中元组是不可更改的对象,即意味着一旦创建后就不能被改变。然后我们像上个例程开始的那样,但当 x 的值为正或为负时分别点亮不同的 LED 灯。y 方向上也是同样的原理。这看起来不算很牛 B 但确实实现了水平仪的功能。在你的 tpyboard 板上运行这个程序,现象为向不同方向倾斜开发板点亮不同的 LED 灯。
1 F" s5 H! X9 H/ l, L2 U+ i$ v f
5 }) R6 t N& d9 W
' F5 Q0 S7 W/ [( [/ m1 k+ S5 Q8 y# V; q
4 {4 e) h; ^) A" ~
2 @+ B6 m; _7 ^( w9 y0 N
4 C" I. Y, d; S# Q: q/ O5 n! _
/ T+ |+ G( y4 [/ ^% |, @' j( D4 g5 ^8 ?* N$ {5 P" a: d% z, {2 j
! q [7 [$ p; ^ F# Q
8 E& D: X) a! \( f, x$ q
4 g7 I" {, W. C/ c* |$ L9 B( H
, \, D# _2 b. Z8 h) K6 K- `4 }5 Q! T# S9 S
$ ~6 c% T/ F, o6 e1 o( T& Z% x! j/ {# e5 g, d* @5 P
" Q- c$ J* u1 }4 ^# d+ H* c6 h
! m3 B* o9 }7 Y% ~2 h" _
+ B- Z, F6 `* K3 Y1 [ |
|