亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于 Arduino 和 Android 的密码保护门锁

组件和用品

Arduino UNO
× 1
HC-05 蓝牙模块
× 1
舵机(Tower Pro MG996R)
× 1

必要的工具和机器

3D 打印机(通用)

应用和在线服务

Arduino IDE

关于这个项目

简介

这款智能锁安全、简单且易于管理您家中的锁。这款锁不需要钥匙,锁安装在门内,您可以使用蓝牙从门外控制它。由于锁在门内,因此小偷无法打破门。打开和关闭锁需要一个 android 应用程序,我将在教程的后面部分解释如何开发一个 android 应用程序的详细信息。使用Android应用程序将密码发送到锁,如果密码与您预设的锁密码匹配,则锁将打开并向您的手机发送反馈,就像锁被打开一样。

门锁3D设计

锁的所有部件都是 3D 打印的。我要感谢 Thingiverse 用户ridercz 出色的设计。他在thingiverse.com 上设计并发布了这款基于伺服的门锁。除了 Rack_Holder.stl 之外的所有文件都取自他的设计。您可以从下面或从 Thingiverse.com 下载文件。

有些文件有 LT 版本。与普通版本相比,轻型版本需要更少的 PLA,强度也更低。我打印了 LT 版本并且运行良好。我使用 Anet A8 打印所有部件。附打印件照片..

组装 3D 打印部件

如图所示,将所有打印的部件一一组装。您也可以按照第一步中附带的视频说明进行操作。组装完成后,用四颗螺丝将所有零件紧紧固定。

蓝牙控制密码保护门锁的Arduino程序

蓝牙控制智能门锁的代码很简单。我设计了 android 应用程序,以便它发送带有密码的命令。实际上我设置了两个命令,一个是“OPEN=”,另一个是“CLOSE=”,密码可以包含任何数字、后面或符号或它们的组合。在应用程序中,我使用了两个按钮,一个用于开门,另一个用于关门。当密码被提供给密码框并点击打开按钮时,应用程序将“OPEN =”命令与密码连接起来并将其发送到arduino。我使用命令添加 '=' 符号,我将使用此 '=' 分隔命令和密码。从手机接收字符串后,arduino 程序将命令和密码从接收字符串中分离出来,并将它们保存到两个单独的变量中。然后先检查密码,如果密码与保存的密码匹配,则用“OPEN”命令开门,用“CLOSE”命令关门。 “=”有助于分隔命令和密码。完整的arduino草图如下。

示意图

组件之间的连接非常简单。首先,将蓝牙模块 HC-05 连接到 Arduino。注意原理图。 Arduino板的TX引脚连接蓝牙模块的RX引脚,Arduino的RX引脚连接蓝牙模块的TX引脚。

设置门锁

我希望您使用上一步中附带的草图对 Arduino 板进行了编程,并且您已经根据原理图测试了所有连接。如果您完成了所有步骤,那么现在是将锁放在门的适当位置的时候了。首先,用四颗螺丝固定锁。然后,将蓝牙模块固定在锁的正确位置,并添加一些热胶使模块与锁紧密配合。之后,将Arduino板放在锁的底部并根据原理图连接所有电线。放置锁并进行连接后,您应该为锁通电。我使用了一个 5V、1A 的墙上适配器为电路供电。

密码保护门锁的安卓应用开发

我将向您展示如何使用 MIT App Inventor 开发蓝牙 android 应用程序。我正在使用 App Inventor,因为它不需要任何编码,也不需要安装软件。你只需要一个谷歌账户。访问 http://ai2.appinventor.mit.edu/,你会要求使用谷歌账户登录。

使用 gmail 登录 App Inventor 并按照以下步骤操作:

  • 我。接受条款和条件图片 1
  • ii.单击“稍后进行调查”,然后单击“继续”以关闭初始屏幕图像 2、3
  • iii.开始一个新项目(没有空格!)图像 4
  • 四。将项目命名为“BluetoothControlDoorLock”(没有空格!)图像 5

您现在在设计器中,您可以在其中布置应用程序的“用户界面”(图 6)。设计器窗口是您布置应用程序外观和风格的地方,并指定它应该具有哪些功能。您可以为用户界面选择按钮、图像、标签、文本框等内容,以及文本转语音、蓝牙、传感器和 GPS 等功能。

现在,按照图 7 向查看器添加一个列表选择器。将其重命名为“连接到蓝牙设备”(图 8)。添加一个标签、一个密码文本框和两个按钮,如图10所示。将组件的文本属性分别更改为“输入密码”、“开门”和“关门”。最终用户界面应如图 11 所示。现在向查看器添加一个蓝牙客户端。它是一个不可见的组件,没有 UI。见图12。

切换到块编辑器

是时候告诉您的应用该做什么了!单击“块”移至块编辑器(图 13)。将 Designer 和 Blocks 按钮视为选项卡 - 您可以使用它们在 App Inventor 的两个区域之间来回移动。块编辑器是您对应用程序行为进行编程的地方。有处理数学、逻辑和文本等内容的内置块。下面是与您的应用程序中的每个组件一起使用的块。为了让某个组件的块显示在块编辑器中,您首先必须通过设计器将该组件添加到您的应用中。

让我们为列表选择器设计块。列表选择器是一个 UI 元素,单击它时会显示相应元素的列表,此处是配对的蓝牙设备。我们必须添加两个块 ListPicker.BeforePicking 和 ListPicker.AfterPicking(图 14)。完整的块如图 18 和 19 所示。

制作apk文件

我们的设计已经完成,现在我们需要为我们的 android 手机构建 apk 文件。单击以构建菜单并选择“应用程序(将 .apk 保存到我的计算机)”。等一下。 apk 文件将下载到您的默认下载文件夹。安装并使用它。

功能更丰富的 Android 应用

在上一步中,我向您展示了如何在 App Inventor 中开发一个基本的蓝牙应用程序。但是那个应用程序不是那么用户友好。它不会向您显示任何消息,无论您的门是打开还是关闭,或者由于任何错误而无法连接蓝牙。我在此处为我们的项目附上了一个更高级的应用程序。

当您运行您的应用程序时,此应用程序检查您的蓝牙无线电是否已启用,如果未启用,蓝牙启用对话框将出现。单击是打开蓝牙收音机。然后使用配对设备按钮配对设备。然后点击连接按钮,如果成功连接到任何设备,应用程序会显示连接设备的 MAC 地址和名称。在密码框中输入密码,然后单击开门按钮,如果您输入正确的密码,门将打开,应用程序将显示一条消息,您的门现在已打开。如果要关门,请再次输入密码。如果您提供错误的密码,那么应用程序将显示错误的密码消息。

随附完整的 App Inventor 源文件 (BTcontrol.aia)。如果您不喜欢制作自己的应用程序或对其进行修改,只需下载 BTcontrol.apk 并将其安装到您的 android pone。

您也可以使用以下链接从 Google Play 商店下载:

https://play.google.com/store/apps/details?id=appinventor.ai_khairul_uapstu.BTcontrol&hl=en

要修改源,请单击“项目”菜单并选择“从我的计算机导入项目 (.aia)”,如图 24 所示,然后从您的计算机浏览 BTcontrol.aia 文件。导入后即可轻松修改。

如果您想了解更多关于使用 App Inventor 开发 android 应用程序的信息,请浏览:http://appinventor.mit.edu/explore/ai2/tutorials.html。你也可以试试 http://meta-guide.com/videography/100-best-appinventor-videos/

代码

  • Arduino 草图
Arduino SketchArduino
#include Servo myservo; // 创建伺服对象来控制一个servoString inputString ="";String command ="";String value ="";String password ="arduPi"; // 这是打开和关闭门的密码 // 您可以使用数字和符号设置任何您喜欢的密码 boolean stringComplete =false; void setup(){ //开始串口连接Serial.begin(9600); // 波特率为 9600 必须与蓝牙匹配 //String reserve() 函数允许您在内存中分配一个缓冲区用于操作字符串。 inputString.reserve(50); // 在内存中保留 50 个字节以保存字符串操作 command.reserve(50);价值。储备(50);布尔字符串OK =false; myservo.attach(9); // 将引脚 9 上的伺服器连接到伺服器对象 }void loop(){ // 如果 arduino 收到一个字符串终止字符,如 \n stringComplete 将设置为 true if (stringComplete) { //Serial.println(inputString);延迟(100); // 识别字符串中'='的位置并将其索引设置为pos变量 int pos =inputString.indexOf('='); // pos 变量的值> 或 =0 表示 '=' 存在于接收到的字符串中。 if (pos> -1) { // substring(start, stop) 函数从开始到停止切割字符串的特定部分 // 这里命令将是接收到的字符串的一部分,直到 '=' // 让接收到的字符串是 open=test123 // 然后命令是'open' command =inputString.substring(0, pos); // 值将从 after =到换行命令 // 对于上面的示例,值是 test123 // 我们只是忽略了 '=' 将子字符串的第一个参数作为 'pos+1' // 我们使用 '=' 作为command 和 vale 之间的分隔符 // 没有 '=' 可以使用任何其他字符 // 我们使用 =meas 我们的命令或密码不能包含任何 '=',否则会导致错误 value =inputString.substring(pos+1 , inputString.length()-1); // 提取命令到 \n 排除 //Serial.println(command); //Serial.println(值); // password.compareTo(value) 比较密码字符串和值字符串,如果匹配返回0 if(!password.compareTo(value) &&(command =="OPEN")){ // 如果密码匹配并且命令为'OPEN ' 比门应该打开 openDoor(); // 调用 openDoor() 函数 Serial.println(" OPEN"); // 发送打开反馈到电话延迟(100); } else if(!password.compareTo(value) &&(command =="CLOSE")){ // 如果密码匹配并且命令是'CLOSE',那么门应该关闭 closeDoor(); Serial.println("关闭"); // 发送 "CLOSE" 字符串到手机 delay(100); } else if(password.compareTo(value)){ // 如果密码不匹配则向手机发送错误反馈 Serial.println(" WRONG");延迟(100); } } // 清除下一次迭代的字符串 inputString =""; stringComplete =假; } }void serialEvent() { while (Serial.available()) { // 获取新字节:char inChar =(char)Serial.read(); //Serial.write(inChar); // 将它添加到 inputString:inputString +=inChar; // 如果传入的字符是换行符或回车符,设置一个标志 // 这样主循环就可以做一些事情: if (inChar =='\n' || inChar =='\r') { stringComplete =真; } }}void openDoor(){ myservo.write(0);延迟(100); }void closeDoor(){ myservo.write(65);延迟(100); }

定制零件和外壳

物联网
https://www.thingiverse.com/thing:2350856thingiverse.com 上的 CAD 文件

示意图

door-lock_android_source_PDi5PbxDwC.aia door-lock_android_app_K05l3Csr61.apk

制造工艺

  1. 银行金库
  2. 运河和船闸
  3. Arduino RFID 锁教程
  4. 使用 Arduino、1Sheeld 和 Android 的通用远程控制
  5. LCD 动画和游戏
  6. 使用 Arduino 和 Android 设备控制 Roomba 机器人
  7. 基于密码的门锁
  8. Python3 和 Arduino 通信
  9. 基于 Arduino 和 OLED 的元胞自动机
  10. 基于 Arduino 的 RPM 计数器,采用更快的新算法
  11. eDOT - 基于 Arduino 的精密时钟和气象站
  12. 使用 Arduino 和 ESP8266 的 WiFi 登录页面的智能门锁