新闻  |   论坛  |   博客  |   在线研讨会
呼啦圈凭实力“火出圈”?小张被众人围观!
智能物联研习社 | 2021-10-22 15:02:17    阅读:529   发布文章

最近,杭州迎来了一波冷空气,加之疫情影响,很多人都无法出门运动,大家纷纷选择居家健身。


涂鸦“攻城狮”小张平时都在抱怨自己的小肚腩,听隔壁女同事推荐:“转呼啦圈不仅可以甩掉小肚腩,瘦身塑形,还能为久坐后的上班族缓解疲劳,舒缓筋络!”


这不,小张立马亲手 DIY 了智能呼啦圈~


01

功能展示


功能定义

说明

运动模式选择(支持本地与App)

普通模式(默认)

目标模式

运动目标设定(支持App)

支持设定运动目标

智能计数(支持本地与App)

支持计算圈数、运动时间、卡路里

运动完成提醒(支持本地)

支持运动目标完成提醒

运动记录(支持App)

支持记录30天内运动数据


02

硬件方案


1.硬件方案框架


2.硬件方案介绍

  • 设备连接App连接方式

我们常用的手机上有Wi-Fi和蓝牙2种连接方式 ,Wi-Fi连接速度快、范围广,但是耗电量过大,还会占用手机Wi-Fi通道。而蓝牙连接低功耗、低成本连接方便,适合短距离连接。恰好可以满足呼啦圈这类运动设备的数据传输和距离要求。


  • 液晶屏选型

由于定制液晶屏的费用略高,对显示没有很高要求的开发者可以自行购买一块偏压比为1/2,供电电压为3V的3位数字显示液晶屏。


  • IO口模拟驱动液晶屏


外围需要在COM和PIN口上加上拉、下拉各一个电阻,阻值选择了100K,IO口可设置为推挽输出和浮空输入的状态。


  • 指示灯与按键


由于液晶屏只有现实3位数字信息,因此在液晶屏显示旁边增加3个指示灯,用来指示液晶屏显示的是时间值,计数值还是能量值。界面上有两个按键,用于模式选择和数据复位。


原理图如下:


点击,即可查看完整开发资料!

https://developer.tuya.com/cn/demo/smart-hula-loop?_source=e807d3bfba73c7f4fada59e31d0952a3

( 注:开发资料文末,点击〖一键创建产品〗即可复制割草机产品。)



03

嵌入式方案


1.模块划分

根据呼啦圈功能设定,将程序划分为以下七大模块:


No.

模块

处理内容

1

外设驱动组件

按键、霍尔传感器、指示灯、段码液晶屏的驱动程序

2

设备基础服务

设备状态迁移处理、模式切换、本地定时等

3

显示处理服务

段码液晶屏显示内容更新和状态控制、LED状态控制

4

数据处理服务

运动数据(计时、圈数、卡路里)的更新和存储

5

用户事件处理

按键事件检测和处理、霍尔传感器事件检测和处理

6

定时事件处理

各定时事件的判断和处理

7

联网相关处理

配网相关处理、数据上报与接收处理、云端时间获取


2.软件框图




  • 外设驱动


为方便后续程序扩展,可以先将各外设驱动部分的代码分别编写成组件。


本demo所使用外设的基本情况如下:


外设

数量&规格

驱动方式

按键

2个

开关量检测

霍尔传感器

1个;开关型

开关量检测

发光二极管

3个;红色

电平或PWM驱动

段码液晶屏

1个;3位数字“8”,4个COM口,6个SEG口

COM口和SEG口两端施加一定压差的交流电,压差大于阈值时对应笔段点亮


  • 设备基础服务


设备基础服务模块包括设备状态迁移、模式选择、模式切换、本地定时等功能处理。功能需求中已经对可选的运动模式即模式迁移方式进行了定义,这里再对设备状态进行如下定义:


设备状态

含义

处理

未使用

用户未使用呼啦圈

保持熄屏,实时数据清除

使用中

用户未转动呼啦圈

保持亮屏

转动中

用户转动呼啦圈

开始转动时点亮屏幕,转动过程:亮屏6秒,熄屏5分钟

复位

设备复位

所有数据清除


  • 显示处理服务


显示处理模块包括显示屏内容的设定、显示屏状态控制和指示灯状态控制。

根据功能设定,显示内容可以分为以下4个部分:


显示模式

段码液晶屏显示

LED显示

普通模式界面

显示实时数据,按”实时计时->实时圈数->实时卡路里“顺序切换

点亮数据对应指示灯

目标模式界面

当日目标剩余时长≠0时,显示该数据,否则显示”---“

点亮计时指示灯

模式选择界面

普通模式显示”010“,目标模式显示”020“

全灭

复位提示界面

显示”000“

全灭


  • 数据处理服务


智能呼啦圈相关的运动数据设定如下:


No.

数据

类别

数值范围

说明

1

实时计时

实时

0-999

可上报

2

实时圈数

实时

0-999

可上报

3

实时卡路里

实时

0-999

可上报

4

当日累计计时

累计

0-1440

可上报

5

当日累计圈数

累计

0-99999

可上报

6

当日累计卡路里

累计

0-999

可上报

7

当月累计计时

累计

0-44640

仅用于计算当月剩余

8

30天累计计时

累计

0-43200

可上报

9

30天累计圈数

累计

0-9999999

可上报

10

30天累计卡路里

累计

0-99999

可上报

11

当日目标时长

目标

0-45

云端下发

12

当月目标时长

目标

0-1350

云端下发

13

当日目标剩余

剩余

0-45

可上报

14

当月目标剩余

剩余

0-1350

可上报

15

每日累计时长

累计

0-1440

30个数据,仅用于计算30天累计

16

每日累计圈数

累计

0-99999

30个数据,仅用于计算30天累计

17

每日累计卡路里

累计

0-999

30个数据,仅用于计算30天累计


  • 用户事件处理


用户可触发的部件有按键和霍尔传感器,前者用于模式切换、配网请求和设备复位,后者用于检测呼啦圈转动圈数。


根据功能需求描述,用户事件处理模块的处理内容梳理如下:


事件

事件类型

限制条件

处理内容

触发模式键

短按

模式选择界面

切换“预选模式”

其他

进入“模式选择”处理

长按2秒

模式选择界面

模式更新为“预选模式”,数据上报

长按5秒

-

允许配网

触发复位键

短按

模式选择界面

退出“模式选择”处理

长按2秒

【使用中】

切换到复位提示界面

触发任意键

任意类型

熄屏状态

点亮屏幕

亮屏状态

复位“熄屏计时”和“停用计时”

磁铁接触霍尔

短触

-

数据更新,→【转动中】,“复位停转计时”


  • 定时事件处理


本demo的功能设定中涉及较多的定时需求,具体情况整理如下:


No.

定时器名称

执行条件

定时时间

超时处理内容

1

屏幕熄灭确认

亮屏状态、【转动中】、无按键事件

6秒

熄灭屏幕

2

屏幕点亮确认

熄屏状态、【转动中】

5分钟

点亮屏幕

3

停止转动确认

【转动中】、无霍尔事件

3秒

设置设备状态为【使用中】

4

停止使用确认

【使用中】、无按键事件

30秒

设置设备状态为【未使用】

5

数据显示切换

普通模式界面

2秒

切换显示数据

6

计时数据更新

【转动中】

1分钟

更新计时数据并上报

7

本地时间更新

-

1秒

更新本地时间、检查日期变更

8

数据上报更新

-

5秒

上报圈数&卡路里数据

9

配网等待结束

设备未被用户绑定且正在等待配网

1分钟

禁止配网

  • 联网处理


要实现和云端进行数据交互,首先要使设备配网。配网功能已经通过Bluetooth SDK实现,配网等待处理和配网提醒机制如下:


No.

设备状态

执行动作

配网指示灯

1

上电时,检测到已被用户绑定

不等待配网(保持蓝牙广播)

不闪烁

2

上电时,检测到未被用户绑定

开始等待配网(保持蓝牙广播)

开始闪烁

3

长按模式键5秒时

开始等待配网,打开蓝牙广播

开始闪烁

4

开始等待配网1分钟后,检测到仍未被用户绑定

停止等待配网,关闭蓝牙广播

停止闪烁

5

开始等待配网后1分钟内,检测到已被用户连接

停止等待配网(保持蓝牙广播)

停止闪烁

6

检测到被用户解绑

不等待配网,关闭蓝牙广播

不闪烁


  • 优化处理


1.关闭日志

由于I/O资源有限,在完成功能调试后,需关闭日志打印功能,可通过将tuya_ble_app_init()函数中的elog_set_output_enabled(true);语句修改为elog_set_output_enabled(false);来实现禁止调试信息输出,同时还可以将custom_tuya_ble_config.h中TUYA_APP_LOG_ENABLE的值修改为0来关闭应用日志,以减少代码空间。


2.低功耗处理

由于呼啦圈使用电池供电,为避免电量消耗过快,需对设备进行低功耗处理。

BTU模组原厂芯片的电源管理模块提供了3种低功耗工作模式:


工作模式

特点

唤醒方式

暂停模式

MCU暂停,PM 模块处于活动状态,所有 SRAM 仍可访问,RF 收发器、音频和 USB 等模块断电,唤醒后从暂停处继续执行

PAD/32k Timer/RESET Pin

SRAM保留的深度睡眠模式

PM 模块处于活动状态,除两个 8KB 和一个 16KB 保留 SRAM 外,大多数模拟和所有数字模块都掉电

PAD/32k Timer/RESET Pin

深度睡眠模式

只有 PM 模块处于活动状态,而包括保持 SRAM 在内的大多数模拟和所有数字模块都处于断电状态

PAD/32k Timer/RESET Pin


对于BTU模组来说,这里的SRAM保留指的是 0x840000 - 0x847FFF 的存储空间,目前协议栈和应用都是默认优先使用这块空间,从编译生成的.lst文件中也可以看到相关数据都存储在该范围内。


为了不影响呼啦圈的本地定时功能,这次选择了SRAM保留的深度睡眠模式作为低功耗模式,基本处理思路如下:


  • 在设备[未使用]时,设置唤醒方式为引脚唤醒或定时器唤醒,然后进入SRAM保留的深度睡眠模式;

  • 当设备被引脚唤醒时:更新本地时间后,设备状态切换到[使用中];

  • 当设备被定时器唤醒时:更新本地时间后再次睡眠。


点击,即可查看完整开发资料!

https://developer.tuya.com/cn/demo/smart-hula-loop?_source=e807d3bfba73c7f4fada59e31d0952a3

( 注:开发资料文末,点击〖一键创建产品〗即可复制割草机产品。)


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客