基于STM32的智能晾衣架设计
引言
随着智能家居的普及,智能晾衣架成为了提升生活便利性的重要设备。智能晾衣架通过集成多个传感器,能够自动感知天气变化、湿度、光照等环境因素,实现自动升降、风干和报警功能,帮助用户更加高效地晾晒衣物。本项目基于STM32设计了一个智能晾衣架系统,能够检测环境条件,控制晾衣架自动伸缩,保护衣物免受天气影响。
环境准备
1. 硬件设备
- STM32F103C8T6 开发板(或其他 STM32 系列)
- 温湿度传感器(如 DHT11 或 DHT22,用于监测环境温湿度)
- 光照传感器(如 BH1750,用于检测光照强度)
- 雨滴传感器(用于检测下雨情况)
- 电机驱动模块(如 L298N,用于驱动电机升降衣架)
- 电动推杆(用于实现晾衣架的升降功能)
- OLED 显示屏(用于显示当前环境数据和衣架状态)
- Wi-Fi 模块(如 ESP8266,用于远程监控和数据上传)
- 蜂鸣器(用于报警提示)
- USB-TTL 串口调试工具
- 电阻、杜邦线、面包板等基础电子元件
2. 软件工具
- STM32CubeMX:用于初始化 STM32 外设。
- Keil uVision 或 STM32CubeIDE:用于编写和下载代码。
- ST-Link 驱动程序:用于下载程序到 STM32。
项目实现
1. 硬件连接
- 温湿度传感器连接:将 DHT11 温湿度传感器的数据引脚连接到 STM32 的 GPIO(如 PA0),用于监测室外环境的温湿度。
- 光照传感器连接:将 BH1750 光照传感器的 SDA 和 SCL 引脚连接到 STM32 的 I2C 接口(如 PB6 和 PB7),用于检测环境光强度。
- 雨滴传感器连接:将雨滴传感器的模拟输出引脚连接到 STM32 的 ADC 输入引脚(如 PA1),用于检测是否下雨。
- 电机驱动模块连接:将 L298N 电机驱动模块的控制引脚连接到 STM32 的 GPIO(如 PA2、PA3),用于控制电动推杆实现衣架升降。
- OLED 显示屏连接:将 OLED 的 SDA 和 SCL 引脚连接到 STM32 的 I2C 接口(如 PB6 和 PB7),用于显示当前的温湿度、光照、雨水情况等信息。
- Wi-Fi 模块连接:将 Wi-Fi 模块的 TX/RX 引脚连接到 STM32 的 USART 接口(如 PA9 和 PA10),用于远程监控和控制。
- 蜂鸣器连接:将蜂鸣器的控制引脚连接到 STM32 的 GPIO(如 PA4),用于发出异常天气报警提示。
- 其他连接:为 STM32、传感器、显示屏、电机驱动模块等提供稳定的电源,并确保信号线接线正确。
2. STM32CubeMX 配置
- 打开 STM32CubeMX,选择你的开发板型号。
- 配置系统时钟为 HSI,确保系统稳定运行。
- 配置 GPIO 用于连接传感器、电机驱动和蜂鸣器等。
- 配置 ADC,用于读取雨滴传感器的模拟信号。
- 配置 I2C,用于与 OLED 显示屏和光照传感器通信。
- 配置 USART,用于与 Wi-Fi 模块通信。
- 生成代码,选择 Keil 或 STM32CubeIDE 作为工具链。
3. 编写主程序
在生成的项目基础上,编写温湿度、光照、雨水检测、晾衣架升降控制、Wi-Fi上传、报警提示等功能的代码。以下是智能晾衣架系统的基本代码示例:
#include "stm32f1xx_hal.h"
#include "dht11.h"
#include "bh1750.h"
#include "rain_sensor.h"
#include "motor_control.h"
#include "oled.h"
#include "wifi.h"
#include "gpio.h"// 定义阈值
#define TEMP_THRESHOLD 35.0 // 温度阈值(摄氏度)
#define HUMIDITY_THRESHOLD 80.0 // 湿度阈值(%)
#define LIGHT_THRESHOLD 300 // 光照强度阈值(Lux)
#define RAIN_THRESHOLD 100 // 雨滴传感器的阈值// 函数声明
void System_Init(void);
void Measure_Environment(void);
void Display_Data(void);
void Control_Clothes_Rack(void);
void Remote_Monitoring(void);
void Check_Alarm(void);
void Trigger_Alarm(void);// 全局变量
float temperature = 0; // 当前温度
float humidity = 0; // 当前湿度
uint16_t light_intensity = 0;// 光照强度
uint16_t rain_detected = 0; // 雨滴传感器检测值
uint8_t alarm_flag = 0; // 报警标志void System_Init(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();MX_I2C1_Init();MX_USART1_UART_Init();OLED_Init();DHT11_Init();BH1750_Init();Rain_Sensor_Init();Motor_Control_Init();WiFi_Init();OLED_ShowString(0, 0, "Smart Clothes Rack Ready");
}// 测量环境参数
void Measure_Environment(void)
{// 读取温湿度传感器数据DHT11_ReadData(&temperature, &humidity);// 读取光照传感器数据light_intensity = BH1750_ReadLightLevel();// 读取雨滴传感器数据rain_detected = Rain_Sensor_Read();
}// 显示数据
void Display_Data(void)
{OLED_Clear();OLED_ShowString(0, 0, "Temp: ");OLED_ShowFloat(64, 0, temperature, 2);OLED_ShowString(0, 1, "Humidity: ");OLED_ShowFloat(64, 1, humidity, 2);OLED_ShowString(0, 2, "Light: ");OLED_ShowNumber(64, 2, light_intensity, 4);OLED_ShowString(0, 3, "Rain: ");OLED_ShowNumber(64, 3, rain_detected, 4);
}// 晾衣架控制
void Control_Clothes_Rack(void)
{// 如果下雨或湿度过高,衣架自动收回if (rain_detected > RAIN_THRESHOLD || humidity > HUMIDITY_THRESHOLD){Motor_Control_Retract(); // 收回晾衣架}// 如果光照充足且无雨,衣架自动伸出else if (light_intensity > LIGHT_THRESHOLD && rain_detected < RAIN_THRESHOLD){Motor_Control_Extend(); // 伸出晾衣架}
}// 远程监控上传数据
void Remote_Monitoring(void)
{WiFi_SendData(temperature, humidity, light_intensity, rain_detected);
}// 报警检查
void Check_Alarm(void)
{if (rain_detected > RAIN_THRESHOLD){alarm_flag = 1;Trigger_Alarm(); // 触发报警}else{alarm_flag = 0;}
}// 触发报警
void Trigger_Alarm(void)
{HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // 蜂鸣器报警HAL_Delay(500);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // 关闭蜂鸣器
}int main(void)
{System_Init();while (1){Measure_Environment(); // 测量环境参数Display_Data(); // 显示数据Control_Clothes_Rack(); // 晾衣架控制Remote_Monitoring(); // 远程监控上传Check_Alarm(); // 检查报警条件HAL_Delay(1000); // 每秒更新一次}
}
4. 各模块代码
温湿度传感器
通过 DHT11 传感器读取当前的环境温湿度:
#include "dht11.h"// 初始化 DHT11 传感器
void DHT11_Init(void)
{// 配置 GPIO,用于读取温湿度数据
}// 读取温湿度数据
void DHT11_ReadData(float* temperature, float* humidity)
{// 从传感器读取数据并转换为温湿度值*temperature = 26.0; // 假设当前温度为 26°C*humidity = 60.0; // 假设当前湿度为 60%
}
光照传感器
通过 BH1750 传感器监测环境的光照强度:
#include "bh1750.h"// 初始化 BH1750 传感器
void BH1750_Init(void)
{// 配置 I2C 接口,初始化光照传感器
}// 读取光照强度
uint16_t BH1750_ReadLightLevel(void)
{// 从传感器读取光照强度return 350; // 假设当前光照强度为 350 Lux
}
雨滴传感器
通过雨滴传感器检测是否有雨水降落:
#include "rain_sensor.h"// 初始化雨滴传感器
void Rain_Sensor_Init(void)
{// 配置 ADC 接口,用于读取雨滴传感器数据
}// 读取雨滴传感器数据
uint16_t Rain_Sensor_Read(void)
{// 从传感器读取雨滴检测值return 80; // 假设当前检测到的雨滴信号强度为 80
}
电机控制
通过电机驱动模块控制晾衣架的伸出和收回:
#include "motor_control.h"// 初始化电机驱动模块
void Motor_Control_Init(void)
{// 配置 GPIO,用于控制电机驱动模块
}// 控制电机伸出晾衣架
void Motor_Control_Extend(void)
{// 控制电机使晾衣架伸出
}// 控制电机收回晾衣架
void Motor_Control_Retract(void)
{// 控制电机使晾衣架收回
}
OLED 显示
OLED 显示屏用于显示当前的环境数据:
#include "oled.h"// 初始化 OLED 显示屏
void OLED_Init(void)
{// OLED 初始化代码
}// 显示字符串
void OLED_ShowString(uint8_t x, uint8_t y, const char *str)
{// 在 OLED 显示屏上显示字符串
}// 显示浮点数
void OLED_ShowFloat(uint8_t x, uint8_t y, float num, uint8_t decimal_places)
{// 显示带小数的数值
}// 显示整数
void OLED_ShowNumber(uint8_t x, uint8_t y, uint32_t num, uint8_t len)
{// 显示整数值
}// 清屏
void OLED_Clear(void)
{// 清除 OLED 显示内容
}
Wi-Fi 数据上传
通过 Wi-Fi 模块将环境数据上传到服务器,实现远程监控:
#include "wifi.h"// 初始化 Wi-Fi 模块
void WiFi_Init(void)
{// 配置 USART 接口,初始化 Wi-Fi 模块
}// 上传数据到远程服务器
void WiFi_SendData(float temperature, float humidity, uint16_t light, uint16_t rain)
{// 通过 Wi-Fi 发送环境数据
}
⬇帮大家整理了单片机的资料
包括stm32的项目合集【源码+开发文档】
点击下方蓝字即可领取,感谢支持!⬇
点击领取更多嵌入式详细资料
问题讨论,stm32的资料领取可以私信!
系统工作原理
-
环境检测:系统通过温湿度传感器、光照传感器和雨滴传感器实时监测室外的天气变化,包括温度、湿度、光照强度和雨水情况。每隔一段时间,系统会对传感器进行数据采集,并显示在 OLED 屏幕上。
-
智能控制:根据监测到的环境数据,系统自动判断是否需要伸出或收回晾衣架。例如,检测到下雨或湿度过高时,系统会自动收回晾衣架;当光照充足且无雨时,晾衣架会自动伸出,确保衣物能够正常晾晒。
-
报警功能:系统设置了雨水和湿度的阈值。当检测到天气条件不利于晾晒衣物时,系统通过蜂鸣器发出报警提醒用户,并自动收回晾衣架。
-
数据上传与远程监控:系统通过 Wi-Fi 模块将监测到的环境数据上传到远程服务器,实现对智能晾衣架的远程监控和管理。用户可以通过手机或电脑查看当前的天气状况和晾衣架状态。
常见问题与解决方法
1. 晾衣架自动控制失灵
- 问题原因:传感器数据异常或电机驱动模块连接不良。
- 解决方法:检查传感器的连接是否牢固,确保数据读取准确,同时检查电机驱动模块的电源和控制信号。
2. Wi-Fi连接不稳定
- 问题原因:Wi-Fi模块信号弱或网络配置错误。
- 解决方法:确保Wi-Fi信号覆盖良好,并正确配置网络连接参数。
3. OLED显示屏不工作
- 问题原因:I2C通信故障或OLED模块损坏。
- 解决方法:检查I2C连接,确保OLED模块初始化正确。
扩展功能
-
语音控制:增加语音识别模块,让用户通过语音控制晾衣架的升降操作。
-
手机APP控制:开发手机APP,用户可以通过APP远程控制晾衣架的伸缩、风干和加热功能。
-
智能风干功能:集成风干和加热模块,在天气恶劣时,智能晾衣架可以自动启动风干模式,帮助衣物快速干燥。
结论
通过本项目,我们设计了一个基于STM32的智能晾衣架系统,能够实时监测环境的温湿度、光照和雨水情况,并根据天气变化自动控制晾衣架的伸缩,保护衣物免受不良天气影响。系统还具备远程监控和报警功能,能够为用户提供更加便捷的智能家居体验。未来可以通过增加语音控制、手机APP等功能,进一步提升系统的智能化水平。
相关文章:

基于STM32的智能晾衣架设计
引言 随着智能家居的普及,智能晾衣架成为了提升生活便利性的重要设备。智能晾衣架通过集成多个传感器,能够自动感知天气变化、湿度、光照等环境因素,实现自动升降、风干和报警功能,帮助用户更加高效地晾晒衣物。本项目基于STM32设…...

【MAUI】模糊控件(毛玻璃高斯模糊亚克力模糊)
文章目录 XAML.CSToBytes方法使用效果 常试过AcrylicView.MAUI和Sharpnado.MaterialFrame,对于二者教程很少,使用直接写控件然后调属性,没有报错但也并没有效果所幸就自己写一个 XAML <?xml version"1.0" encoding"utf-…...

深度学习:pandas篇
1. Pandas 基础 Pandas 是一个帮助你处理和分析数据的工具 安装 Pandas pip install pandas 导入 Pandas,我们用 pd 来代替 Pandas 的全称,这样以后写代码的时候更简洁 import pandas as pd 建 Series 和 DataFrame Pandas 最基本的两个数据结构是…...

Redis学习文档(Redis基本数据类型【Hash、Set】)
Hash(哈希) 介绍 Redis 中的 Hash 是一个 String 类型的 field-value(键值对) 的映射表,特别适合用于存储对象,后续操作的时候,你可以直接修改这个对象中的某些字段的值。 Hash 类似于 JDK1.…...

15分钟学Go 第9天:函数的定义与调用
第9天:函数的定义与调用 欢迎来到第9天的Go语言学习模块!今天我们将深入探讨函数的定义与调用,帮助你掌握如何编写和使用函数。学习函数不仅是Go语言的基础,也是程序设计的核心概念之一。这一节将详细介绍函数的结构、参数传递、…...

Java虚拟机:JVM介绍
1024 程序员节日快乐!愿您我的代码永远没有 bug ,人生永远没有 bug ! JVM 概述JVM 架构 概述 JVM( Java Virtual Machine ,Java 虚拟机),是 Java 语言的运行环境,是运行所有 Java 程…...

R数据科学 16.5.3练习题
(1) 编写代码以使用一种映射函数完成以下任务。 a. 计算 mtcars 数据集中每列的均值。 b. 确定 nycflights13::flights 数据集中每列的类型。 c. 计算 iris 数据集中每列唯一值的数量。 d. 分别使用 μ -10、0、10 和 100 的正态分布生成 10 个随机数。 library(purrr) # 计算…...

通过conda install -c nvidia cuda=“11.3.0“ 安装低版本的cuda,但是却安装了高版本的12.4.0
问题 直接通过 conda install -c nvidia cuda"11.3.0"安装得到的却是高版本的 不清楚原理 解决方法 不过我们可以分个安装 runtime toolkit 和 nvcc 安装指定版本的 cudatoolkit 和 nvcc conda install -c nvidia cuda-cudart"11.3.58" conda instal…...

简易CPU设计入门:验证取指令模块
项目代码下载 还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后ÿ…...

【MySQL数据库】MySQL主从复制
文章目录 MySQL主从复制MySQL主从复制的分类MySQL主从复制原理MySQL主从复制的配置步骤MySQL主从复制的同步模式 MySQL主从复制实验环境准备关闭防火墙和 SELinux时间同步主服务器设置从服务器设置 MySQL 主从复制配置主服务器配置从服务器配置(以 Slave1 为例&…...

CDC变更数据捕捉技术是什么?和ETL有什么不同?
一、什么是CDC技术? 变更数据捕获(Change Data Capture,简称 CDC)是一种用于识别和跟踪数据源中发生变化的数据的技术。 工作原理: 1.监测数据源:CDC 工具会持续监测指定的数据源,如数据库表、文件系统…...

一种用于推进欧洲临床中心中风管理的联邦学习平台即服务
论文标题:A Federated Learning Platform as a Service for Advancing Stroke Management in European Clinical Centers 作者信息: Diogo Reis Santos, Albert Sund Aillet, Antonio Boiano, Usevalad Milasheuski, Lorenzo Giusti, Marco Di Gennaro…...

给哔哩哔哩bilibili电脑版做个手机遥控器
前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而,电脑版的bilibili不能通过手机控制视频翻页和调节音量,这意味着观看视频时需要一直坐在电脑旁边。那么,有没有办法制作一个手机遥控器来控制bilibili电脑版呢? 首先…...

opencv dnn模块 示例(27) 目标检测 object_detection 之 yolov11
文章目录 1、YOLO v11 介绍1.1、改进点特性1.2、性能对比1.3、多任务支持 2、测试2.1、官方Python测试2.2、Opencv dnn测试2.3、测试统计 3、训练 1、YOLO v11 介绍 YOLO11是Ultralytics实时目标探测器系列中最新的迭代版本,重新定义尖端的精度、速度和效率。在以往…...

鸿蒙开发融云demo初始化和登录
鸿蒙开发融云IMKit初始化和登录 融云鸿蒙版是不带UI的,得自己一步步搭建。 下面说如何初始化和登录: 一、初始化: /*** desc : 初始化融云* author : congge on 2024-07-12 15:47**/public static initRongIm() {IMEngine.getInstance()…...

手机防窥膜的工作原理是怎样的?有必要使用防窥膜吗?
在信息高度发达的社会中,我们通过手机可以实现非常多的操作,同时手机中有存在许多我们的隐私信息,伴随使用手机的时间增多,手机中的信息也有可能被暴露,尤其是在公共场所旁人很容易通过瞥视你的手机屏幕获取到一些信息…...

【Python_PySide6学习笔记(三十九)】基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格
基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格 基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格前言1、实现要点1.1 继承和初始化1.2 定义textChanged的槽函数1.3 格式化逻辑1…...

23种设计模式口诀速记
设计模式的核心在于提供了相关问题的解决方案,使得人们可以更加简单方便的复用成功的设计和体系结构 23种设计模式,此处不举例,可以去看我上传的资源里面由详细汇总 口诀: 创建:想见员工丹 [抽象工厂、建造者(生成者…...

n > m 将输出文件 m 和 n 合并。 n < m 将输入文件 m 和 n 合并。 有什么区别
在你的描述中,似乎有一点误解。n >& m 和 n <& m 并不是用来合并文件的,而是用于重定向文件描述符(file descriptors)。让我澄清一下这两个命令的确切含义以及它们之间的区别。 n >& m —— 输出重定向 含…...

语言障碍在自闭症儿童中的表现及应对
自闭症儿童常常面临着语言障碍的困扰,这给他们的成长和发展带来了巨大挑战。 语言障碍在自闭症儿童中的表现形式多样。比如,有个叫小明的自闭症儿童,已经五岁了却还只会说一些简单的词语,如 “爸爸”“妈妈”“要” 等,…...

(成功解决)ubuntu22.04不小心更新成了atzlinux12.7.1,右上角出现红色错误符号
文章目录 🌕问题🌕查看系统版本🌕为什么更新更成了atzlinux🌕通过修复依赖关系尝试解决右上角红色错误符号🌕把源换成ubuntu的源🌕删除atzlinux源和自定义的第三方源🌕重新创建/etc/os-release文…...

005 C#语言基本元素概览,初识类型,变量与方法
构成C#语言的基本元素 标记 :C#编译器可以识别的文本 关键字(Keyword)操作符(Operator)标识符(Identifier)标点符号文本注释和空白 简要介绍数据据类型、变量与方法 变量是存放数据的地方,简称数据 方法是处理数据的逻辑,简称算法 程序…...

Spring Cloud --- Sentinel 授权规则
授权规则概述 在某些场景下,需要根据调用接口的来源判断是否允许执行本次请求。此时就可以使用 Sentinel 提供的授权规则来实现,Sentinel 的授权规则能够根据请求的来源判断是否允许本次请求通过。 在 Sentinel 的授权规则中,提供了 白名单…...

计算机网络基础 - 传输层(1)
计算机网络基础 传输层概述多路复用与解复用概述解复用的工作原理无连接多路解复用面向连接的多路复用 无连接运输:UDP概述UDP 主要应用UDP 报文段结构 可靠数据传输的原理概述构建可靠数据传输协议经完全可靠信道的可靠数据传输:rdt1.0经具有比特差错信…...

Chrome DevTools:Console Performance 汇总篇
Chrome DevTools Chrome 开发者工具是一套 Web 开发者工具,直接内置于 Google Chrome 浏览器中。 开发者工具可以帮助您即时修改页面和快速诊断问题,最终帮助您更快地构建更好的网站。 一、开启 DevTools 右上角菜单 > 更多工具 > 开发者工具 页面…...

【Spark | Spark-Core篇】RDD行动算子action
使用转换算子是产生一个新的rdd,此时在driver端会生成一个逻辑上的执行计划,但任务还没有执行。但所谓的行动算子,其实就是触发作业执行的方法(runJob)。底层代码调用的是环境对象的runJob方法。 1. reduce 函数源码&…...

23.Redis核心数据结构
一、String(k-v) 字符串常规操作 备注 应用场景 SET key value 存入字符转键值对 单值缓存、对象缓存 MSET [key value, key value] 批量存储字符串键值对 对象缓存 SETNX key value 存入一个不存在的键值对 分布式锁 GET KEY 获取一个字符串键值 MGET [key,key,…...

免费送源码:Node.JS+Express+MySQL Express 流浪动物救助系统 计算机毕业设计原创定制
摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,流浪动物救助系…...

基于Java+Springboot+Vue开发的旅游景区管理系统
项目简介 该项目是基于JavaSpringbootVue开发的旅游景区管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的旅…...

Python 实现的风控系统(使用了kafka、Faust、模拟drools、redis、分布式数据库)
以下是一个使用 Python 实现的风控系统示例,涵盖以下技术组件: Kafka 消息中间件:用于实时接收支付业务系统传递的交易数据。Faust(Kafka Streams 的 Python 等价):用于流式处理 Kafka 中的消息。规则引擎…...