0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于 STM32 与机智云的智能晾衣架设计与实现

机智云 2026-03-27 18:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本项目以 STM32F103C8T6 单片机为核心控制单元,结合多种传感器、显示及执行器件,并搭载 ESP8266 WIFI 模块对接机智云平台,完成了智能晾衣架的整体设计与实现。


项目围绕该设计展开了原理图、PCB 硬件、程序等全流程设计工作,通过实验验证了产品功能的有效性,实现了环境监测、模式切换、智能启停、远程控制等核心功能,同时配备阈值调节、防盗报警、灯光控制等实用特性,本文档也同步提供了该项目的相关资源分享。

Part.01项目简介


1、功能详解

1、STM32F103C8T6 单片机作为主控单元。

2、环境监测:采集环境温湿度、光照强度、是否有雨 / 有人等等。

3、显示功能:OLED 屏幕显示当前时间、显示环境信息数据。

4、模式切换:通过按键可切换自动模式和手动模式自动模式。

5、自动模式下定时时间内开启晾衣架,如果光照强度低于阈值、湿度高于阈值、有雨或者有人靠近,自动关闭晾衣架,定时时间外晾衣架始终关闭,防盗开关开启下如果有人闯入会开启蜂鸣器报警手动模式。

6、手动模式下通过按键可控制晾衣架和灯光的开关阈值调节:通过按键进入系统设置界面,可修改当前时间、修改各参数阈值和定时开关晾衣架的时间、可设置防盗开关。

7、机智云:通过 WIFI 模块连接 APP 来接收环境信息数据与控制指令下发。


2、主要器件

STM32F103C8T6、单片机OLED 、屏幕DHT11 、温湿度传感器、光敏传感器、雨滴传感器、光电红外传感器、ESP8266 模块(WIFI)、步进电机、有源蜂鸣器、LED指示灯


Part.02原理图设计


934f3994-29c9-11f1-96ea-92fbcf53809c.png


Part.03PCB 硬件设计


9370b416-29c9-11f1-96ea-92fbcf53809c.png
93844620-29c9-11f1-96ea-92fbcf53809c.png


Part.04程序设计


#include"stm32f10x.h" #include"sys.h" #include"led.h" #include"beep.h" #include"usart.h" #include"delay.h" #include"dht11.h" #include"oled.h" #include"key.h" #include"Modules.h" #include"TIM2.h" #include"adcx.h" #include"stepmotor.h" #include"HW.h" #include"rain.h" #include"hhrtc.h" #include"usart2.h"#include"usart3.h"#include #include #include #include"TIM3.h"#include"gizwits_product.h" #include"gizwits_protocol.h"
/****************异方辰电子工作室****************** STM32
* 项目:STM32智能晾衣架(机智云版) * 版本: V2.0* 日期: 2026.3.11* MCU:STM32F103C8T6* 接口:见代码* IP账号:异方辰电子/辰哥单片机设计(同BILIBILI|抖音|快手|小红书|CSDN|公众号|视频号等)* 作者:辰哥* 工作室: 异方辰电子工作室* 授权IP :辰哥单片机设计、异方辰电子、YFC电子、异方辰系列* 官方网站 :www.yfcdz.cn**********************BEGIN***********************/

#defineKEY_Long111 // 定义KEY1长按的按键值为11#defineKEY_11 // 定义KEY1短按的按键值为1#defineKEY_22 // 定义KEY2短按的按键值为2#defineKEY_33 // 定义KEY3短按的按键值为3#defineKEY_44 // 定义KEY4短按的按键值为4#defineFLASH_START_ADDR0x0801f000// FLASH写入的起始地址(备用)
#defineAUTO_MODE 1 // 自动模式#defineMANUAL_MODE 2 // 手动模式#defineSETTINGS_MODE 3 // 设置模式
SensorModules sensorData;// 声明传感器数据结构体变量(存储温湿度、光照、人体、雨滴等数据)SensorThresholdValue Sensorthreshold;// 声明传感器阈值结构体变量(存储各参数阈值)DriveModules driveData;// 声明驱动器状态结构体变量(存储LED、窗帘电机等状态)
uint8_t mode = 1;//系统模式 1=自动模式 2=手动模式 3=设置模式u8 openFlag = 0; // 开启标志位(备用)u8 shuaxin = 0; // OLED数据刷新标志位1(1秒刷新)u8 shuaxin1 = 0; // OLED数据刷新标志位2(1.5秒刷新,备用)u8 sendFlag = 0; // 串口数据发送标志位(1秒上传一次传感器数据)u8 dakai; // 串口3使用的传递变量(备用)u8 Flag_dakai; // 串口3接收标志位(备用)u8 setHumiLight=0; // 湿度/光照阈值修改标志位(修改后标记上传)uint8_t fandao = 1; // 防盗系统开关:1=开启 0=关闭uint8_t fandaoflag = 0; // 防盗报警标志位:1=报警(蜂鸣器响)0=正常
//系统静态变量(仅当前文件使用)static uint8_t count_a = 1; // 自动模式下KEY2按键计数(切换子页面)uint8_t count_m = 1; // 手动模式下KEY2按键计数(切换子页面)static uint8_t count_s = 1; // 设置模式下KEY2按键计数(切换子页面)
uint8_t motor_flag_last = 0; // 上一次窗帘电机状态值(初始与driveData.MOTOR_Flag一致)uint8_t motor_rotate_done = 1; // 电机转动执行完成标志:1=已完成 0=未完成(上电初始完成)

int main(void){
SystemInit();
delay_init(72); USART1_Config(); // 之后 printf 才能用 ADCX_Init();
NVIC_Configuration();
MyRTC_Init();

USART2_Config();
USART3_Config();
LED_Init();
Key_Init();
MOTOR_Init();
OLED_Init();
DHT11_Init();
HW_Init();
RAIN_Init();
BEEP_Init();
TIM2_Init(99,719);
TIM3_Int_Init(1000-1,72-1);
// sensorData.lux = LDR_LuxData();
OLED_Clear();
// 阈值/定时参数初始化Sensorthreshold.shi = 20; Sensorthreshold.fen = 0; Sensorthreshold.miao = 0; Sensorthreshold.shix = 21; Sensorthreshold.fenx = 00; Sensorthreshold.miaox = 00; Sensorthreshold.tempValue = 25;Sensorthreshold.humiValue = 60;Sensorthreshold.luxValue =50;

#defineAUTO_PAGE_MAX 2 #defineMANUAL_PAGE_MAX 2 #defineSETTINGS_PAGE_1_END 4 #defineSETTINGS_PAGE_2_END 7 #defineSETTINGS_PAGE_3_END 10 #defineSETTINGS_PAGE_MAX 13 #defineOLED_CLEAR_DELAY 150



userInit(); // 机智云用户初始化(数据点初始化等) gizwitsInit(); // 机智云协议初始化(WiFi配网、数据通信初始化) gizwitsSetMode(WIFI_AIRLINK_MODE); //默认一键配网 delay_ms(200);
printf("Start \n"); gizwitsHandle((dataPoint_t *)¤tDataPoint); ScanGizwitsMode();
delay_ms(200); printf("3\n");
while (1){ gizwitsHandle((dataPoint_t *)¤tDataPoint);
SensorScan(); // 扫描所有传感器(温湿度、光照、人体、雨滴),更新sensorData结构体数据 MyRTC_ReadTime();
uint8_t auto_page = 0; // 自动模式子页面编号缓存 uint8_t manual_page = 0; // 手动模式子页面编号缓存 uint8_t settings_page = 0; // 设置模式子页面编号缓存
// 模式逻辑重构:按「按键处理→页面绘制→数据显示→逻辑控制→模式切换」分层执行 switch(mode) // 根据系统模式(1=自动/2=手动/3=设置)执行对应逻辑 { case AUTO_MODE: // 自动模式(值为1) // 1. 按键处理:调用SetAuto获取KEY2切换的子页面数,缓存到auto_page(仅调用1次) auto_page = SetAuto();
// 2. 页面绘制+数据显示:仅在有效子页面范围内执行(最大2页) if(auto_page <= AUTO_PAGE_MAX)            {                OLED_autoPage1();          // 绘制自动模式页面1的固定文字(时间/温度/湿度等标题)                SensorDataDisplay1();      // 显示自动模式页面1的传感器实时数据(时间、温湿度、人体/雨滴状态)            }
// 3. 核心控制逻辑:自动模式下的硬件控制 AutoControl(); // 执行自动模式控制逻辑(窗帘自动开关、防盗报警) Control_Manager(); // 硬件输出控制(LED、蜂鸣器、窗帘电机执行)
// 4. 模式切换按键处理:检测KEY1短按/长按,切换模式 // 短按KEY1:从自动模式切换到手动模式 if (KeyNum == KEY_1) { KeyNum = 0; // 清空按键值,避免重复触发 mode = MANUAL_MODE; // 切换系统模式为手动模式 count_m = 1; // 重置手动模式子页面计数为1 OLED_Clear(); // 清空OLED屏幕,准备显示手动模式界面 delay_ms(OLED_CLEAR_DELAY); // 清屏后延时150ms,避免OLED闪屏 } // 长按KEY1:从自动模式切换到设置模式 else if (KeyNum == KEY_Long1) { KeyNum = 0; // 清空按键值,避免重复触发 mode = SETTINGS_MODE; // 切换系统模式为设置模式 count_s = 1; // 重置设置模式子页面计数为1 OLED_Clear(); // 清空OLED屏幕,准备显示设置模式界面 delay_ms(OLED_CLEAR_DELAY); // 清屏后延时150ms,避免OLED闪屏 } break; // 自动模式逻辑结束,跳出switch
case MANUAL_MODE: // 手动模式(值为2) // 1. 按键处理:调用SetManual获取KEY2切换的子页面数,缓存到manual_page(仅调用1次) manual_page = SetManual();
// 2. 页面绘制+数据显示:先显示选择符号,再绘制页面内容 OLED_manualOption(manual_page); // 显示手动模式当前选中项的>符号(灯光/窗帘) if(manual_page <= MANUAL_PAGE_MAX) // 仅处理有效页面(原代码<=4为冗余,实际只有2页)            {                OLED_manualPage1();          // 绘制手动模式页面1的固定文字(灯光/窗帘标题)                ManualSettingsDisplay1();    // 显示手动模式页面1的参数(灯光/窗帘的开/关状态)            }
// 3. 核心控制逻辑:手动模式下的硬件控制 ManualControl(manual_page); // 执行手动模式控制逻辑(KEY3/KEY4控制灯光/窗帘开关) Control_Manager(); // 硬件输出控制(LED、蜂鸣器、窗帘电机执行)
// 4. 模式切换按键处理:短按KEY1切回自动模式 if (KeyNum == KEY_1) { KeyNum = 0; // 清空按键值,避免重复触发 mode = AUTO_MODE; // 切换系统模式为自动模式 count_a = 1; // 重置自动模式子页面计数为1 OLED_Clear(); // 清空OLED屏幕,准备显示自动模式界面 delay_ms(OLED_CLEAR_DELAY); // 清屏后延时150ms,避免OLED闪屏 } break; // 手动模式逻辑结束,跳出switch
case SETTINGS_MODE: // 设置模式(值为3) // 1. 按键处理:调用SetSelection获取KEY2切换的子页面数,缓存到settings_page(仅调用1次) settings_page = SetSelection();
// 2. 页面绘制+数据显示(按页面分段处理,逻辑更清晰) OLED_settingsOption(settings_page); // 显示设置模式当前选中项的>符号/时间选择标记 ThresholdSettings(settings_page); // 执行阈值调节逻辑(KEY3/KEY4修改选中项的数值)
// 页面1:基础阈值设置(温度/湿度/光照/防盗系统) if(settings_page <= SETTINGS_PAGE_1_END)            {                OLED_settingsPage1();          // 绘制设置页面1的固定文字(温度/湿度/光照/防盗阈值标题)                SettingsThresholdDisplay1();   // 显示设置页面1的参数(各阈值数值、防盗开关状态)            }            // 页面2:系统当前时间设置            else if(settings_page <= SETTINGS_PAGE_2_END)            {                OLED_settingsPage2();          // 绘制设置页面2的固定文字(当前时间标题、分隔符)                SettingsThresholdDisplay2();   // 显示设置页面2的参数(当前时/分/秒数值)            }            // 页面3:定时开启时间设置            else if(settings_page <= SETTINGS_PAGE_3_END)            {                OLED_settingsPage3();          // 绘制设置页面3的固定文字(开启时间标题、分隔符)                SettingsThresholdDisplay3();   // 显示设置页面3的参数(开启时/分/秒数值)            }            // 页面4:定时关闭时间设置            else if(settings_page <= SETTINGS_PAGE_MAX)            {                OLED_settingsPage4();          // 绘制设置页面4的固定文字(关闭时间标题、分隔符)                SettingsThresholdDisplay4();   // 显示设置页面4的参数(关闭时/分/秒数值)            }
// 3. 核心控制逻辑(设置模式无硬件输出,仅修改参数,无执行代码)
// 4. 模式切换按键处理:短按KEY1切回自动模式 if (KeyNum == KEY_1) { KeyNum = 0; // 清空按键值,避免重复触发 mode = AUTO_MODE; // 切换系统模式为自动模式 count_a = 1; // 重置自动模式子页面计数为1 OLED_Clear(); // 清空OLED屏幕,准备显示自动模式界面 delay_ms(OLED_CLEAR_DELAY); // 清屏后延时150ms,避免OLED闪屏 // UsartSendReceiveData(); // 模式切换时补1次串口调用,确保数据同步上传 } break; // 设置模式逻辑结束,跳出switch
default: // 异常模式保护:防止模式值错误导致程序异常 mode = AUTO_MODE; // 默认切回自动模式 count_a = 1; // 重置自动模式子页面计数为1 OLED_Clear(); // 清空OLED屏幕,恢复正常显示 delay_ms(OLED_CLEAR_DELAY); // 清屏后延时150ms,避免OLED闪屏 break; // 异常模式处理结束,跳出switch }userHandle();
}}



Part.05实验效果


93ae1414-29c9-11f1-96ea-92fbcf53809c.png


Part.06包含内容


93d07d88-29c9-11f1-96ea-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6078

    文章

    45568

    浏览量

    673296
  • STM32
    +关注

    关注

    2312

    文章

    11189

    浏览量

    374514
  • 机智云
    +关注

    关注

    3

    文章

    649

    浏览量

    27819
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    通过机智物联网平台对家中的晾衣架进行远程控制

    本案例以Android手机为人机交互终端,以STM32F103为核心控制终端,基于机智物联网平台,设计了一套用户通过互联网就能有效地对家中晾衣架进行操作的嵌入式
    发表于 10-19 17:25 2171次阅读

    【「嵌入式系统设计与实现」阅读体验】+ 智能晾衣架

    嵌入式系统设计与实现,封面如下图所示。 分享一下关于3.5章节,智能晾衣架的阅读体验, 在我看到标题时,理解的智能晾衣架的大致模型为带一些传
    发表于 12-30 18:06

    霍尔IC在电动晾衣架中的应用与原理分析

    电动晾衣架采用高精度霍尔传感器实现六大智能防护)‌。 ‌节能与低功耗设计‌ 电动晾衣架多采用纽扣电池供电,霍尔IC的微功耗特性可延长电池寿命至数年,同时降低设备维护成本‌。 二、技术原
    发表于 08-13 11:52

    AMEYA360设计方案丨智能自动晾衣架

    `智能自动晾衣架上海皇华推出的这款智能晾衣架相比传统的手摇机械式的,实现了自动升降功能,还添加手机远程控制,紫外线消毒,照明等一系列功能。尤
    发表于 05-29 17:51

    基于STM32智能晾衣架控制系统设计

    文章设计了一种由晾晒设备端和手机APP移动端组合而成的智能晾衣架控制系统。晾晒设备端以STM32F103C8T6单片机为控制核心,单片机连接传感器,对外界环境进行信息采集,实现对天气的
    发表于 01-15 10:00

    怎样去设计基于51单片机的智能晾衣架系统

    晾衣架的升降(6)具有智能模式,可以根据环境湿度控制晾衣架的升降2.硬件设计(1)总体硬件框图原理:采用8位的STC89C51单片机做控制器,程序采用C语言编程。利用直流电机正反转,实现
    发表于 07-19 09:02

    【毕业设计】基于机智智能晾衣控制系统

    晾衣架进行操作的嵌入式智能控制系统, 避免人不在家时, 衣物被淋湿的问题。该系统开发来自机智开发者的毕设,具备手动和自动两种控制模式实现
    发表于 03-14 17:32

    基于51单片机的智能晾衣架系统设计

    晾衣架的升降(6)具有智能模式,可以根据环境湿度控制晾衣架的升降2.硬件设计(1)总体硬件框图原理:采用8位的STC89C51单片机做控制器,程序采用C语言编程。利用直流电机正反转,实现
    发表于 11-18 09:51 57次下载
    基于51单片机的<b class='flag-5'>智能</b><b class='flag-5'>晾衣架</b>系统设计

    446【毕设课设】基于51单片机智能窗户帘晾衣架雨滴光照大风检测

    446【毕设课设】基于51单片机智能窗户帘晾衣架雨滴光照大风检测
    发表于 11-23 17:06 86次下载
    446【毕设课设】基于51单片<b class='flag-5'>机智能</b>窗户帘<b class='flag-5'>晾衣架</b>雨滴光照大风检测

    基于无线SOC芯片AH462的智能晾衣架

    智能晾衣架通过无线遥控器,可以远程控制晾衣架的升降。更有甚者可以实现照明、杀菌、风干等功能。智能晾衣架
    的头像 发表于 11-16 11:34 1757次阅读

    智能晾衣架,从此一键完成:NRK3303语音识别芯片新方案

    随着人们生活品质的提升与科技的发展,智能家居正在成为越来越多家庭的选择。智能晾衣架作为家居生活的重要设备之一,也开始加入人工智能技术,变得更加智能
    的头像 发表于 06-06 16:36 1716次阅读

    语音模块助力晾衣架智能化升级

    智能语音晾衣架的出现,让家居的智能化程度再上新台阶。不再需要手动拉动晾衣架的升降杆,通过语音指令,我们可以轻松地控制晾衣架的升降,无需过多的
    的头像 发表于 08-04 14:14 2888次阅读
    语音模块助力<b class='flag-5'>晾衣架</b><b class='flag-5'>智能</b>化升级

    智能晾衣架背后的离线语音模块

    通过在晾衣架上嵌入离线语音模块,用户可以通过简单的声音指令控制晾衣架的开关,包括升降、伸展、停止等
    的头像 发表于 09-27 10:43 3041次阅读
    <b class='flag-5'>智能</b><b class='flag-5'>晾衣架</b>背后的离线语音模块

    用语音控制晾衣智能生活从晾衣架开始

      一、晾衣架的新革命:语音识别技术的应用  语音识别晾衣架,顾名思义,就是通过语音识别技术来控制晾衣架升降和衣物晾晒的智能家居产品。与传统的晾衣架
    的头像 发表于 12-07 18:01 3166次阅读
    用语音控制<b class='flag-5'>晾衣</b>,<b class='flag-5'>智能</b>生活从<b class='flag-5'>晾衣架</b>开始

    霍尔元件在智能晾衣架中的应用

    智能化的一个重要指标。成为了众多家庭的优选。霍尔开关在智能晾衣架中发挥了关键作用. 在智能晾衣架上,霍尔开关主要被用于检测
    的头像 发表于 10-25 11:21 1111次阅读
    霍尔元件在<b class='flag-5'>智能</b><b class='flag-5'>晾衣架</b>中的应用