STM32项目分享:校园绿色照明智能控制系统
“我们不做一锤子买卖,只做技术成长的长期伙伴!”
目录
一、视频展示
二、项目简介
三、原理图设计
四、PCB硬件设计
五、程序设计
六、资料分享
一、视频展示
基于STM32的智能安防监控系统设计 -视频分享
二、项目简介
题目:校园绿色照明智能控制系统
主控:STM32
BH1750传感器
oled显示
蓝牙模块
USB小灯
DS1302时钟模块
三按键
功能如下:
1、根据环境亮度,随着不同季节日照时长的不同,
自动控制照明装置开启和关闭例如夏天时晚上7点到第二天5点为开启状态,
冬天是下午五点到早上七点为开启状态。
2、当检测到光照不足的时候蓝牙发送手机异常提示。
3、PWM调光,根据环境光强度自动调光。
4、手机连接蓝牙,可得到单片机的数据。数据可以发送到云端
三、原理图设计

四、PCB硬件设计


五、程序设计
#include "stm32f10x.h" // Device header
#include "delay.h"
#include "lcd.h"
#include "ds1302.h"
#include "IOput.h"
#include "BH1750.h"
#include "pwm.h"
#include "usart.h"float light;
u8 show_flag, show1_flag,light_flag,count,Error=0;void showtime(void)
{ds1032_read_realTime(); //??????OLED_ShowNum(0,4,TimeData.year,4,16);OLED_ShowString(35,4,"/",16);OLED_ShowNum(43,4,TimeData.month,2,16);OLED_ShowString(60,4,"/",16);OLED_ShowNum(70,4,TimeData.day,2,16);OLED_ShowNum(0,6,TimeData.hour,2,16);OLED_ShowString(20,6,":",16);OLED_ShowNum(30,6,TimeData.minute,2,16);OLED_ShowString(50,6,":",16);OLED_ShowNum(60,6,TimeData.second,2,16);}void show_change_time(void)
{OLED_ShowString(0,4,"20",16);OLED_ShowNum(16,4,lssj.year,2,16);OLED_ShowString(35,4,"/",16);OLED_ShowNum(43,4,lssj.month,2,16);OLED_ShowString(60,4,"/",16);OLED_ShowNum(70,4,lssj.day,2,16);OLED_ShowNum(0,6,lssj.hour,2,16);OLED_ShowString(20,6,":",16);OLED_ShowNum(30,6,lssj.minute,2,16);OLED_ShowString(50,6,":",16);OLED_ShowNum(60,6,lssj.second,2,16);Delay_50ms(2);
}int main (void)
{delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);OLED_Init();delay_ms(1);OLED_Clear();Init_BH1750();Usart1_Init(9600);Usart2_Init(9600);TIM_PWM_Init(71,9999);ds1302_gpio_init();input_init();
// while(1){count++;light=read_BH1750(); // ȡBH1750 Ĺ ǿ key_scan();if(light<=30){light_flag=1;}else if(light>30 && light<=60){light_flag=2;}else if(light>60 && light<=100){light_flag=3;}else if(light>100 && light<=130){light_flag=4;}else if(light>130 && light<=160){light_flag=5;}else if(light>160 && light<=200){light_flag=6;}else if(light>200){light_flag=7;}if (key1_flag == 1 && show_flag == 0) {key1_flag = 0;show1_flag++;if (show1_flag >= 2)show1_flag = 0;}// ʱ ҳ if (show1_flag == 1) {OLED_ShowCH(0,0," :");OLED_ShowNum(40,0,light,4,16); OLED_ShowString(96,0,"lx",16);if (key2_flag == 1){key2_flag = 0;show_flag++;}if (show_flag == 7){show_flag = 0;lssj.month = (lssj.month / 10 * 16) + (lssj.month % 10);lssj.day = (lssj.day / 10 * 16) + (lssj.day % 10);lssj.hour = (lssj.hour / 10 * 16) + (lssj.hour % 10);lssj.minute = (lssj.minute / 10 * 16) + (lssj.minute % 10);lssj.second = (lssj.second / 10 * 16) + (lssj.second % 10);lssj.year = lssj.year;ds1032_init();}// ʾ ʱ switch (show_flag){case 0:showtime();lssj.year = TimeData.year - 2000;lssj.month = TimeData.month;lssj.day = TimeData.day;lssj.hour = TimeData.hour;lssj.minute = TimeData.minute;lssj.second = TimeData.second;lssj.week = TimeData.week;break;case 1:show_change_time();if (key1_flag == 1){key1_flag = 0;lssj.year++;}if (key3_flag == 1){key3_flag = 0;lssj.year--;}if (lssj.year > 100)lssj.year = 0;OLED_ShowChar(24, 4, '_', 16);Delay_50ms(2);break;case 2:show_change_time();if (key1_flag == 1){key1_flag = 0;lssj.month++;}if (key3_flag == 1){key3_flag = 0;lssj.month--;}if (lssj.month > 12)lssj.month = 1;if (lssj.month < 1)lssj.month = 12;OLED_ShowChar(51, 4, '_', 16);Delay_50ms(2);break;case 3:show_change_time();if (key1_flag == 1){key1_flag = 0;lssj.day++;}if (key3_flag == 1){key3_flag = 0;lssj.day--;}if (lssj.day > 31)lssj.day = 1;if (lssj.day < 1)lssj.day = 31;OLED_ShowChar(78, 4, '_', 16);Delay_50ms(2);break;case 4:show_change_time();if (key1_flag == 1){key1_flag = 0;lssj.hour++;if (lssj.hour > 23)lssj.hour = 0;}if (key3_flag == 1){key3_flag = 0;lssj.hour--;if (lssj.hour > 200)lssj.hour = 23;}OLED_ShowChar(8, 6, '_', 16);Delay_50ms(2);break;case 5:show_change_time();if (key1_flag == 1){key1_flag = 0;lssj.minute++;if (lssj.minute > 59)lssj.minute = 0;}if (key3_flag == 1){key3_flag = 0;lssj.minute--;if (lssj.minute > 200)lssj.minute = 59;}OLED_ShowChar(38, 6, '_', 16);Delay_50ms(2);break;case 6:show_change_time();if (key1_flag == 1){key1_flag = 0;lssj.second++;if (lssj.second > 59)lssj.second = 0;}if (key3_flag == 1){key3_flag = 0;lssj.second--;if (lssj.second > 200)lssj.second = 59;}OLED_ShowChar(68, 6, '_', 16);Delay_50ms(2);break;default:break;}}// ʾ Ϣ if (show1_flag == 0){OLED_ShowCH(0,0," :");OLED_ShowNum(40,0,light,4,16); OLED_ShowString(96,0,"lx",16);
// OLED_ShowNum(72,2,light_flag,2,16); showtime();OLED_ShowCH(0,2," :");if(TimeData.month>=1 && TimeData.month<7)// Ϊ1 3 £ ļ Ϊ4 6 £ ^Ϊ7 9 £ Ϊ10 12 {OLED_ShowCH(40,2," "); //7 㵽 if((TimeData.hour>=19 && TimeData.hour<=23) || (TimeData.hour>=0 && TimeData.hour<5)){if(light_flag==7){TIM_SetCompare2(TIM2,0);}else if(light_flag==6){TIM_SetCompare2(TIM2,16);}else if(light_flag==5){TIM_SetCompare2(TIM2,32);}else if(light_flag==4){TIM_SetCompare2(TIM2,48);}else if(light_flag==3){TIM_SetCompare2(TIM2,64);}else if(light_flag==2){TIM_SetCompare2(TIM2,70);}else if(light_flag==1){TIM_SetCompare2(TIM2,90);}}else{TIM_SetCompare2(TIM2,0);}}if(TimeData.month>=7 && TimeData.month<=12)// Ϊ1 3 £ ļ Ϊ4 6 £ ^Ϊ7 9 £ Ϊ10 12 {OLED_ShowCH(40,2," ﶬ");// 㵽 ߵ if((TimeData.hour>=17 && TimeData.hour<=23) || (TimeData.hour>=0 && TimeData.hour<7)){if(light_flag==7){TIM_SetCompare2(TIM2,0);}else if(light_flag==6){TIM_SetCompare2(TIM2,16);}else if(light_flag==5){TIM_SetCompare2(TIM2,32);}else if(light_flag==4){TIM_SetCompare2(TIM2,48);}else if(light_flag==3){TIM_SetCompare2(TIM2,64);}else if(light_flag==2){TIM_SetCompare2(TIM2,70);}else if(light_flag==1){TIM_SetCompare2(TIM2,90);}}else{TIM_SetCompare2(TIM2,0);}}}if(light<=50){Error=0;}else{Error=1;}if(count>=50){count=0;UsartPrintf(USART1,"light:%f\r\n",light);if(light<=50){UsartPrintf(USART1," ϣ 뼰ʱ ϵͳ \r\n",light);UsartPrintf(USART1," ʱ :%d %d %d %dʱ%d %d \r\n\r\n",TimeData.year,TimeData.month,TimeData.day,TimeData.hour,TimeData.minute,TimeData.second);}UsartPrintf(USART1,"\r\n");USART_SendData(USART2,'B');delay_ms(1);USART_SendData(USART2,'b');delay_ms(1);USART_SendData(USART2,Error);delay_ms(1);USART_SendData(USART2,'a');delay_ms(1);USART_SendData(USART2,((short int)(light)) >> 8); // ߰ λdelay_ms(1);USART_SendData(USART2,((short int)(light)) & 0x00ff); // Ͱ λdelay_ms(1);USART_SendData(USART2,'E');delay_ms(1);}}
}
六、资料分享
点击即可查看当前资料分享。
