文章目录
- 一.概要
- 二.实验原理
- 三.实验控制流程
- 四.STM32单片机跌倒监测实验(MPU6050+直流有刷电机+蜂鸣器)
- 五.CubeMX工程源代码下载
- 六.实验效果视频
- 七.小结
一.概要
据统计每年约有 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];//单位mgfloat GyroData[3];//单位mdpsfloat 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传感器的了解,可以应用到其他各种应用环境。