基于“人工智能和物联网+”的创新产品设计

陈英、万幸、王倩、李华兵、黄敏、强永军、赵鑫、罗万波、朱里红

目录

  • 1 教学录像
    • 1.1 课程负责人-陈英
    • 1.2 主讲教师-罗万波
    • 1.3 主讲教师-万幸
    • 1.4 主讲教师-王倩
    • 1.5 主讲教师-潘绍飞
  • 2 课程标准与学习指南
    • 2.1 课程标准
    • 2.2 学习指南
  • 3 新技术在创新创业中的应用
    • 3.1 3D打印技术简介
    • 3.2 物联网技术简介
    • 3.3 人工智能技术简介
    • 3.4 智能硬件平台选型
  • 4 TPYBoard快速入门
    • 4.1 TPYBoard连接与下载
    • 4.2 TPYBoard参数和引脚图
    • 4.3 Thonny 开发环境
    • 4.4 TPYBoard 板级功能
    • 4.5 TPYBoard GPIO
    • 4.6 TPYBorad 定时器
  • 5 智能小车设计制作
    • 5.1 智能小车舵机与电机驱动设计
    • 5.2 红外防坠落小车设计制作
    • 5.3 红外寻迹无线小车设计制作
    • 5.4 无线蓝牙智能小车设计制作
    • 5.5 加速度无线小车设计制作
  • 6 智能语音3D小狗的设计与制作
    • 6.1 3D打印技术应用
    • 6.2 智能语音技术
    • 6.3 需求分析与产品开发
    • 6.4 “智能语音3D小狗”产品策划
  • 7 智能心率监测预报仪
    • 7.1 智能心率监测预报仪需求分析与技术需求
    • 7.2 智能心率监测预报仪软硬件开发
    • 7.3 智能心率监测预报仪产品与策划
  • 8 “停车效率专家”- 智能停车系统设计
    • 8.1 智能停车场管理系统组成及产品选型
    • 8.2 智能停车系统硬件通信接口程序设计
    • 8.3 停车智能引导程序设计
    • 8.4 “停车效率专家”产品策划
  • 9 创新产品的创业指导
    • 9.1 创业者和创业者团队
    • 9.2 创业项目计划书编制及演练及展示
    • 9.3 创意产品营销及演练
  • 10 案例
    • 10.1 3D打印技术案例
    • 10.2 物联网技术案例
    • 10.3 人工智能技术案例
    • 10.4 智能汽车竞赛赛车设计与制作案例
    • 10.5 “停车效率专家”- 智能停车系统设计案例
    • 10.6 智能语音3D小狗的设计与制作案例
    • 10.7 智能心率监测预报仪案例
    • 10.8 创业者和创业者团队案例
    • 10.9 创业项目计划书编制及演练及展示案例
    • 10.10 创意产品营销及演练案例
  • 11 实训实习项目
    • 11.1 物联网技术小项目实操-模拟红绿灯
    • 11.2 人工智能技术实训项目
    • 11.3 智能汽车竞赛赛车组装与调试
    • 11.4 智能汽车竞赛赛车程序调试
    • 11.5 智能停车系统硬件通信接口程序设计
    • 11.6 停车智能引导程序设计
    • 11.7 智能语音3D小狗项目实操-3D打印小型纪念品
    • 11.8 智能语音3D小狗项目实操-情感分类问题实战
    • 11.9 智能语音3D小狗项目实操-智能语音3D小狗制作
    • 11.10 智能语音3D小狗项目实操-智能语音小狗产品策划
    • 11.11 智能心率监测预报仪项目实操-硬件选型与3D打印手环
    • 11.12 智能心率监测预报仪项目实操-智能心率监测预报仪软硬件开发
    • 11.13 智能心率监测预报仪项目实操-智能心率监测预报仪产品与策划
    • 11.14 创业案例分析实训项目
    • 11.15 创业团队组建实训项目
    • 11.16 创业计划书编制及仿真模拟实训项目
    • 11.17 创业计划书的方案展示实训项目
    • 11.18 自媒体营销方案设计实训项目
    • 11.19 产品路演及实际推广实训项目
  • 12 习题
    • 12.1 3D打印技术习题
    • 12.2 物联网技术习题
    • 12.3 人工智能技术习题
    • 12.4 智能汽车竞赛赛车设计与制作习题
    • 12.5 “停车效率专家”- 智能停车系统习题
    • 12.6 智能语音3D小狗的设计与制作
    • 12.7 智能心率监测预报仪
    • 12.8 创业者和创业者团队习题
    • 12.9 创业项目计划书编制及演练及展示习题
    • 12.10 创意产品营销及演练习题
  • 13 教案节选
    • 13.1 3D打印技术
    • 13.2 智能停车场管理系统组成及产品选型
    • 13.3 智能心率监测预报仪软硬件开发
    • 13.4 创业者经典案例剖析
TPYBorad 定时器

Timer类 – 控制内部定时器


定时器可用于多种任务。目前,仅实现了最简单的情况:周期性调用函数。

每个定时器都包含一个以某一比率计数的计数器。其计数的频率为外设时钟频率(Hz为单位)除以定时器预分频器。 当计数器到达定时器周期时,会触发事件,且计数器重置为0。通过使用回调函数,定时器事件可调用一个Python函数。

以固定频率切换LED的用法示例:

tim = pyb.Timer(4)              # create a timer object using timer 4  使用定时器4创建一个定时器对象
tim.init(freq=2)                # trigger at 2Hz 以2Hz触发
tim.callback(lambda t:pyb.LED(1).toggle())

在回调中使用命名函数的示例:

def tick(timer):                # we will receive the timer object when being called 当被调用时,我们会收到定时器对象
    print(timer.counter())      # show current timer's counter value 示当前定时器的计时值
tim = pyb.Timer(4, freq=1)      # create a timer object using timer 4 - trigger at 1Hz 使用定时器4创建一个定时器对象-以1Hz触发
tim.callback(tick)              # set the callback to our tick function 将回调设置为tick函数

进一步举例:

tim = pyb.Timer(4, freq=100)    # freq in Hz 频率单位为Hz
tim = pyb.Timer(4, prescaler=0, period=99)
tim.counter()                   # get counter (can also set) 获取定时器(设置也可)
tim.prescaler(2)                # set prescaler (can also get) 设置分频数(获取也可)
tim.period(199)                 # set period (can also get) 设置周期(获取也可)
tim.callback(lambda t: ...)     # set callback for update interrupt (t=tim instance) 设置回调以更新中断
tim.callback(None)              # clear callback 清空回调

注意: 定时器(1)用于摄像头。同样地,定时器(5)控制servo驱动,定时器(6)用于ADC/DAC读取/写入。建议在您的程序中使用其他定时器。

注意: 内存无法在回调(中断)过程中分配,因此在回调中引发的异常不能提供大量信息。如何克服这一限制,请参见:micropython.alloc_emergency_exception_buf 。

构造函数

  • class pyb.Timer(id...)

创建一个给定ID的新定时器对象。若给定额外参数,定时器由 init(...) 初始化。ID可为1-14。

方法

  • Timer.init(*freqprescalerperiod)

初始化定时器。初始化必须通过频率(单位:Hz)或通过预标量和周期进行:

tim.init(freq=100)                  # set the timer to trigger at 100Hz 设置定时器在100Hz触发
tim.init(prescaler=83, period=999)  # set the prescaler and period directly 直接设置分频数与周期

键值参数:

  • freq — 指定定时器的周期性频率。您可以将此视为定时器经过一个完整周期的频率。

  • prescaler  [0-0xffff] – 指定要加载到定时器的PSC中的值。定时器时钟源除以( prescaler + 1 )以得出定时器时钟。


定时器2-7和12-14的时钟源为84Hz(pyb.freq()[2] * 2),定时器1和8-11的时钟源为168Hz(pyb.freq()[3] * 2)。


  • period [0-0xffff] 用于定时器1、3、4、6-15。[0-0x3fffffff]用于定时器2和5。


指定要加载到定时器的ARR中的值。该值决定定时器的周期(即当计数器循环时)。定时器将在 period + 1 定时器时钟循环后滚动。


mode 可为下列之一:

    • Timer.UP - 将定时器配置为从0至ARR(默认)

    • Timer.DOWN - 将定时器配置为从ARR至0。

    • Timer.CENTER - 将定时器配置为从0至ARR再到0。

  • div 可为1或2或4。划分定时器时钟,以确定数字滤波器所使用的采样时钟。

  • callback - 依据Timer.callback()

  • deadtime - 指定“dead”的数量或在免费通道(两通道须为非活动通道)间转换的无效时间。


deadtime - 可为一个介于0-1008间的整数,并满足下列要求:0-128按照步骤1进行,128-256按照步骤2进行,256-512按照步骤8进行,512-1008按照步骤16进行。deadime - 测量以div时钟滴答划分的 source_freq 滴答。Deadtime - 仅适用于定时器1和8。

您必须指定频率或周期和分频数。

  • Timer.deinit()

    反初始化定时器。

    禁用回调(以及关联的中断请求)。

    禁用任何通道回调(以及关联的中断请求)。停用定时器,并禁用定时器外围设备。

  • Timer.callback(fun)

    设置定时器触发时所调用的函数。 fun 是被传递的1参数,即定时器对象。若 fun 为 None ,则禁用回调。

  • Timer.channel(channelmode...)

    若只有一个通道被传递,则返回一个先前初始化的通道对象(若无先前通道,则 None )。

    另外,初始化并返回一个定时器通道对象。

    每一通道都可配置来进行脉宽调制、输出比较和输入捕捉。所有通道公用同一基本定时器,即共用同一定时器时钟。

    键值参数:

    Timer.PWM模式的键值参数:

    Timer.OC模式的键值参数:

    Timer.IC模式的可选键值参数:

    注意:捕捉仅在主通道运行,而不适用于免费通道。

    Timer.ENC模式注意事项:

    PWM Example:


    timer = pyb.Timer(2, freq=1000)
    ch2 = timer.channel(2, pyb.Timer.PWM, pin=pyb.Pin.board.X2, pulse_width=8000)
    ch3 = timer.channel(3, pyb.Timer.PWM, pin=pyb.Pin.board.X3, pulse_width=16000)



    需2个引脚,其中一个或两个需使用引脚API配置为使用适当的定时器AF。

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

    仅在CH1和CH2上运行(而非CH1N或CH2N)。

    设置编码模式时忽略通道数。

Timer.RISING - 捕捉上升沿。

Timer.FALLING - 捕捉下降沿。

Timer.BOTH - 捕捉上升沿和下降沿。

polarity 可为下列之一:

Timer.HIGH - 输出为高电平有效

Timer.LOW - 输出为低电平有效

compare - 决定比较寄存器的初始值。

polarity 可为下列之一:

    • pulse_width - 决定使用的初始脉宽值。

    • pulse_width_percent - 决定使用的初始脉宽值百分比。

    • Timer.PWM — 配置PWM模式下的定时器(高电平有效)。

    • Timer.PWM_INVERTED — 配置PWM模式下的定时器(低电平有效)。

    • Timer.OC_TIMING — 表示未驱动引脚。

    • 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改变时改变。

    • Timer.ENC_AB — 配置编码器模式下的定时器。定时器只在CH1和CH2改变时改变。

    • mode 可为下列之一:

    • callback - 依据TimerChannel.callback()。

    • pin 无(默认值)或一个引脚对象。若指定(非默认值),将导致为此定时器通道配置指定引脚的替代函数。若该引脚不支持任何该定时器通道的替代函数,则将引发错误。

  • Timer.counter([value])

    获取或设置定时器。

  • Timer.freq([value])

    获取或设置定时器频率(改变分频数与周期)。

  • Timer.period([value])

    获取或设置定时器周期。

  • Timer.prescaler([value])

    获取或设置定时器分频数。

  • Timer.source_freq()

    获取时钟源的频率。


TimerChannel类 — 为定时器建立一个通道


定时器通道用来使用定时器生成/捕捉信号。

使用Timer.channel()方法来创建定时器对象。

方法

  • timerchannel.callback(fun)

    设置定时器触发时调用的函数。fun 是被传递的1参数,即定时器对象。若 fun 为 None ,则禁用回调。

    timerchannel.capture([value])

    获取或设置与通道相关的获取值。捕捉、比较和脉宽都是同一函数的别名。捕捉是通道在输入捕捉模式下的所使用的逻辑名。

  • timerchannel.compare([value])

    获取或设置与通道相关的比较值。捕捉、比较和脉宽都是同一函数的别名。比较是通道在输出比较模式下的所使用的逻辑名。

  • timerchannel.pulse_width([value])

    获取或设置与通道相关的脉宽值。捕捉、比较和脉宽都是同一函数的别名。脉宽是通道在PWM模式下的所使用的逻辑名。

    在边沿对齐模式下, period + 1 的脉宽与100%的任务周期相对应。在中心对齐模式下, period 的脉宽与100%的任务周期相对应

  • timerchannel.pulse_width_percent([value])

    获取或设置与通道相关的脉宽百分比。该数值(介于1-100间)设置脉冲活动的定时器周期的百分比。该值可为整数或更为准确的浮点值。例如:取值25则设置任务周期的25%。


    视频:TPYBoard定时器使用