基于单片机设计的自动门控制系统

news2025/1/22 14:51:05

一、项目介绍

随着科技的不断发展,自动门成为公共场所、商业建筑和住宅社区等地的常见设施。自动门的出现使得进出门的操作更加便捷,提高了人们的生活质量和工作效率。为了实现自动门的开关控制,本项目基于单片机设计了一套自动门控制系统。

本项目的主控芯片选择了STC89C52,这是一款性能稳定且广泛应用于嵌入式系统的单片机。具有较高的计算能力和丰富的外设接口,非常适合用于本项目中的自动门控制。

自动门的开关控制通过红外热释电传感器实现。红外热释电传感器是一种能够检测人体红外辐射的传感器,当有人靠近时,传感器会感知到人体的存在。本项目中,红外热释电传感器被安装在自动门的控制区域,用于检测人体的接近。

为了实现自动门的开关动作,本项目采用了SG90舵机进行控制。SG90舵机是一种小型直流电机,具有较高的转动精度和响应速度。通过模拟控制方式,根据控制信号的脉冲宽度来控制门的开关状态。

在系统运行时,红外热释电传感器不断检测周围的人体活动。当传感器检测到人体接近时,会向主控芯片发送信号。主控芯片接收到信号后,会控制SG90舵机执行开门动作,使门自动打开。当人体离开控制区域时,传感器再次发送信号,主控芯片控制舵机执行关门动作,实现自动门的关闭。

自动门控制系统具有以下优点:

(1)通过红外热释电传感器实现人体接近检测,无需人工干预,使门的开关更加智能化。

(2)采用SG90舵机进行控制,具有较高的转动精度和响应速度,门的开关动作更加准确和迅速。

(3)通过使用STC89C52主控芯片,系统具有良好的扩展性和可靠性,可以方便地进行功能扩展和故障排除。

自动门控制系统可以广泛应用于各种场所,如商场、酒店、医院、办公楼、住宅小区等,为人们提供便捷、安全的出入门体验,提高生活和工作的效率。

image-20230823175716494

image-20230823175741019

image-20230823175759809

image-20230823175843724

二、设计思路

硬件选型:

(1)主控芯片:STC89C52是一款常用的8位单片机,具有丰富的外设资源和较大的存储空间,适合用作自动门控制系统的主控芯片。

(2)红外热释电传感器:红外热释电传感器可以检测到人体的红外辐射,用于感知人体接近门的情况。常用的红外热释电传感器模块包括HC-SR501等。

(3)舵机:SG90舵机是一种小型伺服舵机,适合用于控制门的开关动作。可以按照指定的角度精确控制转动。

软件设计思路:

(1)引脚连接:将红外热释电传感器的输出引脚连接到STC89C52的一个GPIO口,将舵机的控制引脚连接到另一个GPIO口。

(2)初始化设置:在程序开始时,初始化GPIO口的方向和状态设置。

(3)检测人体接近:通过读取红外热释电传感器的输出状态,判断是否有人体接近门。如果有人体接近,则执行下一步开门操作;否则执行关闭门操作。

(4)开门动作:控制舵机旋转至开门角度,使门打开。

(5)关闭门动作:控制舵机旋转至关闭门角度,使门关闭。

(6)延时处理:为了避免舵机转动过快或过慢,可以增加适当的延时操作。

(7)循环检测:通过循环结构,不断检测人体接近状态,实现自动门的开关控制。

三、核心代码

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秒,保持门开启状态
            servoRotate(0);         // 关闭门,舵机转动至初始位置
        }
    }
}

代码框架中,使用了reg52.h头文件来定义了单片机的寄存器和引脚。红外热释电传感器连接到P1口的第0位引脚,SG90舵机连接到P2口的第0位引脚。

主函数中使用了一个无限循环,不断检测红外热释电传感器的状态。当检测到有人接近时,调用servoRotate函数控制舵机打开门(转动角度为90度),然后延时2秒,保持门开启状态。最后,再次调用servoRotate函数将舵机转动至初始位置,关闭门。

3.2 优化版

增加防夹功能,预防小孩子、小动物 误开门设计。

要增加防夹功能以防止小孩子、小动物误开门,可以通过阻挡传感器来实现。当前的改进方案用于检测门是否被阻挡,如果有阻挡则停止或反向门的运动。

#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秒,保持门开启状态
                servoRotate(0);         // 关闭门,舵机转动至初始位置
            }
        }
    }
}

在代码改进中,添加了一个名为obstructionSensor的阻挡传感器,连接到P1口的第1位引脚。该传感器用于检测门是否被阻挡。在检测到人体接近的同时,检测阻挡传感器的状态。如果阻挡传感器检测到门被阻挡,可以根据需求添加相应的代码来停止或反向门的运动,例如调用servoRotate(0)来立即关闭门。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac PS2023/2024储存窗口黑屏不显示 解决方法

mac 版本ps2023&#xff0c;存储为窗口突然显示为空白了&#xff0c;没有任何文字按钮&#xff0c;尝试过重启软件、重启电脑、重新安装、电脑系统更新&#xff0c;皆没有效果。 仅ps2023有这个bug&#xff0c;其他操作正常。 具体步骤: 1.打开finder, 先点击左边文稿, 再点击…

二维码智慧门牌管理系统:让房屋管理变得轻松高效!

文章目录 前言一、六实数据管理应用&#xff0c;让管理更精准二、快速导入导出&#xff0c;提升工作效率三、科技助力&#xff0c;让生活更美好四、适用广泛&#xff0c;满足各类需求 前言 随着科技的飞速发展&#xff0c;传统的房屋管理方式已经无法满足现代社会的需求。为了…

【Python语言】字符串的使用方法总结

目录 1、字符串的基本知识 2、字符串的常用操作 2.1 查找特定字符串的下标索引值 2.2 字符串的替换 2.3 字符串的分割 2.4 字符串的规整操作 2.5 统计字符串中某个字符串出现的次数 2.6 统计字符串的长度 3、字符串的遍历 3.1 while循环 3.2 for循环 1、字符串的基本…

cocosCreator微信小游戏 之 获取用户昵称、头像等信息(二)

版本&#xff1a; 3.4.0 语言&#xff1a; TypeScript 环境&#xff1a; Mac 简介 在上篇博客中&#xff0c;主要讲述内容&#xff1a;wx API在cocosCreator中配置定义文件和微信后台配置用户隐私相关。 讲述的主要原因是&#xff1a; cocosCreator没有对 wx API提供定义接…

链表的中间结点

题目表述 给你单链表的头结点 head&#xff0c;请你找出并返回链表的中间结点。如果有两个中间结点&#xff0c;则返回第二个中间结点。 这道题的思路是快慢指针&#xff0c;具体来说就是定义两个指针&#xff0c;一快一慢&#xff0c;快指针一次走两步&#xff0c;慢指针一次…

【每日一题】填充每个节点的下一个右侧节点指针 II

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;BFS 其他语言python3 写在最后 Tag 【BFS】【树】【2023-11-03】 题目来源 117. 填充每个节点的下一个右侧节点指针 II 题目解读 为二叉树中的每一个节点填充下一个节点。 解题思路 方法一&#xff1a;BFS 本题题目…

C 语言左移位操作在kernel驱动子系统中的特殊用途

文章目录 前言一、C语言左移位操作介绍1. 左移位二、左移位操作在kernel 驱动子系统中的应用1. 左移位操作在 V4L2, Media 子系统中的应用实例2.左移位操作在 DRM 子系统中的应用实例2.1 左移位操作在struct drm_crtc 中的应用2.2 左移位操作在struct drm_encoder 中的应用总结…

thinkphp6 入门(11)-- 模板标签

新版框架默认只能支持PHP原生模板&#xff0c;如果需要使用thinkTemplate模板引擎&#xff0c;需要安装think-view扩展&#xff08;该扩展会自动安装think-template依赖库&#xff09;。 composer require topthink/think-view配置文件 安装完成后&#xff0c;在配置目录的vi…

[AUTOSAR][诊断管理][ECU][$3E] 测试设备在线|会话保持

文章目录 一、简介二、服务请求报文定义三、肯定响应四、支持的NRC四、示例步骤(1)supportPosRspMsgIndicationBit=0(2)supportPosRspMsgIndicationBit=1三、示例代码3e_test_present.c一、简介 这个服务的目的是确保诊断服务或者之前激活的通信还处在激活的状态,可以保持…

批量压缩图片大小的绝妙技巧,让你的图片更轻盈

在制作幻灯片演示时&#xff0c;经常需要插入图片作为视觉辅助&#xff0c;通过批量缩小图片大小&#xff0c;可以减小演示文件的大小&#xff0c;方便共享和传输。 那么怎么将图片缩小成了问题的关键&#xff0c;市面上不少方法都是需要通过下载软件来处理图片的&#xff0c;…

自动驾驶高效预训练--降低落地成本的新思路(ReSimAD)

自动驾驶高效预训练--降低落地成本的新思路 1. 引言定义高效预训练 2. ReSimAD2.1引言2.2 主要贡献1.发布大规模ReSimAD数据2.ReSimAD pipeline 2.3 实验 上海人工智能实验室 1. 引言 高效的预训练&#xff0c;是大模型的第一步 大模型的两种能力 海量数据分布–未知场景泛化…

MySQL TIMESTAMPDIFF函数的使用场景

TIMESTAMPDIFF函数在MySQL中用于计算两个日期或时间之间的差异&#xff0c;并以指定的单位返回结果。这个函数特别适用于需要计算时间差或者对日期和时间进行操作的场景。 以下是一些TIMESTAMPDIFF函数的使用场景示例&#xff1a; 源表employees 计算两个日期之间的天数差异&a…

【LeetCode刷题-链表】--82.删除排序链表中的重复元素II

82.删除排序链表中的重复元素II 由于链表是排好序的&#xff0c;所以只需要对其进行一次遍历即可&#xff0c;比较相邻节点对应的值 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(…

Unity3D与iOS的交互 简单版开箱即用

本文适合的情况如下&#xff1a; Unity客户端人员 与 IOS端研发人员合作的情况 目录 From U3D to iOS 实现原理 1.unity工程目录创建2个文件 NativeCallProxy.m、NativeCallProxy.h 并且放到Unity工程目录Plugins/iOS/unity_ios_plus目录下 2.创建C#调用脚本 定义对应.mm脚…

STM32:I²C通信原理概要

一、IIC通信原理 IIC通信和串口通信有一定的相似之处&#xff0c;都有一根共地线和两根数据线。但是传递外部信息&#xff0c;串口有两根数据线可以进行双向通信&#xff0c;也就是全双工通信。而在IIC通信下&#xff0c;其中一条数据线是用于提供同步时钟脉冲的时钟线(SCL)&am…

k8s系列文章一:安装指南

# 临时关闭分区 swapoff -a 前言 k8s是docker的升级版&#xff0c;可用于docker集群配置管理微服务 一、更新ubuntu系统版本 sudo apt update sudo apt upgrade二、添加GPG密钥(阿里源) 尽管我不知道gpg是个什么东西&#xff0c;反正跟着做就完了 curl https://mirrors.a…

PostgreSQL 进阶 - 模式匹配,过滤敏感数据,数据清理

1. 模式匹配 SELECT phone_number FROM customers;使用正则表达式替换所有非数字字符 这样可以清理和标准化电话号码数据&#xff0c;去除任何非数字字符&#xff0c;只保留数字 UPDATE customers SET phone_number REGEXP_REPLACE(phone_number, [^0-9], , g) WHERE phone…

NProgress顶部进度条的用法

大家打开一个网页的时候&#xff0c;会看到一个进度条&#xff0c;然后加载完成后进度条就消失了。这个呢&#xff0c;就是一个第三方的进度条库&#xff0c;叫做nprogress. 1.首先安装nprogress(咱直接用npm安装了) : npm install --save nprogress 2.然后在 router/index.j…

高德Go生态建设与研发实践

序 高德在构建Go生态演化过程中&#xff0c;已经实现了QPS从0到峰值千万的飞跃&#xff0c;本篇文章主要介绍在此过程中积累的一些技术决策及性能优化和重构经验。阅读本文读者会有以下3点收获&#xff1a; 1.高德Go生态发展历程及现状分析 2.高德云原生Serverless落地情况&…