本帖最后由 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,当车锁被断路时,蜂鸣器工作,指示灯灭,警灯亮。 本篇由陈潇湘制作,罗亮指导
|