日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

STM32项目--基于STM32的办公室安保(智能家居)系统设计

發布時間:2024/1/18 windows 79 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32项目--基于STM32的办公室安保(智能家居)系统设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于嵌入式系統的辦公室安保系統設計

簡介

設計一套基于STM32的辦公室安防系統,系統內部包括門禁系統、災害報警系統、人臉識別系統和交互中心四個子系統。
門禁系統:主要實現對門禁卡的存儲和讀取并識別已存儲卡片的信息并控制開門,如讀取卡片為未存儲卡片則報警。
災害探測:系統本項目簡單化使用了溫濕度傳感器和煙霧濃度傳感器來采集外界的溫濕度和煙霧濃度并傳輸告警信號。
人臉識別:可存儲人臉信息并識別,如檢測為以存儲的面部則打開門鎖。
交互中心:將STM32單片采集的數據通過WiFi模塊上傳到onenet平臺,通過編寫一個簡單的小程序來獲取溫濕度和煙霧傳感器的數值和門鎖狀態。

硬件準備

STM32單片機采用的STM32F103ZET6,人臉識別模塊采用的K210作為主控芯片,溫濕度傳感器使用的DHT11模塊,煙霧濃度使用的MQ2傳感器,門禁卡使用的RC522射頻模塊,WiFi采用的ESP8266模塊

溫濕度煙霧濃度數據采集

模塊初始化和數據讀取

DHT11模塊的數據格式:8bit濕度整數數據、8bit濕度小數數據、8bit溫度整數數據、8bit溫度小數數據+8bit校驗位,詳細原理請查詢DHT11時序圖。

u8 DHT11_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_SetBits(GPIOG,GPIO_Pin_11); DHT11_Rst(); return DHT11_Check(); } //DHT11讀取數據 u8 DHT11_Read_Data(u8 *temp,u8 *humi) { u8 buf[5];u8 i;DHT11_Rst();if(DHT11_Check()==0){for(i=0;i<5;i++)//{buf[i]=DHT11_Read_Byte();}if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])//進行校驗{*humi=buf[0];*temp=buf[2];}}else return 1;return 0; } //MQ2傳感器 void MQ2_Adc_Init(void) {ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE ); //使能ADC1通道RCC_ADCCLKConfig(RCC_PCLK2_Div6); //設置ADC分頻因子,ADC最大時間不超過14M GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//選用PA1作為模擬通道輸入引腳GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//GPIO_Init(GPIOA, &GPIO_InitStructure); ADC_DeInit(ADC1); //復位ADC1ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式:ADC1和ADC2工作在獨立模式ADC_InitStructure.ADC_ScanConvMode = ENABLE; //模數轉換在單通道模式ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //模數轉換工作在單次轉換模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //轉換由軟件出發而不是外部觸發啟動ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC數據右對齊(12位逐次逼近型)ADC_InitStructure.ADC_NbrOfChannel = 1; //順序進行規則轉換的ADC通道數目ADC_Init(ADC1, &ADC_InitStructure); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); //復位校準while(ADC_GetResetCalibrationStatus(ADC1));ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1)); } //讀取ADC值 u16 Get_Adc(u8 ch) {//設置指定ADC規則組通道,一個序列,采樣時間ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采樣時間為239.5周期 ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的ADC1的軟件轉換啟動功能while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉換結束return ADC_GetConversionValue(ADC1); //返回最近一次ADC1規則組的轉換結果 }

獲取到溫濕度和煙霧的值之后進行處理并設置閾值,超過閾值時則報警,溫度超過閾值之后紅燈亮,煙霧濃度超過閾值之后綠燈亮。

門禁卡系統

采用RC522射頻模塊,工作的過程:尋卡->防沖突->選卡->操作卡片,

對模塊進行初始化,STM32通過SPI協議和RC522模塊進行數據讀取,在使用RC522之前應先初始化SPI,然后對RC522模塊進行復位和設置工作模式。

void SPI1_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE );// CSGPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // SCKGPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);// MISOGPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);// MOSIGPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);// RSTGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); }

將卡片放到模塊上,按下KEY0讀取卡片信息并存儲。

按下KEY1鍵,讀取卡片信息,若讀取到已存卡片則開門,若為未知卡片,則關門蜂鳴器報警。并將門鎖信息上傳到onenet平臺和小程序。

人臉識別功能

采用K210模塊進行人臉識別,外部鏈接攝像頭和LCD。K210集成了機器視覺(卷積神經網絡加速處理器KPU),可以實現人臉識別功能。攝像頭采集數據后傳輸到K210進行圖像處理,如果圖像中有人臉,K210能識別人臉在圖像中的位置并在LCD顯示中用方框框住人臉所在的區域。
k210采用MaixPy IDE開發,模型使用MaixHub提供的人臉識別模型,具體如何燒錄固件和獲取機器碼不再贅述,網上有很多講解。
MaixPy 資料站
獲取與燒錄固件
機器碼獲取模型
人臉識別模型

STM32 和 K210通信

使用串口進行通信

import sensor import image import lcd import KPU as kpu import time from Maix import FPIOA, GPIO import gc from fpioa_manager import fm from board import board_info import utime from machine import UART #communication with STM32 fm.register(10, fm.fpioa.UART1_TX, force=True) fm.register(9, fm.fpioa.UART1_RX, force=True) uart = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096) Message1 = 'Hello\r\n' Message2 = 'World\r\n' while (1)img = sensor.snapshot()uart.write(Message1);utime.sleep_ms(1000);uart.write(Message2);utime.sleep_ms(1000);lcd.display(img);

人臉識別代碼太長了就不放在這里了,如有需要可以私信或上網搜索。
按下K210板子上的BOOT鍵進行人臉識別的存儲。將面部特征存儲下來,并在下一次識別時如果匹配上的話將結果信息返回給STM32改變門鎖狀態,并將結果上傳到云端。若未識別到存儲的人臉信息則關閉門鎖。

WIFI模塊上傳ONENET 平臺

WIFI模塊初始化

WIFI模塊通過USART2串口與單片機進行通信,ESP8266通過AT指令來連接云平臺。

void ESP8266_Init(void) { GPIO_InitTypeDef GPIO_Initure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_Initure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Initure.GPIO_Pin = GPIO_Pin_13; GPIO_Initure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_Initure);GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);delay_ms(250);GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);delay_ms(500);ESP8266_Clear();printf("1. AT\r\n");while(ESP8266_SendCmd("AT\r\n", "OK"))delay_ms(500);printf("2. CWMODE\r\n");while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))delay_ms(500);printf( "3. AT+CWDHCP\r\n");while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))delay_ms(500);printf("4. CWJAP\r\n");while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))delay_ms(500);printf( "5. CIPSTART\r\n");while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))delay_ms(500);printf("6. ESP8266 Init OK\r\n"); } void USART2_IRQHandler(void) {if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) {if(esp8266_cnt >= sizeof(esp8266_buf)) esp8266_cnt = 0; esp8266_buf[esp8266_cnt++] = USART2->DR;USART_ClearFlag(USART2, USART_FLAG_RXNE);} }

如何創建ONENET平臺賬號和創建項目可自行上網查詢。將自己設備接入ONENET平臺后,即可接收到通過ESP8266模塊上傳的數據。然后通過小程序獲取云平臺的數據,實現在遠端實時監控辦公室的情況。


初步實現了基本功能,后續可以進行優化添加電機來模擬門鎖開關,對K210進行掉電存儲功能,增加一些外設來優化辦公室監控的環境狀態,優化小程序的界面,并實現人機交互功能。
剛學習單片機不久,學習做一個小項目,希望各位大佬多多指導!

總結

以上是生活随笔為你收集整理的STM32项目--基于STM32的办公室安保(智能家居)系统设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。