来做一个Arduino安全和警报系统

大家周末好呀,今天我们来做一个Arduino安全和警报系统,您可以运用到车库或者简易保险室等。话不多说,我们直接进入正题。

项目概述

这个系统我们设计的是,按下A按钮后10秒内将激活警报。为了检测物体,它使用了超声波传感器,一旦警报器检测到某种东西,蜂鸣器就会开始发出声音。为了停止警报,我们需要输入4位数字的密码。预设密码是1234,但我们也可以更改它。

通过按B按钮,我们进入密码更改菜单,首先我们需要输入当前密码才能解除警报,然后输入新的4位数字密码。更改密码后,下次启动警报时,我们只能通过输入新密码来停止警报。如果输入了错误的密码,我们将收到一条消息,需要再次尝试。

来做一个Arduino安全和警报系统

主要组件

现在,让我们看看该项目所需的组件。显然,我们需要一个Arduino开发板,一个超声波传感器,一个LCD显示器,一个蜂鸣器和一个4×4键盘。

来做一个Arduino安全和警报系统

电路原理图如下:

来做一个Arduino安全和警报系统

对于蜂鸣器,我们只需要一个引脚即可,但需要一个支持PWM的引脚。4×4键盘有8个引脚,其中4个用于行,而4个用于列。每个按钮实际上是一个按钮开关,按下该按钮可使行和列之间短路。

来做一个Arduino安全和警报系统

因此,例如,如果我们将第1行的行设置为低,而将所有列的行设置为高,则当我们按下按钮3时,由于两行之间的短路,列3的行将降为低在这种情况下,我们可以注册按钮3已被按下。

Arduino报警系统代码

接下来便是最重要Arduino代码部分了。由于代码较长,为了更好地理解,我们分开各节程序的源代码,并对各个个部分加以说明说明。

因此,我们需要包括用于LCD的标准LiquidCrystal库和需要额外安装的键盘库。然后,我们需要定义蜂鸣器和超声波传感器的引脚,定义程序所需的一些变量,定义键盘的键,以及为键盘和LCD创建两个对象。

#include <liquidcrystal.h> // includes the LiquidCrystal Library/<liquidcrystal.h>

#include <keypad.h>

#define buzzer 8

#define trigPin 9

#define echoPin 10

long duration;

int distance, initialDistance, currentDistance, i;

int screenOffMsg =0;

String password="1234";

String tempPassword;

boolean activated = false; // State of the alarm boolean isActivated;

boolean activateAlarm = false;

boolean alarmActivated = false;

boolean enteredPassword; // State of the entered password to stop the alarm

boolean passChangeMode = false;

boolean passChanged = false;

const byte ROWS = 4; //four rows

const byte COLS = 4; //four columns

char keypressed;

//define the cymbols on the buttons of the keypads

char keyMap[ROWS][COLS] = {

{'1','2','3','A'},

{'4','5','6','B'},

{'7','8','9','C'},

{'*','0','#','D'}

};

byte rowPins[ROWS] = {14, 15, 16, 17}; //Row pinouts of the keypad

byte colPins[COLS] = {18, 19, 20, 21}; //Column pinouts of the keypad

Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);

LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)

void setup() {

lcd.begin(16,2);

pinMode(buzzer, OUTPUT); // Set buzzer as an output

pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output

pinMode(echoPin, INPUT); // Sets the echoPin as an Input

}

在设置部分,我们只需要初始化LCD并定义蜂鸣器和超声传感器的引脚模式。

在循环部分中,首先我们检查警报是否已激活。因此,如果未激活警报,则LCD上将显示程序的主屏幕,该程序提供两个选项:A用于激活警报,B用于更改密码。然后使用myKeypad.getKey()函数,读取键盘上的哪个按钮被按下,如果是按钮A,则蜂鸣器将发出200毫秒的声音,activateAlarm变量将变为true。

if (!alarmActivated) {

if (screenOffMsg == 0 ){

lcd.clear();

lcd.setCursor(0,0);

lcd.print("A - Activate");

lcd.setCursor(0,1);

lcd.print("B - Change Pass");

screenOffMsg = 1;

}keypressed = myKeypad.getKey();

if (keypressed =='A'){ //If A is pressed, activate the alarm

tone(buzzer, 1000, 200);

activateAlarm = true;

}

在这种情况下,我们将在LCD上显示“将激活警报”消息,并使用while循环将在激活警报之前倒数9秒钟。然后将显示消息“已激活警报”,我们将测量从警报设备到与之相对的对象的初始距离。

if (activateAlarm) {

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Alarm will be");

lcd.setCursor(0,1);

lcd.print("activated in");

int countdown = 9; // 9 seconds count down before activating the alarm while (countdown != 0) {

lcd.setCursor(13,1);

lcd.print(countdown);

countdown--; one(buzzer, 700, 100); delay(1000);

}

lcd.clear(); lcd.setCursor(0,0);

lcd.print("Alarm Activated!");

initialDistance = getDistance(); activateAlarm = false;

alarmActivated = true;

}

因此,下一步是超声波传感器将不断检查当前测量的距离是否小于初始距离,并已校正了10 cms的值,如果是,这意味着在传感器和警报器之前出现了一个物体将被激活。tune()函数将激活蜂鸣器,然后将调用enterPassword()自定义函数。

if (alarmActivated == true){

currentDistance = getDistance() + 10;

if ( currentDistance < initialDistance) {

tone(buzzer, 1000); // Send 1KHz sound signal lcd.clear();

enterPassword();

}

}

此自定义功能将打印一条消息,提示已激活警报,并且我们需要输入密码才能停止警报。因此,使用下一个while循环,我们将不断检查是否已按下键盘上的一个按钮,并且每次按下按钮都会添加到tempPassword变量中。如果我们输入的数字多于4位或按快捷按钮,则先前输入的数字将被清除,因此我们可以从头开始再次输入。

void enterPassword() {

int k=5;

tempPassword = ""; activated = true; lcd.clear(); lcd.setCursor(0,0); lcd.print(" *** ALARM *** ");lcd.setCursor(0,1);

lcd.print("Pass>");while(activated) {

keypressed=myKeypad.getKey();

if (keypressed != NO_KEY){

if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||keypressed == '8' || keypressed == '9' ) {tempPassword += keypressed;

lcd.setCursor(k,1);lcd.print("*");

k++;

}

}

if (k > 9 || keypressed == '#') {

tempPassword = "";k=5; lcd.clear();lcd.setCursor(0,0);

lcd.print(" *** ALARM *** ");lcd.setCursor(0,1); lcd.print("Pass>");

}

if ( keypressed == '*') {

if ( tempPassword == password ) {

activated = false;alarmActivated = false;noTone(buzzer); screenOffMsg = 0;

}

else if (tempPassword != password) {

lcd.setCursor(0,1); lcd.print("Wrong! Try Again"); delay(2000);lcd.clear(); lcd.setCursor(0,0); lcd.print(" *** ALARM *** ");lcd.setCursor(0,1); lcd.print("Pass>");

}

}

}

}

另一方面,如果按星号按钮,将检查当前输入的密码是否与最初设置的密码相同。如果是这样,警报将被禁用,蜂鸣器将停止发出声音,然后我们将返回主屏幕。但是,如果我们输入的密码错误,则会显示“错误!再试一次!” 将会出现,我们将不得不再次尝试输入正确的密码。

要更改密码,我们使用类似的方法即可。

在编写完代码后,我们使用一个塑料电箱将组件都连接到一起即可。

来做一个Arduino安全和警报系统

更多详细内容,可以观看下一个视频

关注风火轮,技术之路常相伴,我们下期见!


分享到:


相關文章: