Замок, который открывается смартфоном (Arduino + Android)

Этот смарт-замок является безопасным, простым и легким в управлении для блокировки вашего дома. Замок не нуждается в ключах и устанавливается внутри дома с обратной стороны двери, а управлять им вы можете из-за двери с помощью Bluetooth модуля Android.

Поскольку замок находится внутри двери, у воров нет возможности его взломать. Для открытия и закрытия требуется приложение Android, а как его сделать объясняется в последней части урока. Пароль отправляется на замок с помощью этого приложения для Android и если пароль будет соответствовать вашему паролю с предустановленной блокировкой, тогда она будет снята, а на ваш телефон будет передано сообщение об открытии замка.

Замок, который открывается смартфоном (Arduino + Android)

Шаг 1: Список покупок

1. Arduino Uno - 1 шт.
2. Модуль Bluetooth (HC-05) - 1 шт.
3. Блокировка двери (3D-печать) - 1 шт.
4. Сервомотор (9g Micro Servo) - 1 шт.
5. Android-смартфон - 1 шт.
6. Винт- 6шт
7. Провода перемычек

Необходимые инструменты ниже.

1. Мы использовали 3D-принтер Anet A8 от gearbest.com. Вы можете заказать этот комплект на сайте gearbest.com всего за 150 долларов. Это действительно отличный принтер по очень низкой цене. В настоящее время они предоставляют 47% скидку на этот комплект 3D-принтеров. Я использую принтер четыре месяца, и очень доволен производительностью принтера. Все используемые здесь в уроке печатные части напечатаны Anet A8.

2. Отвертка.

Поговорим подробнее об остальном.

Arduino Uno. Arduino Uno - самая популярная плата для разработчиков в семье Arduino. Не обязательно использовать Arduino Uno, вы можете использовать другой микроконтроллер из семейства Ардуино, такой как Arduino Nano или Arduino Micro. Вы также можете использовать автономный atmega328p без использования платы arduino. Есть по этой теме учебник на официальном сайте Ардуино под названием «From Arduino to a Microcontroller on a Breadboard» для автономного микроконтроллера atmega, скачать можно здесь.

Модуль Bluetooth (HC-05). Bluetooth - это тип беспроводной связи, используемой для передачи голоса и данных на высоких скоростях с использованием радиоволн. Он широко используется в мобильных телефонах для совершения звонков, гарнитуры и обмена данными. Этот тип коммуникации - дешевый и простой способ контролировать что-то дистанционно с помощью Arduino. Для связи с платой, использующим bluetooth, модуль bluetooth должен быть подключен к Arduino. Доступно несколько моделей модуля bluetooth. Я использую здесь HC-05 очень распространенный и дешевый. Модуль HC-05 имеет 6 контактов. Мы должны подключить 4 штыря к Arduino:

  • RXD
  • TXD
  • VCC
  • GND

RXD будет получать данные от Arduino; TXD отправит данные в Arduino; VCC - это источник питания (от 3,3 до 6,6 В), а GND - земля.

Micro Servo SG90. Малюсенький и легкий с высокой выходной мощностью. Серво может вращаться приблизительно на 180 градусов (90 в каждом направлении) и работает так же, как и стандартные, но меньшего размера. Для управления этими сервоприводами вы можете использовать любой серво-код, аппаратное обеспечение или библиотеку.

Шаг 2: 3D-дизайн дверного замка

Все части замка трехмерны. Я хотел бы поблагодарить одного из пользователей (ridercz) за приятный дизайн. Он разработал и опубликовал этот замок на сервоприводе на сайте thingiverse.com. Все файлы, кроме Rack_Holder.stl, взяты из его дизайна. Вы можете скачать файлы ниже или с Thingiverse.com.

Некоторые файлы имеют версию LT. Легкая версия требует меньше PLA по сравнению с обычной версией и имеет меньшую прочность. Я напечатал версию LT . Я использовал Anet A8 для печати всех деталей. Фотографии печатных деталей прилагаю.

Скачать 3D-макеты:

UAL_all.stl

UAL_all_LT.stl

UAL_baseplate.stl

UAL_baseplate_LT.stl

UAL_gear.stl

UAL_rack.stl

UAL_rack_cover.stl

UAL_rack_cover_LT.stl

UAL_servo_cover.stl

UAL_servo_cover_LT.stl

UAL_servo_holder.stl

Rack_Holder.STL

Шаг 3: Сборка 3D-печатных частей

Соберите все печатные части по одному, как показано на фотографиях. Вы также можете следовать видео инструкциям, прилагаемым в самом конце урока. После сборки используйте четыре винта, чтобы плотно зафиксировать все детали.

Шаг 4: Программа Arduino для управления замком защищенным паролем через Bluetooth

Код для управления умным замком через Bluetooth довольно прост. Я разработал приложение для Android, так что оно отправляет команду с паролем.

На самом деле я установил две команды: одна «OPEN =» (Открыть), а другая «CLOSE =» (Закрыть), пароль может содержать любую цифру, букву или символ или комбинацию из них по вашему усмотрению.

В приложении я использовал две кнопки - для открытия двери и для закрытия двери. Когда пароль вводится в нужное поле и нажимается кнопка «открыть» приложение соединяет команду «OPEN =» с паролем и отправляет его в Arduino.

Мы добавили знак '=' с командой для того, чтобы разделить команду и пароль, используя '='. После получения строки из телефонной программы Arduino отделяет команду и пароль от строки приема и сохраняет их в две отдельные переменные. Затем сначала проверяет пароль, и если пароль совпадает с сохраненным паролем открывается дверь командой «ОТКРЫТЬ» и закрывается дверь командой «ЗАКРЫТЬ». «=» помогает отделить команду и пароль. Ниже приведен полный скетч (эскиз) для Ардуино.

<code style="display:block;white-space:pre-wrap;color:green">
/* Athor: Md. Khairul Alam
   Date: 1 September, 2015
   This program is for password protected smart door lock */
#include 

Servo myservo;  // create servo object to control a servo

String inputString = "";
String command = "";
String value = "";
String password = "arduPi"; // this is the password for opening and closing your door
                            // you can set any pasword you like using digit and symbols
boolean stringComplete = false; 

void setup(){
  //start serial connection
  Serial.begin(9600);  // baud rate is 9600 must match with bluetooth 
  //The String reserve() function allows you to allocate a buffer in memory for manipulating strings.
  inputString.reserve(50);  // reserve 50 bytes in memory to save for string manipulation 
  command.reserve(50);
  value.reserve(50);
  
  boolean stringOK = false;
  
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  
}

void loop(){
  // if arduino receive a string termination character like \n stringComplete will set to true
  if (stringComplete) {
    //Serial.println(inputString);
    delay(100);
    // identified the posiion of '=' in string and set its index to pos variable
    int pos = inputString.indexOf('=');
    // value of pos variable > or = 0 means '=' present in received string.
    if (pos > -1) {
      // substring(start, stop) function cut a specific portion of string from start to stop
      // here command will be the portion of received string till '='
      // let received string is open=test123
      // then command is 'open' 
        command = inputString.substring(0, pos);
      // value will be from after = to newline command
      // for the above example value is test123
      // we just ignoreing the '=' taking first parameter of substring as 'pos+1'
      // we are using '=' as a separator between command and vale
      // without '=' any other character can be used
      // we are using = menas our command or password must not contains any '=', otherwise it will cause error 
        value = inputString.substring(pos+1, inputString.length()-1);  // extract command up to \n exluded
        //Serial.println(command);
        //Serial.println(value);
       
       // password.compareTo(value) compare between password tring and value string, if match return 0 
    if(!password.compareTo(value) && (command == "OPEN")){
          // if password matched and command is 'OPEN' than door should open
           openDoor(); // call openDoor() function
           Serial.println(" OPEN"); // sent open feedback to phone
           delay(100);
           }
    else if(!password.compareTo(value) && (command == "CLOSE")){
          // if password matched and command is 'CLOSE' than door should close
           closeDoor();
           Serial.println(" CLOSE"); // sent " CLOSE" string to the phone 
           delay(100);
           }
    else if(password.compareTo(value)){
          // if password not matched than sent wrong feedback to phone
           Serial.println(" WRONG");
           delay(100);
           } 
        } 
       // clear the string for next iteration
       inputString = "";
       stringComplete = false;
    }
   
}


void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read(); 
    //Serial.write(inChar);
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline or a carriage return, set a flag
    // so the main loop can do something about it:
    if (inChar == '\n' || inChar == '\r') {
      stringComplete = true;
    } 
  }
}

void openDoor(){
  myservo.write(0); //place servo knob at 0 degree
  delay(100);   
}

void closeDoor(){
  myservo.write(65); //place servo knob at 65 degree to fully closed the lock
  delay(100); 
}

Если Arduino получил неверный пароль, он отправиn на телефон Android сообщение о том, что пароль неверен. Фактически Ардуино отправил строку «WRONG». Затем программа на Android показывает неправильное сообщение с паролем.

Шаг 5: Схема подключения

Связь между компонентами очень проста. Сначала подключите модуль Bluetooth HC-05 к Arduino. Обратите внимание на схему. Штырек TX платы Arduino подключен к выходу RX модуля Bluetooth, а вывод RX для Arduino подключен к выходу TX модуля Bluetooth.

Соединение между модулем Bluetooth Arduino и HC-05:

Arduino HC-05 Module
TX RX
RX TX
5V VCC
GND GND

Подключение серводвигателя:

Arduino Servo Motor
D9 Signal (Yellow, желтый)
5V VCC (Red, красный)
GND GND (Brown, коричневый)

Скачать schematic.fzz

Скачать sg90-servo.pdf

Шаг 6: Установка замка на дверь

Надеюсь, вы запрограммировали свою плату Arduino с помощью скетча, представленного на предыдущем шаге, и вы уже протестировали все соединения в соответствии со схемой.

Если вы выполнили все этапы, самое время поместить замок в соответствующее место двери. Сначала поместите замок с четырьмя винтами. Затем фиксируем модуль Bluetooth в нужном месте замка и добавляем горячий клей, чтобы плотно соединить модуль с замком.

После этого поместите плату Arduino в нижнюю часть замка и соедините все провода в соответствии с схемой. После установки замка и подключения вы должны подключить питание. Мы использовали адаптер 5V, 1A для обеспечения питания цепи.

Шаг 7: Разработка приложения для Android

Я покажу вам, как разработать приложение Bluetooth на Aandroid с помощью приложения MIT App Inventor. Я использую App Inventor, потому что он не требует каких-либо навыков программирования и установки программного обеспечения. Вам нужна только учетная запись google. Перейдите по адресу http://ai2.appinventor.mit.edu/ и войдите в систему, используя учетную запись google.

Войдите в приложение Inventor с помощью gmail и выполните следующие действия.

I Принять условия Картинка 1
II Нажмите «take survey later», а затем «продолжить», чтобы закрыть экран заставки Картинка 2, 3
III Начните новый проект Картинка 4
IV Назовите проект "BluetoothControlDoorLock" (без пробелов) Картинка 5

Теперь вы находитесь в Дизайнере, где вы делаете «пользовательский интерфейс» вашего приложения (изображение 6). В окне конструктора вы найдете внешний вид вашего приложения и укажете, какие функции он должен иметь. Вы можете выбрать для пользовательского интерфейса кнопки, изображения, ярлыки, текстовые поля и функциональные возможности, такие как Text-to-Speech, Bluetooth, датчики и GPS.

Теперь, следуйте рисунку 7 и добавьте "List Picker" в программу просмотра. Переименуйте его в «Подключение к устройству Bluetooth» (рисунок 8). Добавьте одну метку, одно текстовое поле пароля и две кнопки, показанные на рисунке 10. Измените текстовые свойства компонентов как «Введите пароль», «Открыть дверь» и «Закрыть дверь» соответственно. Конечный пользовательский интерфейс должен выглядеть так, как показано на рисунке 11. Теперь добавьте клиент Bluetooth в программу просмотра. Это невидимый компонент, и он не имеет интерфейса. См. Изображение 12.

Переключитесь на редактор блоков

Пришло время сказать вашему приложению что делать! Нажмите «Блоки» (Blocks), чтобы перейти к редактору блоков (рис. 13). Подумайте о кнопках Designer и Blocks, таких как вкладки, - вы используете их для перемещения вперед и назад между двумя областями App Inventor. Редактор блоков - это программа, в которой вы программируете поведение своего приложения. Есть встроенный блок, который обрабатывает такие вещи, как математика, логика и текст. Ниже перечислены блоки, которые идут с каждым из компонентов вашего приложения. Чтобы заставить блоки для определенного компонента отображаться в редакторе блоков, сначала нужно добавить этот компонент в свое приложение через конструктор.

Давайте создадим блоки для List Picker. List Picker - это элемент пользовательского интерфейса при нажатии на него показывается список соответствующих элементов, здесь - это сопряженное устройство Bluetooth. Мы должны добавить два блока ListPicker.BeforePicking и ListPicker.AfterPicking (изображение 14). Законченные блоки показаны на рисунках 18 и 19.

Сделайте файл .apk

Наш дизайн завершен, теперь нам нужно собрать файл apk для нашего телефона Android. Нажмите, чтобы создать меню и выберите «Приложение (сохранить .apk на мой компьютер)». Подождите минуту. Файл apk загрузится в папку загрузки по умолчанию. Установите и используйте его.

Шаг 8: Более богатое приложение для Android

На предыдущем шаге мы показали вам как разработать базовое приложение Bluetooth в App Inventor. Но это приложение не так удобно. Он не покажет вам никакого сообщения, либо ваша дверь открыта или закрыта, либо Bluetooth не может подключиться для каких-либо ошибок. Мы прикрепили здесь более продвинутое приложение для нашего проекта.

Когда вы запускаете приложение оно проверяет, включен ли ваш Bluetooth или нет. Если не включено - появится диалоговое окно включения Bluetooth. Нажмите «Да», чтобы включить Bluetooth. Затем подключите устройство с помощью кнопки парного устройства.

Затем нажмите кнопку «Подключение», если приложение успешно подключено к любому устройству, приложение показывает MAC-адрес и имя подключенного устройства. Введите пароль в поле пароля, затем нажмите кнопку открытия двери, если вы ввели правильный пароль - дверь откроется, и приложение покажет вам сообщение о том, что ваша дверь теперь открыта. Затем введите пароль еще раз, если вы хотите закрыть дверь. Если вы укажете неверный пароль, приложение покажет сообщение об ошибке.

Полный исходный файл App Inventor (BTcontrol.aia) прилагается. Если вам не понравилось создавать собственное приложение или изменять его, просто скачайте BTcontrol.apk и установите его на ваш Андроид. Вы также можете загрузить его из Google Play Store по ссылке:

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

Для изменения источника нажмите меню «Проекты» и выберите «Импортировать проект (.aia) с моего компьютера», показанный на рисунке 24, и откройте файл BTcontrol.aia со своего компьютера. После импорта вы можете легко его изменить.

Если вы хотите узнать больше о разработке Android-приложений с помощью App Inventor, просмотрите ссылку - "appinventor.mit.edu/explore/ai2/tutorials.html".

Вы также можете попробовать - "meta-guide.com/videography/100-best-appinventor-videos".

Скачать Door-lock Android Source.aia

Скачать Door-lock android app.apk

Ардуино+