在现代家居安全中,智能门锁正变得越来越流行。今天,将探讨如何制作一个无需钥匙、通过蓝牙控制的智能门锁。这种门锁安装在门内侧,因此小偷无法从外部破坏门锁。还将介绍如何开发一个安卓应用来控制这个门锁。
为了制作这个智能门锁,需要以下材料:
如果没有3D打印机,可以从网上购买,价格大约为145美元。
组件之间的连接非常简单。HC-05模块有四个引脚连接到Arduino,伺服电机有3个引脚连接到Arduino。原理图清晰地显示了连接方式。
蓝牙控制智能门锁的代码非常简单。设计了一个安卓应用,该应用发送带有密码的命令。实际上,设置了两个命令,一个是"OPEN",另一个是"CLOSE",密码可以包含任何数字、字母或它们的组合。在应用中,使用了两个按钮——一个用于打开门,另一个用于关闭门。
当在密码框中输入密码并点击打开按钮时,应用会将"OPEN"命令与密码连接并发送到Arduino。在命令中添加了"="符号,作为分隔符。收到手机发送的字符串后,Arduino程序会将命令和密码从接收到的字符串中分离出来,并保存到两个单独的变量中。然后首先检查密码,如果密码与保存的密码匹配,那么对于"OPEN"命令,门就会打开;对于"CLOSE"命令,门就会关闭。"="有助于分离命令和密码。
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n' || inChar == '\r') {
stringComplete = true;
}
}
}
收到来自蓝牙模块的数据后,以下代码片段有助于Arduino从接收到的数据中分离出命令和密码。
int pos = inputString.indexOf('=');
if (pos > -1) {
command = inputString.substring(0, pos);
value = inputString.substring(pos+1, inputString.length()-1);
}
然后使用if-else块来比较接收到的密码与预设密码,并根据此驱动伺服电机打开或关闭锁。
if (!password.compareTo(value) && (command == "OPEN")) {
openDoor();
Serial.println("OPEN");
delay(100);
} else if (!password.compareTo(value) && (command == "CLOSE")) {
closeDoor();
Serial.println("CLOSE");
delay(100);
} else if (password.compareTo(value)) {
Serial.println("WRONG");
delay(100);
}
如果Arduino收到错误的密码,它会向安卓手机发送一条消息,告知密码错误。实际上,Arduino发送了"WRONG"字符串。安卓程序然后显示错误密码消息。完整的草图包含在zip文件中。
所有锁的部分都是3D打印的。要感谢Thingiverse用户ridercz的精美设计。他设计并发布了这个基于伺服的门锁在thingiverse.com上。除了Rack_Holder.stl文件,所有文件都是从他的设计中获取的。可以从下面或Thingiverse.com下载文件。
要组装所有打印的部件,可以按照下面的视频指南进行。组装后,使用四个螺丝将所有部件紧紧固定。
使用MIT App Inventor为安卓手机开发了应用程序。使用App Inventor是因为它不需要任何编码,也不需要软件安装。只需要一个谷歌账户。访问http://ai2.appinventor.mit.edu/,系统会要求使用谷歌账户登录。
完整的App Inventor源文件(BTcontrol.aia)附在这里。如果不想自己制作或修改应用程序,只需下载BTcontrol.apk并安装到安卓手机上。
还可以点击以下链接从Google Play商店下载:https://play.google.com/store/apps/details?id=appinventor.ai_khairul_uapstu.BTcontrol&hl=en
如果想修改源代码,点击"项目"菜单,选择"从计算机导入项目(.aia)",然后从计算机中浏览BTcontrol.aia文件。导入后,可以轻松修改它。