项目一:振动传感器控制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、电阻应变式振动传感器 电阻应变式振动传感器是以电阻变化量来表达被测物体机械振动量的振动传感器。电阻应变式振动传感器的实现方式很多,可以应用各种传感元件,其中较为常见的是电阻应变。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值