草庐IT

基于stm32的智能防疫门禁管理系统

七天睡七夜 2023-09-09 原文

1.选题背景与意义

经过了疫情的开端与发展,就目前我国已经处在疫情的常态化管理中。在疫情常态化管理下,与人们日常生活中的出行,总离不开测温、通行证明等等。

针对当前的疫情形式,我们设计一款智能防疫门禁管理系统。它能实现人们出行中测温的无人化和系统的区域进出管理化。

2.选题的要求及分析

2.1题目设计要求

智能防疫门禁管理系统。

1、系统能够采集进出人员的人体温度、记录人流量,

2、能在屏幕上显示人体温度、状态、人流量等。

3、语音播报提示进出人员体温是否正常,舵机动作(相当于打开闸门)。

4、后台记录进出人员人体温度、人流量。提醒后台工作人员进行上报和处理。

2.2题目设计分析

智能防疫门禁管理系统的设计与实现,设计所包含的模块主要有:

液晶显示电路、语音播报电路、非接触测温传感器电路、舵机驱动电路、物联网模块、按键电路模块及电源模块。

通过模块之间的配合实现对疫情的预警,一旦有温度异常将会通过闸门关闭和语音播报以及后台提醒来通知相应人员做出相关措施。

对于题目要求我们采用:

stm32f103c8t6实时采集红外传感器获取温度,当温度低于或高于指定阈值时,操作TFT显示屏显示温度异常和语音模块播报,同时控制舵机关闭,模拟门闸关闭状态,并将温度信息通过WIFI模块上传至后台,提醒后台工作人员进行上报和处理。

系统设计的难点在于stm32单片机程序设计、液晶显示、语音播报模块以及非接触式测温模块的使用。

3.设计综述

3.1实物设计综述

3.1.1总体设计框图

STM32F103C8t6做主控;MLX9614ESF-BCC做温度获取传感器;1.8TFTSV 17F语言播报模块、蜂鸣器做显示与语音;MG996舵机模拟开关门;ESP8266 Mode传数据到后台;

 

3.1.2硬件设计原理图及主要部分讲解

1、采用stm32f103c8t6当主控模块

  

1.采集红外传感器获取温度

2.操作TFT显示屏显示温度、状态情况、人流量。

3.控制语音模块播报,舵机开关(模拟门闸关闭状态)

4.将温度信息通过wifi模块上传至后台

3.1.2 MLX90614ESF-BCC模块-非接触测温传感器

        

 

1.内部自带环境温度补偿和线性校准算法

2.通过IIC通信与单片机进行数据交换

3.本模块精度非常之高,可以满足无接触测温功能需求(本项目用的是10cm精度的)。

3.1.3 ESP12F系列模组-ESP8266

   

 

1、低功耗UART-WiFi芯片模组

2、方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制

3、支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈

4、采用该模块进行数据的上传,可以实时将数据上传给后台服务器,进行数据的存储和大数据处理等。

3.1.4 液晶显示-1.8寸128X160像素TFT屏幕

     

1、通过SPI串口与单片机进行通信,用来显示所测温度或显示其它必要信息。

2、支持16BIT RGB 65K色显示,显示色彩丰富。

3、军工级工艺标准,长期稳定工作,提供底层驱动技术支持

4.显示温度、状态、人流量等信息。

3.1.5语音播放-SV 17F语音播报模块

    

1、支持l0触发播放功能,8个l0口单独触发8首曲目或8个10口组

2、支持MP3、WAV解码格式。

3、24位DAC输出,动态范围支持90DB,信噪比支持85DB。

4、自带5WD类功放,可直接驱动4Q,3.5W喇叭。

总的设计原理图

实物成品 

 

3.2关键技术及算法

3.2.1通信协议

串口通信协议:

IIC通信协议:

SPI通信协议:

3.2.2 CRC-8(PEC)校验原理以及实现

3.2.3 MLX90614ESF-DCC的温度算法研究

3.2.4 MLX90614ESF-DCC的使用研究

3.3主要代码展示

int main(void)
{
  /* USER CODE BEGIN 1 */
	float temp=0.0;
	peoples = 0;
	error_flag = 0;
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART2_UART_Init();
  MX_TIM1_Init();
  MX_USART1_UART_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
	LCD_Init();
	LCD_ShowString(5,60,16,"initializing...",0);
	
	__HAL_TIM_CLEAR_IT(&htim2, TIM_IT_UPDATE);		
	// 使能定时器2更新中断并启动定时器2
	HAL_TIM_Base_Start_IT(&htim2);
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);			//启动定时器1 PWM舵机
	Servo_Control(90);														//舵机调到45度
	
	HAL_Delay(1000); 
	display_init();
  /* USER CODE END 2 */
	
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		//temper=(uint8_t)10*42.0-256;
		//HAL_UART_Transmit (&huart1 ,&temper,1,100);
		HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
		temp = mlx90614_read_temp()+2;							//获取温度
		LCD_Fill(64,48,lcddev.width,64,WHITE);			//清空温度显示
		LCD_Fill(64,80,lcddev.width,96,WHITE);			//清空状态显示
		if(temp >= 33){																			//>=30度才会显示
			if(temp < 37.4){
				temper=(uint8_t)10*temp-256;
				HAL_UART_Transmit (&huart1 ,&temper,1,100);
				LCD_ShowFloatNum1(64,48,temp,4,GREEN,WHITE,16);
				GUI_DrawFont16(96,48,GREEN,WHITE,"℃",0);
				GUI_DrawFont16(64,80,GREEN,WHITE,"正",0);
				GUI_DrawFont16(80,80,GREEN,WHITE,"常",0);
				yuyin(0);
				peoples++;
				LCD_Fill(72,112,lcddev.width,128,WHITE);							//清空人数显示
				LCD_ShowNum(72,112,peoples,4,16);											//显示人数
				Servo_Control(135);																		//舵机调到135度  模拟开门
				HAL_Delay(3000);
				Servo_Control(45);																		//舵机调到45度 模拟关门
			}else if(temp >= 37.4 && temp <= 45){
				temper=(uint8_t)10*temp-256;
				HAL_UART_Transmit (&huart1 ,&temper,1,100);
				LCD_ShowFloatNum1(64,48,temp,4,RED,WHITE,16);
				GUI_DrawFont16(96,48,RED,WHITE,"℃",0);
				LCD_Fill(0,80,lcddev.width,lcddev.height,WHITE);			//清空状态显示
				GUI_DrawFont16(24,96,RED,WHITE,"注",0);
				GUI_DrawFont16(40,96,RED,WHITE,"意",0);
				GUI_DrawFont16(56,96,RED,WHITE,"!",0);
				GUI_DrawFont16(72,96,RED,WHITE,"异",0);
				GUI_DrawFont16(88,96,RED,WHITE,"常",0);
				error_flag = 1;
				peoples++;
				while(error_flag){
					yuyin(1);
					HAL_Delay(1500);
				}
				display_init();
			}
		}

  }
}

 3.4实物展示及说明

 

 代码资源:(24条消息) 基于stm32的智能防疫门禁管理系统.zip-智能家居文档类资源-CSDN文库https://download.csdn.net/download/m0_62501117/87356362

 

有关基于stm32的智能防疫门禁管理系统的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  3. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  4. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  5. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  6. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  7. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  8. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  9. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  10. ruby - (Ruby || Python) 窗口管理器 - 2

    我想用这两种语言中的任何一种(最好是ruby​​)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生

随机推荐