Arduino - 按钮控制电磁锁

Arduino - 按钮控制电磁锁

In this tutorial, we are going to learn how to use Arduino and button to control the electromagnetic lock. When the button is pressed, Arduino deactivates the electromagnetic lock to unlock the door for a certain time (e.g. 10 seconds). After that, it Arduino activates the electromagnetic lock to lock the door.
在本教程中,我们将学习如何使用Arduino和按钮来控制电磁锁。按下按钮时,Arduino会停用电磁锁以解锁门一段时间(例如10秒)。之后,它Arduino激活电磁锁以锁定门。

We will learn by two steps from easy to difficult:
我们将通过从易到难的两步学习:

  • The electromagnetic lock is controlled by Arduino and a button without debouncing (easy).
    电磁锁由Arduino和一个按钮控制,无需去抖动(简单)。
  • The electromagnetic lock is controlled by Arduino and a button with debouncing (difficult).
    电磁锁由Arduino和带去抖动(困难)的按钮控制。

Hardware Required 所需硬件

1×Arduino UNO or Genuino UNO Arduino UNO 或 Genuino UNO
1×USB 2.0 cable type A/B USB 2.0 电缆 A/B 型
1×Electromagnetic Lock 电磁锁
1×Relay 中继
1×12V Power Adapter 12V电源适配器
1×DC Power Jack 直流电源插孔
1×Push Button 按钮
1×(Optional) Panel-mount Push Button (可选)面板安装按钮
1×Breadboard 面包板
1×Jumper Wires 跳线
1×(Optional) 9V Power Adapter for Arduino (可选)用于Arduino的9V电源适配器
1×(Recommended) Screw Terminal Block Shield for Arduino Uno (推荐)用于Arduino Uno的螺钉接线端子屏蔽层
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno (可选)Arduino Uno透明亚克力外壳

About Button and Electromagnetic Lock 关于按钮和电磁锁

If you do not know about electromagnetic lock and button (pinout, how it works, how to program …), learn about them in the following tutorials:
如果您不了解电磁锁和按钮(引脚排列、工作原理、如何编程等),请在以下教程中了解它们:

Wiring Diagram 接线图

Arduino Button Electromagnetic Lock Wiring Diagram

This image is created using Fritzing. Click to enlarge image
此图像是使用 Fritzing 创建的。点击放大图片

Arduino Code - Button Controls Electromagnetic Lock Without Debouncing Arduino Code - 按钮控制电磁锁定,无需去抖动

/*

 * Created by ArduinoGetStarted.com
   *
 * This example code is in the public domain
   *
 * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-button-controls-electromagnetic-lock
   */

// constants won't change
const int BUTTON_PIN = 7; // Arduino pin connected to button's pin
const int RELAY_PIN  = 3; // Arduino pin connected to relay's pin

// variables will change:
int lastButtonState;    // the previous state of button
int currentButtonState; // the current state of button

void setup() {
  Serial.begin(9600);                // initialize serial
  pinMode(BUTTON_PIN, INPUT_PULLUP); // set arduino pin to input pull-up mode
  pinMode(RELAY_PIN, OUTPUT);        // set arduino pin to output mode

  digitalWrite(RELAY_PIN, HIGH);     // lock the door
  currentButtonState = digitalRead(BUTTON_PIN);

}

void loop() {
  lastButtonState    = currentButtonState;      // save the last state
  currentButtonState = digitalRead(BUTTON_PIN); // read new state

  if(lastButtonState == HIGH && currentButtonState == LOW) {
    Serial.println("The button is pressed");
    digitalWrite(RELAY_PIN, LOW); // unlock the door in 10 seconds
    delay(10000); // 10 seconds
    digitalWrite(RELAY_PIN, HIGH); // lock the door again
  }
}

Code Explanation 代码说明

Read the line-by-line explanation in comment lines of code!
阅读代码注释行中的逐行说明!

※ NOTE THAT: ※ 注意事项:

In practice, the above code does not work correctly sometimes. To make it always work correctly, we need to debounce for the button. Debouncing for the button is not easy for beginners. Fortunately, thanks to the ezButton library, We can do it easily.
在实践中,上述代码有时无法正常工作。为了使其始终正常工作,我们需要对按钮进行去抖动。对于初学者来说,按钮的去弹跳并不容易。幸运的是,多亏了ezButton库,我们可以轻松做到这一点。

Arduino Code - Button Controls Electromagnetic Lock With Debouncing Arduino 代码 - 按钮控制带去抖动的电磁锁定

Why do we need debouncing? ⇒ see Arduino - Button Debounce tutorial
为什么我们需要去抖动?⇒请参阅 Arduino - Button Debounce 教程

/*

 * Created by ArduinoGetStarted.com
   *
 * This example code is in the public domain
   *
 * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-button-controls-electromagnetic-lock
   */

#include <ezButton.h>

// constants won't change
const int BUTTON_PIN = 7; // Arduino pin connected to button's pin
const int RELAY_PIN  = 3; // Arduino pin connected to relay's pin

ezButton button(BUTTON_PIN);  // create ezButton object that attach to pin 7;

void setup() {
  Serial.begin(9600);         // initialize serial
  pinMode(RELAY_PIN, OUTPUT); // set arduino pin to output mode
  button.setDebounceTime(50); // set debounce time to 50 milliseconds

  digitalWrite(RELAY_PIN, HIGH); // lock the door
}

void loop() {
  button.loop(); // MUST call the loop() function first

  if(button.isPressed()) {
    Serial.println("The button is pressed");
    digitalWrite(RELAY_PIN, LOW); // unlock the door in 10 seconds
    delay(10000); // 10 seconds
    digitalWrite(RELAY_PIN, HIGH); // lock the door again
  }
}

※ NOTE THAT: ※ 注意事项:

In the above code, we used the delay function. Therefore, we do not need to debouncing for button. However, We still provide the code with debouncing just in case you want to do more tasks without using delay function. See How to use millis() instead of delay()
在上面的代码中,我们使用了延迟函数。因此,我们不需要为按钮去抖动。但是,我们仍然提供具有去抖动功能的代码,以防万一您想在不使用延迟功能的情况下执行更多任务。请参阅如何使用 millis() 而不是 delay()

Video Tutorial 视频教程

We are considering to make the video tutorials. If you think the video tutorials are essential, please subscribe to our YouTube channel to give us motivation for making the videos.
我们正在考虑制作视频教程。如果您认为视频教程是必不可少的,请订阅我们的 YouTube 频道,为我们制作视频提供动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔚蓝慕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值