项目一:振动传感器控制LED灯

项目简介:本项目通过STM32开发板作为中心控制器,利用振动传感器、继电器实现对LED灯的控制。是STM32入门的经典小实验,对于硬件环境的搭建、软件的编写都具有一定的提升功能。

项目设备:一块STM32F103开发板、一个继电器、一个震动传感器、一个LED灯。

项目实验:

目录

实验一:点亮STM32开发板本身的LED灯;

实验二:利用继电器点亮外接的LED灯;

实验三:利用振动传感器点亮外接的LED灯;


实验一:点亮STM32开发板本身的LED灯;

       首先,通过对STM32开发板的电路图分析,进行编写代码,实现开发板上LED灯的点亮;

       如下图所示,为所用的开发板的硬件电路图,开发板共有两个LED灯,其中LED1为开发板的电源指示灯,给开发板供电即可点亮,而LED2一端接高电平(3.3V),另一端接PA1口,若要点亮LED2,则要将端口PA1置于低电平(LED灯单向导通);

      需要先配置一个完整的固件库模板,并且建立一个LED的.c文件以及.h文件,并且加入到固件库中的USER文件夹,配置main.c、led.c、led.h文件,实现函数的调用;在led.c中定义一个函数,void  LED_Init(void);对于PA1口输出低电平分为两步,1、使能PA1口所在GPIA的闹钟;2、配置PA1端口的结构体。

  1. 使能PA1口的GPIA的闹钟

       通过查找数据手册,GPIOA端口属于APB2的外设时钟使能寄存器, 对其进行使能处理。在外设rcc.h文件调用其使能函数,并进行配置。

    2.配置PA1端口的结构体

       在gpio.h文件中查找GPIOA的结构体,分别包括输出模式、输出引脚以及输出速度。

代码分享

1、led.c文件

#include  "led.h"
#include  "stm32f10x.h"

void  LED_Init(void)
{
	
	 GPIO_InitTypeDef Led_Init;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	Led_Init.GPIO_Mode =  GPIO_Mode_Out_PP;
    Led_Init.GPIO_Pin=GPIO_Pin_1  ; 
	Led_Init.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init(GPIOA,&Led_Init);
	
}

 2、main.c文件

#include "stm32f10x.h"
#include "main.h"
#include  "led.h"

int  main()
 LED_Init
     while(1)
     {
     GPIO_ResetBits(GPIOA,  GPIO_Pin_1);
     }

实验二:利用继电器点亮外接的LED灯;

         继电器是一种控制元器件,利用一条回路来控制另一条回路的开与关,最典型的用途为弱电控制强电,在输入端VCC接电源正极,GND接电源负极,IN端是信号线通过高低电平来控制继电器的吸合;继电器的输出端为,NO:继电器常开接口,继电器吸合前悬空,吸合后与COM短接;COM:继电器公用接口;NC:继电器常闭接口,继电器吸合前与COM短接吸合后与COM悬空;

     我们在输入端利用NO与COM端通过低电平有效来控制,继电器的VCC接单片机的3.3V,继电器的GND接单片机的GND,继电器的IN端接单片机的PA3口,继电器的NO口与COM与灯还有电源相连;

代码分享:

1、relay.c文件

#include "relay.h"
#include "stm32f10x.h"

void Relay_Init(void)
{
	GPIO_InitTypeDef Relay_Init;
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE );
	Relay_Init.GPIO_Mode= GPIO_Mode_Out_PP;
	Relay_Init.GPIO_Pin=GPIO_Pin_3;
	Relay_Init.GPIO_Speed=GPIO_Speed_10MHz ;
	GPIO_Init(GPIOA, & Relay_Init);
}

2、main.c文件

#include "stm32f10x.h"
#include "main.h"
#include "relay.h"


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

int  main()
Relay_Init();
	while(1)

{
   GPIO_ResetBits(GPIOA,  GPIO_Pin_3);
}

实验三:利用振动传感器点亮外接的LED灯;

        振动传感模块,当振动传感器SW-18010P接触到振动时,通过输出端口DO输出数字信号。VCC接单片机的3.3V电压,GND接单片机的GND口,DO端接电片机的PA2口。

     当模块发生振动时,输出端输出低电平,开关信号指示灯亮;

     当模块发生振动时,输出端输出高电平,开关信号指示灯灭;

实物接线图:

 代码分享:

1、main.c文件

#include "stm32f10x.h"
#include "main.h"
#include  "led.h"
#include "relay.h"
#include "shake.h"

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

int  main()

{
     LED_Init();
	 Relay_Init();
     Shake_Init();
	 GPIO_SetBits(GPIOA, GPIO_Pin_3 );
			     while(1)
       {
			 			 
			 if( GPIO_ReadInputDataBit( GPIOA, GPIO_Pin_2)==0)  
			 {   
                  GPIO_ResetBits(GPIOA, GPIO_Pin_3);              		                                   
                  delay(1000);                                 
			      GPIO_SetBits(GPIOA, GPIO_Pin_3);               
			 }
			 
			 else
				    GPIO_SetBits(GPIOA, GPIO_Pin_3 );      
	  }	 
		 
	
}

2、shake.c文件

#include "shake.h"
#include "stm32f10x.h"

void Shake_Init(void)

{
	GPIO_InitTypeDef shake_init;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

	shake_init.GPIO_Mode=  GPIO_Mode_IPD ;
	shake_init.GPIO_Pin=GPIO_Pin_2;
	shake_init.GPIO_Speed= GPIO_Speed_10MHz;
	
	GPIO_Init(GPIOA ,&shake_init);
}

 3、relay.c文件

#include "relay.h"
#include "stm32f10x.h"

void Relay_Init(void)
{
	
	GPIO_InitTypeDef Relay_Init;
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE );
    Relay_Init.GPIO_Mode= GPIO_Mode_Out_PP;
	Relay_Init.GPIO_Pin=GPIO_Pin_3;
	Relay_Init.GPIO_Speed=GPIO_Speed_10MHz ;
	GPIO_Init(GPIOA, & Relay_Init);

}

实验现象:

WeChat_20230420161722

振动传感器的种类丰富,按照工作原理的不同,能分为电涡流式振动传感器、电感式振动传感器、电容式振动传感器、压电式振动传感器和电阻应变式振动传感器等。以下是这几种振动传感器的工作原理和用途。 1、电涡流式振动传感器 电涡流式振动传感器是涡流效应为工作原理的振动传感器,它属于非接触式传感器。电涡流式振动传感器是通过传感器的端部和被测对象之间距离上的变化,来测量物体振动参数的。电涡流式振动传感器主要用于振动位移的测量。 2、电感式振动传感器 电感式振动传感器是依据电磁感应原理设计的振动传感器。电感式振动传感器设置有磁铁和导磁体,对物体进行振动测量时,能将机械振动参数转化为电参量信号。电感式振动传感器能应用于振动速度、加速度等参数的测量。 3、电容式振动传感器 电容式振动传感器是通过间隙或公共面积的改变来获得可变电容,再对电容量进行测定而后得到机械振动参数的。电容式振动传感器可以分为可变间隙式和可变公共面积式两种,前者可以用来测量直线振动位移,后者可用于扭转振动的角位移测定。 4、压电式振动传感器 压电式振动传感器是利用晶体的压电效应来完成振动测量的,当被测物体的振动对压电式振动传感器形成压力后,晶体元件就会产生相应的电荷,电荷数即可换算为振动参数。压电式振动传感器还可以分为压电式加速度传感器、压电式力传感器和阻抗头。 5、电阻应变式振动传感器 电阻应变式振动传感器是以电阻变化量来表达被测物体机械振动量的振动传感器。电阻应变式振动传感器的实现方式很多,可以应用各种传感元件,其中较为常见的是电阻应变。
<think>好的,我现在需要处理用户关于SW420振动传感器的技术规格和购买的问题。首先,我应该回顾用户提供的引用内容,看看有没有相关信息可用。引用[1]提到了压电片谐振式振动传感器的工作原理,而引用[2]讨论了角度开关在振动时断开的工作原理。不过用户明确提到SW420,可能需要更具体的信息。 SW420振动传感器通常属于振动开关类型,可能在检测到振动时改变电路状态。根据引用[2],类似传感器振动时会导致电流断开或电阻变化,这可能适用于SW420。因此,技术规格可能包括工作电压、输出信号类型、灵敏度调节方式等。 接下来,我需要整理SW420的常见技术参数。例如,工作电压通常在3.3V到5V之间,输出数字信号(高低电平),可能有灵敏度调节电位器。此外,尺寸和接口类型(如DO数字输出)也是重要信息。 关于购买渠道,用户可能需要知道常见的在线平台,如淘宝、京东,或者电子元件供应商如得捷电子、贸泽电子。需要建议用户确认型号和供应商信誉,确保正品。 最后,生成相关问题,帮助用户进步了解传感器选择和使用注意事项。需要确保问题相关且实用,比如比较不同传感器类型,如何安装,以及常见故障处理等。 需要验证信息的准确性,避免错误。例如,SW420是否确实使用振动开关原理,是否有灵敏度调节等。可能需要查阅产品手册或可靠来源确认,但根据现有引用和常见知识,这些信息是合理的。</think>### SW420振动传感器技术规格及购买指南 #### 、技术规格解析 1. **工作原理** SW420属于常闭型振动传感器,采用滚珠导通式机械结构。未受振动时内部电路保持导通状态(低电平),当检测到振动时滚珠位移导致电路断开(高电平)[^2]。 2. **核心参数** - **工作电压**:$3.3V\text{-}5V$ DC - **输出信号**:数字信号(TTL电平兼容) - **灵敏度调节**:内置可调电位器(调节范围约$0.1g\text{-}5g$) - **响应频率**:$10Hz\text{-}60Hz$ - **尺寸规格**:$32mm \times 15mm \times 9mm$ - **接口类型**:3PIN杜邦接口(VCC/GND/DO) 3. **环境适应性** - 工作温度:$-10^{\circ}C\text{+}60^{\circ}C$ - 防护等级:IP54(防尘防溅) #### 二、购买建议 1. **采购渠道** - **电商平台**:淘宝、京东搜索"SW420模块"(单价约$3\text{-}8$元) - **专业供应商**:得捷电子(Digi-Key)、贸泽电子(Mouser) - **开发板厂商**:正点原子、野火官方店铺 2. **选型注意** - 确认模块是否包含比较器电路(部分基础版需外接) - 优先选择带LED状态指示的版本 - 查看是否提供Arduino示例代码 #### 三、典型应用示例 ```arduino void setup() { pinMode(2, INPUT); Serial.begin(9600); } void loop() { int val = digitalRead(2); if(val == HIGH){ Serial.println("振动检测!"); } delay(100); } ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值