去年夏天帮朋友改造老房子时,发现他家的推拉窗经常忘记关,一下雨就水漫金山。这让我萌生了用单片机做智能窗户的想法。经过三个月的迭代,最终完成了这个基于STM32F103C8T6的智能窗户模型,不仅支持温湿度自动控制,还能用手机远程操作。最特别的是,我通过3D打印技术制作了1:10的实体模型,所有机械结构都真实可动。
这个项目完美融合了嵌入式开发、传感器技术和3D建模三大技能。硬件上采用STM32作为主控,搭配DHT11温湿度传感器、雨水检测模块和步进电机驱动;软件层面开发了PID控制算法;机械部分用SolidWorks设计后3D打印成型。整套系统成本不到200元,但实现了商业级智能窗户80%的功能。
在对比了Arduino、51单片机和STM32后,最终选用STM32F103C8T6(蓝色pill开发板)主要基于三点考虑:
实际使用中发现其GPIO驱动能力不足,无法直接驱动步进电机,必须通过ULN2003达林顿阵列进行电流放大。这是新手常踩的坑,建议在原理图设计阶段就做好驱动能力计算。
传感器选型经历了三次迭代:
特别说明雨滴传感器的安装技巧:应该以15-30度倾角安装在窗框外侧,避免垂直安装导致雨水积聚。我在初期测试时,垂直安装的传感器在暴雨天气会出现误判。
窗户开合采用28BYJ-48步进电机(5V驱动),通过3D打印的齿轮组实现1:4减速。关键参数:
经实测,配合M35SP-7N行星齿轮箱后,单个窗户(模型尺寸20cm宽)完全开启需要约15秒。这里有个重要经验:务必在程序初始化时执行归零操作,避免累计误差导致位置失控。
使用SolidWorks 2022设计的模型包含以下核心部件:
打印参数建议:
第一个版本组装时遇到三个典型问题:
建议在SolidWorks中先做运动仿真(Motion Analysis),可以提前发现90%的机械干涉问题。我后来重做的第三版模型,一次性装配成功率提升到95%以上。
采用前后台系统架构:
code复制Main Loop
├── 传感器数据采集(DHT11、雨滴、红外)
├── 控制算法处理(PID调节)
├── 电机驱动控制(步进脉冲生成)
└── 通信协议处理(ESP8266 WiFi模块)
中断资源分配:
窗户开度控制采用位置式PID算法,核心代码片段:
c复制typedef struct {
float Kp, Ki, Kd;
float err, last_err, integral;
} PID_Controller;
float PID_Update(PID_Controller* pid, float setpoint, float actual) {
pid->err = setpoint - actual;
pid->integral += pid->err;
float output = pid->Kp * pid->err
+ pid->Ki * pid->integral
+ pid->Kd * (pid->err - pid->last_err);
pid->last_err = pid->err;
return output;
}
参数整定经验:
选用ESP-01S模块实现手机控制,通信协议设计要点:
安卓端使用MIT App Inventor开发的控制界面,关键功能包括:
整个系统供电方案:
重要教训:最初将电机和单片机共用电源,导致MCU频繁复位。后来改用独立供电并在电源入口处加装1000μF电解电容,问题彻底解决。
在多次雷雨天气测试中,总结出以下经验:
如果进行小批量生产(100套),成本可压缩到:
近期正在尝试的改进方案:
有个意外发现:在窗户导轨涂抹少量硅脂后,电机工作电流下降30%,显著延长了电池续航。这种工程细节往往是产品成败的关键。