当前位置: 首页 > news >正文

【stm32简单外设篇】- 震动传感器

一、适用场景
适用场景:防盗/防移动报警(机箱/设备被碰撞报警)、机械振动监测(异常振幅提示)、敲击触发(敲击开关)、跌落检测、简单冲击计数、测试台/生产线故障检测、嵌入式中断与 ADC 采样练习。

二、器材清单

振动传感器 ×1。

stm32f103(或其它 STM32)开发板 ×1

若干杜邦线(母对母/公对母)×1组

稳定电源(3.3V 或 5V,按模块标注)×1

三、工作原理(要点)

基于弹簧摆动原理设计的震动传感器,震动势能传到弹簧末端引起共振,左右摆动碰触到金属外壁形成通路。在静止时任何角度都为开路OFF状态,输出低电平,当受到外力碰撞或者大力晃动时,弹簧变形和中心电极接触导通使两个引脚瞬间导通为ON状态,当外力消失时,电路恢复为开路OFF状态,输出高电平。

由于导通时间和弹簧的刚性有关,所以该震动传感器的输出带宽很窄,在读取时,建议使用外部中断功能。

四、接线示意

GNDGND

VCC5V/3.3V电源

标准库

DO

DOPC1

AO

AOPC1

HAL库

DO

DOPA0

AO

AOPA0

五、示例代码

标准库

DO

#include "stm32f10x.h" #include "stdio.h" #include "bsp_SysTick.h" #include "bsp_usart.h" void gpio_init() { GPIO_InitTypeDef PC; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //振感 PC.GPIO_Pin = GPIO_Pin_1; PC.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOC,&PC); } int main(void) { SysTick_Init(); //延时函数初始化 gpio_init(); //初始化与LED连接的硬件接口 USART_Config(); while(1) { if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) == 0) { Usart_SendString(USART1,"振动\n"); }else { Usart_SendString(USART1,"静止\n"); } Delay_us(500000); } }

AO

#include "breathing.h" #include "stm32f10x.h" #include "stdio.h" #include "bsp_usart.h" char showlight[20]; extern volatile uint16_t adc_light; void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 //定时器TIM3初始化 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式,即从0开始向上数到越界 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断 //中断优先级NVIC设置 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIMx } void TIM3_IRQHandler(void) { uint16_t value; value = (adc_light)/74; if(TIM_GetITStatus(TIM3,TIM_IT_Update) == SET) { sprintf(showlight,"light:%d,value:%d\n",adc_light,value); Usart_SendString(USART1,showlight); } TIM_ClearITPendingBit(TIM3,TIM_IT_Update); } #include "adc_time.h" #include "stm32f10x.h" volatile uint16_t adc_light; void adcgpio_init() { GPIO_InitTypeDef PC; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); PC.GPIO_Pin = GPIO_Pin_1; PC.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC,&PC); } void adcmode_init() { ADC_InitTypeDef adc; NVIC_InitTypeDef nvic; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE); adc.ADC_Mode=ADC_Mode_Independent; adc.ADC_ScanConvMode = DISABLE; adc.ADC_ContinuousConvMode = ENABLE; adc.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; adc.ADC_DataAlign = ADC_DataAlign_Right; adc.ADC_NbrOfChannel = 1; ADC_Init(ADC2,&adc); RCC_ADCCLKConfig(RCC_PCLK2_Div8); ADC_RegularChannelConfig(ADC2,ADC_Channel_11,1,ADC_SampleTime_55Cycles5); ADC_ITConfig(ADC2,ADC_IT_EOC,ENABLE); ADC_Cmd(ADC2,ENABLE); ADC_ResetCalibration(ADC2); while(ADC_GetResetCalibrationStatus(ADC2)); ADC_StartCalibration(ADC2); while(ADC_GetCalibrationStatus(ADC2)); ADC_SoftwareStartConvCmd(ADC2,ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3); nvic.NVIC_IRQChannel = ADC1_2_IRQn; nvic.NVIC_IRQChannelPreemptionPriority = 3; nvic.NVIC_IRQChannelSubPriority = 0; nvic.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic); } void adctime_Init() { adcgpio_init(); adcmode_init(); } void ADC1_2_IRQHandler(void) { if(ADC_GetITStatus(ADC2,ADC_IT_EOC) == SET) { adc_light = ADC_GetConversionValue(ADC2); } ADC_ClearITPendingBit(ADC2,ADC_IT_EOC); } #include "stm32f10x.h" #include "stdio.h" #include "bsp_SysTick.h" #include "adc_time.h" #include "breathing.h" #include "bsp_usart.h" int main() { SysTick_Init(); TIM3_Init(); USART_Config(); adctime_Init(); TIM3_Int_Init(4999,7199); //定时500ms while(1) { } // return 0; }

HAL库

DO

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_USART1_UART_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == 1) HAL_UART_Transmit(&huart1,"无震动\r\n", strlen("无震动\r\n"), HAL_MAX_DELAY); else HAL_UART_Transmit(&huart1,"有震动\r\n", strlen("有震动\r\n"), HAL_MAX_DELAY); HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }

AO

int main(void) { /* USER CODE BEGIN 1 */ char show[20]={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_ADC1_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { //#1。启动常规序列 HAL_ADC_Start(&hadc1); //#2.等待转换完成 HAL_ADC_PollForConversion(&hadc1,HAL_MAX_DELAY); //#3。获取结果 uint32_t dr = HAL_ADC_GetValue(&hadc1); //#4.把结果转换成电压 float voltage = dr *(3.3f-0.0f)/4095.0f; sprintf(show,"adc:%d,%.2f\n",dr,voltage); HAL_UART_Transmit(&huart1,show,strlen(show),HAL_MAX_DELAY); HAL_Delay(500); // if(voltage>1.5f)//光线暗 // HAL_GPIO_WritePin(GPIOA,GPIO_PIN_13,GPIO_PIN_SET);// 灭灯 // else//光线亮 // HAL_GPIO_WritePin(GPIOA,GPIO_PIN_13,GPIO_PIN_RESET); // 亮灯 /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }

六、讲解视频

https://www.bilibili.com/video/BV1ciNKzDEBi/?spm_id_from=333.1387.homepage.video_card.click&vd_source=b035825fef3be39bc47a9c50b324d086

https://www.bilibili.com/video/BV1z4NuzWEbP/?spm_id_from=333.1387.homepage.video_card.click&vd_source=b035825fef3be39bc47a9c50b324d086

https://www.bilibili.com/video/BV1t4NMzvEjZ/?spm_id_from=333.1387.homepage.video_card.click&vd_source=b035825fef3be39bc47a9c50b324d086

http://www.jsqmd.com/news/479832/

相关文章:

  • 2026年吉林市防水工程服务商综合评估与前瞻选择指南 - 2026年企业推荐榜
  • 2026特种润滑脂优质厂家推荐榜:通用润滑脂/阀门润滑脂/食品级润滑油/高速润滑脂/齿轮润滑脂/低温润滑脂/加氢基础油润滑油/选择指南 - 优质品牌商家
  • 2026宜宾优质装修公司推荐榜:宜宾装饰公司排行榜、宜宾装饰公司推荐、宜宾装饰公司电话、家装比较好的装修公司、性价比比较高的装修公司选择指南 - 优质品牌商家
  • 2026年评价高的医用电梯回收公司推荐:广东电梯回收推荐厂家 - 品牌宣传支持者
  • 2026年评价高的报废电梯回收工厂推荐:二手电梯回收推荐厂家 - 品牌宣传支持者
  • 【stm32简单外设篇】- WS2812单线地址式 RGB 灯带
  • 2026楼梯护栏优质品牌推荐榜全流程服务优选:现代简约楼梯/玻璃护栏/钢结构楼梯/铝合金护栏/阳台护栏/高端定制护栏厂家/选择指南 - 优质品牌商家
  • 2026年长沙企业IP打造团队如何选?这五家实力公司值得关注 - 2026年企业推荐榜
  • 2026工装阻燃装饰板材优质产品推荐榜:精材艺匠ENF级生态板、精材艺匠HENF级板材、精材艺匠全屋定制、精材艺匠实木多层板选择指南 - 优质品牌商家
  • 2026年比较好的电梯回收公司推荐:电梯回收厂家选择指南 - 品牌宣传支持者
  • 2026钦州海鲜服务优质商家推荐指南:钦州旅游攻略/钦州本地餐馆/钦州美食攻略/钦州美食有哪些/钦州美食路线/钦州老牌餐厅/选择指南 - 优质品牌商家
  • 2026四川消防维保优质品牌推荐:消防维保公司/消防维保口碑/消防维保多少钱/消防维修公司电话/消防维修维保/四川消防改造口碑/选择指南 - 优质品牌商家
  • 2026年口碑好的社区艾灸加盟公司推荐:社区艾灸加盟实力公司推荐 - 品牌宣传支持者
  • 2026年湘潭抖音代运营公司哪家强?6家顶尖服务商深度评测 - 2026年企业推荐榜
  • 2026西南电梯安装优质推荐榜:老小区电梯加装、老旧小区电梯安装、西昌电梯加装、别墅电梯加装、加装一台电梯多少钱选择指南 - 优质品牌商家
  • 楼梯厂家选购指南:实木艺术楼梯、弧形钢构楼梯定制、成都实木楼梯、成都楼梯、成都艺术楼梯、成都钢构楼梯、旋转楼梯定制选择指南 - 优质品牌商家
  • 2026年中医技能培训优质机构推荐榜:小儿推拿学习/手诊培训/手诊学习/整骨培训/整骨学习/正骨学习/耳穴疗法培训/选择指南 - 优质品牌商家
  • 2026年电力电缆生产厂家推荐:中低压、低压、中压、变频等电缆厂家汇总 - 品牌2026
  • 2026年柔性拖链软电缆铝电缆架空绝缘绝缘电力屏蔽电缆生产厂家详解 - 品牌2026
  • 基于SpringBoot+Vue的Spring Boot阳光音乐厅订票系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 2026年天津电缆生产厂家推荐名单:天津电缆生产厂家主流精选 - 品牌2026
  • 2026年3月电缆生产厂家甄选:优质厂家推荐及产品详情全解析 - 品牌2026
  • 2026年内蒙古挡雪网厂家口碑与实力深度解析 - 2026年企业推荐榜
  • 2026知识服务平台推荐榜:欧海归源学/欧海海梦易商道/欧海课程/海梦易商道视频平台/海梦易商道课程/归源学欧海/选择指南 - 优质品牌商家
  • 2026年3月中国电缆一线品牌推荐:涵阻燃防火、低烟无卤、控制电缆品牌推荐 - 品牌2026
  • 2026年评价高的艾灸加盟品牌推荐:艾灸加盟养生品牌公司推荐 - 品牌宣传支持者
  • 工业厂房优质铝板品牌推荐:工业铝格栅、平台钢格板、插接式铝格栅、检修铝格栅、热镀锌钢格板、电厂平台铝格栅、遮阳百叶选择指南 - 优质品牌商家
  • 2026年靠谱的混水透凝土施工品牌推荐:混水透凝土施工销售厂家推荐 - 品牌宣传支持者
  • 品牌零售新品内容营销服务商推荐:百家号优化、短视频运营公司、AI搜索优化、GEO优化、SEM广告投放、SEO搜索优化选择指南 - 优质品牌商家
  • Ubuntu 系统 libc6-dev 依赖冲突解决