• 方案介紹
    • 一、項目介紹
    • 二、設計思路
    • 三、核心代碼
  • 附件下載
  • 相關推薦
申請入駐 產業(yè)圖譜

基于STC89C52單片機設計的自動門控制系統(tǒng)

2小時前
195
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

更多詳細資料請聯(lián)系.docx

共1個文件

一、項目介紹

隨著科技的不斷發(fā)展,自動門成為公共場所、商業(yè)建筑和住宅社區(qū)等地的常見設施。自動門的出現(xiàn)使得進出門的操作更加便捷,提高了人們的生活質量和工作效率。為了實現(xiàn)自動門的開關控制,本項目基于單片機設計了一套自動門控制系統(tǒng)。

本項目的主控芯片選擇了STC89C52,這是一款性能穩(wěn)定且廣泛應用于嵌入式系統(tǒng)的單片機。具有較高的計算能力和豐富的外設接口,非常適合用于本項目中的自動門控制。

自動門的開關控制通過紅外熱釋電傳感器實現(xiàn)。紅外熱釋電傳感器是一種能夠檢測人體紅外輻射的傳感器,當有人靠近時,傳感器會感知到人體的存在。本項目中,紅外熱釋電傳感器被安裝在自動門的控制區(qū)域,用于檢測人體的接近。

為了實現(xiàn)自動門的開關動作,本項目采用了SG90舵機進行控制。SG90舵機是一種小型直流電機,具有較高的轉動精度和響應速度。通過模擬控制方式,根據(jù)控制信號的脈沖寬度來控制門的開關狀態(tài)。

在系統(tǒng)運行時,紅外熱釋電傳感器不斷檢測周圍的人體活動。當傳感器檢測到人體接近時,會向主控芯片發(fā)送信號。主控芯片接收到信號后,會控制SG90舵機執(zhí)行開門動作,使門自動打開。當人體離開控制區(qū)域時,傳感器再次發(fā)送信號,主控芯片控制舵機執(zhí)行關門動作,實現(xiàn)自動門的關閉。

自動門控制系統(tǒng)具有以下優(yōu)點:

(1)通過紅外熱釋電傳感器實現(xiàn)人體接近檢測,無需人工干預,使門的開關更加智能化。

(2)采用SG90舵機進行控制,具有較高的轉動精度和響應速度,門的開關動作更加準確和迅速。

(3)通過使用STC89C52主控芯片,系統(tǒng)具有良好的擴展性和可靠性,可以方便地進行功能擴展和故障排除。

自動門控制系統(tǒng)可以廣泛應用于各種場所,如商場、酒店、醫(yī)院、辦公樓、住宅小區(qū)等,為人們提供便捷、安全的出入門體驗,提高生活和工作的效率。

image-20230823175759809

image-20230823175843724

二、設計思路

硬件選型:

(1)主控芯片:STC89C52是一款常用的8位單片機,具有豐富的外設資源和較大的存儲空間,適合用作自動門控制系統(tǒng)的主控芯片。

(2)紅外熱釋電傳感器:紅外熱釋電傳感器可以檢測到人體的紅外輻射,用于感知人體接近門的情況。常用的紅外熱釋電傳感器模塊包括HC-SR501等。

(3)舵機:SG90舵機是一種小型伺服舵機,適合用于控制門的開關動作。可以按照指定的角度精確控制轉動。

軟件設計思路:

(1)引腳連接:將紅外熱釋電傳感器的輸出引腳連接到STC89C52的一個GPIO口,將舵機的控制引腳連接到另一個GPIO口。

(2)初始化設置:在程序開始時,初始化GPIO口的方向和狀態(tài)設置。

(3)檢測人體接近:通過讀取紅外熱釋電傳感器的輸出狀態(tài),判斷是否有人體接近門。如果有人體接近,則執(zhí)行下一步開門操作;否則執(zhí)行關閉門操作。

(4)開門動作:控制舵機旋轉至開門角度,使門打開。

(5)關閉門動作:控制舵機旋轉至關閉門角度,使門關閉。

(6)延時處理:為了避免舵機轉動過快或過慢,可以增加適當?shù)难訒r操作。

(7)循環(huán)檢測:通過循環(huán)結構,不斷檢測人體接近狀態(tài),實現(xiàn)自動門的開關控制。

三、核心代碼

3.1 基礎框架

#include <reg52.h>

sbit infraredSensor = P1^0;  // 紅外熱釋電傳感器連接的引腳
sbit servoMotor = P2^0;      // SG90舵機連接的引腳

void delay(unsigned int ms) {
    unsigned int i, j;
    for (i = ms; i > 0; i--)
        for (j = 112; j > 0; j--);
}

void servoRotate(unsigned int angle) {
    unsigned int i;
    for (i = 0; i < angle; i++) {
        servoMotor = 1;   // 產生脈沖信號
        delay(1);         // 控制脈沖寬度,控制舵機轉動角度
        servoMotor = 0;
        delay(19);
    }
}

void main() {
    while (1) {
        if (infraredSensor == 1) {   // 檢測到人體接近
            servoRotate(90);        // 打開門,舵機轉動90度
            delay(2000);            // 延時2秒,保持門開啟狀態(tài)
            servoRotate(0);         // 關閉門,舵機轉動至初始位置
        }
    }
}

代碼框架中,使用了reg52.h頭文件來定義了單片機的寄存器和引腳。紅外熱釋電傳感器連接到P1口的第0位引腳,SG90舵機連接到P2口的第0位引腳。

主函數(shù)中使用了一個無限循環(huán),不斷檢測紅外熱釋電傳感器的狀態(tài)。當檢測到有人接近時,調用servoRotate函數(shù)控制舵機打開門(轉動角度為90度),然后延時2秒,保持門開啟狀態(tài)。最后,再次調用servoRotate函數(shù)將舵機轉動至初始位置,關閉門。

3.2 優(yōu)化版

增加防夾功能,預防小孩子、小動物 誤開門設計。

要增加防夾功能以防止小孩子、小動物誤開門,可以通過阻擋傳感器來實現(xiàn)。當前的改進方案用于檢測門是否被阻擋,如果有阻擋則停止或反向門的運動。

#include <reg52.h>

sbit infraredSensor = P1^0;      // 紅外熱釋電傳感器連接的引腳
sbit obstructionSensor = P1^1;   // 阻擋傳感器連接的引腳
sbit servoMotor = P2^0;          // SG90舵機連接的引腳

void delay(unsigned int ms) {
    unsigned int i, j;
    for (i = ms; i > 0; i--)
        for (j = 112; j > 0; j--);
}

void servoRotate(unsigned int angle) {
    unsigned int i;
    for (i = 0; i < angle; i++) {
        servoMotor = 1;   // 產生脈沖信號
        delay(1);         // 控制脈沖寬度,控制舵機轉動角度
        servoMotor = 0;
        delay(19);
    }
}

void main() {
    while (1) {
        if (infraredSensor == 1) {   // 檢測到人體接近
            if (obstructionSensor == 0) {   // 檢測到門被阻擋
                // 停止或反向門的運動
                // 可以在此處添加相應的代碼來停止或反向門的運動
                // 例如,可以調用servoRotate(0)來立即關閉門
            } else {
                servoRotate(90);        // 打開門,舵機轉動90度
                delay(2000);            // 延時2秒,保持門開啟狀態(tài)
                servoRotate(0);         // 關閉門,舵機轉動至初始位置
            }
        }
    }
}

在代碼改進中,添加了一個名為obstructionSensor的阻擋傳感器,連接到P1口的第1位引腳。該傳感器用于檢測門是否被阻擋。在檢測到人體接近的同時,檢測阻擋傳感器的狀態(tài)。如果阻擋傳感器檢測到門被阻擋,可以根據(jù)需求添加相應的代碼來停止或反向門的運動,例如調用servoRotate(0)來立即關閉門。

  • 更多詳細資料請聯(lián)系.docx
    下載

相關推薦