□ 林靜萱 □ 朱葦杰 □ 蔡桌蕓 □ 孫鳴駿
上海電機學院 上海 201306
保持室內通風非常重要,開空調則需要關閉門窗,與室內通風相悖。由此可見,需要設計一種依托于空調送風而進行室內消毒的裝置。
設計室內空調智能消毒裝置,具體目標包括四方面:
(1) 完成室內空調智能消毒裝置的模型設計;
(2) 通過傳感器建立室內空調智能消毒裝置與空調啟停之間的關系;
(3) 實現傳感器信號的采集,解決室內空調智能消毒裝置的工作邏輯問題;
(4) 根據傳感器信號,使STM32單片機做出相應的處理,用于控制繼電器,進而控制水泵電機實現啟停。
通過查閱相關文獻,請教專業研究人員,確定室內空調智能消毒裝置的設計意圖可行,并且具有設計條件。同時查閱傳感器資料、STM32單片機控制原理、水泵電機工作原理,研究使用單片機控制繼電器的方法,以便后續編程設計。
室內空調智能消毒裝置模型如圖1所示,包括空調接收傳感器信號并進行相應處理的STM32單片機、控制水泵電機啟停的繼電器、向傳感器和水泵電機供電的12 V直流電源、用于儲存消毒液的容器、用于噴灑消毒液的水泵、實現消毒液霧化的霧化噴頭、粘貼于空調擋風板內側的陀螺儀。

圖1 室內空調智能消毒裝置模型
室內空調智能消毒裝置實物如圖2所示。

圖2 室內空調智能消毒裝置實物
在設計實現空調與室內空調智能消毒裝置的聯動時,考慮空調是一個整體,通過現有途徑無法獲得空調內部的控制邏輯及空調的通信協議,即無法在空調開啟時獲得空調的啟動信息,加之拆開空調將單片機與空調主板連接具有一定難度,因此在不破壞空調整體的前提下,在空調上附加傳感器,使用傳感器采集空調的啟停信息。
空調在啟停時,空調擋風板會動作,因此空調擋風板可以用于空調啟停數據的采集。在空調擋風板內側粘貼陀螺儀,空調開啟時,空調擋風板會旋轉。STM32單片機通電后,輪詢陀螺儀所采集到的角加速度數據。當陀螺儀跟隨空調擋風板動作時,陀螺儀所采集到的角加速度數據會發生變化。STM32單片機進行數據對比后,確認空調擋風板的旋轉動作,進而控制水泵電機啟停。這一過程所需的時間約為20 s,由此實現消毒液的噴灑。
(1) 采用電流互感器,將電流互感器套在空調電源線上。當空調啟動時,瞬時啟動電流會很大,電流互感器可以采集到相應的電流信息,通過信號線傳遞至STM32單片機。電流傳感器需要套在單一的一根導線上,所以需要將空調電源線割開,只套在相線上,違背不破壞空調整體的前提。另一方面,確定空調啟動電流具體范圍需要做大量試驗,還要排除電流干擾所帶來的影響。因此,電流互感器方案有一定難度,不采用。
(2) 采用風力傳感器,通過檢測空調送風口是否有風來判斷空調是否打開。但是市面上的風力傳感器無微機電系統,占用空間比較大,在影響美觀的同時還有可能與空調擋風板形成干涉。另一方面,風力傳感器的干擾源比較多,容易造成室內空調智能消毒裝置程序產生錯亂。因此,不采用風力傳感器方案。
(3) 采用微型霍爾接近開關,可檢測距離為20 mm,體積小巧,并且安裝方便。接近開關包括磁性物體和傳感器,可將傳感器粘貼于空調擋風板下側與空調主體的縫隙間,將磁性物體粘貼于縫隙間靠近擋風板處??照{啟動,空調擋風板旋轉,會使磁性物體與傳感器之間的距離發生變化,可以通過這一變化建立空調與室內空調智能消毒裝置之間的聯系。但是在使用過程中發現,接近開關傳輸的數據信息是10 V電壓信號,而所選用的STM32單片機只能接收3.3 V或5 V電壓信號,因此無法采用。
(4) 采用陀螺儀。MPU6050陀螺儀是一款六軸傳感器模塊,能夠同時檢測三軸角速度、三軸角加速度、溫度數據。將MPU6050陀螺儀粘貼于空調擋風板上,空調開啟時,陀螺儀跟隨空調擋風板旋轉,采集空調擋風板的角加速度數據,作為空調啟停的信息。
在室內空調智能消毒裝置中,主控芯片起核心作用。主控芯片通過接收陀螺儀采集到的空調擋風板角加速度數據,判斷空調的運行狀態,進而發送指令信息至繼電器,控制水泵電機的啟停,最終實現消毒液的噴灑。
(1) 采用51單片機。51單片機是一款入門級經典嵌入式控制單元,屬于傳統8位單片機,可靠性強,但同時也有不足之處。51單片機庫函數比較少,只能進行底層程序的編寫,并且運行速度較慢,保護能力差。
(2) 采用STM32單片機。STM32單片機具有極高的性價比,庫開發簡單易用,自帶各種常用的通信接口,具備與大多數傳感器通信的能力。由此選用STM32單片機作為消毒裝置的主控芯片。
市面上小型水泵電機的工作電壓為直流12 V,單片機的輸出電壓信號一般為3.3~5 V,因此不能使用主控芯片直接控制水泵電機工作,需要添加繼電器。主控芯片通過控制繼電器動作,進而控制水泵電機啟停。
所用的繼電器模塊為高性能四路帶隔離的電氣模組,電壓為直流5 V,需外部電源獨立供電,經過光耦隔離,更安全,并且具有強抗干擾能力,適應惡劣的工作環境。
要實現消毒液噴灑,需要水泵電機將消毒液從容器中抽取,并通過霧化噴頭噴灑。選用12 V高壓自吸泵電機。
水泵電機的工作電壓為直流12 V,不可使用家庭用電直接供電,對此,將220 V交流電轉換為12 V直流電。
所設計的室內空調智能消毒裝置程序流程如圖3所示,硬件管腳接線如圖4所示。
單片機通電,初始化各種需要用到的設備及端口,包括定時器、發光二極管端口、串口通信、I2C(Inter-Integrated Circuit)通信、繼電器、陀螺儀等,然后進入正常工作。
對定時器進行初始化時,使定時器每10 μs中斷一次,為整個程序提供時間基準,并且每10 μs進行一次數據采集,即每當10 μs中斷觸發后,STM32單片機與陀螺儀進行一次數據交互,采集此時空調擋風板角加速度數據。定時器初始化程序如下:
void SysTick_Init(void)
{
if (SysTick_Config(SystemCoreClock/100000))
{
while (1);
}
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}

圖3 室內空調智能消毒裝置程序流程

圖4 硬件管腳接線
對發光二極管端口進行初始化,主要配置引腳的輸入輸出模式、引腳的輸出速率,以及確定用哪個引腳輸出。發光二極管主要用作指示燈,當室內空調智能消毒裝置正常運行時,綠燈亮;當運行發生故障時,紅燈亮;當噴灑消毒液時,黃燈亮。發光二極管端口初始化程序如下:
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);
對串口通信進行初始化,主要將STM32單片機采集到的數據通過串口通信傳輸至上位機??梢酝ㄟ^計算機軟件查看程序運行是否正確,以及所采集的數據。串口通信還承擔室內空調智能消毒裝置程序調試的功能。串口通信初始化程序如下:
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通信的初始化,才能將數據有效傳輸至STM32單片機,并對數據進行處理,控制室內空調智能消毒裝置的啟停。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);
對繼電器進行初始化,主要用于配置繼電器、STM32單片機相應的接口,以及相應的工作模式,實現將STM32單片機產生的控制指令傳輸至繼電器,通過繼電器控制水泵電機的啟停,達到噴灑消毒液的功能。繼電器初始化程序如下:
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;
}
對陀螺儀進行初始化,主要配置陀螺儀相應的工作模式,包括采樣率、中斷觸發、自檢、測量范圍等。如果陀螺儀初始化不成功,那么會報錯。陀螺儀配置成功后,進入數據采集階段,采集空調擋風板的角加速度數據,并將所采集到的角加速度數據發送至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);
}
通電后,室內空調智能消毒裝置程序正常運行,發光二極管綠燈亮。若程序在運行過程中發生錯誤,則發光二極管紅燈亮。空調啟動,空調擋風板位置發生變化,由陀螺儀檢測到空調擋風板的角加速度數據,并將數據傳輸至STM32單片機。STM32單片機對數據進行處理,控制繼電器閉合,進而使水泵電機得電,控制消毒液實現噴灑,此時發光二極管黃燈亮。
筆者設計的室內空調智能消毒裝置借助空調送風,將消毒液噴灑至室內各個角落,實現室內消毒的全覆蓋,可以節省人力,使用方便。采用陀螺儀,在不破壞空調主體的情況下,建立空調與室內空調智能消毒裝置之間的聯系,實現空調開機與消毒液噴灑的同步進行,具有創新性。
后續考慮消毒液噴灑時人的舒適性問題,避免在有人的情況下多次噴灑消毒液,計劃在程序中加入人臉識別功能,如識別到有人在室內,則降低消毒液噴灑頻率或不噴灑。后續還考慮增加殺菌功能和遠程控制功能。通過控制紫外線照射,實現殺菌。通過遙控發送指令,實現室內空調智能消毒裝置的遠程控制。