□ 林靜萱 □ 朱葦杰 □ 蔡桌蕓 □ 孫鳴駿
上海電機學(xué)院 上海 201306
保持室內(nèi)通風(fēng)非常重要,開空調(diào)則需要關(guān)閉門窗,與室內(nèi)通風(fēng)相悖。由此可見,需要設(shè)計一種依托于空調(diào)送風(fēng)而進(jìn)行室內(nèi)消毒的裝置。
設(shè)計室內(nèi)空調(diào)智能消毒裝置,具體目標(biāo)包括四方面:
(1) 完成室內(nèi)空調(diào)智能消毒裝置的模型設(shè)計;
(2) 通過傳感器建立室內(nèi)空調(diào)智能消毒裝置與空調(diào)啟停之間的關(guān)系;
(3) 實現(xiàn)傳感器信號的采集,解決室內(nèi)空調(diào)智能消毒裝置的工作邏輯問題;
(4) 根據(jù)傳感器信號,使STM32單片機做出相應(yīng)的處理,用于控制繼電器,進(jìn)而控制水泵電機實現(xiàn)啟停。
通過查閱相關(guān)文獻(xiàn),請教專業(yè)研究人員,確定室內(nèi)空調(diào)智能消毒裝置的設(shè)計意圖可行,并且具有設(shè)計條件。同時查閱傳感器資料、STM32單片機控制原理、水泵電機工作原理,研究使用單片機控制繼電器的方法,以便后續(xù)編程設(shè)計。
室內(nèi)空調(diào)智能消毒裝置模型如圖1所示,包括空調(diào)接收傳感器信號并進(jìn)行相應(yīng)處理的STM32單片機、控制水泵電機啟停的繼電器、向傳感器和水泵電機供電的12 V直流電源、用于儲存消毒液的容器、用于噴灑消毒液的水泵、實現(xiàn)消毒液霧化的霧化噴頭、粘貼于空調(diào)擋風(fēng)板內(nèi)側(cè)的陀螺儀。
圖1 室內(nèi)空調(diào)智能消毒裝置模型
室內(nèi)空調(diào)智能消毒裝置實物如圖2所示。
圖2 室內(nèi)空調(diào)智能消毒裝置實物
在設(shè)計實現(xiàn)空調(diào)與室內(nèi)空調(diào)智能消毒裝置的聯(lián)動時,考慮空調(diào)是一個整體,通過現(xiàn)有途徑無法獲得空調(diào)內(nèi)部的控制邏輯及空調(diào)的通信協(xié)議,即無法在空調(diào)開啟時獲得空調(diào)的啟動信息,加之拆開空調(diào)將單片機與空調(diào)主板連接具有一定難度,因此在不破壞空調(diào)整體的前提下,在空調(diào)上附加傳感器,使用傳感器采集空調(diào)的啟停信息。
空調(diào)在啟停時,空調(diào)擋風(fēng)板會動作,因此空調(diào)擋風(fēng)板可以用于空調(diào)啟停數(shù)據(jù)的采集。在空調(diào)擋風(fēng)板內(nèi)側(cè)粘貼陀螺儀,空調(diào)開啟時,空調(diào)擋風(fēng)板會旋轉(zhuǎn)。STM32單片機通電后,輪詢陀螺儀所采集到的角加速度數(shù)據(jù)。當(dāng)陀螺儀跟隨空調(diào)擋風(fēng)板動作時,陀螺儀所采集到的角加速度數(shù)據(jù)會發(fā)生變化。STM32單片機進(jìn)行數(shù)據(jù)對比后,確認(rèn)空調(diào)擋風(fēng)板的旋轉(zhuǎn)動作,進(jìn)而控制水泵電機啟停。這一過程所需的時間約為20 s,由此實現(xiàn)消毒液的噴灑。
(1) 采用電流互感器,將電流互感器套在空調(diào)電源線上。當(dāng)空調(diào)啟動時,瞬時啟動電流會很大,電流互感器可以采集到相應(yīng)的電流信息,通過信號線傳遞至STM32單片機。電流傳感器需要套在單一的一根導(dǎo)線上,所以需要將空調(diào)電源線割開,只套在相線上,違背不破壞空調(diào)整體的前提。另一方面,確定空調(diào)啟動電流具體范圍需要做大量試驗,還要排除電流干擾所帶來的影響。因此,電流互感器方案有一定難度,不采用。
(2) 采用風(fēng)力傳感器,通過檢測空調(diào)送風(fēng)口是否有風(fēng)來判斷空調(diào)是否打開。但是市面上的風(fēng)力傳感器無微機電系統(tǒng),占用空間比較大,在影響美觀的同時還有可能與空調(diào)擋風(fēng)板形成干涉。另一方面,風(fēng)力傳感器的干擾源比較多,容易造成室內(nèi)空調(diào)智能消毒裝置程序產(chǎn)生錯亂。因此,不采用風(fēng)力傳感器方案。
(3) 采用微型霍爾接近開關(guān),可檢測距離為20 mm,體積小巧,并且安裝方便。接近開關(guān)包括磁性物體和傳感器,可將傳感器粘貼于空調(diào)擋風(fēng)板下側(cè)與空調(diào)主體的縫隙間,將磁性物體粘貼于縫隙間靠近擋風(fēng)板處。空調(diào)啟動,空調(diào)擋風(fēng)板旋轉(zhuǎn),會使磁性物體與傳感器之間的距離發(fā)生變化,可以通過這一變化建立空調(diào)與室內(nèi)空調(diào)智能消毒裝置之間的聯(lián)系。但是在使用過程中發(fā)現(xiàn),接近開關(guān)傳輸?shù)臄?shù)據(jù)信息是10 V電壓信號,而所選用的STM32單片機只能接收3.3 V或5 V電壓信號,因此無法采用。
(4) 采用陀螺儀。MPU6050陀螺儀是一款六軸傳感器模塊,能夠同時檢測三軸角速度、三軸角加速度、溫度數(shù)據(jù)。將MPU6050陀螺儀粘貼于空調(diào)擋風(fēng)板上,空調(diào)開啟時,陀螺儀跟隨空調(diào)擋風(fēng)板旋轉(zhuǎn),采集空調(diào)擋風(fēng)板的角加速度數(shù)據(jù),作為空調(diào)啟停的信息。
在室內(nèi)空調(diào)智能消毒裝置中,主控芯片起核心作用。主控芯片通過接收陀螺儀采集到的空調(diào)擋風(fēng)板角加速度數(shù)據(jù),判斷空調(diào)的運行狀態(tài),進(jìn)而發(fā)送指令信息至繼電器,控制水泵電機的啟停,最終實現(xiàn)消毒液的噴灑。
(1) 采用51單片機。51單片機是一款入門級經(jīng)典嵌入式控制單元,屬于傳統(tǒng)8位單片機,可靠性強,但同時也有不足之處。51單片機庫函數(shù)比較少,只能進(jìn)行底層程序的編寫,并且運行速度較慢,保護(hù)能力差。
(2) 采用STM32單片機。STM32單片機具有極高的性價比,庫開發(fā)簡單易用,自帶各種常用的通信接口,具備與大多數(shù)傳感器通信的能力。由此選用STM32單片機作為消毒裝置的主控芯片。
市面上小型水泵電機的工作電壓為直流12 V,單片機的輸出電壓信號一般為3.3~5 V,因此不能使用主控芯片直接控制水泵電機工作,需要添加繼電器。主控芯片通過控制繼電器動作,進(jìn)而控制水泵電機啟停。
所用的繼電器模塊為高性能四路帶隔離的電氣模組,電壓為直流5 V,需外部電源獨立供電,經(jīng)過光耦隔離,更安全,并且具有強抗干擾能力,適應(yīng)惡劣的工作環(huán)境。
要實現(xiàn)消毒液噴灑,需要水泵電機將消毒液從容器中抽取,并通過霧化噴頭噴灑。選用12 V高壓自吸泵電機。
水泵電機的工作電壓為直流12 V,不可使用家庭用電直接供電,對此,將220 V交流電轉(zhuǎn)換為12 V直流電。
所設(shè)計的室內(nèi)空調(diào)智能消毒裝置程序流程如圖3所示,硬件管腳接線如圖4所示。
單片機通電,初始化各種需要用到的設(shè)備及端口,包括定時器、發(fā)光二極管端口、串口通信、I2C(Inter-Integrated Circuit)通信、繼電器、陀螺儀等,然后進(jìn)入正常工作。
對定時器進(jìn)行初始化時,使定時器每10 μs中斷一次,為整個程序提供時間基準(zhǔn),并且每10 μs進(jìn)行一次數(shù)據(jù)采集,即每當(dāng)10 μs中斷觸發(fā)后,STM32單片機與陀螺儀進(jìn)行一次數(shù)據(jù)交互,采集此時空調(diào)擋風(fēng)板角加速度數(shù)據(jù)。定時器初始化程序如下:
void SysTick_Init(void)
{
if (SysTick_Config(SystemCoreClock/100000))
{
while (1);
}
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}
圖3 室內(nèi)空調(diào)智能消毒裝置程序流程
圖4 硬件管腳接線
對發(fā)光二極管端口進(jìn)行初始化,主要配置引腳的輸入輸出模式、引腳的輸出速率,以及確定用哪個引腳輸出。發(fā)光二極管主要用作指示燈,當(dāng)室內(nèi)空調(diào)智能消毒裝置正常運行時,綠燈亮;當(dāng)運行發(fā)生故障時,紅燈亮;當(dāng)噴灑消毒液時,黃燈亮。發(fā)光二極管端口初始化程序如下:
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;
GPIO_Init(LED2_GPIO_PORT,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LED3_GPIO_PIN;
GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);
GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);
對串口通信進(jìn)行初始化,主要將STM32單片機采集到的數(shù)據(jù)通過串口通信傳輸至上位機。可以通過計算機軟件查看程序運行是否正確,以及所采集的數(shù)據(jù)。串口通信還承擔(dān)室內(nèi)空調(diào)智能消毒裝置程序調(diào)試的功能。串口通信初始化程序如下:
void USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_Initstructure;
DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = DEBUG_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUGRATE;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
I2C通信的初始化程序是核心。I2C通信用于STM32單片機與陀螺儀之間的通信,只有成功完成I2C通信的初始化,才能將數(shù)據(jù)有效傳輸至STM32單片機,并對數(shù)據(jù)進(jìn)行處理,控制室內(nèi)空調(diào)智能消毒裝置的啟停。I2C通信初始化程序如下:
static void I2C_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SENSORS_I2C_APBxClock_FUN ( SENSORS_I2C_CLK, ENABLE );
SENSORS_I2C_GPIO_APBxClock_FUN ( SENSORS_I2C_GPIO_CLK, ENABLE );
GPIO_InitStructure.GPIO_Pin = SENSORS_I2C_SCL_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(SENSORS_I2C_SCL_PORT,&GPIO_
InitStructure);
GPIO_InitStructure.GPIO_Pin = SENSORS_I2C_SDA_
PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50 MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(SENSORS_I2C_SDA_PORT,&GPIO_
InitStructure);
對繼電器進(jìn)行初始化,主要用于配置繼電器、STM32單片機相應(yīng)的接口,以及相應(yīng)的工作模式,實現(xiàn)將STM32單片機產(chǎn)生的控制指令傳輸至繼電器,通過繼電器控制水泵電機的啟停,達(dá)到噴灑消毒液的功能。繼電器初始化程序如下:
void RELAY_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RELAY1_GPIO_CLK | RELAY2_GPIO_CLK | RELAY3_GPIO_CLK | RELAY4_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin=RELAY1_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(RELAY1_GPIO_PORT, &GPIO_
InitStructure);
GPIO_InitStructure.GPIO_Pin = RELAY2_GPIO_PIN;
GPIO_Init(RELAY2_GPIO_PORT, &GPIO_
InitStructure);
GPIO_InitStructure.GPIO_Pin = RELAY3_GPIO_PIN;
GPIO_Init(RELAY3_GPIO_PORT, &GPIO_
InitStructure);
GPIO_InitStructure.GPIO_Pin = RELAY4_GPIO_PIN;
GPIO_Init(RELAY4_GPIO_PORT, &GPIO_
InitStructure);
GPIO_ResetBits(RELAY1_GPIO_PORT, RELAY1_
GPIO_PIN;
GPIO_ResetBits(RELAY2_GPIO_PORT, RELAY2_
GPIO_PIN;
GPIO_ResetBits(RELAY3_GPIO_PORT, RELAY3_
GPIO_PIN;
GPIO_ResetBits(RELAY4_GPIO_PORT, RELAY4_
GPIO_PIN;
}
對陀螺儀進(jìn)行初始化,主要配置陀螺儀相應(yīng)的工作模式,包括采樣率、中斷觸發(fā)、自檢、測量范圍等。如果陀螺儀初始化不成功,那么會報錯。陀螺儀配置成功后,進(jìn)入數(shù)據(jù)采集階段,采集空調(diào)擋風(fēng)板的角加速度數(shù)據(jù),并將所采集到的角加速度數(shù)據(jù)發(fā)送至STM32單片機。陀螺儀初始化程序如下:
void MPU6050_Init(void)
{
int i=0,j=0;
for(i=0;i<1000;i++)
{
for(j=0;j<1000;j++)
{
;
}
}
MPU6050_WriteReg(MPU6050_RA_PWR_MGMT_1, 0x00);
MPU6050_WriteReg(MPU6050_RA_SMPLRT_DIV, 0x07);
MPU6050_WriteReg(MPU6050_RA_CONFIG, 0x06);
MPU6050_WriteReg(MPU6050_RA_ACCEL_CONFIG, 0x01);
MPU6050_WriteReg(MPU6050_RA_GYRO_CONFIG, 0x18);
}
通電后,室內(nèi)空調(diào)智能消毒裝置程序正常運行,發(fā)光二極管綠燈亮。若程序在運行過程中發(fā)生錯誤,則發(fā)光二極管紅燈亮??照{(diào)啟動,空調(diào)擋風(fēng)板位置發(fā)生變化,由陀螺儀檢測到空調(diào)擋風(fēng)板的角加速度數(shù)據(jù),并將數(shù)據(jù)傳輸至STM32單片機。STM32單片機對數(shù)據(jù)進(jìn)行處理,控制繼電器閉合,進(jìn)而使水泵電機得電,控制消毒液實現(xiàn)噴灑,此時發(fā)光二極管黃燈亮。
筆者設(shè)計的室內(nèi)空調(diào)智能消毒裝置借助空調(diào)送風(fēng),將消毒液噴灑至室內(nèi)各個角落,實現(xiàn)室內(nèi)消毒的全覆蓋,可以節(jié)省人力,使用方便。采用陀螺儀,在不破壞空調(diào)主體的情況下,建立空調(diào)與室內(nèi)空調(diào)智能消毒裝置之間的聯(lián)系,實現(xiàn)空調(diào)開機與消毒液噴灑的同步進(jìn)行,具有創(chuàng)新性。
后續(xù)考慮消毒液噴灑時人的舒適性問題,避免在有人的情況下多次噴灑消毒液,計劃在程序中加入人臉識別功能,如識別到有人在室內(nèi),則降低消毒液噴灑頻率或不噴灑。后續(xù)還考慮增加殺菌功能和遠(yuǎn)程控制功能。通過控制紫外線照射,實現(xiàn)殺菌。通過遙控發(fā)送指令,實現(xiàn)室內(nèi)空調(diào)智能消毒裝置的遠(yuǎn)程控制。