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

一、项目介绍

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

本项目的主控芯片选择了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.mfbz.cn/a/116980.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式服务框架设计

目录 服务框架的设计 服务框架的功能 服务框架的性能指标 服务治理需要哪些功能 服务框架的设计 尽管不同的分布式服务框架实现细节存在差异&#xff0c;但是核心功能差异不大&#xff0c;下面的架构图描绘了一个分布式服务框架的整体逻辑架构 总共分为 3 层&#xff1a;1…

GNU ld链接器 lang_process()(二)

一、ldemul_create_output_section_statements() 位于lang_process()中11行 。 该函数用于创建与目标有关的输出段的语句。这些语句将用于描述输出段的属性和分配。 void ldemul_create_output_section_statements (void) {if (ld_emulation->create_output_section_sta…

MySQL数据库之表的增删查改

目录 表的操作1.创建表创建表案例 2.查看表结构3.修改表4.删除表 表的操作 1.创建表 语法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a; field 表示列…

C# 基类中的虚函数调用基类的虚函数执行的是派生类实现的对应函数吗

答案 &#xff1a; 是的。 比如基类Base中有两个virtual 函数A和B&#xff0c;然后派生类为Derive&#xff0c;override了函数A记为A&#xff0c;override了函数B记为B&#xff0c;且B之中会执行base.B的逻辑&#xff1b; 在Base中&#xff0c;B调用了A的逻辑&#xff0c;那么外…

C++ 实现红黑树

红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c;因…

通过环境变量实现多个JDK切换

前文: 由于jdk版本需要升级为jdk17,因为jdk8比较常用且稳定,本人又不想卸载掉安装的jdk8,在经过查找资料后找到了可以通过修改环境变量在本地任意切换jdk版本 环境变量配置 网上教程一堆,直接跳过了,这里主要说明怎么通过配置环境变量切换 电脑->属性->高级系统设置-&g…

centos7中多版本go安装

安装go的方式 官网下载tar.gz包安装 # 1.下载tar包 wget https://go.dev/dl/go1.18.1.linux-amd64.tar.gz # 2.解压tar包到指定路径 tar -xvf go1.18.1.linux-amd64.tar.gz -C /usr/local/go1.18 # 3.配置环境变量&#xff0c;打开 /etc/profile 文件添加以下文件每次开机时…

【MATLAB源码-第65期】基于matlab的OFDM/OTFS通信系统性能对比,输处误码率曲线;对比是否采用LDPC编码。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 OTFS&#xff08;Orthogonal Time Frequency Space&#xff09;是一种无线通信调制技术&#xff0c;它利用时间、频率和空间的正交性来传输数据&#xff0c;目的是提高无线通信系统的性能&#xff0c;尤其是在多径和高移动性环…

selenium自动化测试入门 —— 定位frame和iframe中的元素对象

< frame> <iframe> 标签&#xff0c;浏览器会在标签中打开一个特定的页面窗口&#xff08;框架&#xff09;&#xff0c;它在本窗口中嵌套进入一个网页&#xff0c;当用selenium定位页面元素的时候会遇到定位不到frame框架内的元素的问题。 定位frame中的元素前我…

node插件express(路由)的插件使用(二)——body-parser和ejs插件的基本使用

文章目录 前言一、express使用中间件body-parser获取请全体的数据1. 代码2. 效果 二、express使用ejs&#xff08;了解即可&#xff09;1.安装2.作用3.基本使用&#xff08;1&#xff09;代码&#xff08;2&#xff09;代码分析和效果 4.列表渲染&#xff08;1&#xff09;代码…

同步网盘与云盘:哪个更好用?

同步网盘、同步云盘现在是热门的文件管理工具&#xff0c;在回答“同步网盘云盘哪个好用”这个问题之前&#xff0c;我们需要知道什么样的同步网盘、同步云盘算好用&#xff1f; 什么样的同步网盘云盘好用&#xff1f; 1、存储空间大 对于文件管理工具而言&#xff0c;存储空…

从零开始学习PX4源码0(固件下载及编译)

目录 文章目录 目录摘要1.重点学习网址2.固件下载1.下载最新版本固件2.下载之前版本固件 摘要 本节主要记录从零开始学习PX4源码1(固件下载)的过程&#xff0c;欢迎批评指正&#xff01;&#xff01;&#xff01; 下载固件主要分为两个版本&#xff0c;之前稳定版本和最新官网…

3、Sentinel 动态限流规则

Sentinel 的理念是开发者只需要关注资源的定义&#xff0c;当资源定义成功后可以动态增加各种流控降级规则。Sentinel 提供两种方式修改规则&#xff1a; • 通过 API 直接修改 (loadRules) • 通过 DataSource 适配不同数据源修改 通过 API 修改比较直观&#xff0c;可以通…

C#中LINQtoSQL只能在.NetFramework下使用,不能在.net 下使用

目录 一、在net7.0下无法实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 二、在.NetFramework4.8下成功实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 三、结论 四、理由 本文是个人观点&#xff0c;因为我百般努力在.net7.0下无法实现LINQtoSQL的…

如何将 XxlJob 集成达梦数据库

1. 前言 在某些情况下&#xff0c;你的项目可能会面临数据库选择的特殊要求&#xff0c;随着国产化的不断推进&#xff0c;达梦数据库是一个常见的选择。本篇博客将教你如何解决 XxlJob 与达梦数据库之间的 SQL 兼容性问题&#xff0c;以便你的任务调度系统能够在这个数据库中…

Idea去掉显示的测试覆盖率

一.启东时 误点击了 快捷键调出 【Ctrl 】【Alt】【F6】

npm ERR! code ELIFECYCLE

问题&#xff1a; 一个老项目&#xff0c;现在想运行下&#xff0c;打不开了 npm install 也出错 尝试1 、使用cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm install 还是不行 尝试2、 package.json 文件&#xff0c;去掉 那个插件 chorm…

Unity中Shader的GI的直接光实现

文章目录 前言一、在上一篇文章中&#xff0c;得到GI相关数据后&#xff0c;需要对其进行Lambert光照模型计算二、在准备好上面步骤后&#xff0c;我们需要准备缺少的数据1、准备上图中的 s.Normal2、准备上图中的 s.Albedo 前言 Unity中Shader的GI的直接光实现&#xff0c;基…

基于springboot实现在线考试平台项目【项目源码+论文说明】

基于springboot实现在线考试平台管理系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把在线考试管理与现在网络相结合&#xff0c;利用java技术建设在线考试系统&#xff0c;实现在线考试的信息化。则对于进一步提高在线考试管理发展&#xff0c;丰富在线考试管理经…

【计算机网络】同源策略及跨域问题

1. 同源策略 同源策略是一套浏览器安全机制&#xff0c;当一个源的文档和脚本&#xff0c;与另一个源的资源进行通信时&#xff0c;同源策略就会对这个通信做出不同程度的限制。 同源策略对 同源资源 放行&#xff0c;对 异源资源 限制。因此限制造成的开发问题&#xff0c;称…