基于STM32F103C8T6的智能

1、前言

大学计算机专业常用到的课设毕设项目,大部分都是基于STM32F103C8T6进行设计,使用IIC,SPI,USART,ADC等进行数据传输。掌握了以上几个通信协议,基本就能完成实现所需要的功能。本文章设计的智能防盗系统便是如此。

2、功能概括

本次系统主要是以STM32F103C8T6为主要控制核心,并对外连接有人体红外传感器,碰撞传感器,门磁传感器和震动传感器,当人体红外传感器检测到有人的时候发生警报并设有延迟,警报时间加长,将碰撞传感器放置在贵重物品的下方。当检测到贵重物品发生移动时,蜂鸣器发生警报,在门上面安装有门磁传感器,当门被打开时,发生警报,在窗户安装有震动传感器,当有人撬动窗户时,报警模块发生警报,设置有蓝牙模块,以将发生警报的各个情况上传到手机段APP,以及时对房间内进行检查。并在板子上预留出了摄像头模块和GSM模块的接口,以用于后续系统升级。

3、传感器的选择

3.1 人体红外传感器

人体红外传感器也称为PIR传感器,是一种用于检测人体热能辐射的电子传感器。它基于人体发出的红外辐射,通过测量红外辐射的变化来检测、感知人体的存在。人体红外传感器主要用于安防系统、自动照明、门禁系统、智能家居等领域。它可以感知人体的活动,并将其作为触发信号来控制相关设备的操作。人体传感器通过感知人体发出的红外辐射来实现检测。人体作为一个发热体,会发出红外辐射,而人体红外传感器可以感知这种变化的红外辐射信号。人体红外传感器利用一种称为"热电效应"的原理进行工作。传感器通常是由两个或多个独立的热敏元件(称为"热电堆")组成,当人体或其他物体进入传感器的感知范围,热堆会感应到来自这些物体的红外辐射变化。人体红外传感器通常具有一定的检测范围和角度。检测范围可以根据传感器的设计和应用需求进行调整,一般为几米到十几米不等。角度方面,传感器的覆盖范围通常为大约100度到360度。当人体红外传感器检测到人体的存在或活动时,它会产生相应的输出信号。这个信号可以是电压或脉冲信号,用于触发相关的操作,比如打开灯光、报警、录像等[15]。人体红外传感器如图3-1所示。

图3-1 人体红外传感器

3.2 门磁传感器的选择

门磁传感器也称为门磁开关,是一种用于检测门的开关状态的传感器。它主要由磁性感应元件和控制电路组成,通过检测磁场的变化来判断门的打开或关闭状态。门磁传感器通常由两个主要部分组成:一个磁性感应元件和一个安装在门框和门闩上的磁性吸铁块。当门关闭时,磁性感应元件和吸铁块靠近,产生磁场。而门打开时,磁性感应元件和吸铁块相距较远,磁场消失。门磁传感器利用磁场的变化来判断门的开关状态。当门处于关闭状态时,磁性感应元件感应到吸铁块靠近,磁场变化会被传感器捕获并发出相应的信号表示门关闭。当门被打开时,磁性感应元件失去吸铁块的磁场影响,磁场变化消失,传感器也相应地发出门打开的信号。门磁传感器常用于安防系统、智能家居和商业应用中。在安防系统中,门磁传感器可以与报警器或监控系统相连,当门被非法打开时,触发报警或记录门的开启事件[12]。在智能家居中,门磁传感器可以与自动照明、门禁系统等配合使用,实现灯光自动开关、电子锁控制等功能。门磁传感器可以以不同的方式安装在门框和门体上,以适应不同类型的门。常见的安装方式包括表面安装(直接粘贴或螺丝固定)和埋入式安装(安装在门框和门闩内部)等。门磁传感器通常通过电路输出信号表示门的开关状态。输出信号可以是开关型信号(通常为常开或常闭的电路开关)或数字信号(例如使用脉冲表示门的开闭状态)。门磁传感器简单易用,可靠性高,被广泛应用于多种场景中,提供对门的状态监测和控制,增加安全性和便利性。如图3-2为本次使用的门磁传感器。

图3-2 门磁传感器

3.3 震动传感器

震动传感器是一种用于检测物体震动、震动或运动状态的传感器。它能够感知物体的加速度或位移变化,并将这些变化转换成电信号进行检测和分析。震动传感器的结构根据不同的工作原理和应用需求可以有多种设计。常见的震动传感器结构包括压电式震动传感器、惯性式震动传感器和电磁式震动传感器等。不同类型的震动传感器采用不同的工作原理。压电式震动传感器利用压电材料的特性,在物体发生震动时产生电荷,从而实现震动测量。惯性式震动传感器则基于质量的惯性原理,通过物体震动引起传感器内部质量的位移变化来实现测量。电磁式震动传感器则利用磁场和线圈的相互作用,将震动转换成电信号[14]。震动传感器广泛应用于机械设备监测、结构健康监测、车辆安全、地震监测等领域。在机械设备中,震动传感器可以用于监测旋转机械的平衡性、故障检测、预警和保护。而在工程结构中,震动传感器可以用于监测建筑物、桥梁、风力发电机等结构的变形和安全状态。震动传感器通常测量的参数包括震动加速度、震动速度和震动位移等。这些参数可以用于分析对象的运动、震动频率、震动幅度和频谱分布等,以评估设备或结构的运行状况和健康状况。震动传感器的输出信号通常是模拟电压信号或数字信号。模拟信号可以直接表示震动的幅度和频率,而数字信号通常需要经过采样和处理,以便进行进一步的信号处理和分析。震动传感器在许多领域中起着重要的作用,帮助监测和评估物体的震动和运动状态。如图3-3为震动传感器。

图3-3为震动传感器

3.4 碰撞传感器

碰撞传感器是一种用于检测物体碰撞或撞击的传感器。它能够感知到物体的加速度变化或震动,从而判断是否发生了碰撞事件。在贵重物品被移动的情况下,碰撞传感器可以起到监测和提醒的作用。当贵重物品受到碰撞或撞击时,传感器会感知到加速度的变化,并输出对应的信号。这个信号可以通过连接到其他设备或系统,如警报系统或安全监控系统,以触发警报或采取进一步的安全措施。碰撞传感器通常采用加速度计或惯性传感器作为感测元件,它们能够测量物体的加速度变化,并将其转换为电信号。一些碰撞传感器还可以提供灵敏度调节功能,以适应不同的应用场景和物体的移动情况。应用碰撞传感器来检测贵重物品的移动可以带来以下优势:碰撞传感器能够实时感知并检测到物品的碰撞事件,及时提醒用户或相关人员。通过及时检测物品的移动,可以有效预防盗窃和破坏行为,并采取相应的安全措施。一些碰撞传感器还可以记录碰撞事件的时间、地点和强度等信息,用于后续的数据分析和追踪。如图3-3为碰撞传感器。

图3-4 碰撞传感器

4、电路设计

4.1整体电路设计

本系统主要是使用了STM32F103C8T6作为控制芯片,外接人体红外传感器、碰撞传感器、门磁传感器、震动传感器进行检测,设计有蜂鸣器和LED报警模块并通过HC-05蓝牙模块将数据传送到手机端APP。单片机的PC13、PC14、PC15、PB5分别连接到震动传感器、碰撞传感器、人体红外传感器和门磁传感器的数据输出IO,单片机的PB8、PB9分别连接到报警模块的LED和BEEP蜂鸣器,两个报警模块均使用三极管开关电路进行驱动,因此只需连接一根IO对三极管输出的高低电平进行控制即可达到对LED和BEEP的开关效果,单片机的PA10和PA9分别连接到HC-05蓝牙模块的TXD和RXD,在为方便后续系统升级所设计的扩展模块中,预留了摄像头模块和用于显示图像的OLED显示屏,单片机的PB7和PB8连接OLED显示屏的SDA和SCL,单片机的PA0-PA7连接摄像头的D0-D7,摄像头的SCL和SDA分别连接PB10和PB11,摄像头的HS,VS,MCLK,PCLK连接单片机的PB13,PB12,PA8,PB14。

4.2蓝牙模块电路设计

5、软件设计

5.1整体软件设计

首先对外设所连接的传感器引脚进行读取电平存取的变量进行定义,然后进入主函数,配置系统时钟为72M,对蜂鸣器,LED,人体红外传感器,碰撞传感器,门磁传感器,震动传感器和蓝牙模块进行初始化,接下来进入主循环,先调用PUMK_read()函数进行判断是否触发了警报,接下来读取各个传感器的引脚电平状态从而进行判断触发的警报类型,若未触发警报则输出一切正常。

5.2报警类型代码设计 

本系统定义了pin_state_RED1,pin_state_MC1,pin_state_PUMK1,pin_state_ZD1四个变量分别对人体红外传感器,门磁传感器,碰撞传感器,震动传感器的状态进行读取,当读取到pin_state_RED1为高电平时,表示有人闯入,人体红外传感器被触发,当读取到pin_state_MC1为高电平时,表示门窗被打开,门磁传感器被触发,当读取到pin_state_PUMK1为高电平时,表示贵重物品被移动,碰撞传感器被触发,当读取到pin_state_ZD1为高电平时,表示防护栏被敲动,震动传感器触发。

6、系统框架图 

7、主函数代码

#include "stm32f10x.h"
#include "led.h"
#include "usart1.h"
#include "delay.h"
#include "dht11.h"
#include "oled.h"
#include "sys.h"
#include "adc.h"
uint8_t IO;
uint8_t pin_state_PUMK1;
uint8_t pin_state_RED1;
uint8_t pin_state_MC1;
uint8_t pin_state_ZD1;
uint8_t pin_state_KEY1;
int cnt1=0;

int main(void)
{ 
	
  SystemInit();//配置系统时钟为72M	
	
	BEEP_GPIO_Config();
	LED_GPIO_Config();//led初始化
	RED_GPIO_Config();
	PUMK_GPIO_Config();
	KEY_GPIO_Config();
	USART1_Config();//串口初始化
	Delay_init(72);

		
  while (1)
  {

		LED_On();
		PUMK_read();
		
		IO=GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_8);
		pin_state_PUMK1 =GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_14);
	  pin_state_RED1 =GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15);
	  pin_state_MC1 =GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5);
		pin_state_ZD1 =GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13);
	//	pin_state_KEY1 =GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_3);
		
//	if(pin_state_KEY1==0)
//	{
//	cnt1++;
//	}
//	
//if(cnt1%2==0)
//{  printf("输出cnt1:%d\r\n",cnt1);	 }
//else
//	{
//	 BEEP_Off();
//			LED_Off();
//	}
     if(pin_state_RED1 == Bit_SET && pin_state_MC1 == Bit_RESET && pin_state_PUMK1 == Bit_RESET&& pin_state_ZD1 == Bit_RESET)
       {
         printf("红外感应到有人\r\n");	
       }
     else if(pin_state_RED1 == Bit_RESET && pin_state_MC1 == Bit_SET && pin_state_PUMK1 == Bit_RESET&& pin_state_ZD1 == Bit_RESET)
      {
         printf("门被打开\r\n");	
      }
     else if(pin_state_RED1 == Bit_RESET && pin_state_MC1 == Bit_RESET && pin_state_PUMK1 == Bit_SET&& pin_state_ZD1 == Bit_RESET)
      {
         printf("贵重物品被移动\r\n");	
      }
			     else if(pin_state_RED1 == Bit_RESET && pin_state_MC1 == Bit_RESET && pin_state_PUMK1 == Bit_RESET&& pin_state_ZD1 == Bit_SET)
      {
         printf("有人撬动防护栏\r\n");	
      }
    else if(pin_state_RED1 == Bit_SET && pin_state_MC1 == Bit_SET && pin_state_PUMK1 == Bit_RESET)
       {
         printf("红外感应到有人且门被打开\r\n");	
       }
    else if(pin_state_RED1 == Bit_SET && pin_state_MC1 == Bit_RESET && pin_state_PUMK1 == Bit_SET)
       {
         printf("红外感应到有人且贵重物品被移动\r\n");	
       }		
    else if(pin_state_RED1 == Bit_RESET && pin_state_MC1 == Bit_SET && pin_state_PUMK1 == Bit_SET)
       {
         printf("门被打开且贵重物品被移动\r\n");	
       }	
    else if(pin_state_RED1 == Bit_SET && pin_state_MC1 == Bit_SET && pin_state_PUMK1 == Bit_SET)
       {
         printf("红外感应到有人打开了门并移动了贵重物品\r\n");	
       }			 
     else
       {
		     printf("一切正常\r\n");	
		   }
		Delay_ms(1000);
}
}

  • 31
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值