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实时查看环境数据,并对台灯进行远程控制。同时,台灯的本地控制功能也十分完善,可以满足不同场景下的使用需求。
热门推荐
成人缺钙怎么检查
一文读懂!影响国际空运运费的五大关键因素
混动大乱斗!十款爆款SUV全方位解析
高通骁龙处理器性能排行:从旗舰到中端的全解析
ST易联众财报多项财务数据异常
花胶和鱼胶有什么区别
男士白玉手链串珠设计:选择合适珠子数量的指南
一清二白和一青二白的区别
从普通工人到“蓝领科学家”,有多远?
从普通工人到"蓝领科学家":一个关于坚持与突破的故事
安徽科技学院、皖南医学院拟分别更名为安徽科技工程大学、皖南医科大学
谁最先说的印欧语?DNA指向6400年前的欧亚牧民
水稻“三控”施肥技术:如何实现增产增收与环境保护双赢?
漫步城邦,与哲人闲聊,那不勒斯的烟火气如何解冻古希腊的玄思?
红军长征初期,中央纵队和军团组织序列,毛主席担任什么职务?
发现这几种情况,要赶紧报警!
终身寿险什么意思?概念+分类+意义+优缺点分析
10大南方最著名的土特产,最受欢迎的十大南方特产排名
年薪36万怎么进行个税筹划以降低税负?
提升学生自主学习能力的教学策略
不让你胖,国家都出手了!西南地区食谱怎么用?干货全部告诉你!
便秘自然疗法全攻略:从饮食到心理的全方位调理方案
减脂期便秘怎么快速排便
现值和终值的计算公式
2025年企业入职管理制度与劳动法合规要点解析
构成立功的条件有哪些?共同犯罪如何认定立功?
什么是软管接头?软管接头类型和作用、尺寸介绍
剧情脚本创作指南:涵构思、构建、润色全流程的实用教程
龙感湖国家级自然保护区
快速止鼾5个妙招,让你和打呼噜说再见