0 前言
??
這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達不到畢業(yè)答辯的要求,這兩年不斷有學弟學妹告訴學長自己做的項目系統(tǒng)達不到老師的要求。
為了大家能夠順利以及最少的精力通過畢設(shè),學長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天要分享的是
?? 畢業(yè)設(shè)計 STM32的wifi照明控制系統(tǒng)(畢設(shè)分享)
??學長這里給一個題目綜合評分(每項滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點:3分
?? 項目分享:
https://gitee.com/sinonfin/sharing文章來源地址http://www.zghlxwxcb.cn/news/detail-826330.html
1 主要功能
主要功能: 此路燈系統(tǒng)使用STM32為主控制器,有兩種工作模式,分別是手動模式和自動模式。
自動模式:使用光敏電阻模塊采集環(huán)境亮度值和使用SR501檢測人體,當環(huán)境亮度值較低且檢測到人體的時候,燈會自動打開,且會根據(jù)環(huán)境亮度值的不同,燈光亮度會自動調(diào)節(jié)。
手動模式:通過按鍵控制燈的亮滅,使用按鍵調(diào)整燈光亮度,有三個檔位可選擇。
1.使用STM32F103C8T6單片機做主控制器。
2.使用OLED顯示燈的狀態(tài)、工作模式、環(huán)境亮度值、燈的檔位。
3.使用WiFi模塊(ESP-01)連接手機,可在手機端控制燈的狀態(tài)、工作模式、工作檔位。且采集的亮度值會上傳至手機端。
4.使用光敏電阻模塊采集當前環(huán)境的亮度值。
5.使用L298N驅(qū)動模塊驅(qū)動路燈。
6.使用SR501傳感器檢測人體。
7.三個按鍵可控制燈的亮滅、工作模式、工作檔位。
2 緒論
2.1 項目背景
每當夜幕降臨,城市中各種各樣、色彩繽紛的路燈亮起,為城市披上了一層絢麗的外衣。但在這絢麗的外表下則隱藏著巨大缺點:
1)能源浪費:由于城市的夜晚進入后半夜后,人們已經(jīng)開始休息,街上人流量開始減少,有些地段在特殊時段根本不需要過多的路燈照明,導致能源浪費,增加了不必要的成本;
2)維護困難:由于使用人工巡檢,需要大量人力,而路燈數(shù)量龐大,路燈實時狀態(tài)不能及時獲取,導致路燈故障維護、排查效率極低。
2.2 需求分析
近年來中國國力不斷增強, 資源方面非常欠缺, 其中電力能源尤為緊張。 環(huán)保節(jié)能成為當今社會的主題。 路燈是城市中處處可見的基礎(chǔ)設(shè)施, 也是一個城市現(xiàn)代化的標志。 路燈最原始的控制方式是人工控制, 由管理人員手動控制來實現(xiàn), 這種方式不僅浪費人力, 耗時較多, 而且效率低下。 其次是時控控制方式, 由路燈的配電柜內(nèi)的時控裝置控制, 也就是通過設(shè)置配電箱里的定時器, 來實現(xiàn)路燈的定時打開或關(guān)閉,是目前城市應用最多的控制方式。 但是時控控制照明方式單一且耗能較大, 還常常因為不同原因而沒有及時啟動, 例如: 特殊天氣等。
因此, 為了提高城市道路照明系統(tǒng)的效率和可擴展性, 豐富其照明方式, 現(xiàn)提出了一種基于NB-IoT的智能路燈管理系統(tǒng), 目的是將城市道路照明與空氣質(zhì)量檢測相結(jié)合, 將嵌入式技術(shù)與無線通信相結(jié)合, 同時融入到新的城市物聯(lián)網(wǎng)(IoT) 系統(tǒng), 從而實現(xiàn)對城市路燈的控制精準化、 監(jiān)控智能化、 故障檢修便捷化。 利用傳感器技術(shù)來完善城市道路智能照明, 實現(xiàn)智能化, 數(shù)字化的同時, 具備監(jiān)測周圍環(huán)境并實時檢測PM2. 5濃度功能。
3 系統(tǒng)設(shè)計
具體功能如下:
1)路燈節(jié)點支持自定義控制方式,可支持自定義時間控制策略和多樣化控制(兩側(cè)路燈全亮、全關(guān)、隔桿高亮等)兩種方式;
2)根據(jù)所在環(huán)境光照強度,自動調(diào)節(jié)路燈亮度,低功耗節(jié)能減排;
3)斷電保護,電壓電流超過安全閾值,路燈自動斷電;
4)路燈故障自動報警,GPS精確定位,可從手機APP、微信小程序、PC端和Web平臺可視化監(jiān)控路燈信息,隨時可調(diào)取任何一處路燈信息;
5)實時采集路燈節(jié)點工作狀態(tài)、電壓、電流、功率、功率因數(shù)、耗電量、產(chǎn)生二氧化碳、頻率、環(huán)境光照度和路燈狀態(tài)數(shù)據(jù),實現(xiàn)統(tǒng)計分析和歷史查詢。
6)使用機器學習算法,根據(jù)對路燈節(jié)點實現(xiàn)建模,實現(xiàn)城市畫像分析。
總之,基于NB-IoT技術(shù)的城市道路智慧路燈監(jiān)控系統(tǒng)有著廣闊的前景和寬廣的需求。
3.1 功能設(shè)計
基于NB-IoT技術(shù)的城市道路智慧路燈監(jiān)控系統(tǒng),在每個照明節(jié)點上安裝一個集成了NB-IoT模組的單燈控制器,單燈控制器再經(jīng)運營商的網(wǎng)絡,與路燈控制平臺實現(xiàn)雙向通信,路燈控制平臺直接對每個燈進行控制,包括開關(guān)燈控制、光照檢測、自動調(diào)節(jié)明暗、電耗分析等操作。智慧路燈實物圖如下所示:
3.1.1 系統(tǒng)角色分析
根據(jù)需求分析提出的研究方向, 系統(tǒng)的角色分配如圖 2-1 所示。 管理人員在電腦中查看傳感器節(jié)點檢測回來的光強和 PM2.5 數(shù)據(jù), 并對數(shù)據(jù)進行判斷。 通過阿里云平臺, 對路燈進行手動控制。
3.1.2 開發(fā)環(huán)境
3.2 總體設(shè)計
智能路燈系統(tǒng)的總體設(shè)計主要分為軟硬件設(shè)計和軟件設(shè)計兩個部分。 硬件主要由STM32 開發(fā)板、 光敏傳感器、 PM2. 5 空氣傳感器和串口組成。 軟件則分為 IOT 云平臺,Mysql 和數(shù)據(jù)的采集、 發(fā)送和接收。
3.3 硬件部分
3.3.1 整體架構(gòu)
基于 NB-IoT 的智能路燈管理系統(tǒng)硬件部分主要以 STM32 開發(fā)板作為核心, 光敏傳感器模塊與 PM2. 5 空氣傳感器模塊通過串口與 STM32 核心板連接。 傳感器節(jié)點采集到的數(shù)據(jù)由核心板處理, 然后把處理好的數(shù)據(jù)通過串口發(fā)送給 NB-IoT 模塊。
學長所用到的器件選型為:
- (1) STM32 核心板: STM32F103
- (2) 光敏傳感器模塊: GY-30
- (3) PM2. 5 傳感器模塊: GP2Y1014AU
3.3.2 stm32部分
學長使用到的具體型號為STM32F103C8T6, 是一款 32 位的微控制器。
STM32芯片接線圖
3.3.3 光敏傳感器模塊
相比于其他傳感器, 光敏傳感器最為常見、 每年的產(chǎn)量也占據(jù)多數(shù)、 被人們所廣泛應用。 光敏傳感器種類繁多, 光電管、 光電倍增管、 光敏電阻等均包含在內(nèi)。 光敏電阻是最簡單的光敏傳感器, 智能路燈管理系統(tǒng)用到的光敏傳感器為 GY-30, 是一種光敏電阻。 其工作原理是利用光敏元件將光信號轉(zhuǎn)換為電信號。
3.3.4 PM2. 5 空氣傳感器模塊
智能路燈管理系統(tǒng)中的 PM2. 5 空氣傳感器模塊采用 GP2Y1014AU 粉塵傳感器, 是一款利用光學對空氣中的灰塵進行檢測的傳感器模塊, 由夏普公司所開發(fā)研制。
引腳圖:
3.3.5 NB-I oT 模塊(替換成wifi模塊)
0NB-IoT 是萬物互聯(lián)網(wǎng)絡的一個重要分支, 是物聯(lián)網(wǎng)領(lǐng)域的一個新興技術(shù), 中文名稱為窄帶物聯(lián)網(wǎng)。 NB-IoT 構(gòu)建于蜂窩網(wǎng)絡, 消耗的帶寬較小, 大約為 180kHz。 為了降低部署的成本, 可直接部署于 GSM 網(wǎng)絡(2G) 、 UMTS 網(wǎng)絡(3G) 或 LTE 網(wǎng)絡(4G) ,還能實現(xiàn)平滑升級。
引腳圖:
3.4 軟件部分
3.4.1 核心部分 - NBIOT 模塊通訊控制
NB 作為通訊模塊, 將各傳感器采集回來的數(shù)據(jù), 經(jīng)過 STM32 處理后上傳到服務器。
NB 模組通過串口通訊, 使用之前我們要對 NB 硬件進行復位, 配置 USART 為中斷源, 初始化配置 NVIC, 優(yōu)先級的設(shè)置。 然后我們就可以對 NB_UART 進行配置。第一步, 初始化 GPIO, 打開串口 GPIO 的時鐘后分別配置 USART 的 Tx/Rx 的 GPIO模式;
第二步, 配置串口的初始化結(jié)構(gòu)體, 首先打開串口外設(shè)的時鐘, 然后配置串口的工作參數(shù), 其中波特率設(shè)置為 9600, 數(shù)據(jù)字長設(shè)置為 8bit, 設(shè)置停止位和校驗位、 設(shè)置工作模式時接收和發(fā)送一起設(shè)置, 到這里串口的初始化配置就基本完成。 還要配置串口的中斷優(yōu)先級, 使能串口接收中斷;
3.5 實現(xiàn)效果
?? 項目分享:
https://gitee.com/sinonfin/sharing
3.6 部分相關(guān)代碼
void Adc_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_ADC1 ,
ENABLE ); //使能 ADC1 通道時鐘
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //設(shè)置 ADC 分頻因子 6 72M/6=12,ADC 時間
不能超過 14M
//PA1 作為模擬通道輸入引腳
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模擬輸入引腳
ADC_DeInit(ADC1); //復位 ADC1
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent; //ADC 工作模式:ADC1 和
ADC2 工作在獨立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //轉(zhuǎn)換工作在單通道模式
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE; //轉(zhuǎn)換工作在單次轉(zhuǎn)換模
式
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; //轉(zhuǎn)換由軟
件而不是外部觸發(fā)啟動
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC 數(shù)據(jù)右對齊
ADC_InitStructure.ADC_NbrOfChannel = 1; //順序進行規(guī)則轉(zhuǎn)換的 ADC 通道的數(shù)目
ADC_Init(ADC1,&ADC_InitStructure); //根據(jù)指定的參數(shù)初始化外設(shè) ADCX 的寄存器
ADC_Cmd(ADC1, ENABLE); //使能指定的 ADC1
ADC_ResetCalibration(ADC1); //使能復位校準
while(ADC_GetResetCalibrationStatus(ADC1)); //等待復位校準結(jié)束
ADC_StartCalibration(ADC1); //開啟 AD 校準
while(ADC_GetCalibrationStatus(ADC1)); //等待校準結(jié)束
}
unsigned int Get_Adc(unsigned char ch)
{
//設(shè)置指定 ADC 規(guī)則組通道, 一個序列, 采樣時間
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5 ); //ADC1,ADC
通道, 采樣時間為 239, 5 周期
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的 ADC1 的軟件轉(zhuǎn)換啟
動功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));/等待轉(zhuǎn)換結(jié)束
return ADC_GetConversionValue(ADC1);
} //返回最近一次 ADC1 規(guī)則組轉(zhuǎn)換結(jié)果
void DS1302_Dispose() //時鐘處理函數(shù)
{
unsigned char DS_Tab[7];
if(state==0)
{
ds1302_readtime(time_data_1) ; //先獲取時間
ds1302write(0x8e, 0x80) ; //開保護
}
else
{
DS_Tab[0]=(time_data_1[0]/10) *16+(time_data_1[0]%10) ;
DS_Tab[1]=(time_data_1[1]/10) *16+(time_data_1[1]%10) ;
DS_Tab[2]=(time_data_1[2]/10) *16+(time_data_1[2]%10) ;
DS_Tab[3]=(time_data_1[3]/10) *16+(time_data_1[3]%10) ;
DS_Tab[4]=(time_data_1[4]/10) *16+(time_data_1[4]%10) ;
DS_Tab[5]=(time_data_1[5]/10) *16+(time_data_1[5]%10) ;
ds1302write(0x8e, 0x00) ; //關(guān)保護
ds1302write(0x80, DS_Tab[0]) ;
ds1302write(0x82, DS_Tab[1]) ;
ds1302write(0x84, DS_Tab[2]) ;
ds1302write(0x86, DS_Tab[3]) ;
ds1302write(0x88, DS_Tab[4]) ;
ds1302write(0x8C, DS_Tab[5]) ;
}
}
// PWM 調(diào)光程序如下所示。
if(adcx<300)LED_Count=300;//限制光敏 AD 轉(zhuǎn)換的范圍
else if(adcx>3900)LED_Count=3900;
else LED_Count=adcx;
PWM_Count=(LED_Count-300)/360; //光敏的范圍是
3900-300=3600, 得到的 AD 值也減去 300, 去除 360 將光敏的強度轉(zhuǎn)化為 10 個等級
}
else //不在范圍區(qū)間, 是關(guān)
{
PWM_Count = 0 ;
}
}
else
{
if(((time_data_1[2]*60+time_data_1[1])>=(Close_shi*60+Close_fen))&&((time_data_1
[2]*60+time_data_1[1])<(Open_shi*60+Open_fen)))
{
PWM_Count = 0 ;//否則 PWM 為 0, 關(guān)。
}
else //是開
{
if(adcx<300)LED_Count=300;//如果 adcx 值小于 300, LED
輸出值為 300
else if(adcx>3900)LED_Count=3900;//如果 adcx 值大于
3900, LED 輸出值為 3900
else LED_Count=adcx;//否則 LED 輸出值等于 adcx 值
PWM_Count = (LED_Count-300)/360;
}
}
}
else PWM_Count = 0 ; //否則 PWM 為 0, 關(guān)。
}
********************************************************************/
4 最后
?? 項目分享:文章來源:http://www.zghlxwxcb.cn/news/detail-826330.html
https://gitee.com/sinonfin/sharing
到了這里,關(guān)于畢設(shè)開題分享 STM32的wifi照明控制系統(tǒng) - 智能路燈(畢設(shè)分享)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!