[TPYBoard - Micropython之会python就能做硬件 5] 学习使用重力传感器及PWM

简介: 转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi            欢迎加入讨论群 64770604   一、实验器材 1、TPYboard V102板  一块 2、LED灯   一个 3、1602 屏 一块   二、重力传感器         TPYboard与pyboard一样,本身带一个重力传感器。

转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi            欢迎加入讨论群 64770604

 

一、实验器材

1TPYboard V102板  一块

2LED灯   一个

31602 屏 一块

 

二、重力传感器

        TPYboardpyboard一样,本身带一个重力传感器。该传感器能够感知到加速的变化加速力就是当物体在加速过程中作用在物体上的力,比如晃动、跌落、上升、下降等各种移动变化都能被转化为电信号

       TPYBoard使用的是MMA7660重力传感器,主要用于检测XYZ三个轴所受到的加速度大小。检测范围是-1.5g ~ 1.5g,其中,g为一个重力加速度。

 

 

 

 

 

三、重力传感器的使用

 这里,我们做一个简单的实验,利用重力传感器,来判断tpyboard板子的旋转方向。当tpyboard向右转动时,亮led2(板载),灭led3,当向左转动时,亮led3(板载),灭led2

具体代码如下:

# main.py -- put your code here!
import pyb

accel = pyb.Accel()
while 1:
    x = accel.x()
    y = accel.y()
    z = accel.z()
    print(x,y,z)
    if x==4 :
        pyb.LED(2).off()
        pyb.LED(3).off()
    if x>4 :
        pyb.LED(2).on()
        pyb.LED(3).off()
    if x<4:
        pyb.LED(3).on()
        pyb.LED(2).off()

实现效果:

 

四、利用重力传感器控制LED亮度

1、什么是PWM

   PWM:脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。PWM基本原理是控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。

  例如,把正弦半波波形分成N等份,就可把正弦半波看成由N个彼此相连的脉冲所组成的波形。这些脉冲宽度相等,都等于 ∏/n ,但幅值不等,且脉冲顶部不是水平直线,而是曲线,各脉冲的幅值按正弦规律变化。如果把上述脉冲序列用同样数量的等幅而不等宽的矩形脉冲序列代替,使矩形脉冲的中点和相应正弦等分的中点重合,且使矩形脉冲和相应正弦部分面积(即冲量)相等,就得到一组脉冲序列,这就是PWM波形。可以看出,各脉冲宽度是按正弦规律变化的。根据冲量相等效果相同的原理,PWM波形和正弦半波是等效的。对于正弦的负半周,也可以用同样的方法得到PWM波形。在PWM波形中,各脉冲的幅值是相等的,要改变等效输出正弦波的幅值时,只要按同一比例系数改变各脉冲的宽度即可,因此在交-直-交变频器中,PWM逆变电路输出的脉冲电压就是直流侧电压的幅值。根据上述原理,在给出了正弦波频率,幅值和半个周期内的脉冲数后,PWM波形各脉冲的宽度和间隔就可以准确计算出来。按照计算结果控制电路中各开关器件的通断,就可以得到所需要的PWM波形。

2、利用PWM调节LED灯亮度

   Tpyboard板子与pyboard是一致的,其pwmTimer的一种工作模式,它需要使用到TimerPin两个库。这里来看一下如何控制LED3(板载)的亮度。

代码:

from pyb import Pin, Timer

tm2=Timer(2, freq=100)
led3=tm2.channel(1, Timer.PWM, pin=Pin.cpu.A15)
led3.pulse_width_percent(10)

此时LED3的亮度较暗,见图:

将上面代码中的pulse_width_percent=10改为100,再来看一下效果,会发现LED3亮度明显增强。

代码:

from pyb import Pin, Timer

tm2=Timer(2, freq=100)
led3=tm2.channel(1, Timer.PWM, pin=Pin.cpu.A15)
led3.pulse_width_percent(100)

当然,也可以尝试改一下freq来试试,这样看是什么 效果?

 

3、micropython的标准库Timer

 (1)class pyb.Timer(id, ...):创建定时器对象,id范围是[1..14]

 (2)timer.init(*, freq, prescaler, period):定时器初始化。

 (3)freq:频率。

 (4)prescaler,预分频,[0-0xffff],定时器频率是系统时钟除以(prescaler + 1)。定时器2-712-14最高频率是84MHz,定时器18-11是   >168MHz

 (5)peroid,周期值(ARR)。定时器1/3/4/6-15[0-0xffff],定时器25[0-0x3fffffff]

 (6)mode,计数模式

   (7) Timer.UP - 0 ARR (默认)

    (8) Timer.DOWN - ARR 0.

    (9)Timer.CENTER - 0 ARR,然后到 0.

    (10)div,用于数值滤波器采样时钟,范围是1/2/4

    (11)callback,定义回调函数,和Timer.callback()功能相同

    (12)deadtime,死区时间,通道切换时的停止时间(两个通道都不会工作)。范围是[0..1008],它有如下限制: 

         0-128 in steps of 1.

        128-256 in steps of 2,

          256-512 in steps of 8,

        512-1008 in steps of 16

     deadtime的测量是用source_freq 除以 div,它只对定时器1-8有效。

   (13) timer.deinit(): 禁止定时器,禁用回调函数,禁用任何定时器通道

   (14) timer.callback(fun): 设置定时器回调函数

   (15) timer.channel(channel, mode, ...):设置定时器通道

          -channel,定时器通道号

          -mode,模式

          -Timer.PWMPWM模式(高电平方式)

          -Timer.PWM_INVERTEDPWM模式(反相方式)

          -Timer.OC_TIMING,不驱动GPIO

          -Timer.OC_ACTIVE,比较匹配,高电平输出

          -Timer.OC_INACTIVE,比较匹配,低电平输出

          -Timer.OC_TOGGLE,比较匹配,翻转输出

          -Timer.OC_FORCED_ACTIVE,强制高,忽略比较匹配

          -Timer.OC_FORCED_INACTIVE,强制低,忽略比较匹配

          -Timer.IC,输入扑捉模式

          -Timer.ENC_A,编码模式,仅在CH1改变时修改计数器

          -Timer.ENC_B,编码模式,仅在CH2改变时修改计数器

          -callback,每个通道的回调函数

          -pin,驱动GPIO,可以是None

    Timer.PWM 模式下的参数

         -pulse_width,脉冲宽度

         -pulse_width_percent,百分比计算的占空比

    Timer.OC 模式下的参数

         -compare,比较匹配寄存器初始值

          -polarity,极性

          -Timer.HIGH,输出高

          -Timer.LOW,输出低

    Timer.IC 模式下的参数(捕捉模式只有在主通道有效)

          -polarity

          -Timer.RISING,上升沿捕捉

          -Timer.FALLING,下降沿捕捉

          -Timer.BOTH,上升下降沿同时捕捉

    Timer.ENC 模式:

          -需要配置两个Pin

          .使用 timer.counter() 方法读取编码值

          .只在CH1CH2上工作(CH1NCH2N不工作)

          .编码模式时忽略通道号

 

 (16) timer.counter([value]): 设置或获取定时器计数值

 (17) timer.freq([value]):设置或获取定时器频率

 (18) timer.period([value]):设置或获取定时器周期

 (19) timer.prescaler([value]):设置或获取定时器预分频

 (20) timer.source_freq(): 获取定时器源频率(无预分频)

 

4、利用重力传感器控制LED亮度

 

  这里我们选用非板载LED,将一个LED接到X1A0)引脚,然后当板子向右倾斜时,LED越来越亮,当板子向左倾斜时,LED越来越暗。

LED接在了A0口,具体代码如下:

 

 

# main.py -- put your code here!
from pyb import Pin, Timer

tm2=Timer(2, freq=200)
led3=tm2.channel(1, Timer.PWM, pin=Pin.cpu.A0)
accel = pyb.Accel()
while 1:
    x = accel.x()
    print(x)
led3.pulse_width_percent(x*5)

 

  实际效果:

 

 

 

目录
相关文章
|
13天前
|
存储 API 数据安全/隐私保护
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
51 6
|
13天前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
|
21天前
|
存储 算法 API
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
137 82
|
21天前
|
Python
python pandas学习(一)
该代码段展示了四个主要操作:1) 删除指定列名,如商品id;2) 使用正则表达式模糊匹配并删除列,例如匹配订单商品名称1的列;3) 将毫秒级时间戳转换为带有时区调整的日期时间格式,并增加8小时以适应本地时区;4) 将列表转换为DataFrame后保存为Excel文件,文件路径和名称根据变量拼接而成。
24 3
|
2月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
3月前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
3月前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
3月前
|
存储 安全 索引
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
|
3月前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。
|
3月前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。

热门文章

最新文章

推荐镜像

更多