0 前言
?? 這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項目系統(tǒng)達不到老師的要求。
為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天要分享的是
?? 基于stm32與機器視覺的口罩佩戴檢測系統(tǒng)
??學(xué)長這里給一個題目綜合評分(每項滿分5分)
- 難度系數(shù):3分
- 工作量:5分
- 創(chuàng)新點:3分
1 簡介
2 主要器件
- STM32F103C8T6
- K210 AI模塊
- OV5642攝像頭
- MLX90614非接觸測溫傳感器
- 蜂鳴器模塊
3 實現(xiàn)效果
不佩戴口罩時
佩戴口罩時
溫度測量
手指放到傳感器模塊后會測量溫度,超過設(shè)定的溫度閾值后,蜂鳴器會報警。
4 設(shè)計原理
測溫部分
主要由STM32F103C8T6 + MLX90614測溫模塊實現(xiàn)。
MLX90614 是一款紅外非接觸溫度計。TO-39 金屬封裝里同時集成了紅外感應(yīng)熱電堆探測器芯片和信號處理專用集成芯片。由于集成了低噪聲放大器、17 位模數(shù)轉(zhuǎn)換器和強大的數(shù)字信號處理單元,使得高精度和高分辨度的溫度計得以實現(xiàn)。溫度計具備出廠校準(zhǔn)化,有數(shù)字 PWM 和 SMBus(系統(tǒng)管理總線)輸出模式。作為標(biāo)準(zhǔn),配置為 10 位的 PWM 輸出格式用于連續(xù)傳送溫度范圍為-20…120 ?C 的物體溫度,其分辨率為 0.14 ?C。POR默認模式是SMBus輸出格式 。
MLX90614器件圖
串口溫度測試
STM32單片機采集代碼
void SMBus_StartBit(void)
{
SMBUS_SDA_H(); // Set SDA line
SMBus_Delay(5); // Wait a few microseconds
SMBUS_SCK_H(); // Set SCL line
SMBus_Delay(5); // Generate bus free time between Stop
SMBUS_SDA_L(); // Clear SDA line
SMBus_Delay(5); // Hold time after (Repeated) Start
// Condition. After this period, the first clock is generated.
//(Thd:sta=4.0us min)
SMBUS_SCK_L(); // Clear SCL line
SMBus_Delay(5); // Wait a few microseconds
}
void SMBus_StopBit(void)
{
SMBUS_SCK_L(); // Clear SCL line
SMBus_Delay(5); // Wait a few microseconds
SMBUS_SDA_L(); // Clear SDA line
SMBus_Delay(5); // Wait a few microseconds
SMBUS_SCK_H(); // Set SCL line
SMBus_Delay(5); // Stop condition setup time(Tsu:sto=4.0us min)
SMBUS_SDA_H(); // Set SDA line
}
u8 SMBus_SendByte(u8 Tx_buffer)
{
u8 Bit_counter;
u8 Ack_bit;
u8 bit_out;
for(Bit_counter=8; Bit_counter; Bit_counter--)
{
if (Tx_buffer&0x80)
{
bit_out=1; // If the current bit of Tx_buffer is 1 set bit_out
}
else
{
bit_out=0; // else clear bit_out
}
SMBus_SendBit(bit_out); // Send the current bit on SDA
Tx_buffer<<=1; // Get next bit for checking
}
Ack_bit=SMBus_ReceiveBit(); // Get acknowledgment bit
return Ack_bit;
}
void SMBus_SendBit(u8 bit_out)
{
if(bit_out==0)
{
SMBUS_SDA_L();
}
else
{
SMBUS_SDA_H();
}
SMBus_Delay(2); // Tsu:dat = 250ns minimum
SMBUS_SCK_H(); // Set SCL line
SMBus_Delay(6); // High Level of Clock Pulse
SMBUS_SCK_L(); // Clear SCL line
SMBus_Delay(3); // Low Level of Clock Pulse
// SMBUS_SDA_H(); // Master release SDA line ,
return;
}
u8 SMBus_ReceiveBit(void)
{
u8 Ack_bit;
SMBUS_SDA_H(); //引腳靠外部電阻上拉,當(dāng)作輸入
SMBus_Delay(2); // High Level of Clock Pulse
SMBUS_SCK_H(); // Set SCL line
SMBus_Delay(5); // High Level of Clock Pulse
if (SMBUS_SDA_PIN())
{
Ack_bit=1;
}
else
{
Ack_bit=0;
}
SMBUS_SCK_L(); // Clear SCL line
SMBus_Delay(3); // Low Level of Clock Pulse
return Ack_bit;
}
u8 SMBus_ReceiveByte(u8 ack_nack)
{
u8 RX_buffer;
u8 Bit_Counter;
for(Bit_Counter=8; Bit_Counter; Bit_Counter--)
{
if(SMBus_ReceiveBit()) // Get a bit from the SDA line
{
RX_buffer <<= 1; // If the bit is HIGH save 1 in RX_buffer
RX_buffer |=0x01;
}
else
{
RX_buffer <<= 1; // If the bit is LOW save 0 in RX_buffer
RX_buffer &=0xfe;
}
}
SMBus_SendBit(ack_nack); // Sends acknowledgment bit
return RX_buffer;
}
K210視覺開發(fā)部分
首先,我們需要在spieed官網(wǎng)上下載MaixpyIDE,想編代碼總是要磨其器的,由于Sipeed Maix Bit是沒有c環(huán)境的,所以我使用mcriopyhton來編程;
將IDE搭建只是第一步,還需要能跑mcriopyhton的固件,在sipeed官網(wǎng)的下載站里面找到最新的固件支持包(最好是最新的固件包)找到下載站后,直接點擊第一個,然后會發(fā)現(xiàn)有很多的固件,究竟選哪一個呢?。會點英語的其實不難讀懂,帶minimum就是輕量級的意思,而帶kmodel的就是支持模型放入的意思,當(dāng)然我還需要支持ide的,所以選擇maixpy_v0.6.2_83_gf0280db50_openmv_kmodel_v4_with_ide_support即可。
同時項目所需要的文件有:模型文件,程序運行的腳本文件,ide需要的bin文件。
燒錄
下載好后,接下來實現(xiàn)的就是固件燒錄,我們需要準(zhǔn)備一個軟件kflash_gui,是專門用來燒錄固件的,在sipeed官網(wǎng)會提供一個GitHub網(wǎng)址,里面不僅有該軟件,還有大伙所需要的例程,在例程中可以找到已經(jīng)訓(xùn)練好的人臉模型。如下圖,按照這樣配置即可,連接好板子就可以燒錄了。
終于,現(xiàn)在就可以點擊ide打開了,這就是ide的界面,點左下角的連接板子,就可以愉快的跑程序了。文章來源:http://www.zghlxwxcb.cn/news/detail-834816.html
5 部分核心代碼
K210部分代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-834816.html
import sensor,lcd,time
import KPU as kpu
from Maix import GPIO
from fpioa_manager import fm
fm.register(10, fm.fpioa.GPIO0)
LCD_BL = GPIO(GPIO.GPIO0, GPIO.OUT)
LCD_BL.value(1)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1)
lcd.init()
lcd.rotation(0)
clock = time.clock()
task = kpu.load("/sd/facedetect.kmodel")
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
clock.tick()
img = sensor.snapshot()
code = kpu.run_yolo2(task, img)
if code:
for i in code:
print(i)
b = img.draw_rectangle(i.rect())
lcd.display(img)
print(clock.fps())
6 最后
到了這里,關(guān)于單片機項目分享 stm32機器視覺的口罩佩戴檢測系統(tǒng) - 單片機 物聯(lián)網(wǎng) 嵌入式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!