STM32实战项目—楼宇人员计数系统

news2024/11/16 10:41:32

本文项目比较简单,目的是介绍一下红外对管的使用,程序设计也比较简单。因此,博主并没有将程序工程上传资源,如果有需要的话可以私信。

文章目录

  • 一、任务要求
  • 二、实现方法
    • 2.1 红外对管简介
    • 2.2 进出人员检测
  • 三、程序设计
    • 3.1 红外对管引脚初始化
    • 3.2 人员计数

一、任务要求

使用两个平行的红外对管,实现对楼宇人员的统计。两个红外对管平行安装。有人进出时,依次被两个红外对管感应,通过感应顺序确定楼宇内人员数量。有人员出入时,打印当前人员数量。

二、实现方法

2.1 红外对管简介

红外对管,也就是我们常说的循迹模块。它可以监测到前方是否有物体经过,或者用于循黑线。原理比较简单。红外对管,之所以叫对管,是因为它有一个红外发射管和红外接收管。在模块上电后,红外发射管不断发射红外线。如果面前有物体经过或者有障碍物时,发射出去的红外线会被反射回来,被红外接收管接收到,以此来判断前方是否有物体。前方有物体时,输出引脚输出低电平。前方没有物体时,输出引脚输出高电平。可以通过拧模块上的螺丝来调节感应距离。它之所以可以应用到循迹中,是因为黑色可以吸收一些红外光。

红外对管

2.2 进出人员检测

对于进出人员的检测,也比较简单。

  • 人员进入
    有人员进入时,应该是依次经过红外对管1和红外对管2,才算一次进入。如果只是经过1,或者只是经过2,都不算一次进入。因此,在检测到红外对管1有人经过时,只需要判断此时红外对管2时候已经有人经过过,就可以确定是否有人员进入。如果红外对管1此时有人员经过,而且此前红外对管2也有人员经过过,那么总人数加一。如果只是红外对管1检测到了人员经过,此前红外对管2没有检测到人员经过。那么人数不变即可。
  • 人员走出
  • 人员走出与人员进入的判断逻辑相同。当红外对管1检测到有人员经过时,判断之前红外对管1是否有人员经过。如果之前红外对管1已经有人缘经过,那么总人数减1。否则,总人数不变。

三、程序设计

3.1 红外对管引脚初始化

红外对管引脚初始化程序如下

/*
 *==============================================================================
 *函数名称:Drv_Infrared_Gpio_Init
 *函数功能:初始化红外对管GPIO
 *输入参数:无
 *返回值:无
 *备  注:无
 *==============================================================================
 */
void Drv_Infrared_Gpio_Init (void)
{
	GPIO_InitTypeDef GPIO_InitStructure;   // 定义结构体
	// 开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

	// 配置结构体 WK UP
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   // 输入浮空
	GPIO_Init(GPIOA, &GPIO_InitStructure);
}

宏定义如下

// 输出引脚宏定义
#define INFRARED1   PAin(1)
#define INFRARED2   PAin(2)

3.2 人员计数

人员计数程序如下

/*
 *==============================================================================
 *函数名称:Med_Infrared_Person_Cunt
 *函数功能:人员计数
 *输入参数:无
 *返回值:无
 *备  注:无
 *==============================================================================
 */
u8 gInfrared1Flag = 0;   // 红外对管1标志位
u8 gInfrared2Flag = 0;   // 红外对管2标志位
u32 gPersonCunt = 0;   // 人员数量
 
void Med_Infrared_Person_Cunt (void)
{
	// 第一个对管检测到人员通过
	if (INFRARED1 == 0)
	{
		// 根据此时红外对管2的标志位来确定后续操作
		// 如果在此之前红外对管2有人经过
		if (gInfrared2Flag == 1)
		{
			// 总人数大于0才可以减1
			if (gPersonCunt > 0)
			{
				gPersonCunt = gPersonCunt - 1;   // 人员数量减1
			}
			gInfrared2Flag = 0;   // 清除红外对管2标志位
			
			printf ("当前楼内人员数量:%d人\r\n",gPersonCunt);   // 打印当前人员数量
			
			while (!INFRARED1);   // 等待人员通过
		}
		else
		{
			gInfrared1Flag = 1;   // 红外对管1标志位置1
			
			while (!INFRARED1);   // 等待人员通过
		}
	}
	
	// 第二个对管检测到人员通过
	if (INFRARED2 == 0)
	{
		// 根据此时红外对管1的标志位来确定后续操作
		// 如果在此之前红外对管2有人经过
		if (gInfrared1Flag == 1)
		{
			gPersonCunt = gPersonCunt + 1;   // 人员数量加1
			gInfrared1Flag = 0;   // 清除红外对管1标志位
			
			printf ("当前楼内人员数量:%d人\r\n",gPersonCunt);   // 打印当前人员数量
			
			while (!INFRARED2);   // 等待人员通过
		}
		else
		{
			gInfrared2Flag = 1;   // 红外对管2标志位置1
			
			while (!INFRARED2);   // 等待人员通过
		}
	}
}

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

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

相关文章

微服务架构介绍及SpringCloudAlibaba组件介绍

单体架构vs微服务架构 单机架构 什么是单体架构 一个归档包(例如war格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。架构单体应用的方法论,我们称之为单体应用架构。(就是一个war包打天下)…

C++图形开发(3):静止的小球(fillcircle函数)

文章目录 1.如何实现?2.一个小球3.多个小球4.更多花样呢? 1.如何实现? 要实现在图形界面得到一个小球,我们的graphics库提供了一个函数: fillcircle();其格式为: fillcircle(x轴坐标,y轴坐标,半径);2.一个小球 现写…

MATLAB App Designer基础教程 Matlab GUI入门(四)

坐标轴控件 axis 函数绘图方法技巧 作用: 绘制函数图像显示图像(jpg png tiff) 学习内容 App designer中 plot 和命令行中的 plot函数的不同;如何在坐标轴空间中显示两个函数图像;智能缩进 (Ctrl I&am…

【洛谷】P3386 【模板】二分图最大匹配(匈牙利算法)

ACcode: #include<bits/stdc.h> using namespace std; #define int long long const int N5e210, M1e510; int n,m,k,ans; struct E{//链式向前星存储图 int v,next; }e[M]; int head[N],cnt;int match[N];//村女生i的男朋友 bool vis[N];//存女生i是否被访问过 void …

three.js应用cannon物理引擎设置物体的相互作用

一、cannon物理引擎介绍 cannon官网地址&#xff1a;https://pmndrs.github.io/cannon-es/ Cannon.js 是一个基于 JavaScript 的开源 3D 物理引擎&#xff0c;可以用于开发和模拟真实世界中的物理效果。它提供了一系列的物理模拟功能&#xff0c;包括刚体碰撞、重力、碰撞检测…

OpenAI Gym入门与实操(2)

本文内容参考&#xff1a; Getting Started With OpenAI Gym | Paperspace Blog&#xff0c; 【强化学习】 OpenAI Gym入门&#xff1a;基础组件&#xff08;Getting Started With OpenAI Gym: The Basic Building Blocks&#xff09;_iioSnail的博客-CSDN博客 3. 环境&#…

现代异步存储访问API探索:libaio、io_uring和SPDK

【摘要】 最近的高性能存储设备暴露了现有软件栈的低效&#xff0c;因而催生了对I/O栈的改进。Linux内核的最新API是io_uring。作者提供了第一个针对io_uring的深度研究&#xff0c;并且和libaio、SPDK比较&#xff0c;探讨它的下性能和优缺点。根据作者的发现&#xff0c;&am…

ChatGPT:对教育来说,究竟是机遇,还是风险?

ChatGPT&#xff08;Chat Generative Pre-trained Transformer&#xff09;是由美国人工智能研究实验室OpenAI推出的一款人工智能聊天机器人。作为一个大型语言模型&#xff0c;ChatGPT有效结合了大数据、大算力、强算法&#xff0c;拥有较强的语言理解和文本生成能力&#xff…

javaMail之巨坑

使用java实现邮件发送功能&#xff0c;环境&#xff1a;Foxmail 6.5&#xff0c;阿里EasyExcel生成的excel文件&#xff0c;maven依赖如下&#xff1a; <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><ver…

MySQL - 第12节 - MySQL视图特性

目录 1.MySQL视图特性 2.基本使用 2.1.准备测试表 2.2.创建视图 2.3.修改视图影响基表 2.4.修改基表影响视图 2.5.删除视图 3.视图规则和限制 1.MySQL视图特性 视图的概念&#xff1a; • 视图是一个虚拟表&#xff0c;其内容由查询定义&#xff0c;同真实的表一样&…

一些零散的查询知识

一、all any some 表&#xff1a; all大于所有的值&#xff1a; any some:大于任意一个即可 例题&#xff1a; 大于50部门所有员工工资的人&#xff1a; 等价于&#xff1a; 二、exists关键字 1、exists查询 exists(子查询) 如果有满足条件的记录&#xff0c;那么exi…

nginx配置https加密

以下操作版本为Ubuntu2004&#xff0c;文件位置可能略有不同 https 功能 Web网站的登录页面通常都会使用https加密传输的&#xff0c;加密数据以保障数据的安全&#xff0c;HTTPS能够加密信息&#xff0c;以免敏感信息被第三方获取&#xff0c;所以很多银行网站或电子邮箱等等…

计算机网络 第二章(上)

2.1_1 物理层基本概念_哔哩哔哩_bilibili2.1_1 物理层基本概念是王道计算机考研 计算机网络的第12集视频&#xff0c;该合集共计76集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视频内容。https://www.bilibili.com/video/BV19E411D78Q/?p12&spm_id_from…

【近场社交项目】数据库系统期末设计——需求分析部分

【近场社交项目】数据库系统设计——需求分析&#x1f60e; 前言&#x1f64c;1.需求求分析(用户部分为例&#xff09;1.2用户数据字典1.2.1用户信息表&#xff08;数据结构&#xff09;&#xff1a;数据项间的关系和结构定义&#xff1a; 1.2.2.个人资料表&#xff08;数据结构…

10、SpringBoot集成Redis

总体概述 jedis-lettuce-RedisTemplate三者的联系 本地Java连接Redis常见问题 ● bind配置请注释掉 ● 保护模式设置为no ● Linux系统的防火墙设置 ● Redis服务器的IP地址和密码是否正确 ● 忘记写Redis的服务端口号和auth密码 1、集成Jedis 是什么 Jedis Client是Redis官…

【MATLAB笔记】基础函数及向量

一、基础函数绘制 版本&#xff1a;Matlab2021a 实例1&#xff1a;生成向量 >> x0:0.1:30; >> ysin(x).*cos(x); >> plot(x,y) 实例2&#xff1a;创建向量 >> xlinspace(0,2*pi); >> ysin(x) >> plot(x,y) 二、向量的点积 >> a…

ueditor富文本编辑器使用

下载百度富文本编辑器 链接&#xff1a;https://pan.baidu.com/s/1E4K8e0WCy9_L6z0-Dz3JkQ?pwdc2gf 提取码&#xff1a;c2gf <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" co…

pgrouting连通性分析

官方文档 1、安装pgrouting库 参考&#xff1a;pgrouting安装 主要涉及的两个函数&#xff1a; 1、 pgr_createTopology&#xff1a;创建空间拓扑&#xff0c;数据自动保存至新创建的表<edge_table>_vertices_pgr&#xff0c;将空间表的linestr的geometry数据拆分&…

云原生系列之管理docker容器中的数据管理实战

前言 在生产环境中使用docker,一方面需要对数据进行保存或者在多个容器之间进行数据共享; 另一方面在docker的容器被删除之后,并不会保留容器的状态信息。 想要实现docker容器的信息持久化,就涉及到docker的数据管理,今天我们就来聊聊docker数据管理那些事。 文章目录 …

Vue3:在 VSCode 中如何成功安装 Mockjs 及成功引入 Mock 的详细过程

Ⅰ、Mock 简介&#xff1a; 1、什么是 Mock&#xff1f; 其一、Mock 的解释一&#xff1a; Mock 服务是指在测试过程中对于某些复杂&#xff08;或者不太好构造&#xff09;的对象&#xff0c;用一个虚拟的对象替代它&#xff1b;对于前端来说&#xff0c;就是后台数据还没有…