目录
一、前言
二、项目简介
1.功能详解
2.主要器件
三、原理图设计
四、PCB硬件设计
PCB图
五、程序设计
六、实验效果
七、资料内容
项目分享
一、前言
项目成品图片:
哔哩哔哩视频链接:
https://www.bilibili.com/video/BV1My411q7fE/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2
(资料分享见文末)
二、项目简介
1.功能详解
基于STM32的智能台灯(机智云)系统
功能如下:
- 检测功能:系统检测周围 温湿度数据、距离、人体信号、光照强度
- 显示功能:将检测到的数据显示在oled屏幕上
- 控制功能:系统通过PWM对台灯进行无极调光
- 模式选择:可选择手动模式或者自动模式
- 护眼功能:当系统检测到人距离台灯过近时蜂鸣器报警
- 阈值调节:系统传感器阈值大小可以通过按键或者APP自行设置调节
- 云平台:系统通过WIFI模块连接网络,接入机智云服务器
- 远程控制:可以通过APP查看数据、远程控制台灯、远程调节阈值
2.主要器件
- STM32F103C8T6最小系统板
- DHT11温湿度传感器
- OLED显示屏(4针I2C协议)
- WiFi模块(ESP8266-01s)
- 大功率LED模块
- HC-SR04超声波传感器
- HC-SR501人体红外传感器
- 光敏电阻传感器
- 蜂鸣器
- LED灯
三、原理图设计
四、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); //从指定页的地址读FLASHSensorthreshold.Distance_threshold = FLASH_R(FLASH_START_ADDR+2); //从指定页的地址读FLASHGENERAL_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); //数据上传至机智云 }
}
六、实验效果
七、资料内容