news 2026/5/11 4:47:54

基于单片机的智能衣柜除湿与防霉系统设计【附代码】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于单片机的智能衣柜除湿与防霉系统设计【附代码】

📈 算法与建模 | 专注PLC、单片机毕业设计
✨ 擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。

✅ 专业定制毕业设计

✅ 具体问题可以私信或查看文章底部二维码

本系统设计聚焦于为衣柜提供持续的防潮除湿解决方案,并集成防霉驱虫功能,其核心在于维持衣柜内部稳定的低湿度环境,并周期性地释放防霉驱虫物质以保护衣物。硬件设计由环境监测模块、单片机主控模块、除湿模块、防霉驱虫模块、空气循环模块、人机交互模块及电源模块组成。环境监测模块的核心是数字温湿度传感器,精准监测衣柜内的湿度是系统工作的基础。单片机负责数据分析和全系统控制。除湿模块是主力,鉴于衣柜空间相对封闭且对热量敏感,半导体除湿机芯(冷凝除湿)是理想选择,它无压缩机噪音小、体积小,通过单片机控制其风扇和半导体制冷片的工作。对于较大衣柜或潮湿地区,可考虑集成加热器(如PTC加热片)进行辅助加热升温以降低相对湿度,但需注意防火和衣物材质耐温性。防霉驱虫模块通常采用挥发式防霉驱虫片盒,并配以小型风扇加速其挥发物在柜内扩散;或者使用电子式驱虫器(产生特定频率超声波或微电磁波),由单片机定时控制其工作。空气循环模块通常由一个或多个低噪音直流风扇构成,用于促进衣柜内空气流动,避免局部湿气积聚,使温湿度传感器读数更代表整体环境,并帮助除湿后的干燥空气和防霉成分均匀分布。人机交互模块包括设置按键、显示屏和声光报警器。

用户可通过按键设定目标湿度、工作模式(连续、间歇、智能)等;液晶屏显示实时温湿度、设定值、除湿器工作状态;当湿度长期超过严重阈值或设备故障时,声光报警器发出警示。电源模块需提供稳定电力,半导体除湿机芯和PTC加热器功率相对较大,其电源控制需采用继电器或固态继电器。软件设计以实现智能化、自适应控制为目标。系统启动后,单片机持续读取温湿度数据。核心控制逻辑围绕湿度值展开。在智能模式下,软件将当前湿度与用户设定的目标湿度进行比较。如果湿度高于目标值一定范围,则启动除湿机芯全功率运行,并启动循环风扇;当湿度接近目标值时,可以采用PWM间歇控制除湿机芯,以维持湿度稳定并节能。如果集成加热功能,软件可根据“湿度优先,温度辅助”的原则,在低温高湿环境下,适当启动PTC辅助加热,通过提高温度来快速降低相对湿度。防霉驱虫功能通常设置为定时周期性工作,例如每天深夜启动防霉片盒风扇或电子驱虫器工作1-2小时,软件通过内部定时器管理这些周期任务。空气循环风扇可以与除湿模块联动,在除湿工作时开启;也可以独立设置间歇运行,每隔一段时间开启几分钟以均衡空气。软件还需实现故障监测与报警功能,例如监测除湿机芯工作电流是否正常,温湿度传感器数据是否长时间无变化(可能失效)等。整个系统的设计重点在于高效且安静的除湿能力、均衡的柜内微气候营造、低功耗的长期运行策略以及用户友好的交互与设定方式,旨在为昂贵衣物和纺织品提供一个干燥、清爽、无菌霉侵害的理想储存环境。

#include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit DQ = P1^0; sbit PWM_OUT = P1^1; sbit KEY_MODE = P3^0; sbit KEY_UP = P3^1; sbit KEY_DOWN = P3^2; sbit FAN_RELAY = P1^3; sbit LED_AUTO = P2^0; sbit LED_MANUAL = P2^1; uchar code LED_SEG[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code LED_DIG[] = {0xfe,0xfd,0xfb,0xf7}; uchar dis_buf[4]; uchar temp_value = 25; uchar set_temp = 26; uchar fan_speed = 0; bit mode_flag = 0; bit update_flag = 1; void delay(uint t) { while(t--); } void ds18b20_init() { DQ = 1; _nop_(); DQ = 0; delay(80); DQ = 1; delay(10); while(DQ); while(~DQ); delay(20); } uchar ds18b20_read() { uchar i, dat = 0; for(i=0;i<8;i++) { DQ = 0; _nop_(); DQ = 1; _nop_(); _nop_(); if(DQ) dat |= (1<<i); delay(30); while(~DQ); } return dat; } void ds18b20_write(uchar dat) { uchar i; for(i=0;i<8;i++) { DQ = 0; _nop_(); DQ = dat&0x01; delay(10); DQ = 1; dat>>=1; } } uint read_temp() { uchar TL, TH; uint temp; ds18b20_init(); ds18b20_write(0xcc); ds18b20_write(0x44); delay(1000); ds18b20_init(); ds18b20_write(0xcc); ds18b20_write(0xbe); TL = ds18b20_read(); TH = ds18b20_read(); temp = TH; temp <<= 8; temp |= TL; temp = temp * 0.0625; return temp; } void keys_scan() { static uchar key_count = 0; if(!KEY_MODE) { if(++key_count > 100) { key_count = 0; mode_flag = ~mode_flag; update_flag = 1; } } else if(!KEY_UP) { if(++key_count > 100) { key_count = 0; if(mode_flag) { if(fan_speed < 3) fan_speed++; } else { if(set_temp < 40) set_temp++; } update_flag = 1; } } else if(!KEY_DOWN) { if(++key_count > 100) { key_count = 0; if(mode_flag) { if(fan_speed > 0) fan_speed--; } else { if(set_temp > 10) set_temp--; } update_flag = 1; } } else key_count = 0; } void pwm_init() { TMOD &= 0xf0; TMOD |= 0x01; TH0 = 0xff; TL0 = 0x9c; ET0 = 1; EA = 1; TR0 = 1; } void display() { static uchar cnt = 0; P0 = 0x00; P2 = (P2 & 0xf0) | LED_DIG[cnt]; if(cnt == 0) P0 = LED_SEG[temp_value/10]; else if(cnt == 1) P0 = LED_SEG[temp_value%10] | 0x80; else if(cnt == 2) P0 = LED_SEG[set_temp/10]; else if(cnt == 3) P0 = LED_SEG[set_temp%10]; if(++cnt >=4) cnt = 0; } void control_logic() { if(mode_flag) { LED_AUTO = 1; LED_MANUAL = 0; switch(fan_speed) { case 0: PWM_OUT = 1; FAN_RELAY = 0; break; case 1: PWM_OUT = 0; FAN_RELAY = 1; break; case 2: PWM_OUT = 0; FAN_RELAY = 1; break; case 3: PWM_OUT = 0; FAN_RELAY = 1; break; } } else { LED_AUTO = 0; LED_MANUAL = 1; if(temp_value >= set_temp) { PWM_OUT = 0; FAN_RELAY = 1; } else { PWM_OUT = 1; FAN_RELAY = 0; } } } void timer0_isr() interrupt 1 { static uchar pwm_cnt = 0, speed_map[] = {0, 30, 60, 100}; TH0 = 0xff; TL0 = 0x9c; if(mode_flag && fan_speed>0 && fan_speed<4) { if(++pwm_cnt >= 100) pwm_cnt = 0; PWM_OUT = (pwm_cnt < speed_map[fan_speed]) ? 0 : 1; } display(); } void main() { uint temp_tmp; pwm_init(); while(1) { keys_scan(); if(update_flag) { control_logic(); update_flag = 0; } temp_tmp = read_temp(); if(temp_tmp != temp_value) { temp_value = temp_tmp; update_flag = 1; } } }

如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 2:17:13

Qwen3-VL-8B中文多模态实测:轻量高效,真正懂中文

Qwen3-VL-8B中文多模态实测&#xff1a;轻量高效&#xff0c;真正懂中文 在一家电商公司做技术负责人时&#xff0c;我曾被老板问过一个问题&#xff1a;“我们能不能让用户拍张图就推荐类似商品&#xff1f;就像小红书那样。”当时我们试了几个开源模型&#xff0c;结果不是回…

作者头像 李华
网站建设 2026/5/9 2:17:13

Flutter:在流动的 UI 中,重新理解“界面”的意义

Flutter&#xff1a;在流动的 UI 中&#xff0c;重新理解“界面”的意义 我们常说“用户界面”&#xff0c;仿佛界面是静态的、可切割的一层皮肤。但在 Flutter 的世界里&#xff0c;UI 是流动的、有生命的、由状态驱动的河流。 这不是一篇教你如何创建项目或使用 StatefulWi…

作者头像 李华
网站建设 2026/5/10 23:10:58

基于Dify部署多语言GPT-SoVITS合成系统的架构设计

基于Dify部署多语言GPT-SoVITS合成系统的架构设计 在智能语音技术快速演进的今天&#xff0c;个性化声音不再只是影视明星或大公司的专属资源。随着开源模型和低代码平台的成熟&#xff0c;普通人仅凭几分钟录音就能拥有“数字分身”的时代已经到来。尤其是在客服播报、有声内容…

作者头像 李华
网站建设 2026/5/9 2:17:28

LobeChat能否实现AI艺术品鉴定?收藏价值评估模型构建

LobeChat能否实现AI艺术品鉴定&#xff1f;收藏价值评估模型构建 在拍卖行的灯光下&#xff0c;一幅水墨虾蟹图静静陈列。专家俯身细看笔触走势、印章位置与纸张泛黄程度&#xff0c;几分钟后给出结论&#xff1a;“齐白石真迹&#xff0c;估价300万左右。”这样的场景正悄然发…

作者头像 李华
网站建设 2026/5/9 2:56:44

GPT-SoVITS训练过程中显存不足怎么办?优化建议

GPT-SoVITS训练显存不足&#xff1f;这5个实战优化策略让你在12GB显卡上跑起来 你有没有试过满怀期待地启动 GPT-SoVITS 训练&#xff0c;结果刚进第一个 epoch 就弹出 CUDA out of memory 的红色警告&#xff1f;别急&#xff0c;这不是你的数据有问题&#xff0c;也不是代码写…

作者头像 李华
网站建设 2026/5/10 9:01:26

LobeChat能否支持3D模型预览?工业设计领域应用前景

LobeChat能否支持3D模型预览&#xff1f;工业设计领域应用前景 在智能制造与协同设计日益普及的今天&#xff0c;工程师们不再满足于AI助手只能“读文档、答问题”。他们希望AI能真正“看懂”设计图纸&#xff0c;甚至理解三维结构——比如上传一个STL文件后&#xff0c;直接问…

作者头像 李华