|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MicroPython教程之TPYBoard开发板加速度传感器
1 Y2 {: `/ R0 m% L- \0 Z( P3 Q 1、加速度传感器的使用
9 c! w) L+ F5 R 开发板上有一个能够检测角度和运动状态的加速度传感器(小封装小模块?)。X ,Y, Z 轴上各有不同的传感器。通过创建一个 pyb.Accel( ) 对象和调用 x( ) 方法可以获取加速度传感器的数值。萝卜教育tpyboard。com >>> accel = pyb.Accel() >>> accel.x(), d, v5 J1 C& ?* e/ Z, m& o
% {5 n! C/ {* K3 t+ k1 I. } 上述例子返回-30 到 30 之间的带符号的角度值。注意其测量结果不算精准,着意味着即使保持 tpyboard 的完全静止不动依旧会有测量数据出现。因此,x( ) 方法得到的数据不能当成精确值使用,而应视其为一定精度的范围值。萝卜教育tpyboard。com! f' `1 C- R2 M# ^3 {
倾斜开发板,通过加速度传感器点亮 LED 灯的 代码如下所示:( F8 ?: l4 d) M8 R a3 H4 G
- 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)
! h+ f& j5 n9 W! O9 i 上述代码中我们创建了 Accel 和 LED 两个对象,然后直接获得加速度传感器在 X 方向上的数值。如果 x 值的大小比定值 SENSITIVITY 大,LED 灯将被点亮,否则将被熄灭。循环中调用了 pyb.delay( ) 函数,否额当 x 的值接近 SENSITIVITY 时LED灯将闪烁得十分频繁。尝试在 tpyboard 开发板上运行该程序,直到左右倾斜开发板使 LED 灯亮或灭。萝卜教育tpyboard。com
2 J3 j3 R8 o3 K 练习:改变上述脚本使得倾斜的角度越大蓝色的LED灯更加亮。 提示: 你需要重新调整数值,其大小在 0 到 255 之间2 t- ^+ F! Z1 K: A3 ^. C L# u
2、制作水平仪 上述例程仅只使用了 x 方向上的角度值,然而我们可以通过 y( ) 函数的值和更多的LED灯将 tpyboard 开发板打造成一个水平仪。" @; e% I& R' @0 [) n% `7 D
xlights = (pyb.LED(2), pyb.LED(3))" L: v) Q( d3 L1 i3 ~
ylights = (pyb.LED(1), pyb.LED(4)). S' @3 w4 s( @. d. F
n& i( n0 b1 U. a9 C
accel = pyb.Accel()6 j. {3 y) b. }+ l& K
SENSITIVITY = 3
1 u7 o: n: |$ s/ u" q) X3 F+ t! X5 P8 Z( n# @, ]
while True:/ g9 ^9 s" v. l* ?
x = accel.x(); d( X$ h5 v# z( n$ |0 ]" v9 ?
if x > SENSITIVITY:
. d& L& p0 w4 i7 X4 y1 ? xlights[0].on()
) r. c1 F) m: W, L7 m xlights[1].off()6 R4 U9 v; w% e. p2 d& ~8 U
elif x < -SENSITIVITY:
1 l& H6 c) ]' p; V, n xlights[1].on()
9 v4 c& o- l% L) O( o2 k6 E. k xlights[0].off()( u7 j8 o- S% ?, B
else:
! {# N, S1 o+ V9 Q# A xlights[0].off()
2 K+ S, o- V/ x3 Y xlights[1].off()
6 X: t7 y- V6 s) d- `
- a4 g6 s! U2 h; ]3 E y = accel.y(). |4 F, e. Q" y% w* O1 [) O: |
if y > SENSITIVITY:! u i# j9 w4 u8 b8 K3 D# I
ylights[0].on()
! }/ n7 c# f# `. B) j ylights[1].off()
5 ?4 v0 U2 y& L% \4 v elif y < -SENSITIVITY:6 Q6 `6 o+ r; \6 J G
ylights[1].on()
8 Y; C( Q4 s( } ylights[0].off()
4 |0 h. h/ q) o* \9 r6 z ?8 k! x( X! X else:( K3 S7 l: ^# Z% }( Z! `/ L& }
ylights[0].off()& B/ A" p" z" x. ?
ylights[1].off()2 Q [ r6 M+ A1 @' L
- O8 e6 E+ C* r1 ~
pyb.delay(100)$ \ ~# T$ ], _+ S7 V x
- y+ j. c" M/ T" X9 A, e一开始我们创建了 一个包含 x 和 y 方向上的 LED 对象的元组。python 语言中元组是不可更改的对象,即意味着一旦创建后就不能被改变。然后我们像上个例程开始的那样,但当 x 的值为正或为负时分别点亮不同的 LED 灯。y 方向上也是同样的原理。这看起来不算很牛 B 但确实实现了水平仪的功能。在你的 tpyboard 板上运行这个程序,现象为向不同方向倾斜开发板点亮不同的 LED 灯。+ B+ k/ O4 T5 h* V/ j6 f8 g
% V- [2 x6 X* h7 K" k% R% w/ Y
- ?1 B- u( N3 f# P/ d
) c% X$ }6 ]6 S/ n; ]
/ L! k) F8 O; Q
6 X3 v" a' ~7 n4 h K; w
' ]* a0 M% x7 s0 k5 G/ A- X; X7 M( T; O) L( k; V4 y
( N3 y O( |3 s) E" s& |0 U( @, o2 B4 t
% u; a$ c, j0 n) `
% W8 o' O: ~/ D4 @+ }
3 K3 Z, P u- ^* n
% D5 L7 \9 y- R! V7 j% M1 d6 k& [9 `- G$ W0 Z6 A @
4 p- E+ @) N+ |( }5 Y( Y# T8 j, a+ h" S. t: {3 J
6 L- T# Z/ N: z% e" _+ N( |; z& W
|
|