零基础STM32单片机编程入门(三十八) 多传感器模块之跌倒检测实战源码

一.概要

据统计每年约有 300 万老年人因跌倒受伤而在急诊室接受治疗,每五次跌倒就有一次会造成伤害,例如骨折或头部受伤,每年至少有 300,000 名老年人因髋部骨折住院。
所以跌倒检测系统前景非常广阔,‌可以在家庭环境、‌养老院和医疗机构、‌公共场所等多个领域和场景中发挥重要作用。‌在家庭环境中,‌这种系统可以为老年人提供额外的安全保障,‌一旦发生跌倒,‌系统将立即发送警报给家庭成员或医疗人员,‌以便及时采取措施。‌在养老院和医疗机构中,‌这种系统可以帮助工作人员及时发现老年人的跌倒情况,‌并采取适当的救助措施,‌减少因跌倒而引发的紧急情况。

本文就做了一个简单跌倒检测的系统,采用STM32F103C8T6单片机+MPU6050陀螺仪模块+蜂鸣器报警。用一个小电机来演示跌倒监测效果是否可以。

二.实验原理

硬件连接原理框图如下:
在这里插入图片描述
各传感器模块简介:

MPU6050是一款功能强大的六轴运动跟踪传感器,适用于各类物体加速度与角速度的精确测量,MPU6050主要实现倾斜检测。

直流有刷电机(BDC)在允许范围内,供电即可工作,只需要调整电压即可改变转速,具有良好的调速性能。

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,当I/O口输入高电平时,蜂鸣器发声。

三.实验控制流程

STM32F103C8T6单片机上电后,驱动直流有刷电机旋转,并时刻监测MPU6050陀螺仪模块采集到的倾斜角度,等到MPU6050检测到倾斜角度过大,单片机停止驱动直流有刷电机,并驱动蜂鸣器报警。

四.STM32单片机跌倒监测实验(MPU6050+直流有刷电机+蜂鸣器)

板子与MPU6050陀螺仪模块用杜邦线连接:
板子G-----模块GND
板子3.3---模块VCC
板子B6---模块SCL
板子B7---模块SDA

杜邦线接板子跟蜂鸣器
板子3.3---模块VCC
板子B12---模块I/O
板子G-----模块GND

用4根杜邦线把电机模块与开发板相连
板子3.3----模块VCC
板子A0-----模块A-1A
板子A1-----模块A-1B
板子G------模块GND
把四叶螺旋桨插到小型直流电机端口,电机的两根线连接到 L9110 两路电机驱动板的绿端子处(MOTOR A)

在这里插入图片描述

打开STM32CubeMX软件,新建工程
在这里插入图片描述
Part Number处输入STM32F103C8,再双击就创建新的工程
在这里插入图片描述
配置下载口引脚
在这里插入图片描述
配置外部晶振引脚
在这里插入图片描述

配置系统主频
在这里插入图片描述
IIC配置
在这里插入图片描述

GPIO配置
在这里插入图片描述

配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述
生成工程
在这里插入图片描述
用Keil5打开工程
在这里插入图片描述
添加代码

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

主要程序:

unsigned char t,CleanTime;
uint32_t TimeCounter;
extern void i2c_CfgGpio(void);
short Accel[3];
	short Gyro [3];
	short Temp;
	float AccelData[3];//单位mg
	float GyroData[3];//单位mdps
	float Angle;
/* USER CODE END 0 */
/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* 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_I2C1_Init();
  /* USER CODE BEGIN 2 */
	OLED_Init();			       //初始化OLED  		
	MPU6050_Init();//MPU6050初始化配置
	if(MPU6050ReadID() == 0)//读取MPU6050 ID
	{	
	  while(1);
  }
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);//启动风扇
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
			HAL_Delay(100);
			MPU6050ReadAcc(Accel);	
			for( int i=0;i<3;i++)
			{
			if(Accel[i]>=0)
			{
				AccelData[i]=Accel[i]*2000/32768;
			}else
			{
				AccelData[i]=-(-Accel[i]+1)*2000/32768;

			}		
			}

			if(AccelData[1]<0)
			{
			OLED_ShowString(40,3,"-");
			OLED_ShowNum(48,3,-AccelData[1],4,16);//加速度y
			}else
			{
			OLED_ShowNum(48,3,AccelData[1],4,16);//加速度y
			}

			if(AccelData[2]<0)
			{
			OLED_ShowString(80,3,"-");
			OLED_ShowNum(88,3,-AccelData[2],4,16);//加速度z
			}else
			{
			OLED_ShowNum(88,3,AccelData[2],4,16);//加速度z
			}

			Angle = atan2(AccelData[2], AccelData[1])*180/3.14f;//计算倾角,正常Z轴垂直水平地面,角度应该在90度左右

      if(Angle<=80 || Angle>=100)//倾斜明显,报警,风扇停止转动
			{
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);//启动风扇
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
				HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_12);//PB12引脚翻转输出
			}else
			{
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);//启动风扇
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
				HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12,GPIO_PIN_RESET);//PB12拉低,报警消除

			}
	


	}	  
	
  /* USER CODE END 3 */
}

五.CubeMX工程源代码下载

通过百度网盘分享的文件:39.跌倒监测实验(MPU6050+直流有刷电机+蜂鸣器).rar
链接:https://pan.baidu.com/s/10eVXaiJGxt9BxrGVfhdZpw
提取码:51kr

如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行

CSDN代码链接

六.实验效果视频

STM32F103C8T6+MPU6050陀螺仪跌倒检测实验

七.小结

跌倒检测实验,能更加深对MPU6050传感器的了解,可以应用到其他各种应用环境。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值