震动传感器,工作时电源LED常亮,震动信号检测LED灯在发生震动时会保持常亮,其余情况下常灭。正常工作时,DO口输出高电平,震动瞬间,DO口输出低电平。常用于震动触发,防盗报警等

引脚接法

VCC:接电源5V或3.3V

GND:接电源负极或者接GND

DO:数字信号输出,可与单片机相连检测是否有震动

震动传感器控制LED亮灭

 步骤与前几个项目类似:USER文件夹新建Shake文件夹,Shake内部存放shake.c和shake.h

打开keil工程文件,USER导入shake.c,添加stm32f10x.h和shake.h源文件,并定义函数,初始化结构体,开启外设时钟信号等。

shake.c代码如下

#include "Shake.h"
#include "stm32f10x.h"

void Shake_Init(void)
{
    
    GPIO_InitTypeDef shake_init;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    
    shake_init.GPIO_Mode = GPIO_Mode_IPU;
    shake_init.GPIO_Pin = GPIO_Pin_8;
    shake_init.GPIO_Speed = GPIO_Speed_10MHz;
    
    GPIO_Init(GPIOB, &shake_init);
    
    
}

shake.h代码如下

void Shake_Init(void);

main.c添加shake.h源文件,魔术棒添加Shake文件夹。在震动传感器发生震动时,LED灯亮1s,然后熄灭。假设震动传感器DO口接的是PB8,那么当PB8收到的是低电平时,触发PA1口输出低电平,使LED灯亮1s,然后熄灭。

main.c代码如下

#include"stm32f10x.h"
#include"main.h"
#include"led.h"
#include"bear.h"
#include"button.h"
#include"Relay.h"
#include"Shake.h"


void delay(uint16_t time)
{
        uint16_t i = 0;
        
    while(time--)
    {
        i = 12000;
        
        while(i--);
    }
    
}

int main()
{
    
    Shake_Init();
    GPIO_SetBits(GPIOA, GPIO_Pin_1);
    
    while(1)
    {


                if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_8) == 0)
                {
                        GPIO_SetBits(GPIOA, GPIO_Pin_1);
                        delay(1000);
                        GPIO_ResetBits(GPIOA, GPIO_Pin_1);
                        delay(1000);
                }
                
                else
                {
                      GPIO_SetBits(GPIOA, GPIO_Pin_1);
                }
                    
                
                
    }
    
    
    
}

震动传感器控制继电器,进而控制外部LED灯亮灭

将前几个项目结合在一起,加上外设的LED灯。

main.c

#include"stm32f10x.h"
#include"main.h"
#include"led.h"
#include"bear.h"
#include"button.h"
#include"Relay.h"
#include"Shake.h"


void delay(uint16_t time)
{
        uint16_t i = 0;
        
    while(time--)
    {
        i = 12000;
        
        while(i--);
    }
    
}

int main()
{
    
    
    Relay_Init();
    Shake_Init();
    GPIO_SetBits(GPIOA, GPIO_Pin_0);
    
    while(1)
    {
        
        
                if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_8) == 0)
                {
                        GPIO_SetBits(GPIOA, GPIO_Pin_0);
                        delay(1000);
                        GPIO_ResetBits(GPIOA, GPIO_Pin_0);
                        delay(1000);
                }
                
                else
                {
                      GPIO_SetBits(GPIOA, GPIO_Pin_0);
                }
                    
                
                
    }
    
    
    
}

 

接线上,震动传感器VCC接3.3V,GND接GND,DO接PB8;继电器VCC接3.3V,GND接GND,IN接PA0,COM口接VCC,NO口接LED灯VCC;LED灯VCC接继电器NO口,GND接GND。

整体如图所示

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐