新闻详情

新闻详情

首页 / 资讯中心 / 详情

基于STM32的智能婴儿床毕设:硬件设计、软件实现与避坑指南

发布时间:2026/9/24 23:46:23来源:尧图网络
基于STM32的智能婴儿床毕设:硬件设计、软件实现与避坑指南
1. 项目缘起与整体设计思路1.1 为什么选智能婴儿床作为毕设题目每年到了毕设选题季电子信息、自动化、计算机相关专业的学生都会面临同一个灵魂拷问做什么题目既有技术含量又能顺利通过答辩还能在简历上写一笔我带了几年毕设也帮不少学弟学妹看过方案说实话智能婴儿床这个题目属于那种“看起来简单、做起来有深度、答辩时老师也挑不出大毛病”的类型。它的核心逻辑很清晰用STM32做主控采集婴儿床内的温度、湿度、声音、是否尿湿等信息再通过显示屏或者手机端把状态反馈给家长同时具备自动安抚、异常报警等功能。这个题目覆盖了传感器采集、数据处理、人机交互、电机控制、无线通信等多个模块正好把大学四年学的东西串起来。而且它有一个天然优势——应用场景明确答辩老师一听就懂不需要你花十分钟解释“我这个东西到底有什么用”。从技术栈来看STM32F103系列是毕设里最稳妥的选择。原因很简单资料多、教程全、价格便宜、性能足够。你不需要上H7或者F4F103C8T6或者RCT6就能把整个系统跑起来。外设方面温湿度用DHT11或者SHT30声音检测用驻极体麦克风加放大电路尿湿检测用简单的电极式传感器显示用OLED或者TFT屏电机用减速直流电机或者舵机做摇床功能报警用蜂鸣器和LED无线通信用蓝牙或者WiFi模块。整套BOM成本控制在两百块以内对学生党非常友好。1.2 系统整体架构怎么搭我在做方案设计的时候习惯先把系统拆成“感知层—控制层—执行层—交互层”四块这样画框图的时候思路不会乱。感知层负责采集环境数据和婴儿状态。温度湿度用DHT11就够了精度±2℃、±5%RH对婴儿床场景完全够用没必要上SHT30那种高精度传感器多花几十块钱答辩也不会加分。声音检测我用的是驻极体麦克风加LM358放大输出模拟量给STM32的ADC通过阈值判断婴儿是否在哭。尿湿检测用两片铜箔做电极利用尿液导电的原理通过比较器输出高低电平。这里要注意电极不能直接通直流电否则会电解尿液产生异味最好用交流信号或者脉冲方式检测这个坑后面会细说。控制层就是STM32最小系统负责跑主循环、处理中断、驱动外设。我选的是STM32F103RCT664引脚、256KB Flash、48KB RAM资源绰绰有余。时钟树配置到72MHzADC、定时器、USART、I2C、SPI全部用上正好把STM32的常用外设练一遍。执行层包括摇床电机和报警模块。摇床用SG90舵机或者28BYJ-48步进电机都行舵机便宜、驱动简单但噪音稍大步进电机安静、扭矩大但需要驱动模块。我最后选了步进电机加ULN2003驱动板因为婴儿睡觉的环境对噪音很敏感舵机那种“吱吱”声反而会吵醒孩子。报警模块就是蜂鸣器加LED蜂鸣器用有源的无源都行有源的直接给电平就响无源的可以用PWM调音调。交互层包括OLED显示屏和手机端。OLED用0.96寸I2C接口的显示温度、湿度、状态信息刷新率不用太高1秒一次就行。手机端我用的是HC-05蓝牙模块配合手机APP显示数据和控制摇床开关。这里有个小技巧HC-05默认波特率是9600但STM32的USART配置要跟它匹配否则收到的全是乱码。1.3 方案选型背后的取舍逻辑很多同学做毕设喜欢堆模块觉得功能越多越好其实答辩老师更看重的是“每个功能都讲得清楚”。我在方案设计阶段砍掉了几个花哨但不实用的功能比如摄像头监控、语音识别、自动喂奶。摄像头需要跑图像处理STM32F103根本扛不住语音识别模块价格贵识别率还低自动喂奶涉及机械结构容易出故障。把这些砍掉之后系统稳定性大幅提升答辩时也能把每个模块的原理讲透。另一个取舍是通信方式。蓝牙和WiFi我都试过蓝牙配对快、功耗低、手机APP开发简单但传输距离短WiFi可以远程查看但需要配网答辩现场网络环境复杂容易翻车。最后我选了蓝牙作为主通信方式同时在代码里预留了WiFi接口答辩时如果老师问“能不能远程监控”我可以回答“硬件上预留了ESP8266接口软件上封装了通信层替换模块只需要改几行代码”。这样既展示了扩展性又不用承担现场演示的风险。2. 硬件电路设计与关键细节2.1 主控最小系统与电源管理STM32F103RCT6的最小系统包括晶振电路、复位电路、启动模式选择、电源滤波。晶振用8MHz无源晶振加两个22pF电容复位电路用10K上拉电阻加100nF电容启动模式BOOT0和BOOT1都接地从Flash启动。这些是标准电路照着画就行但有几个细节容易出错。电源部分我用的是AMS1117-3.3输入5V输出3.3V。这里要注意AMS1117的压差大概是1.1V所以输入不能低于4.4V否则输出不稳。锂电池供电的话3.7V直接输入是不够的需要升压到5V再降压到3.3V或者直接用低压差稳压器。我在板子上留了两种供电接口Micro USB和DC插座方便调试和演示。滤波电容的布局很关键。我在每个电源引脚旁边都放了100nF陶瓷电容在电源入口放了10uF钽电容和100uF电解电容。实测下来不加这些电容的话ADC采样值会跳得很厉害尤其是电机启动的瞬间电压波动能到几百毫伏。加了滤波之后ADC波动控制在±2个LSB以内。2.2 传感器电路的设计要点DHT11的电路很简单数据线接STM32的GPIO加上4.7K上拉电阻就行。但DHT11的时序要求很严格启动信号要拉低至少18ms然后释放等待DHT11响应。我在代码里用微秒级延时实现但要注意如果系统里开了中断延时可能会被打断导致读取失败。解决办法是在读取DHT11的时候关中断读完再开。实测下来关中断的时间大概5ms对系统实时性影响可以忽略。声音检测电路我用的是驻极体麦克风加两级放大。第一级用LM358做同相放大增益100倍第二级做半波整流和滤波输出包络信号给ADC。这里有个坑LM358的带宽只有1MHz放大100倍之后带宽只剩10kHz对于音频信号来说勉强够用但高频成分会衰减。如果要求不高可以用LM358如果要求高换成NE5532或者TL072效果会好很多。尿湿检测电路我改了三版。第一版直接用两个电极加比较器结果电极很快被腐蚀而且尿液电解产生异味。第二版改用交流信号用NE555产生1kHz方波通过电极加到比较器上这样电极上没有直流分量腐蚀问题解决了。第三版在电极表面镀了一层金虽然成本高了点但稳定性大幅提升。如果只是做毕设第二版方案就够用了NE555加LM393比较器成本不到五块钱。2.3 电机驱动与报警电路步进电机我用的是28BYJ-485V供电四相八拍驱动。ULN2003驱动板自带续流二极管直接接STM32的四个GPIO就行。这里要注意步进电机的启动频率不能太高否则会失步。28BYJ-48的启动频率大概是500Hz加速到1000Hz需要逐步提速。我在代码里做了梯形加减速启动时频率从200Hz慢慢加到800Hz停止时反过来。实测下来摇床动作很平滑噪音也小。蜂鸣器电路我用的是S8050三极管驱动基极接STM32的GPIO集电极接蜂鸣器发射极接地。这里要注意蜂鸣器是感性负载关断时会产生反向电动势需要在蜂鸣器两端并联一个续流二极管否则三极管容易被击穿。我一开始没加二极管结果调试的时候烧了两个三极管后来加上1N4148就好了。LED指示灯我用的是共阳极接法三个LED分别表示电源、报警、通信状态。限流电阻用1K电流大概3mA亮度足够也不会太刺眼。这里有个小技巧LED的限流电阻不要用太小否则STM32的GPIO输出电流有限多个LED同时亮的时候电压会被拉低导致亮度不均。3. 软件架构与核心代码实现3.1 主程序框架与任务调度STM32的裸机程序一般用前后台架构主循环里轮询任务中断里处理紧急事件。我在主循环里放了四个任务传感器采集、数据处理、显示刷新、通信处理。每个任务用一个软件定时器控制执行周期传感器采集100ms一次数据处理200ms一次显示刷新500ms一次通信处理50ms一次。这种架构的优点是简单、可靠不需要RTOS。缺点是任务多了之后主循环的周期会变长实时性下降。我实测下来四个任务跑一遍大概20ms完全满足需求。如果任务再多建议上FreeRTOS但毕设阶段没必要裸机足够。中断方面我用到了SysTick、USART、EXTI。SysTick做系统时基1ms一次USART接收中断处理蓝牙数据EXTI处理按键和尿湿检测的边沿触发。这里要注意中断服务函数里不要做耗时操作比如DHT11读取、OLED刷新这些都要放到主循环里。我见过有同学在中断里调用DHT11读取函数结果系统直接卡死因为DHT11的延时是阻塞式的中断里阻塞会导致其他中断无法响应。3.2 传感器数据采集与滤波DHT11的读取代码网上很多但质量参差不齐。我推荐用状态机的方式实现不要用阻塞式延时。状态机的好处是不占用CPU可以在等待DHT11响应的时候去处理其他任务。具体实现是先发启动信号然后切换到等待响应状态检测到响应信号后切换到接收数据状态接收完40位数据后校验校验通过则更新温湿度值。ADC采样声音信号的时候我用了滑动平均滤波。每次采16个点去掉最大值和最小值剩下的求平均。这样做的目的是抑制突发噪声比如电机启动时的电压波动。实测下来滤波之后的声音包络很平滑阈值判断也很稳定。尿湿检测我用的是中断方式比较器输出接EXTI上升沿触发。中断里置一个标志位主循环检测到标志位后启动一个计时器如果持续高电平超过5秒就判定为尿湿。为什么要延时5秒因为婴儿动一下也可能导致电极短暂导通延时可以避免误报。3.3 蓝牙通信协议设计蓝牙通信我用的是自定义的简单协议数据帧格式是帧头0xAA 0x55 命令字1字节 数据长度1字节 数据N字节 校验和1字节。命令字包括0x01查询状态、0x02控制摇床、0x03设置阈值、0x04报警通知。校验和用累加和取低8位简单但够用。这里要注意蓝牙模块的接收缓冲区有限如果数据帧太长可能会被截断。我把数据长度限制在32字节以内实测下来很稳定。手机APP我用的是MIT App Inventor拖拽式开发不需要写Android代码。APP界面包括温度显示、湿度显示、状态显示、摇床开关、阈值设置。蓝牙连接用列表选择器配对之后自动连接。这里有个坑MIT App Inventor的蓝牙组件在Android 12以上版本需要动态申请权限否则扫描不到设备。解决办法是在APP启动时申请BLUETOOTH_SCAN和BLUETOOTH_CONNECT权限。3.4 摇床电机控制算法步进电机的控制我用的是定时器PWM加梯形加减速。具体实现是用TIM3产生PWM波频率决定步进电机的速度用TIM4做定时中断每1ms更新一次速度值。加速阶段速度从200Hz线性增加到800Hz用时500ms匀速阶段保持800Hz减速阶段从800Hz线性降到200Hz用时500ms。这里要注意步进电机的步距角是5.625度减速比是1:64所以转一圈需要4096步。摇床的摆动角度大概是30度对应341步。如果速度是800Hz走完341步需要0.43秒加上加减速时间一个摆动周期大概1.5秒。这个频率对婴儿来说比较舒适太快会晕太慢没效果。代码实现上我用了一个状态机空闲、加速、匀速、减速。每次启动摇床状态机从空闲切换到加速加速完成后切换到匀速匀速完成后切换到减速减速完成后回到空闲。状态切换在定时中断里完成主循环只需要设置目标状态就行。4. 调试过程与常见问题排查4.1 程序烧录与调试环境搭建Keil5的安装是个老生常谈的问题但每年都有同学卡在这一步。Keil5默认只装了ARM的编译器如果要同时开发51和STM32需要安装C51和MDK两个包然后手动合并。具体操作是先装C51再装MDK装的时候选择同一个安装目录这样Keil5就能同时识别51和STM32的工程。STM32的芯片包用Pack Installer安装打开Keil5点Pack Installer图标搜索STM32F1找到Keil::STM32F1xx_DFP点Install。如果下载速度慢可以去官网手动下载.pack文件双击安装。这里要注意芯片包的版本要和Keil5的版本匹配太新的芯片包可能不支持老版本的Keil5。ST-Link的驱动安装也很关键。我遇到过好几次“STM32无法识别USB设备”的问题最后发现是ST-Link的驱动没装好。解决办法是去ST官网下载ST-Link Utility安装的时候会自动装驱动如果还不行去设备管理器里手动更新驱动选择ST-Link的安装目录。4.2 常见硬件问题与排查方法调试阶段遇到的问题我整理了一个速查表方便大家快速定位。现象可能原因排查方法解决方案程序下载失败ST-Link连接不良检查SWDIO、SWCLK、GND、3.3V四根线重新插拔换根USB线程序下载失败芯片被写保护用ST-Link Utility连接看能否读到芯片ID解除写保护全片擦除OLED不亮I2C地址错误用逻辑分析仪抓I2C波形修改地址0x78或0x7ADHT11读数失败时序不对示波器看数据线波形调整延时关中断电机不转驱动板供电不足万用表测驱动板电压单独给驱动板供电蓝牙连不上波特率不匹配串口助手看收到的数据统一波特率为9600ADC采样跳动电源纹波大示波器看3.3V电源加滤波电容远离电机蜂鸣器不响三极管烧了万用表测三极管be结换三极管加续流二极管这个表里的问题我都实际遇到过尤其是DHT11时序和ADC采样跳动折腾了我好几天。DHT11的问题最后发现是中断干扰关中断之后一次都没失败过。ADC的问题加了100uF电解电容之后波动从±20LSB降到了±2LSB。4.3 软件调试技巧与经验分享软件调试我主要用三种手段串口打印、LED指示、逻辑分析仪。串口打印最常用但要注意printf函数默认用的是半主机模式需要重定向fputc才能输出到串口。重定向的代码很简单int fputc(int ch, FILE *f) { while(USART_GetFlagStatus(USART1, USART_FLAG_TC) RESET); USART_SendData(USART1, (uint8_t)ch); return ch; }LED指示用于快速判断程序跑到哪一步。我在主循环的每个任务前后都加了LED翻转用示波器看LED的波形就能知道每个任务的执行时间。如果某个任务执行时间过长就需要优化。逻辑分析仪是排查通信问题的利器。I2C、SPI、USART的波形都能抓配合协议解码一眼就能看出问题。我用的是一款几十块钱的8通道逻辑分析仪配合开源软件PulseView够用了。这里分享一个我踩过的坑STM32的USART在初始化的时候如果GPIO没有配置成复用推挽输出TX引脚是不会有波形的。我一开始只配置了USART的寄存器忘了配GPIO结果串口助手什么都收不到。后来查了参考手册才发现USART的TX引脚需要配置成复用推挽输出RX引脚配置成浮空输入或上拉输入。4.4 答辩演示的注意事项答辩演示是毕设的最后一关也是最容易翻车的一关。我总结了几条经验第一提前一天去答辩教室测试设备。教室的电源、桌子高度、光线条件都跟实验室不一样提前测试可以避免现场手忙脚乱。第二准备两套演示方案。一套是完整功能演示一套是简化版演示。如果现场设备出问题立刻切换到简化版保证答辩能继续进行。第三演示的时候不要只盯着屏幕要一边操作一边讲解。比如摇床启动的时候可以说“现在步进电机开始加速大家可以听到噪音很小这是因为我们用了梯形加减速算法”。第四提前准备好常见问题的答案。老师可能会问“为什么选STM32不选51”、“蓝牙和WiFi有什么区别”、“系统功耗是多少”这些问题都要提前想好怎么回答。第五带一个插线板和一根长USB线。答辩教室的插座可能离桌子很远没有插线板的话设备没法供电。5. 功能扩展与进阶方向5.1 从蓝牙升级到WiFi远程监控蓝牙的局限是传输距离短一般10米左右隔一堵墙就断了。如果想做远程监控可以换成ESP8266或者ESP32。ESP8266支持WiFi可以连接路由器通过MQTT协议把数据上传到云平台手机在任何地方都能查看。硬件上ESP8266和STM32通过USART通信STM32把数据打包发给ESP8266ESP8266负责联网和上传。软件上ESP8266跑AT指令固件STM32发AT指令控制它。这里要注意AT指令的响应时间不确定不能阻塞等待要用状态机的方式处理。云平台我用的是EMQX开源的MQTT服务器可以自己搭建也可以用公共的。手机端用MQTT客户端APP订阅主题就能收到数据。这套方案的成本比蓝牙高不了多少但功能强很多答辩的时候也是个加分项。5.2 加入OTA升级功能OTA升级是嵌入式系统的进阶功能可以让设备在不拆机的情况下更新固件。STM32的OTA一般有两种方案一种是双区备份Bootloader和APP分开Bootloader负责接收新固件并写入APP区另一种是单区升级Bootloader直接覆盖APP区。双区备份更安全但需要两倍的Flash空间。STM32F103RCT6有256KB Flash分128KB给Bootloader128KB给APP够用了。Bootloader的代码不复杂主要是接收数据、擦除Flash、写入Flash、跳转到APP。这里要注意跳转之前要关中断、设置堆栈指针、设置向量表偏移。OTA的通信协议我用的是YModem支持断点续传和CRC校验比自定义协议可靠。上位机用SecureCRT或者Xshell通过串口发送固件文件。实测下来128KB的固件大概30秒传完速度可以接受。5.3 数据存储与历史曲线如果想记录婴儿的睡眠数据可以加一个TF卡模块把温湿度、声音、尿湿状态按时间戳存成CSV文件。TF卡用SPI接口FatFS文件系统STM32有现成的移植教程。存储格式我建议用CSV方便用Excel打开分析。每行一条记录格式是时间戳,温度,湿度,声音,尿湿状态。时间戳用RTC提供STM32F103有内置RTC加一个32.768kHz晶振就能走时。这里有个坑TF卡的写入速度有限如果写入频率太高会丢数据。我实测下来SPI模式下的TF卡写入速度大概100KB/s每秒写一条记录完全够用。但如果要存音频数据就需要用SDIO模式速度能到几MB/s。5.4 低功耗设计与电池供电如果想让婴儿床脱离电源线就需要做低功耗设计。STM32F103的低功耗模式有Sleep、Stop、Standby三种。Sleep模式功耗大概10mAStop模式大概20uAStandby模式大概2uA。传感器和显示屏是耗电大户。DHT11工作电流1mAOLED工作电流20mA蓝牙模块工作电流40mA。如果一直开着电池撑不了多久。解决办法是间歇工作传感器每10秒采一次采完就关OLED平时熄屏按键唤醒蓝牙平时休眠手机连接时唤醒。电池我用的是18650锂电池容量2600mAh3.7V。加一个升压模块到5V再降压到3.3V。实测下来间歇工作模式下续航大概3天。如果每天只用几个小时续航能到一周。6. 个人实操心得与避坑建议做完毕设之后我最大的感受是硬件项目跟纯软件项目完全不一样软件出bug可以改硬件出问题可能要重新打板。所以我在设计阶段就留了很多余量比如电源芯片选大一号的接口多留几个调试焊盘多放几个。这些余量在调试阶段救了我好几次。另一个感受是不要迷信网上的代码。DHT11的驱动代码我换了三个版本才找到稳定的步进电机的加减速算法也是自己重新写的。网上的代码可以参考但一定要自己理解、自己调试。答辩的时候老师问“这段代码为什么这么写”如果你答不上来那就很尴尬了。还有一点文档和代码要同步整理。我见过很多同学代码写完了文档拖到最后一周才写结果发现很多细节记不清了只能瞎编。我的做法是每天写调试日志记录遇到的问题和解决方法最后整理文档的时候直接复制粘贴效率高很多。最后分享一个答辩小技巧PPT上不要放太多文字多用框图、流程图、实物照片。老师看PPT的时间很短文字多了反而抓不住重点。把系统框图、电路原理图、实物照片放上去配合你的讲解效果比大段文字好得多。实物演示的时候提前把设备调到最佳状态比如OLED亮度调高、蜂鸣器音量调大、摇床速度调慢让老师看得清楚、听得明白。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Xsens Link识别失败排查指南:覆盖驱动、无线链路与授权的完整方案 2026/9/25 1:44:23

Xsens Link识别失败排查指南:覆盖驱动、无线链路与授权的完整方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
HDDSuperClone数据克隆工具实战:命令行界面与跨平台坏道处理策略 2026/9/25 1:44:23

HDDSuperClone数据克隆工具实战:命令行界面与跨平台坏道处理策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Mixly图形化编程入门:从点亮LED到掌握Arduino开发 2026/9/25 1:44:23

Mixly图形化编程入门:从点亮LED到掌握Arduino开发

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
嵌入式开发者Claude Code实战:安装配置、权限管理、MCP与Skills 2026/9/25 1:44:23

嵌入式开发者Claude Code实战:安装配置、权限管理、MCP与Skills

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SDL Trados Studio 2022最新版本下载、安装激活与升级迁移全指南 2026/9/25 1:44:23

SDL Trados Studio 2022最新版本下载、安装激活与升级迁移全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
TX12刷EdgeTX 2.7.1与ExpressLRS高频头配置全攻略 2026/9/25 1:44:17

TX12刷EdgeTX 2.7.1与ExpressLRS高频头配置全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞