一、项目简介
当主人离开电动车锁车后,开启电动车警报模式:
有人靠近电动车并使电车震动,电车会一直发出警报,电车没有震动则不会报警;
当主人在电车附近不需要锁车时,可以电动车警报模式,电车即使发生震动也不会报警。
二、模块介绍
1、振动传感器模块
1.1 SW-18010P
接好 VCC 和 GND,电源指示灯将被点亮。
当检测到震动时,板载指示灯点亮;震动停止,板载指示灯熄灭。
用螺丝刀转动「灵敏度调节电位器」可以调节灵敏度。大家可以将电位器旋到最左或最右,然后测试往哪边旋可以提高灵敏度。
SW-18015P 为密封弹簧型、无方向性震动感应触发开关,任何角度均可触发。正常使用情况下开关寿命可达20万次。
1.2 SW-18015P原理
SW-18015P 在静止时为开路 OFF 状态, 当受到外力碰触而达到相应震动力时,或者移动速度达到适当离(偏)心力时,导电接脚会产生瞬间导通呈瞬间 ON 状态;当外力消失時,开关恢复为开路 OFF 状态。
所以,SW-18015P 在无震动或者震动强度达不到设定阈值时,DO 口输出高电平,当外界震动强度超过设定阈值时,模块 D0 输出低电平。
请注意这个模块在感应到小的震动时触发时间会很短,无法驱动继电器,有些的资料显示可以直接和继电器模块相连,但实际运用效果不佳。
2、继电器模块
2.1 继电器介绍
继电器,可以被形象地比作一个开关,就像电灯开关一样,按下,电路闭合,电路通,灯亮;再按下,电路断开,电路不通,灯灭。它能够通过控制小电流来打开或关闭大电流电路,实现电路的控制和信号的传递。不过,与普通的物理开关相比,继电器具有更高的可靠性和灵活性,能够应对复杂的电路控制需求。
2.2 继电器工作原理
当继电器的电磁线圈通电时,产生的磁场会引起机械部件的运动,从而改变触点的状态,触点可以是常闭或常开。
继电器原理示意图如下:
当信号电源断开,线圈两端没有施加电压,线圈没有产生磁力,衔铁在弹簧拉力下不接触触点,工作电路不连通,负载电器不工作。
当信号电源闭合,线圈两端施加电压,线圈产生磁力把衔铁往下拉,衔铁接触触点,工作电路连通,负载电器工作。
继电器的控制电路与工作电路是隔离的,这种切换状态的能力使得继电器能够控制高电压、大电流电路的开关操作。
2.3 继电器引脚
3、433无线发射接收模块
4、高功率喇叭
三、程序实现
#include "reg52.h"
#include<intrins.h>
#define OFF_Alarm 0
#define ON_Alarm 1
sbit Vibrate = P1^3;
sbit Switch = P1^0;
sbit ON_D0 = P1^1;
sbit OFF_D1 = P1^2;
void Delay2000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 15;
j = 2;
k = 235;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
int Mark = OFF_Alarm;//定义一个标志,让报警处于关闭状态
while(1){
//打开报警模式
if(ON_D0 == 1){
Mark = ON_Alarm;
Switch = 0;
Delay2000ms();
Switch = 1;
}
//关闭报警模式
if(OFF_D1 == 1){
Mark = OFF_Alarm;
Switch = 0;
Delay500ms();
Switch = 1;
}
if(Mark == ON_Alarm){
//警报模式下发生振动,开始报警
if(Vibrate == 0){
Switch = 0;
Delay2000ms();
Delay2000ms();
}
else{
Switch = 1;
}
}
}
}
学习C51的第一个小项目,根据需求设置警报模式,如果需要警报模式按下开关后长响一声提醒打开警报模式,关闭警报则短响一声提醒已经关闭警报模式。按下开关之后通过标志位来记住当前处于什么模式,处于警报模式如果发生震动则会报警,不震动则不响。