STM32智能遥控婴儿车设计与实现

张开发
2026/4/10 0:48:33 15 分钟阅读

分享文章

STM32智能遥控婴儿车设计与实现
1. 项目概述这个基于STM32的智能遥控婴儿车项目是我在去年为朋友家新生儿设计的实用型作品。当时朋友抱怨市面上智能婴儿车要么功能单一要么价格昂贵于是萌生了DIY一个多功能、低成本解决方案的想法。经过三个月的迭代开发最终实现了手机APP遥控、环境监测、自动避障和哭声检测四大核心功能整体成本控制在800元以内。婴儿车的智能化改造涉及嵌入式开发、传感器融合、无线通信等多个技术领域。STM32F103C8T6作为主控通过PWM控制电机驱动模块配合HC-05蓝牙模块实现手机遥控。DHT11温湿度传感器和MQ-2烟雾传感器组成环境监测系统超声波模块HC-SR04负责前方障碍物检测声音传感器模块则用于识别婴儿哭声触发自动安抚模式。2. 硬件系统设计2.1 主控选型与电路设计选择STM32F103C8T6主要基于三点考虑首先72MHz主频和64KB Flash完全满足多任务处理需求其次丰富的GPIO和PWM输出接口可同时驱动两个电机和多个传感器最重要的是其低功耗特性在待机模式下电流仅2μA这对电池供电的移动设备至关重要。电源部分采用3S锂聚合物电池(11.1V)供电通过AMS1117-3.3稳压芯片转换为3.3V给MCU供电电机驱动则直接使用电池电压。特别要注意的是在电机电源线上并联了1000μF电解电容可有效抑制电机启停时的电压波动对MCU的干扰。重要提示STM32的NRST复位引脚必须接10kΩ上拉电阻我在初期测试时因忽略这点导致多次异常复位。2.2 传感器布局与接口定义传感器布局遵循功能分区原则前方超声波模块(HC-SR04)安装在距地面50cm高度这个高度既能检测台阶又能避开普通地面杂物车体内部DHT11温湿度传感器置于婴儿脚部位置避免被阳光直射导致读数偏高顶部声音传感器模块朝向婴儿头部并用海绵包裹减少环境噪声干扰底部MQ-2烟雾传感器安装在车体底板通风孔附近各传感器接口分配如下// 超声波模块 #define TRIG_PIN PA0 #define ECHO_PIN PA1 // 电机驱动 #define MOTOR_L_PWM PA6 #define MOTOR_R_PWM PA7 // 蓝牙模块 #define BT_TX PA9 #define BT_RX PA10 // 环境传感器 #define DHT11_PIN PB0 #define MQ2_PIN PB13. 软件架构实现3.1 主程序流程设计采用前后台系统架构主循环以100ms为周期执行状态检测中断服务程序处理紧急事件如碰撞检测。这种设计既保证了实时性又避免了复杂RTOS带来的资源开销。void main() { hardware_init(); while(1) { env_monitor(); // 环境监测 obstacle_check(); // 障碍物检测 sound_analyze(); // 声音分析 battery_check(); // 电量检测 delay_ms(100); } } // 蓝牙中断服务程序 void USART1_IRQHandler() { if(USART_GetITStatus(USART1, USART_IT_RXNE)) { byte cmd USART_ReceiveData(USART1); parse_command(cmd); // 解析遥控指令 } }3.2 关键算法实现3.2.1 超声波测距滤波算法原始超声波数据存在±3cm的随机误差采用移动平均滤波结合阈值判断#define SAMPLE_SIZE 5 uint16_t get_distance() { static uint16_t buf[SAMPLE_SIZE]; static uint8_t index 0; buf[index] HC_SR04_measure(); index (index 1) % SAMPLE_SIZE; uint32_t sum 0; for(uint8_t i0; iSAMPLE_SIZE; i) { sum buf[i]; } return sum/SAMPLE_SIZE; }3.2.2 哭声识别算法通过分析声音信号的三个特征来识别哭声频率范围300-800Hz婴儿哭声主要频段持续时间持续500ms以上强度变化有明显的强弱波动模式void sound_analyze() { uint16_t freq get_dominant_freq(); uint16_t db get_sound_level(); if(freq300 freq800 db60) { cry_counter; if(cry_counter 5) { // 持续500ms start_comfort_mode(); cry_counter 0; } } else { cry_counter 0; } }4. 遥控系统实现4.1 蓝牙通信协议设计自定义了简洁的通信协议每个指令包含3字节第1字节帧头0xAA第2字节指令类型0x01前进0x02后退等第3字节指令参数如速度值0-100手机APP界面采用直观的摇杆控制设计摇杆偏移量转换为PWM占空比控制电机速度。实测蓝牙4.0在开阔场地控制距离可达15米完全满足日常使用需求。4.2 电机控制策略采用差速转向方式左右轮独立PWM控制。设置了三档速度模式慢速0.3m/s、中速0.5m/s、快速0.8m/s通过PID算法保持速度稳定typedef struct { float Kp, Ki, Kd; float error, last_error, integral; } PID; void motor_control(uint8_t speed_l, uint8_t speed_r) { static PID pid_l {0.8, 0.05, 0.1}; static PID pid_r {0.8, 0.05, 0.1}; // 左轮PID计算 pid_l.error speed_l - get_current_speed(MOTOR_L); pid_l.integral pid_l.error; float output_l pid_l.Kp*pid_l.error pid_l.Ki*pid_l.integral pid_l.Kd*(pid_l.error - pid_l.last_error); pid_l.last_error pid_l.error; // 右轮同理... pwm_set(MOTOR_L_PWM, output_l); pwm_set(MOTOR_R_PWM, output_r); }5. 安全机制设计5.1 多级制动系统安全是婴儿车的首要考虑设计了三级防护软件制动检测到障碍物在30cm内时立即减速10cm内停止硬件制动紧急停止按钮直接切断电机电源机械制动松手即停的电磁刹车装置5.2 异常处理机制系统持续监控以下异常状态电机堵转电流突然增大传感器失效数据超范围通信中断蓝牙超时电量不足电压低于9V任何异常触发都会使车辆进入安全模式停止运动、开启警示灯、通过蓝牙发送报警信息到手机APP。6. 实际测试与优化6.1 场地测试数据在不同地面进行的移动测试结果地面类型最大速度(m/s)续航时间(h)噪声水平(dB)瓷砖地板0.824.552木地板0.784.255短毛地毯0.653.858户外石板0.703.5606.2 常见问题解决方案电机启动抖动原因PWM频率太低原用1kHz解决提高到18kHz后抖动消失蓝牙连接不稳定原因天线附近有金属部件遮挡解决调整模块位置并外接陶瓷天线误识别哭声原因环境噪声中含有相似频段解决增加频域分析和模式匹配算法超声波误检测原因地面反光材质干扰解决添加地面材质识别逻辑遇到反光地面时降低灵敏度7. 项目改进方向当前系统还有以下可优化空间增加4G模块实现远程监控改用FOC无刷电机降低噪音添加机器学习算法提高哭声识别准确率设计可折叠结构方便收纳电源管理部分特别需要改进实测显示运动状态平均电流1.2A待机状态15mA睡眠状态2mA通过优化可进一步延长续航比如在检测到无人操作5分钟后自动进入睡眠模式。

更多文章