arduino实现简易保险柜

arduino小实验

刚好最近学东西有用到arduino,所以把平常的小实验做成实验,有兴趣的朋友可以看看。

一 、功能实现

一、水银开关实现呼吸灯功能,当水银开关闭合后,灯从“熄灭–>l亮度提升–>亮度最大保持10ms再熄灭,不断循环”,当水银开关打开时,灯熄灭。

使用的水银开关图示和介绍
在这里插入图片描述

以下是实现程序
通过变量zhi读取SensorPin的值是否有变化,如果为0(即水银碰撞开关被触发),进入for循环,执行相应指令,否则保持熄灭状态

int led=3;

int SensorPin=2;
int t;

void setup() {
pinMode(led, OUTPUT);
pinMode(SensorPin, INPUT);
}
void loop()
{
 int zhi=digitalRead(SensorPin);
 if(zhi==0){
for(int n=255;n>0;n--)
{
analogWrite(led,n); // 共阳极接法,当9号引脚为高电平,灯灭
delay(10);
}
 }
else{
  analogWrite(led,255);
  
  }

}

硬件接线图如下
请添加图片描述

二、编写部分银行保险柜程序:

当保险柜被碰撞(即水银开关被触发后),LED灯不断闪烁,且蜂鸣器持续报警不中断,水银开关失效,无法停止报警。

蜂鸣器图示和介绍
请添加图片描述

以下是bug讲解(开个小玩笑,程序可用)
buzz函数是定义好的,如果不会改可以不用动,直接调用就可以用,亲测很响。如果要修改,改变x和y的值即可。
保持水银碰撞开关触发后失效,我是用if判断和for循环来实现的,当触发了水银开关,报警器和灯就进入循环,在跳出循环之前水银开关为失效状态,(理论上,只要你循环够多,它就出不来,当然如果真的要使用的话,这个地方得修改一下)。

程序如下

int Led=4;//定义灯引脚

int SensorPin=2;//震动传感器连接引脚

int buzzpin=3;

int zhi;

void buzz(int x,int y) {

  for(int i=0;i<x;i++) { 

    digitalWrite(buzzpin, HIGH);

    delayMicroseconds(y);

    digitalWrite(buzzpin, LOW);

    delayMicroseconds(y); 

  } 

}



void  setup()

{

  pinMode(2,INPUT);

  pinMode(4,OUTPUT);

  pinMode(buzzpin, OUTPUT);

  buzz(200,500);

   buzz(400,250);

}

void loop()

{

  int zhi=digitalRead(SensorPin);

  if(zhi==LOW)

  {

    

    for(int i=0;i<1000;i++)

    {

      digitalWrite(Led,LOW);

      delay(10);

      digitalWrite(Led,HIGH);

      delay(10);

    buzz(200,500);

   buzz(400,250);

     }

    

    }

  else {

    digitalWrite(Led,HIGH);

    digitalWrite(buzzpin,LOW);

    }

}

硬件接线图如下
请添加图片描述

三、完整保险柜功能

当保险柜被碰撞(即水银开关被触发后),LED灯不断闪烁,且蜂鸣器持续报警不中断,水银开关失效,无法停止报警。通过终端按钮实现结束报警功能,水银开关被触碰到继续进入报警,可反复循环
和上面程序的区别在于加了个按键,所以我在for循环里嵌了个if判断,如果按键被按下,则for循环变量的值溢出,跳出for循环,报警灯,报警声都停止,继续对水银开关的状态进行判断,反复循环,程序如下

int Led=4;//定义灯引脚

int SensorPin=2;//震动传感器连接引脚
int buzzpin=3;
int zhi;
int ting;
int key=5;
void buzz(int x,int y) {            //蜂鸣器
  for(int i=0;i<x;i++) { 
    digitalWrite(buzzpin, HIGH);
    delayMicroseconds(y);
    digitalWrite(buzzpin, LOW);
    delayMicroseconds(y); 
  } 
}

void  setup()                      //初始化函数
{
  pinMode(SensorPin,INPUT);
  pinMode(Led,OUTPUT);
  pinMode(key, INPUT);
  pinMode(buzzpin, OUTPUT);
  buzz(200,500);
  buzz(400,250);
}
void loop()                       //主程序
{
  
  int zhi=digitalRead(SensorPin);
  if(zhi==LOW)
  {
    for(int i=0;i<1000;i++)
    {
      digitalWrite(Led,LOW);
      delay(10);
      digitalWrite(Led,HIGH);
      delay(10);
      buzz(200,500);
      buzz(400,250);
      int ting=digitalRead(key);
      if(ting==LOW){
        i=1000;
        }
      }   
    }
  else {
    digitalWrite(Led,HIGH);
    digitalWrite(buzzpin,LOW);
    }
}

接线图如下
请添加图片描述
四、以下为视频演示

55059fce3ac7c39c86a5de51cb24f91a

四、总结

以上就是我对arduino简易保险柜制作的一些学习笔记吧,程序还有很大的优化空间,后期可以增加传感器来实现更多的功能,让它更加完善。
到这里写的BUG就结束了,谢谢各位的观看。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值