STM32智能台灯项目详解:从硬件设计到云端控制
创作时间:
作者:
@小白创作中心
STM32智能台灯项目详解:从硬件设计到云端控制
引用
1
来源
1.
https://m.elecfans.com/article/6481788.html
本文将介绍一个基于STM32的智能台灯项目,该台灯集成了温湿度检测、光照强度检测、人体感应等多种功能,并可通过手机APP进行远程控制。项目使用STM32F103C8T6作为主控芯片,通过ESP8266模块接入机智云平台,实现了数据的云端存储和远程控制。
项目简介
功能详解
STM32智能台灯(机智云)系统具有以下功能:
- 检测功能:系统可以检测周围环境的温湿度数据、距离、人体信号、光照强度(Lux)。
- 显示功能:将检测到的数据在OLED屏幕上显示。
- 控制功能:系统可以通过PWM对台灯进行无极调光。
- 手动模式:通过按键控制台灯的亮度。
- 自动模式:当环境亮度低于阈值,并且有人时,会自动调节台灯亮度。
- 护眼功能:当系统检测到人距离台灯过近时,蜂鸣器会发出报警。
- 阈值调节:系统传感器阈值大小可以通过按键或者APP自行设置调节。
- 接入云平台:系统通过ESP8266 WIFI模块连接网络,接入机智云服务器。
- 远程控制:可以通过APP查看传感器数据,以及远程控制台灯、远程调节阈值。
材料清单
- STM32F103C8T6核心板
- DHT11 温湿度传感器
- OLED屏幕
- 蜂鸣器模块
- 超声波模块
- 热释电人体检测模块
- LED灯
- 电池座
- 独立按键
- ESP8266-01S wifi模块
- 云平台机智云
原理图设计
PCB硬件设计
PCB图:
程序设计
int main(void)
{
ADCX_Init();
PWM_Init(100 - 1, 720 - 1);
Timer2_Init(9,14398);
Uart2_Init(9600);
Uart1_Init(115200);
IWDG_Init(); //初始化看门狗
LDR_Init();
OLED_Init();
DHT11_Init();
LED_Init();
Key_Init();
HC_SR501_Init();
HC_SR04_Init();
Buzzer_Init();
MyRTC_Init();
Sensorthreshold.Illumination_threshold = FLASH_R(FLASH_START_ADDR); //从指定页的地址读FLASH
Sensorthreshold.Distance_threshold = FLASH_R(FLASH_START_ADDR+2); //从指定页的地址读FLASH
GENERAL_TIM_Init();
userInit(); //完成机智云初始赋值
gizwitsInit(); //开辟一个环形缓冲区
//GPIO_SetBits(Buzzer_PROT, Buzzer);
//Delay_ms(1200);
while (1)
{
IWDG_ReloadCounter(); //重新加载计数值 喂狗
sensorScan(); //获取传感器数据
switch (menu)
{
case display_page:
MyRTC_ReadTime(); //调用此函数后,RTC硬件电路里时间值将刷新到全局数组
OLED_Menu_SensorData(); //显示主页面传感器数据、系统模式等内容
OLED_Menu(); //显示主页面的固定内容
if (!systemModel)
{
LED_PWM_KEY(); //按键控制LED的PWM
}
//切换系统模式
if (KeyNum == KEY_1)
{
KeyNum = 0;
systemModel = ~systemModel;
if (systemModel)
{
currentDataPoint.valueModel = 1;
}
else
{
currentDataPoint.valueModel = 0;
}
}
//判断是否进入阈值设置界面
if (KeyNum == KEY_Long1)
{
KeyNum = 0;
OLED_Clear(); //清屏
menu = settingsPage; //跳转到阈值设置界面
}
break;
case settingsPage:
OLED_SetInterfacevoid(); //显示阈值设置界面的固定内容
OLED_Option(SetSelection()); //实现阈值设置页面的选择功能
ThresholdModification(SetSelection()); //实现阈值调节功能
//判断是否退出阈值设置界面
if (KeyNum == KEY_2)
{
KeyNum = 0;
OLED_Clear(); //清屏
menu = display_page; //跳转到主界面
//存储修改的传感器阈值至flash内
FLASH_W(FLASH_START_ADDR, Sensorthreshold.Illumination_threshold, Sensorthreshold.Distance_threshold);
currentDataPoint.valueIllumination_threshold = Sensorthreshold.Illumination_threshold;
currentDataPoint.valueDistance_threshold = Sensorthreshold.Distance_threshold;
}
break;
case timeSettingsPage:
OLED_ThresholdTime(); //显示时间设置界面的内容
OLED_Time_Option(SetSelection()); //实现间设置界面的选择功能
TimeModification(SetSelection()); //实现时间调节功能
//判断是否退出时间设置界面
if (KeyNum == KEY_2)
{
KeyNum = 0;
//将更改的数据赋值回RTC数组中
MyRTC_Time[3] = hour;
MyRTC_Time[4] = minute;
MyRTC_Time[5] = second;
MyRTC_SetTime(); //调用此函数后,全局数组里时间值将刷新到RTC硬件电路
OLED_Clear(); //清屏
menu = settingsPage; //回到阈值设置界面
}
break;
}
//判断上位机是否更改阈值,如更改则保存至flash中
if (valueFlashflag)
{
valueFlashflag = 0;
//存储修改的传感器阈值至flash内
FLASH_W(FLASH_START_ADDR, Sensorthreshold.Illumination_threshold, Sensorthreshold.Distance_threshold);
}
userHandle(); //更新机智云数据点变量存储的值
gizwitsHandle((dataPoint_t *)¤tDataPoint); //数据上传至机智云
}
}
实验效果
通过上述设计和实现,智能台灯可以实现预期的功能。用户可以通过手机APP实时查看环境数据,并对台灯进行远程控制。同时,台灯的本地控制功能也十分完善,可以满足不同场景下的使用需求。
热门推荐
传奇游戏经济生态:玩家的赚钱逻辑与商业模式的解析
原来血压也有昼夜节律!24小时动态血压监测的重要性
社会救助全解析:制度构成与现实影响
常吃布洛芬或双氯芬酸钠止痛,可能有哪些危害?止痛还能选什么?
盐酸曲唑酮片和佐匹克隆配合使用好吗
如何编写完美的接口文档示例?详细指南和技巧
改善面部色素沉着(美白剂)的10种功效成分
病历单模板:医疗记录的高效工具
医学可用!推理增强RAG:精准诊断、智能补问、高效解析 | WWW 2025
原神角色人气热度排行
中国海拔最高的10大城市 你在第几名开始有高原反应
多特蒙德vs美因茨数据前瞻:多特近4次交手不胜,美因茨6轮不败
“小而精”撬动“大而广”,这一新型研究型大学的“支点”是什么?
一个被忽视的养生要穴——长强穴(尾闾)
十二星座的爱情忠诚度大揭秘
VMware虚拟机修复完全指南
大量阅读:英语学习的金钥匙
云架构师应该熟悉的7个AWS VPC最佳实践
屋子里太干燥怎么办?如何增加房间里的湿度
机票三天降400元正常吗?民航局官网回复
如何运用资金进行股票投资并实现财富增长?这种投资方式如何控制风险?
埃及、苏丹反英斗争
美术生一般用多大的画板?选购指南及推荐尺寸!
如何保持摩托车行驶中的稳定性?这些技巧对防止熄火有何帮助?
百度百科词条创建全流程总结,简单易懂又好用!
哪些室内植物对人体有益?它们有哪些健康益处?
绿牌车牌测吉凶,车牌号码背后的文化与信仰
剖腹产后多久可以跑步运动减肥
车辆安全真相揭秘:车身结构与材质,哪个才是安全的关键?
从英特尔到AMD:深入解析多款CPU性能,帮你找到最适合自己的型号