項目成品圖片:

01
—
項目簡介
1.功能詳解
STM32智能語音三色燈
功能如下:
檢測功能:系統(tǒng)檢測周圍 溫濕度數(shù)據(jù)、距離、人體信號、光照強(qiáng)度。
顯示功能:將檢測到的數(shù)據(jù)顯示在oled屏幕上。
控制功能:系統(tǒng)可以通過PWM對其進(jìn)行亮度和冷光、暖光、中性光的調(diào)節(jié)。
手動模式:通過按鍵控制臺燈的亮度。
自動模式:當(dāng)環(huán)境亮度低于閾值,并且有人時,會自動調(diào)節(jié)臺燈亮度;
語音控制:通過語音指令可以控制LED燈的開啟,以及亮度調(diào)節(jié)和冷暖光調(diào)節(jié)和系統(tǒng)模式切換等;
定時提醒:用戶可以設(shè)置提醒時間,當(dāng)?shù)竭_(dá)時間后蜂鳴器會進(jìn)行提醒。
護(hù)眼功能:當(dāng)系統(tǒng)檢測到人距離臺燈過近時蜂鳴器報警。
閾值調(diào)節(jié):系統(tǒng)傳感器閾值大小可以通過按鍵或者APP自行設(shè)置調(diào)節(jié)。
接入云平臺:系統(tǒng)通過ESP8266 WIFI模塊連接網(wǎng)絡(luò),接入機(jī)智云服務(wù)器。
遠(yuǎn)程控制:可以通過APP查看傳感器數(shù)據(jù),以及遠(yuǎn)程控制臺燈、遠(yuǎn)程調(diào)節(jié)閾值。
2.材料清單
STM32F103C8T6單片機(jī)
OLED 屏幕
DHT11溫濕度傳感器
HC-SR501人體紅外傳感器
光敏傳感器
HC-SR04超聲波傳感器
SNR8016語音模塊
有源蜂鳴器
三色燈板
ESP8266-01S(WIFI模塊)
02
—
原理圖設(shè)計

03
—
PCB硬件設(shè)計
PCB圖


04
—
程序設(shè)計
#include"stm32f10x.h" // Device header#include"adcx.h"#include"ldr.h"#include"oled.h"#include"dht11.h"#include"pwm.h"#include"led.h"#include"key.h"#include"tim2.h" #include"tim3.h" #include"hc_sr501.h"#include"hc_sr04.h"#include"sensormodules.h"#include"usart.h"#include"gizwits_product.h"#include"myrtc.h"#include"flash.h"#include"iwdg.h"#include"usart3.h"
#defineKEY_Long111
#defineKEY_11#defineKEY_22#defineKEY_33#defineKEY_44
#defineFLASH_START_ADDR0x0801f000//寫入的起始地址
uint8_thc501;//存儲人體信號uint8_tsystemModel =0;//存儲系統(tǒng)當(dāng)前模式
uint8_thour,minute,second;//時 分 秒uint8_tmenu =1;//顯示菜單變量uint8_tgizwitsModeFlag;// 配網(wǎng)標(biāo)志位
SensorModules sensorData;//聲明傳感器數(shù)據(jù)結(jié)構(gòu)體變量SensorThresholdValue Sensorthreshold;//聲明傳感器閾值結(jié)構(gòu)體變量
intmain(void){Buzzer_Init();LDR_Init();OLED_Init();DHT11_Init();Key_Init();HC_SR501_Init();HC_SR04_Init();
ADCX_Init();PWM_Init(100-1,720-1);Timer2_Init(9,14398);Uart2_Init(9600);Uart1_Init(115200);IWDG_Init();//初始化看門狗Uart3_Init();
MyRTC_Init();LED_Init();
Sensorthreshold.Illumination_threshold =FLASH_R(FLASH_START_ADDR);//從指定頁的地址讀FLASHSensorthreshold.Distance_threshold =FLASH_R(FLASH_START_ADDR+2);//從指定頁的地址讀FLASHSensorthreshold.timing =FLASH_R(FLASH_START_ADDR+4);//從指定頁的地址讀FLASH
GENERAL_TIM_Init();userInit();//完成機(jī)智云初始賦值gizwitsInit();//開辟一個環(huán)形緩沖區(qū)
Delay_ms(1000);//scanGizwitsModeKey();gizwitsSetMode(WIFI_AIRLINK_MODE);Delay_ms(1000);while(1){IWDG_ReloadCounter();//重新加載計數(shù)值 喂狗sensorScan();//獲取傳感器數(shù)據(jù)SNR8016();//執(zhí)行語音指令
switch(menu){casedisplay_page:
MyRTC_ReadTime();//調(diào)用此函數(shù)后,RTC硬件電路里時間值將刷新到全局?jǐn)?shù)組OLED_Menu_SensorData();//顯示主頁面?zhèn)鞲衅鲾?shù)據(jù)、系統(tǒng)模式等內(nèi)容OLED_Menu();//顯示主頁面的固定內(nèi)容TimingAlarm();if(!systemModel){LED_PWM_KEY();//按鍵控制LED的PWM}
//切換系統(tǒng)模式if(KeyNum == KEY_1){KeyNum =0;systemModel = ~systemModel;if(systemModel){currentDataPoint.valueModel =1;ledDutyRatio =0;TIM_SetCompare1(TIM1, ledDutyRatio);
}else{currentDataPoint.valueModel =0;ledDutyRatio =0;TIM_SetCompare1(TIM1, ledDutyRatio);Buzzer_OFF();}}
//判斷是否進(jìn)入閾值設(shè)置界面if(KeyNum == KEY_Long1){KeyNum =0;OLED_Clear();//清屏menu = settingsPage;//跳轉(zhuǎn)到閾值設(shè)置界面}break;
casesettingsPage:OLED_SetInterfacevoid();//顯示閾值設(shè)置界面的固定內(nèi)容OLED_Option(SetSelection());//實現(xiàn)閾值設(shè)置頁面的選擇功能ThresholdModification(SetSelection());//實現(xiàn)閾值調(diào)節(jié)功能
//判斷是否退出閾值設(shè)置界面if(KeyNum == KEY_2){KeyNum =0;OLED_Clear();//清屏menu = display_page;//跳轉(zhuǎn)到主界面
//存儲修改的傳感器閾值至flash內(nèi)FLASH_W(FLASH_START_ADDR, Sensorthreshold.Illumination_threshold, Sensorthreshold.Distance_threshold,Sensorthreshold.timing);
currentDataPoint.valueIllumination_threshold = Sensorthreshold.Illumination_threshold;currentDataPoint.valueDistance_threshold = Sensorthreshold.Distance_threshold;currentDataPoint.valuetiming = Sensorthreshold.timing;}break;
casetimeSettingsPage:OLED_ThresholdTime();//顯示時間設(shè)置界面的內(nèi)容OLED_Time_Option(SetTimeSelection());//實現(xiàn)間設(shè)置界面的選擇功能TimeModification(SetTimeSelection());//實現(xiàn)時間調(diào)節(jié)功能
//判斷是否退出時間設(shè)置界面if(KeyNum == KEY_2){KeyNum =0;//將更改的數(shù)據(jù)賦值回RTC數(shù)組中MyRTC_Time[3] = hour;MyRTC_Time[4] = minute;MyRTC_Time[5] = second;MyRTC_SetTime();//調(diào)用此函數(shù)后,全局?jǐn)?shù)組里時間值將刷新到RTC硬件電路
OLED_Clear();//清屏menu = settingsPage;//回到閾值設(shè)置界面}break;
casegizwitsMode:if(gizwitsModeFlag ==1){//顯示“熱點配網(wǎng)”O(jiān)LED_ShowChinese(2,3,38);OLED_ShowChinese(2,4,39);OLED_ShowChinese(2,5,40);OLED_ShowChinese(2,6,41);}elseif(gizwitsModeFlag ==2){//顯示“一鍵配網(wǎng)”O(jiān)LED_ShowChinese(2,3,34);OLED_ShowChinese(2,4,35);OLED_ShowChinese(2,5,36);OLED_ShowChinese(2,6,37);}if(!gizwitsModeFlag){KeyNum =0;OLED_Clear();menu = display_page;}break;
default:break;}
//判斷上位機(jī)是否更改閾值,如更改則保存至flash中if(valueFlashflag){valueFlashflag =0;//存儲修改的傳感器閾值至flash內(nèi)FLASH_W(FLASH_START_ADDR, Sensorthreshold.Illumination_threshold, Sensorthreshold.Distance_threshold,Sensorthreshold.timing);}
userHandle();//更新機(jī)智云數(shù)據(jù)點變量存儲的值gizwitsHandle((dataPoint_t *)¤tDataPoint);//數(shù)據(jù)上傳至機(jī)智云}}
05
—
實驗效果


-
STM32
+關(guān)注
關(guān)注
2315文章
11223瀏覽量
375710 -
智能語音
+關(guān)注
關(guān)注
11文章
831瀏覽量
50392 -
三色燈
+關(guān)注
關(guān)注
0文章
7瀏覽量
6393
發(fā)布評論請先 登錄
無線控制RGB三色燈系統(tǒng)
【GoKit申請】溫度濕度三色指示燈
【Tisan物聯(lián)網(wǎng)試用體驗】Tisan IOT開發(fā)板 三色燈試驗
【Tisan物聯(lián)網(wǎng)試用體驗】+三色燈實驗
請問HETDIR寄存器的置為0x08110034時,板子上的三色燈是該亮起么?那個三色燈亮起呈粉色是什么情況?是正常的么?
微信小程序連接onenet遠(yuǎn)程控制RGB三色燈
如何用三個PWM去控制三色燈呢
【Start_DSC28034PNT湖人開發(fā)板免費體驗】DSC28034PNT-基于定時器和PWM輸出三色燈
RGB三色燈的原理
ESP8266_app控制三色燈sdk以及app源碼
設(shè)備三色燈的特點
基于RVB2601開發(fā)板的RGB三色呼吸燈及按鍵防抖
STM32項目分享:智能語音三色燈
評論