linkdfrobot 发表于 2015-4-12 09:45:01

简易车锁(陈潇湘)

本帖最后由 linkdfrobot 于 2015-4-12 10:23 编辑

很多人(包括本人)的爱车(两轮)惨遭小偷毒手(万恶),因此萌发了利用arduino制作一个防盗器的想法。所需元件1*2*若干1*1*1*硬件连接有源蜂鸣器与无源蜂鸣器的区别:注意:这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K-5K的方波去驱动它有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路无源蜂鸣器的优点是:1. 便宜2. 声音频率可控,可以做出“多来米发索拉西”的效果3. 在一些特例中,可以和LED复用一个控制口有源蜂鸣器的优点是:程序控制方便。
连接图如上。输入代码//项目bicycle lock
int ledPin=10;

int buttonPin = 12;                        // button连接到数字12
int relayPin = 13;                           // 继电器连接到数字13
int relayState = LOW;                     // 继电器初始状态为LOW
int buttonState;                            // 记录button当前状态值
int lastButtonState = LOW;                  // 记录button前一个状态值
long lastDebounceTime = 0;                  
long debounceDelay = 50;                  //去除抖动时间
float sinVal;
int toneVal;

void setup() {
pinMode(buttonPin, INPUT);
pinMode(relayPin, OUTPUT);
pinMode(ledPin,OUTPUT);
digitalWrite(relayPin, relayState);       // 设置继电器的初始状态
}
void loop() {
int reading = digitalRead(buttonPin);   //reading用来存储buttonPin的数据

// 一旦检测到数据发生变化,记录当前时间
if (reading != lastButtonState) {   
    lastDebounceTime = millis();
}

// 等待50ms,再进行一次判断,是否和当前button状态相同
// 如果和当前状态不相同,改变button状态
// 同时,如果button状态为高(也就是被按下),那么就改变继电器的状态
if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;
      
      if (buttonState == HIGH) {
      relayState = !relayState;
      digitalWrite(ledPin, HIGH);
      delay(1000);
      for(int x=0; x<180; x++){
            sinVal = (sin(x*(3.1412/180)));
            toneVal = 2000+(int(sinVal*1000));
            tone(13, toneVal);
            delay(2);
         }   ;
       }
    }
}
// 改变button前一个状态值
lastButtonState = reading;
}

上锁后,按下按钮,指示灯亮,给继电器high,当车锁被断路时,蜂鸣器工作,指示灯灭,警灯亮。本篇由陈潇湘制作,罗亮指导
页: [1]
查看完整版本: 简易车锁(陈潇湘)