【可进入原文获取智能呼啦圈完整软硬件开源资料智能呼啦圈_三明治开发社区的博客-CSDN博客 】
又是在电脑前连坐几小时的一天,和大部分上班族一样,由于工作原因没空去健身房,也抽不出多少时间进行户外锻炼,为了不让自己的“小蛮腰”一天天变粗,下单了一款呼啦圈。和传统呼啦圈不同的是这款呼啦圈体型小巧,带进办公室完全不是问题。而且呼啦圈大小可根据腰围调节,不用担心转的过程中掉下来,比较适合在室内进行运动。
智能呼啦圈功能设定:
|
功能定义 |
说明 |
|
运动模式选择(支持本地和App) |
普通模式(默认)目标模式 |
|
运动目标设定(支持App) |
支持设定运动目标 |
|
智能计数(支持本地和App) |
支持计算圈数、运动时间、卡路里 |
|
运动完成提醒(支持本地) |
支持运动目标完成提醒 |
|
运动记录(支持App) |
支持记录30天内运动数据 |
一.智能呼啦圈硬件方案
1.硬件方案框架

2.硬件方案介绍
- 设备连接App连接方式
蓝牙连接方式功耗低,成本低,连接方便,适合短距离连接。恰好可以满足呼啦圈这类运动设备的数据传输和距离要求。
- 液晶屏选型
由于定制液晶屏的费用略高,对显示没有很高要求的开发者可以自行购买一块偏压比为1/2,供电电压为3V的3位数字显示液晶屏。
- IO扣模拟驱动液晶屏
外围需要在COM和PIN口上加上拉、下拉各一个电阻,阻值选择了100K,IO口可设置为推挽输出和浮空输入的状态。
- 指示灯与按键
由于液晶屏智能显示3位数字信息,我们在液晶屏显示旁边增加3个指示灯,用来指示液晶屏显示的是时间值,计数值还是能量值。同时界面上有两个按键,用于模式选择和数据复位。
- 硬件方案原理图如下:

二.智能呼啦圈嵌入式方案
1.模块划分
根据呼啦圈功能设定,可以将程序划分为以下七大模块:
|
模块 |
模块 |
处理内容 |
|
外设驱动组件 |
外设驱动组件 |
按键、霍尔传感器、指示灯、段码液晶屏的驱动程序 |
|
设备基础服务 |
设备基础服务 |
设备状态迁移处理、模式切换、本地定时 |
|
显示处理服务 |
显示处理服务 |
段码液晶屏显示内容更新和状态控制、LED状态控制 |
|
数据处理服务 |
数据处理服务 |
运动数据(计时、圈数、卡路里)的更新和存储 |
|
用户事件处理 |
用户事件处理 |
按键事件检测和处理、霍尔传感器事件检测和处理 |
|
定时事件处理 |
定时事件处理 |
各定时事件的判断和处理 |
|
联网相关处理 |
联网相关处理 |
配网相关处理、数据上报与接收处理、云端时间获取 |
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天累计 |
- 用户事件处理
用户可触发的部件有按键和霍尔传感器,前者用于模式切换、配网请求和设备复位,后者用于检测呼啦圈转动圈数。根据功能需求描述,用户事件处理模块的处理内容梳理如下:
- 定时事件处理
本demo的功能设定中涉及较多的定时需求,具体情况整理如下:
|
No. |
定时器名称 |
执行条件 |
定时时间 |
超时处理内容 |
|
1 |
屏幕熄灭确认 |
亮屏状态、【转动中】、无按键事件 |
6秒 |
熄灭屏幕 |
|
2 |
屏幕点亮确认 |
熄屏状态、【转动中】 |
5分钟 |
点亮屏幕 |
|
3 |
停止转动确认 |
【转动中】、无霍尔事件 |
3秒 |
设置设备状态为【使用中】 |
|
4 |
停止使用确认 |
【使用中】、无按键事件 |
30秒 |
设置设备状态为【未使用】 |
|
5 |
数据显示切换 |
普通模式界面 |
2秒 |
切换显示数据 |
|
6 |
计时数据更新 |
【转动中】 |
1分钟 |
更新计时数据并上报 |
|
7 |
本地时间更新 |
- |
1秒 |
更新本地时间、检查日期变更 |
|
8 |
数据上报更新 |
- |
5秒 |
上报圈数&卡路里数据 |
|
9 |
配网等待结束 |
设备未被用户绑定且正在等待配网 |
1分钟 |
禁止配网 |
- 联网处理
要实现和云端进行数据交互,首先要使设备配网。配网功能已经通过BLE 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保留的深度睡眠模式作为低功耗模式,基本处理思路如下:
<1> 在设备[未使用]时,设置唤醒方式为引脚唤醒或定时器唤醒,然后进入SRAM保留的深度睡眠模式;
<2> 当设备被引脚唤醒时:更新本地时间后,设备状态切换到[使用中];
<3> 当设备被定时器唤醒时:更新本地时间后再次睡眠。
以上主要是对智能计数、运动模式切换以及运动历史数据记录开发方案介绍,方案不仅仅针对呼啦圈,如果同学们感兴趣可以试试开发智能跳绳,智能家用跑步机等小型运动健康类产品。
上期精彩回顾:「Lora智慧农业系统」让农民伯伯轻松坐等收割
