找回密码
 注册
关于网站域名变更的通知
查看: 686|回复: 1
打印 上一主题 下一主题

MicroPython教程之TPYBoard开发板加速度传感器

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-23 10:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-20 07:19 , Processed in 0.125000 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表