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实时查看环境数据,并对台灯进行远程控制。同时,台灯的本地控制功能也十分完善,可以满足不同场景下的使用需求。
热门推荐
GetColumnIndexByHeader:Excel高手必备神器!
把GPT变成算命大师需要几步?
八字命理必读经典:从入门到精通的书单推荐
女性全方位提升指南:从八字命理到个人能力
倩女手游新玩法《妖妖岂可闹》:沉浸式探秘三界妖怪
从“小白”到“老师”:师范生的教育实习之旅
桦树学校的实习总结:从菜鸟到老师
国航波音747-400退役:最后一次飞行体验
波音747-400模型制作大揭秘!
《爱情公寓》中的正缘画像:从直觉到灵魂共鸣
网抑云搞笑视频合集:笑到肚子疼
搞笑视频:当代年轻人的幽默疗法
电力设计院转型新能源:挑战与机遇并存
BIM技术助力电力设计院数字化升级
秋招面试秘籍:如何秀出你的专业技能?
河南是粮食大省,湖北是鱼米之乡,这两省的区别在哪里呢?
勒叔教你写出高分简历:从零到offer的实战指南
波音747:空中女王50年传奇解析
男性怀孕:科学幻想还是未来可能?
男性怀孕成真?科技突破引发生育革命
这20本励志书籍,值得一读再读,尤其是青少年必读
保险柜使用与管理指南:解决密码遗忘与钥匙丢失问题的实用建议
保险柜使用与管理指南:解决密码遗忘与钥匙丢失问题的实用建议
保险柜电子锁没电了怎么开?教你6个开锁小妙招!
全球尖端脑科学:从神经解码到意识本质探索
华山医院专家黄翔教授直播:科学用脑,让大脑更健康
乌鲁木齐10条公交线路优化调整,部分已实施!
来自年卡持卡人的硬核攻略:玩转上海迪士尼乐园
链式思维在人工智能中:真实洞察还是统计幻影?
34页,超200篇文献,浙江大学最新综述,揭秘大语言模型中知识的利用机制