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实时查看环境数据,并对台灯进行远程控制。同时,台灯的本地控制功能也十分完善,可以满足不同场景下的使用需求。
热门推荐
购房预算,如何合理分配?
游戏技术赋能大健康,想象空间有多大?
美国医院专科排名解析,权威榜单揭示顶尖医疗服务
校区置换!理工高校,整体搬迁!
调薪攻略:如何向人力资源部门提出加薪请求
八字命理学中的三合局是什么如何解释其含义与影响
新加坡值得买的药油与药膏推荐,新加坡药油购买攻略(20款)
数字化转型总体规划建设方法
经济独立:现代女性的婚恋新选择
任天堂国行Switch 2026年停服!《舞力全开》等多款游戏受影响
如何判断投标内容的真实性与合法性?
降噪耳机降噪效果下降?这些原因和解决方案请收好
浙江大学罗忠奎团队:全球全剖面土壤有机碳周转与固持系列研究进展(7篇)
厉害了我的疆果果——新疆大坚果N种“神仙吃法”,网红博主都争着做!
NBA巨星科比布莱恩特的个人简介和生涯荣誉
膝关节疼痛常见疾病之一:鹅足肌腱炎
如何洗掉家里的油漆?洗掉油漆时有哪些要点?
Kubernetes入门:Pod、节点、容器和集群都是什么
轴类测量的介绍
机械编程求职指南:三大渠道助你找到理想工作
施工用料计划详解:如何制定、作用与案例分析
空调辅热功能详解及其优缺点分析
数学公式的应用场景:从生活到科学的全面解析!
儿童学习乐器演奏的意义
仓库管理如何做到无人化
球栅阵列(BGA)试验全流程解析:从测试方法到检测设备
新生儿晚上可以开夜灯,但要注意这些细节
鱿鱼须怎么炒好吃?分享5种家常做法,口感鲜美,鲜香美味
审判天使如何降服齐天大圣:从神话到现实的司法启示
西部计划:助力青年成长,推动地区发展