STM32项目--基于STM32的办公室安保(智能家居)系统设计
基于嵌入式系統(tǒng)的辦公室安保系統(tǒng)設計
簡介
設計一套基于STM32的辦公室安防系統(tǒng),系統(tǒng)內(nèi)部包括門禁系統(tǒng)、災害報警系統(tǒng)、人臉識別系統(tǒng)和交互中心四個子系統(tǒng)。
門禁系統(tǒng):主要實現(xiàn)對門禁卡的存儲和讀取并識別已存儲卡片的信息并控制開門,如讀取卡片為未存儲卡片則報警。
災害探測:系統(tǒng)本項目簡單化使用了溫濕度傳感器和煙霧濃度傳感器來采集外界的溫濕度和煙霧濃度并傳輸告警信號。
人臉識別:可存儲人臉信息并識別,如檢測為以存儲的面部則打開門鎖。
交互中心:將STM32單片采集的數(shù)據(jù)通過WiFi模塊上傳到onenet平臺,通過編寫一個簡單的小程序來獲取溫濕度和煙霧傳感器的數(shù)值和門鎖狀態(tài)。
硬件準備
STM32單片機采用的STM32F103ZET6,人臉識別模塊采用的K210作為主控芯片,溫濕度傳感器使用的DHT11模塊,煙霧濃度使用的MQ2傳感器,門禁卡使用的RC522射頻模塊,WiFi采用的ESP8266模塊。
溫濕度煙霧濃度數(shù)據(jù)采集
模塊初始化和數(shù)據(jù)讀取
DHT11模塊的數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)、8bit濕度小數(shù)數(shù)據(jù)、8bit溫度整數(shù)數(shù)據(jù)、8bit溫度小數(shù)數(shù)據(jù)+8bit校驗位,詳細原理請查詢DHT11時序圖。
獲取到溫濕度和煙霧的值之后進行處理并設置閾值,超過閾值時則報警,溫度超過閾值之后紅燈亮,煙霧濃度超過閾值之后綠燈亮。
門禁卡系統(tǒng)
采用RC522射頻模塊,工作的過程:尋卡->防沖突->選卡->操作卡片,
對模塊進行初始化,STM32通過SPI協(xié)議和RC522模塊進行數(shù)據(jù)讀取,在使用RC522之前應先初始化SPI,然后對RC522模塊進行復位和設置工作模式。
將卡片放到模塊上,按下KEY0讀取卡片信息并存儲。
按下KEY1鍵,讀取卡片信息,若讀取到已存卡片則開門,若為未知卡片,則關門蜂鳴器報警。并將門鎖信息上傳到onenet平臺和小程序。
人臉識別功能
采用K210模塊進行人臉識別,外部鏈接攝像頭和LCD。K210集成了機器視覺(卷積神經(jīng)網(wǎng)絡加速處理器KPU),可以實現(xiàn)人臉識別功能。攝像頭采集數(shù)據(jù)后傳輸?shù)終210進行圖像處理,如果圖像中有人臉,K210能識別人臉在圖像中的位置并在LCD顯示中用方框框住人臉所在的區(qū)域。
k210采用MaixPy IDE開發(fā),模型使用MaixHub提供的人臉識別模型,具體如何燒錄固件和獲取機器碼不再贅述,網(wǎng)上有很多講解。
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);人臉識別代碼太長了就不放在這里了,如有需要可以私信或上網(wǎng)搜索。
按下K210板子上的BOOT鍵進行人臉識別的存儲。將面部特征存儲下來,并在下一次識別時如果匹配上的話將結(jié)果信息返回給STM32改變門鎖狀態(tài),并將結(jié)果上傳到云端。若未識別到存儲的人臉信息則關閉門鎖。
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);} }如何創(chuàng)建ONENET平臺賬號和創(chuàng)建項目可自行上網(wǎng)查詢。將自己設備接入ONENET平臺后,即可接收到通過ESP8266模塊上傳的數(shù)據(jù)。然后通過小程序獲取云平臺的數(shù)據(jù),實現(xiàn)在遠端實時監(jiān)控辦公室的情況。
初步實現(xiàn)了基本功能,后續(xù)可以進行優(yōu)化添加電機來模擬門鎖開關,對K210進行掉電存儲功能,增加一些外設來優(yōu)化辦公室監(jiān)控的環(huán)境狀態(tài),優(yōu)化小程序的界面,并實現(xiàn)人機交互功能。
剛學習單片機不久,學習做一個小項目,希望各位大佬多多指導!
總結(jié)
以上是生活随笔為你收集整理的STM32项目--基于STM32的办公室安保(智能家居)系统设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bash: rsync: 未找到命令
- 下一篇: 前端HTML mate