項目成品圖片:

01
—
項目簡介
1.功能詳解
功能如下:
1. STM32F103C8T6單片機系統板作為主控單元
2. 按鍵切換模式,支持智能/按鍵/遠程/語音四種模式
3. 光敏電阻采集光照強度,超聲波傳感器采集坐姿距離,所有參數顯示在OLED上
4. 智能模式:自動識別有人開燈,并根據環境光強度控制燈的亮度
5. 按鍵模式:按鍵手動調節燈亮度(三檔),可以按鍵控制計時
6. 遠程模式:通過手機藍牙APP遠程控制臺燈開關與計時操作
7. 語音模式:通過語音識別控制臺燈調光與計時功能
8. 坐姿報警:超聲波距離報警,距離小于10cm提醒坐姿
2.材料清單
STM32F103C8T6單片機
OLED 屏幕
光敏電阻傳感器
超聲波傳感器
SNR016語音識別模塊
HC-SR04超聲波模塊
大功率LED模塊
有源蜂鳴器
02
—
原理圖設計
03
—
PCB硬件設計
PCB圖
04
—
程序設計
#include"led.h"#include"delay.h"#include"key.h"#include"sys.h"#include"oled.h"#include"usart.h"#include"exti.h"#include"timer.h"#include"HC_SR04.h"#include"kalman.h"#include"lsens.h"#include"adc.h"#include"hongwai.h"#include"BEEP.h"#include"usart2.h"#include"usart3.h"
externu8 Res1, Res3;externinttimer1;u16 sonic_dis =0;intmain(void){ intkey =0, flag1 =0, flag2 =0, flag3 =0, flag4 =0, guangmi =0, flag5 =0; delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(115200); usart3_Init(9600); LED_Init(); BEEP_Init(); OLED_Init(); KEY_Init(); Lsens_Init(); hongwai(); //人體
TIM3_Int_Init(9,71); //10us EXTIX_Init(); hc_sr04_init(); //HC_SR04初始化
TIM4_Int_Init(9999,7199); //計時 TIM2_PWM_Init(899,0); //調節亮度
TIM_SetCompare2(TIM2,899);
BEEP =0; OLED_ShowCHinese(35,0,0); OLED_ShowCHinese(50,0,1); OLED_ShowCHinese(65,0,2); OLED_ShowCHinese(80,0,3); //標題
OLED_ShowCHinese(0,2,6); OLED_ShowCHinese(15,2,7); OLED_ShowString(30,2,":",16);//模式
OLED_ShowCHinese(0,4,16); OLED_ShowCHinese(15,4,17); OLED_ShowString(30,4,":",16);//狀態
OLED_ShowCHinese(70,4,22); //無人 OLED_ShowCHinese(85,4,23); OLED_ShowString(100,4,":",16);//狀態
OLED_ShowCHinese(0,6,24); //時間 OLED_ShowCHinese(15,6,25); OLED_ShowString(30,6,":",16); OLED_ShowString(65,6,"s",16);
while(1) { usart2_init(9600); //藍牙通信
sonic_Trig(); //超聲波 sonic_dis = sonic_distance /10; OLED_ShowNum(75,6, sonic_distance /10,4,16); OLED_ShowString(110,6,"cm",16);
if(sonic_distance /10>10) { BEEP =0; } elseif(sonic_distance /10<=?10)? ? ? ? {? ? ? ? ? ? BEEP =?1;? ? ? ? }
guangmi =Lsens_Get_Val(); //亮度 OLED_ShowNum(110,4, guangmi,2,16);
key =KEY_Scan(0); if(key ==1) { flag1 +=1; if(flag1 >3) flag1 =0; } if(flag1 ==0) //智能模式 { OLED_ShowCHinese(45,2,4); OLED_ShowCHinese(60,2,5); OLED_ShowCHinese(75,2,6); OLED_ShowCHinese(90,2,7); if(renti ==0) { OLED_ShowCHinese(40,4,18);//有人 OLED_ShowCHinese(55,4,19); flag2 =1; } elseif(renti ==1)
{ OLED_ShowCHinese(40,4,20);//無人 OLED_ShowCHinese(55,4,21); flag2 =0; } if(flag2 ==1) {
if(guangmi >20&& guangmi <=?40)? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? TIM_SetCompare2(TIM2,?200);? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? if?(guangmi >40&& guangmi <=?60)? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? TIM_SetCompare2(TIM2,?400);? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? if?(guangmi >60) { TIM_SetCompare2(TIM2,800); } } elseif(flag2 ==0) {
TIM_SetCompare2(TIM2,899);//關燈 }
} if(flag1 ==1) { OLED_ShowCHinese(45,2,8); OLED_ShowCHinese(60,2,9); OLED_ShowCHinese(75,2,10); OLED_ShowCHinese(90,2,11);//按鍵模式
if(key ==2) { flag3 +=1;if(flag3>3){flag3=0;} } if(flag3 ==0) { TIM_SetCompare2(TIM2,899); } elseif(flag3 ==1) { TIM_SetCompare2(TIM2,800); }elseif(flag3 ==2) { TIM_SetCompare2(TIM2,600); }elseif(flag3 ==3) { TIM_SetCompare2(TIM2,400); }
if(key ==3) { flag4 = !flag4;//計時 } if(flag4 ==1) { TIM_Cmd(TIM4, ENABLE); //使能TIMx OLED_ShowNum(40,6, timer1,3,16); } if(flag4 ==0) { TIM_Cmd(TIM4, DISABLE); //使能TIMx OLED_ShowNum(40,6, timer1,3,16); } }
if(flag1 ==2) { OLED_ShowCHinese(45,2,12); OLED_ShowCHinese(60,2,13); OLED_ShowCHinese(75,2,14); OLED_ShowCHinese(90,2,15);//遠程模式
switch(Res1) { case1: TIM_SetCompare2(TIM2,400); break;//開燈 case2: TIM_SetCompare2(TIM2,899); break;//關燈
case3: TIM_Cmd(TIM4, ENABLE); OLED_ShowNum(40,6, timer1,3,16); break;//開啟計時 case4: TIM_Cmd(TIM4, DISABLE); OLED_ShowNum(40,6, timer1,3,16); break;//關閉計時 case5: TIM_SetCompare2(TIM2,200); break;//三檔燈光 case6: TIM_SetCompare2(TIM2,500); break;//二檔燈光
case7: TIM_SetCompare2(TIM2,800); break;//一檔燈光 case8: TIM_Cmd(TIM4, DISABLE); timer1 =0; OLED_ShowNum(40,6, timer1,3,16); break;//清零 }
}
if(flag1 ==3) { OLED_ShowCHinese(45,2,26); OLED_ShowCHinese(60,2,27); OLED_ShowCHinese(75,2,28); OLED_ShowCHinese(90,2,29);//語音模式 Uart3_SendCMD2(0x01, guangmi); Uart3_SendCMD2(0x02, sonic_distance /10); switch(Res3) { case1: TIM_SetCompare2(TIM2,400); break;//開燈 case2: TIM_SetCompare2(TIM2,899); break;//關燈 case3: TIM_SetCompare2(TIM2,800);
break;//一檔燈光 case4: TIM_SetCompare2(TIM2,500); break;//二檔燈光 case5:TIM_SetCompare2(TIM2,200); break;//三檔燈光 case6: TIM_Cmd(TIM4, ENABLE); OLED_ShowNum(40,6, timer1,3,16); break;//開啟計時 case7: TIM_Cmd(TIM4, DISABLE); OLED_ShowNum(40,6, timer1,3,16); break;//關閉計時 case8: TIM_Cmd(TIM4, DISABLE); timer1 =0;//清零 OLED_ShowNum(40,6, timer1,3,16); break; }
} if(key ==4) { timer1 =0; }
}}
05
—
實驗效果
-
臺燈
+關注
關注
1文章
136瀏覽量
29939 -
STM32
+關注
關注
2289文章
11012瀏覽量
362367 -
智能語音
+關注
關注
11文章
797瀏覽量
49383
發布評論請先 登錄
stm32項目搭建基礎
基于HAL庫的STM32項目問題描述
STM32項目設計:基于STM32F4的mp3、wav音樂播放器 (UCOSIII操作系統、GUI控件)

STM32項目實戰:基于STM32U5的智能燈光控制系統(LVGL),附項目教程/源碼

STM32項目實戰:基于STM32U5的火災報警系統(LVGL),附項目教程/源碼

STM32項目實戰:基于STM32U5的智能大棚溫控系統(LVGL),附項目教程/源碼

評論