Сделайте автоматическую дверь офиса с датчиком приближения смартфона

Pssst — хотите ли вы высокотехнологичную защиту для вашего домашнего офиса или секретный замок для вашей «мастерской» (хорошо, вы меня поняли, это на самом деле темница / игровая комната), которую дети не смогут выяснить? Мы вас покроем. Давайте создадим умный замок DIY, который автоматически определяет, когда вы находитесь, и блокирует, когда вас нет.

Как это работает? НИКТО НЕ ЗНАЕТ! Или, точнее, Bluetooth.

Концепт

Ваш смартфон — это мощное устройство, которое постоянно раскрывает информацию о себе внешнему миру; Одним из способов является Bluetooth.

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

Мы будем настраивать Raspberry Pi с адаптером Bluetooth, чтобы постоянно следить за тем, когда ваш смартфон находится вне зоны действия, а когда это так, реле активируется и запирает дверь.

Тебе понадобится

  • Raspberry Pi — любая модель должна работать, так как она не требует много ресурсов процессора, но я использую более старую модель B, а расположение выводов GPIO может немного отличаться в вашей модели. Смотрите раздел о режиме платы ниже. Вам также понадобятся некоторые основы, такие как проводное соединение Ethernet или настроенный Wi-Fi.

    ; плюс SD-карта и кабель питания micro USB.

  • Bluetooth USB-адаптер. Adafruit продает подтвержденный работающий модуль Bluetooth 4.0 BLE (что такое Bluetooth 4.0?

    ), но вы должны проверить все, что у вас уже есть, прежде чем покупать новый только для этого проекта. Я нашел старый стандартный мини-адаптер Bluetooth, который я купил в Японии, который, кажется, работает нормально. Мы не заботимся о скорости передачи или надежности соединения, так как все, что мы делаем, — это отправляем быстрое рукопожатие, чтобы увидеть, живо ли устройство в исправном состоянии.

  • Разделительная плата GPIO («cobbler») и соединительные кабели. Вы можете работать напрямую с выводов на Pi, но намного проще, если у вас есть ярлыки на каждом выводе, и они в любом случае стоят всего 6 долларов.
  • Релейная плата. У вас есть широкий выбор вариантов, и все будет работать, если оно предназначено для использования с микроконтроллером и может подавать напряжение не менее 12 В при 5 А. Я использовал общую 4-канальную плату, похожую на эту, примерно за 5 долларов, но я собираюсь предположить, что вы знаете, как работать с вашей.
  • 12/24 В электромагнитный замок, хотя электронный соленоидный замок также должен работать. Тот, который я купил, имеет усилие 180 кг и поставляется в комплекте с монтажными пластинами и инструкциями, примерно за 35 долларов.
  • Блок питания 12/24 В. Магнитный замок должен иметь отдельный источник питания — что бы вы ни делали, не пытайтесь получить питание для него от Pi.
  • Приложение Lock.py Python, но мы напишем это по ходу дела.

Работа с Bluetooth

Bluetooth занимает центральное место в этом проекте, поэтому давайте начнем с установки поддержки Bluetooth и протестируем наш адаптер. Вы можете сделать это прямо из Pi или через SSH удаленно (как настроить Windows для SSH на ваш Pi

).

sudo apt-get install bluez python-bluez

Вставьте ключ, если вы еще этого не сделали, и давайте посмотрим, что он сообщает.

hcitool dev

Если у вас есть что-то перечисленное в выводе, вы можете идти. Далее мы будем использовать скрипт Python для опроса ближайших устройств Bluetooth и получения уникального адреса устройства. Нам нужно сделать это только один раз для каждого устройства.

wget https://raw.githubusercontent.com/karulis/pybluez/master/examples/simple/inquiry.py
python inquiry.py

Если вы видите «0 устройств найдено», либо у вас нет совместимого USB-ключа USB, либо смартфон не обнаружен. Не отчаивайтесь, хотя: я обнаружил, что мне действительно нужно открыть страницу настроек Bluetooth на моем iPhone, чтобы перевести ее в режим обнаружения, и тогда это произошло:

Bluetooth идентифицирован

Отлично, теперь давайте создадим первую стадию нашего программного обеспечения, которая выполняет обнаружение. Создайте приложение Python под названием detect.py, и открой его с помощью Nano.

nano detect.py

Вставьте этот пример кода:

#!/usr/bin/python
import bluetooth
import time
while True:
print "Checking " + time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime())
result = bluetooth.lookup_name('78:7F:70:38:51:1B', timeout=5)
if (result != None):
print "User present"
else:
print "User out of range"
time.sleep(10)

и настройте следующую строку с адресом вашего устройства Bluetooth:

result = bluetooth.lookup_name('78:7F:70:38:51:1B', timeout=5)

Нажмите CTRL-X а также Y закрыть и сохранить. Запустите тот же код, и вы увидите что-то вроде этого:

подарок пользователя

Код должен быть очень простым для понимания, даже если вы никогда раньше не трогали Python: он сканирует определенное устройство Bluetooth каждые 10 секунд и выводит другое сообщение в зависимости от того, найден он или нет. Переключите Bluetooth на вашем телефоне, чтобы имитировать перемещение и выход из зоны действия (вероятно, около 4 м в реальности). Вы можете уменьшить или увеличить время между сканированиями, но я чувствовал, что 10 секунд — это разумное количество времени, чтобы потенциально подождать, пока дверь откроется, и именно в этом мы и заключаем весь этот проект.

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

Поздравляем, теперь у вас есть приложение на Python, которое знает, когда вы находитесь в пределах досягаемости, поэтому мы можем начать действовать в этом направлении.

Режимы платы GPIO

Прежде чем продолжить, вам нужно выяснить, какой режим доски вы собираетесь использовать. Нет правильного или неправильного ответа, он просто влияет на то, указали ли вы буквальный номер контакта или виртуальный номер контакта GPIO.

По умолчанию используется буквенный номер пина («режим платы»), начиная с пина 1 слева внизу (если смотреть на Pi с портами USB справа). Контакт 2 чуть выше этого.

Однако, если у вас есть плата GPIO («cobbler»), у вас есть метки из альтернативного режима, называемого «BCM» (канал Broadcom SOC), и обычно пишутся с префиксом GPIO или P. Вам строго не нужен прорыв GPIO — он просто делает вещи проще. Если у вас нет разделительной доски и вы не хотите ее покупать, используйте следующую схему:

Схема контактов Raspberry Pi модели A и B от RaspberryPi.orgСхема контактов Raspberry Pi модели A и B от RaspberryPi.org

Обратите внимание, что исходная модель B, версия 1, версия 2, а также модели B + и Pi2 имеют разные выводы. Обратитесь к этому вопросу StackExchange за диаграммой, соответствующей вашей доске.

В этом коде проекта я использую систему нумерации BCM GPIO, которая соответствует имеющейся у меня доске объявлений Adafruit. Незначительные модификации необходимы, если вы хотите использовать режим буквального вывода.

Провод в реле

Прикрепите коммутационную плату, убедившись, что провод от контактов 1 и 2 (те, что в углу вашего Pi) подключены к 3v3 и 5V0 на контакте. Вы можете вынуть тестер напряжения, чтобы проверить это.

смарт-замок rpi - gpio

Прежде чем продолжить, проверьте, не использовал ли кто-нибудь еще ваше реле с Raspberry Pi (или найдите заранее, что вы знаете, работает). Некоторым может потребоваться 5 В для активации, но RPi может обеспечить только 3,3 В на выходных выводах GPIO. Случайно, тот, который я использую, доволен 3,3 В, поэтому мне не нужно было никаких дополнительных схем, только 5V0 в VCC, GND в GND, а также GPIO контакт 23 для первого релейного входа.

Мой предыдущий учебник по GPIO

показал, как подключить транзисторную схему для увеличения 3,3 В до полного 5 В, если вам нужно (на самом деле, я использовал ту же плату реле для этого урока, но оказывается, что мне не нужно 5 В в конце концов).

Пока не нужно подключать электромагнит, так как вы услышите щелчок при срабатывании реле.

Далее, давайте возьмем некоторый код для взаимодействия с портами GPIO.

Мы начнем с тестирования вне Python, чтобы убедиться, что все работает на самих портах. Установите wiringPi, который дает вам несколько полезных инструментов командной строки.

git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

После установки сконфигурируйте вывод GPIO 23 для вывода.

gpio -g mode 23 out

Теперь выполните быстрое сканирование всех портов, чтобы подтвердить

gpio -g readall

У вас будет что-то похожее на это, хотя у вас может быть больше на модели B + или Pi2, так как он имеет больше выводов GPIO:

gpio readall

Поначалу это может немного смущать, но таблица разбита на середину, и порядок столбцов меняется с каждой стороны. В крайнем левом и правом нижнем углу находится номер контакта BCM. Поскольку мы используем 23, вы должны увидеть режим, указанный сейчас как OUT. Это полезная небольшая команда, чтобы получить хорошее представление о том, что происходит со всеми вашими выводами в любой момент.

Чтобы написать высокий или низкий пин, просто используйте

gpio -g write 23 1
gpio -g write 23 0

Надеюсь, если у вас правильно подключено реле, вы услышите, как оно включается и выключается. Если нет, не продолжайте, пока не разберетесь с проводкой. Помните, что вам может потребоваться более высокое напряжение для активации реле.

Как только вы подтвердите, что реле и GPIO работают, добавьте модули Python для GPIO.

sudo apt-get install python-dev python-rpi.gpio

Теперь давайте изменим наше приложение Python для включения или выключения реле при обнаружении телефона. Вы найдете окончательный код в этом Gist. Скопируйте существующий detect.py к новому lock.py, и добавьте следующие команды импорта и настройки:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
RELAY = 23
GPIO.setup(RELAY, GPIO.OUT)

В операторе IF добавьте команду, чтобы активировать или деактивировать реле. Обратите внимание, что ваше реле может работать как с низким, так и с высоким сигналом, поэтому отрегулируйте его после тестирования.

GPIO.output(RELAY,1)

Чтобы запустить эту новую версию, добавьте к команде префикс Судо — доступ к GPIO требует прав суперпользователя.

Подключить его

После того, как вы подтвердите, что реле срабатывает с помощью датчика приближения, добавьте электромагнитный замок. Со стороны реле, подайте 12 В на клемму, помеченную как COM (общая), а затем положительный вход питания от электромагнита к клемме NO (нормально разомкнутой, т. Е. Обычно она не подключена к общей клемме, но будет, когда вы активировать реле).

Соедините землю от источника питания и электромагнита на клемме GND.

Rpi Smart Lock - реле

Обратитесь к инструкции по установке, прилагаемой к вашему замку; дверь должна быть достаточно толстой, и легче, если она открывается со стороны, на которую вы хотите, чтобы замок был. У меня все было наоборот, поэтому мне нужен L-образный монтажный кронштейн, а также дополнительный кусочек дерева для увеличения толщины двери.

интеллектуальный замок rpi - электромагнит

улучшения

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

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

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

Какую функцию вы думаете, я должен добавить дальше? У вас были какие-то проблемы со сборкой? Дайте мне знать в комментариях, и я сделаю все возможное, чтобы помочь!

Ссылка на основную публикацию
Adblock
detector