• 方案介紹
    • 一、項(xiàng)目背景
    • 二、系統(tǒng)硬件設(shè)計(jì)
    • 三、系統(tǒng)軟件設(shè)計(jì)
    • 四、核心代碼
    • 五、總結(jié)
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于STM32的智能飲水機(jī)系統(tǒng)設(shè)計(jì)

03/17 09:16
1191
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

更多詳細(xì)資料請(qǐng)聯(lián)系.docx

共1個(gè)文件

一、項(xiàng)目背景

隨著智能化的迅速發(fā)展,人們對(duì)于生活中的各類設(shè)備也越來越有智能化的需求,其中智能飲水機(jī)是一種比較常見的設(shè)備。智能飲水機(jī)不僅可以提供飲用水,還可以通過智能化的技術(shù)滿足人們對(duì)于水質(zhì)、水溫、出水量等方面的需求。因此,當(dāng)前設(shè)計(jì)了一種基于STM32的智能飲水機(jī)系統(tǒng),以滿足人們對(duì)智能化飲水機(jī)的需求。

智能飲水機(jī)系統(tǒng)其主要功能包括:

【1】控制加熱芯片:通過繼電器模塊控制加熱芯片,在水燒開后自動(dòng)斷電。

【2】液位感應(yīng):使用液位傳感器感應(yīng)水箱水位,當(dāng)水位過低時(shí)通過語音模塊進(jìn)行播報(bào)提示。

【3】移動(dòng)端控制:Android手機(jī)端可以顯示當(dāng)前雙水箱內(nèi)的水溫,設(shè)置出水溫度及出水量,并且還可以控制出水操作。

【4】主控芯片:采用STM32F103RCT6主控芯片,這款芯片有著強(qiáng)勁的處理能力和豐富的外設(shè)資源,可以滿足飲水機(jī)系統(tǒng)的控制需求。

【5】WIFI通信:選擇ESP8266與手機(jī)端通信,可以實(shí)現(xiàn)遠(yuǎn)程控制。

【6】水溫測量:采用DS18B20實(shí)現(xiàn)水溫測量,能夠準(zhǔn)確地測量水溫。

【7】出水開關(guān)控制:采用SG90電機(jī)實(shí)現(xiàn)出水開關(guān)控制,可以精準(zhǔn)地控制出水量。

【8】本地有2個(gè)指示燈,綠色和紅色燈。可以表示加熱狀態(tài)。

二、系統(tǒng)硬件設(shè)計(jì)

【1】系統(tǒng)核心芯片選擇

STM32F103RCT6作為本系統(tǒng)的主控芯片,其具有較高的計(jì)算速度和穩(wěn)定性,在眾多STM32系列中也是使用比較廣泛的型號(hào)之一。

【2】溫度測量模塊

溫度測量采用DS18B20數(shù)字溫度傳感器,通過單總線協(xié)議與主控芯片進(jìn)行通信,實(shí)現(xiàn)對(duì)水溫的精準(zhǔn)測量。

【3】液位檢測模塊

液位檢測采用液位傳感器,通過測量水箱內(nèi)水位來判斷是否需要進(jìn)行添加水操作。

【4】控制加熱芯片模塊

繼電器模塊負(fù)責(zé)控制加熱芯片,當(dāng)水燒開后自動(dòng)斷電,以確保水的安全。

【5】出水操作模塊

出水操作通過SG90電機(jī)實(shí)現(xiàn),其可以控制水龍頭的開關(guān),實(shí)現(xiàn)出水的自動(dòng)控制。

【6】WIFI通信模塊ESP8266作為WIFI模塊,與手機(jī)端進(jìn)行通信,實(shí)現(xiàn)了智能飲水機(jī)系統(tǒng)的遠(yuǎn)程操控和監(jiān)測。

三、系統(tǒng)軟件設(shè)計(jì)

【1】溫度測量與顯示模塊

STM32芯片通過單總線協(xié)議與DS18B20傳感器進(jìn)行通信,獲取當(dāng)前水溫?cái)?shù)據(jù),并將其通過LCD1602液晶顯示屏展示在飲水機(jī)面板上。

【2】液位檢測模塊

液位傳感器負(fù)責(zé)檢測水箱內(nèi)水位情況,并將水位數(shù)據(jù)傳遞給主控芯片。當(dāng)水位過低時(shí),系統(tǒng)會(huì)通過語音提示模塊向用戶發(fā)出添加水的提醒。

【3】控制加熱芯片模塊

主控芯片通過繼電器模塊控制加熱芯片的開關(guān),在水燒開后自動(dòng)斷電,以保證水的安全性。

【4】出水操作模塊

出水操作通過SG90電機(jī)控制,實(shí)現(xiàn)了對(duì)飲水機(jī)出水的自動(dòng)控制。同時(shí),在Android手機(jī)端,用戶可以設(shè)置出水溫度和出水量,使得出水操作更加便捷。

【5】WIFI通信模塊

系統(tǒng)通過ESP8266與Android手機(jī)端進(jìn)行通信,實(shí)現(xiàn)了智能飲水機(jī)系統(tǒng)的遠(yuǎn)程操控和監(jiān)測功能。用戶可以通過手機(jī)端查看當(dāng)前雙水箱內(nèi)的水溫并進(jìn)行相應(yīng)的操作。

ESP8266配置成AP+TCP服務(wù)器模式,開啟WIFI熱點(diǎn)等待手機(jī)連接,手機(jī)連接之后使用TCP客戶端模式連接飲水機(jī)完成數(shù)據(jù)通信。

四、核心代碼

4.1 SG90控制代碼

SG90電機(jī)是一種小型舵機(jī),用于模型航空、船模、車模和機(jī)器人等小型機(jī)械裝置中,可以控制舵、飛控等運(yùn)動(dòng)部件的轉(zhuǎn)動(dòng)角度。其最大扭矩為1.6kg/cm(4.8V時(shí)),轉(zhuǎn)速為0.12秒/60度(4.8V時(shí)),工作電壓為4.8V~6V。SG90電機(jī)采用三線接口,其中紅色接VCC(正極)、棕色接GND(負(fù)極)、橙色接PWM信號(hào)線,可以通過控制器的PWM信號(hào)控制電機(jī)的角度。

以下是使用延時(shí)模擬PWM波形控制SG90電機(jī)旋轉(zhuǎn)并封裝成子函數(shù)的示例代碼:

#include "stm32f10x.h"

#define SG90_PIN GPIO_Pin_5
#define SG90_PORT GPIOB

void SG90_rotate(uint8_t angle);

int main(void)
{
    // 初始化GPIOB時(shí)鐘
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    
    // 配置PB5為推挽輸出
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = SG90_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(SG90_PORT, &GPIO_InitStructure);
    
    while (1)
    {
        SG90_rotate(0); // 轉(zhuǎn)到0度
        delay_ms(1000);
        
        SG90_rotate(90); // 轉(zhuǎn)到90度
        delay_ms(1000);
        
        SG90_rotate(180); // 轉(zhuǎn)到180度
        delay_ms(1000);
    }
}

void SG90_rotate(uint8_t angle)
{
    // 計(jì)算PWM波形高電平持續(xù)時(shí)間
    uint32_t high_time = 500 + angle * 11.11;
    
    // 發(fā)送PWM波形
    GPIO_SetBits(SG90_PORT, SG90_PIN);
    delay_us(high_time);
    GPIO_ResetBits(SG90_PORT, SG90_PIN);
    delay_us(20000 - high_time);
}

在上面的代碼中,將SG90電機(jī)控制引腳連接到了STM32F103的PB5口,并通過計(jì)算PWM波形高電平持續(xù)時(shí)間來控制電機(jī)旋轉(zhuǎn)角度。使用了SG90_rotate子函數(shù)來實(shí)現(xiàn)控制過程。當(dāng)調(diào)用SG90_rotate函數(shù)并傳入目標(biāo)旋轉(zhuǎn)角度時(shí),函數(shù)會(huì)自動(dòng)計(jì)算出對(duì)應(yīng)的PWM波形高電平持續(xù)時(shí)間,并發(fā)送PWM波形來控制電機(jī)旋轉(zhuǎn)到指定角度。使用了delay_msdelay_us這兩個(gè)函數(shù)來實(shí)現(xiàn)延時(shí)操作。

4.2 DS18B20溫度傳感器

DS18B20是一種數(shù)字溫度傳感器,它可以直接測量環(huán)境溫度并轉(zhuǎn)換為數(shù)字信號(hào)輸出。DS18B20溫度傳感器采用一線式總線接口(也叫單總線接口),具有精度高、抗干擾能力強(qiáng)、可靠性高和使用方便等優(yōu)點(diǎn)。

DS18B20溫度傳感器的測量范圍為-55℃~+125℃,精度為±0.5℃。傳感器內(nèi)置了溫度補(bǔ)償電路,可以自動(dòng)補(bǔ)償溫度影響導(dǎo)致的測量誤差。

DS18B20溫度傳感器有多種封裝形式,包括TO-92封裝、SOIC封裝和TO-263封裝。其中TO-92封裝是最常見的,也最容易使用,它的引腳分別為GND(負(fù)極)、DQ(數(shù)據(jù)線)和VDD(正極)。傳感器可以通過單總線接口連接控制器,控制器通過發(fā)送指令讀取傳感器的數(shù)據(jù)。

以下是接口函數(shù)的代碼示例:

#include "stm32f103xb.h"
#include <stdint.h>

#define DS18B20_GPIO_Port GPIOB
#define DS18B20_GPIO_Pin  GPIO_PIN_6

void delay_us(uint16_t us)
{
    uint16_t i;
    for(i=0; i<us*8; i++);
}

void DS18B20_Init(void)
{
    // 設(shè)置PB6為輸出模式
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = DS18B20_GPIO_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(DS18B20_GPIO_Port, &GPIO_InitStruct);

    // 拉低總線500us-1000us復(fù)位DS18B20
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_RESET);
    delay_us(600);
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_SET);
    delay_us(60);

    // 等待DS18B20拉低總線告知存在
    while(HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin) == GPIO_PIN_SET);
    delay_us(240);

    // 發(fā)送SKIP ROM指令(跳過ROM應(yīng)答)
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_RESET);
    delay_us(2);
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_SET);
    delay_us(60);

    // 等待DS18B20轉(zhuǎn)換完成
    while(HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin) == GPIO_PIN_SET);
}

float DS18B20_ReadTemperature(void)
{
    float temperature = 0;

    // 發(fā)送START CONVERT指令(啟動(dòng)轉(zhuǎn)換)
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_RESET);
    delay_us(2);
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_SET);
    delay_us(60);

    // 等待DS18B20轉(zhuǎn)換完成
    while(HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin) == GPIO_PIN_SET);

    // 發(fā)送READ SCRATCHPAD指令(讀取溫度值)
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_RESET);
    delay_us(2);
    HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_SET);
    delay_us(60);

    // 讀取溫度值
    uint8_t data[9] = {0};
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_RESET);
            delay_us(2);
            HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin, GPIO_PIN_SET);
            delay_us(10);
            data[i] |= (HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_GPIO_Pin) << j);
            delay_us(50);
        }
    }

    // 計(jì)算溫度值
    int16_t rawTemperature = (data[1] << 8) | data[0];
    if (rawTemperature & 0x8000) {
        rawTemperature = ~rawTemperature + 1;
        temperature = (float)rawTemperature * -0.0625;
    } else {
        temperature = (float)rawTemperature * 0.0625;
    }

    return temperature;
}

調(diào)用方式:

DS18B20_Init(); // 初始化
float temperature = DS18B20_ReadTemperature(); // 讀取溫度值

五、總結(jié)

本項(xiàng)目是基于STM32的智能飲水機(jī)系統(tǒng)設(shè)計(jì),實(shí)現(xiàn)了自動(dòng)斷電、液位感應(yīng)、語音提示、手機(jī)遠(yuǎn)程控制等功能。其中,STM32主控芯片選擇STM32F103RCT6,WIFI選擇ESP8266與手機(jī)端通信,水溫測量采用DS18B20,出水開關(guān)控制采用SG90電機(jī)實(shí)現(xiàn)。

通過繼電器模塊控制加熱芯片,在水燒開后自動(dòng)斷電,避免了過度燒水和安全隱患。同時(shí),利用液位傳感器感應(yīng)水箱水位,當(dāng)水位過低時(shí)通過語音模塊進(jìn)行播報(bào)提示,提醒用戶及時(shí)加水。

在Android手機(jī)端,用戶可以方便地查看當(dāng)前雙水箱內(nèi)的水溫,設(shè)置出水溫度及出水量,并控制出水操作。這極大地提高了用戶的使用體驗(yàn)和方便性。

本項(xiàng)目具有實(shí)用性和創(chuàng)新性,不僅滿足了用戶對(duì)智能化、便捷化的需求,也展示了STM32等技術(shù)在智能家居領(lǐng)域的應(yīng)用前景。

  • 更多詳細(xì)資料請(qǐng)聯(lián)系.docx
    下載

相關(guān)推薦