Устройство открывания двери гаража Raspberry Pi 3: 15 шагов (с изображениями)
Устройство открывания двери гаража Raspberry Pi 3: 15 шагов (с изображениями)
Anonim
Устройство открывания двери гаража Raspberry Pi 3
Устройство открывания двери гаража Raspberry Pi 3

Я создал это руководство в 2014 году. С тех пор многое изменилось. В 2021 году я обновил здесь умный открыватель гаражных ворот.

Используйте Raspberry Pi и смартфон, чтобы открывать, закрывать и контролировать дверь гаража. Открытие и закрытие двери обеспечивается с помощью самозаверяющих сертификатов, установленных на мобильных телефонах семьи. Если дверь гаража открыта, а не должна быть, то отправьте текстовое сообщение (SMS) на мобильный телефон.

Гаражные ворота постоянно используются с конца 2014 года. На протяжении многих лет я старался обновлять изменения. Есть приложение с описанием изменений в инструкции.

Цели этого проекта:

  • Сделайте мой первый поучительный - я не планировал публиковать это, но я получил много запросов
  • Открыть дверь гаража с помощью стандартного пульта ДУ
  • Откройте дверь гаража с помощью настенного дверного звонка для открывания гаража
  • Откройте дверь гаража с помощью смартфона
  • Отслеживайте состояние гаражных ворот удаленно с помощью мобильного телефона или ноутбука (открыты они или закрыты?)
  • Отправить текстовое сообщение на мой мобильный телефон, если дверь открыта, когда ее следует закрыть
  • Держите дверь гаража в безопасности (например, при отключении электроэнергии дверь не должна открываться)
  • Не позволяйте никому в сети открывать дверь (двусторонний самоподписанный сертификат SSL)
  • Используйте Wi-Fi вместо проводного подключения
  • Используйте Raspberry Pi 3

Основа для этой реализации открывателя гаражных ворот была взята из инструкции: Raspberry Pi Garage Door Opener by quartarian. Первоначально я использовал модель B + Raspberry Pi, затем перешел на модель B Raspberry Pi 2, а теперь она использует Raspberry Pi 3.

Я использовал MacBook для связи с Raspberry Pi, но можно использовать любой компьютер.

Нет веских причин для создания этого устройства, но это было весело. Это более выгодно с точки зрения затрат. Подобное устройство можно приобрести примерно за 130 долларов США.

  • Мастер подъемника 828LM
  • Чемберлен MyQ $ 129
  • Ворота GoGo $ 179
  • Ремесленник $ 100

Примечания:

  • Текст, заключенный в пики, например ♣ replace-this ♣, следует заменить фактическим значением.
  • Подчеркнутый синий текст Arduino - это ссылка. В данном случае это ссылка на версию устройства открывания гаражных ворот для Arduino.
  • Я попытался указать на каждый использованный источник. Приношу свои извинения за любые упущения. Большая часть этого документа основана на работах других людей.
  • $ указывает на команду, выполняемую в окне терминала на MacBook и обычно выполняемую на Raspberry Pi.

Шаг 1: Соберите детали

Купите или соберите детали и инструменты (цены в долларах США).

  • Raspberry Pi 3 Model B Newark Element14 $ 35
  • Адаптер питания USB 5,2 В 2,5 А от Amazon $ 9,99
  • Кабель Micro USB-USB длиной 6 футов от Amazon $ 7,99
  • Чехол от Amazon $ 6,99
  • SanDisk Ultra 16 ГБ microSDHC класса 10 с адаптером (SDSQUAN-016G-G4A) от Amazon $ 8,99
  • 2-канальный модуль реле SunFounder 5V для Arduino UNO 2560 1280 ARM PIC AVR STM32 Raspberry Pi - $ 6,79
  • 3x перемычки «мама-женщина». Купил в Fry’s за 4,95 доллара.
  • Динамический DNS 40 долларов в год для 30 имен (dyn.com)
  • 1-я банда 18 куб. в. Старый рабочий тяжелый настенный выключатель и розеточная коробка, 3,12 доллара США.
  • Белая настенная тарелка Ultra Pro с одной щеткой, $ 7,88
  • SECO-LARM SM 226L, Датчик двери гаража, цена варьируется в широких пределах, $ 9,99 на Amazon с бесплатной доставкой
  • 50 футов сплошного провода термостата, Home Depot или Lowe's, ~ 20 долларов

Моя сумма: ~ 172,00 $

У меня были следующие запчасти, инструменты и услуги:

  • Кабель Ethernet CAT5
  • Проволока малого калибра, длина 6 футов
  • Отвертка с крестообразным шлицем
  • Плоскогубцы
  • Ножницы для коробок
  • Отвертка с плоской головкой для ювелиров, необходимая для откручивания винтов на реле
  • MacBook (можно использовать ПК)
  • AT&T GigaPower (можно использовать любого интернет-провайдера)

Шаг 2: Настройте Raspberry Pi без монитора или клавиатуры

Настройка Raspberry Pi без монитора или клавиатуры
Настройка Raspberry Pi без монитора или клавиатуры

Все проекты Raspberry Pi требуют определенной настройки. Мне нравится использовать один и тот же набор инструкций, и при необходимости у меня есть одно место для обновления этих инструкций.

Настройте Raspberry Pi, используя следующие инструкции:

Настройка Raspberry Pi без монитора или клавиатуры

Указанные выше инструкции включают дополнительные шаги в приложении. Обязательно проделайте шаг:

Добавить клиентские сертификаты на веб-серверы

Выключение Raspberry Pi

$ sudo выключение -h 0

После выключения удалите

  • сетевой кабель
  • Последовательный USB-кабель

Они больше не понадобятся. Используйте Wi-Fi, ssh и окно терминала в Mac Book для выполнения команд на Raspberry Pi.

Отключите питание и снова подключите питание, и Raspberry Pi должен перезагрузиться.

Шаг 3: Установите Wiring Pi, Apache и PHP

Установите Wiring Pi

Откройте окно терминала в Mac Book. Войдите в Raspberry Pi, затем загрузите, скомпилируйте и установите Wiring Pi. Это программное обеспечение позволяет управлять контактами GPIO. Вот пошаговое руководство:

wiringpi.com/download-and-install/

Вот сокращенная версия инструкций:

$ ssh pi @ ♣ малина-пи-ip ♣

пароль: ♣ пароль ♣ $ sudo apt-get install git-core $ git clone git: //git.drogon.net/wiringPi $ cd wiringPi $ git pull origin $./build

Запустите команду gpio, чтобы проверить установку:

$ gpio -v

Версия gpio: 2.29 Авторские права (c) 2012-2015 Гордон Хендерсон Это бесплатное программное обеспечение, не имеющее АБСОЛЮТНО БЕЗ ГАРАНТИЙ. Для получения подробной информации введите: gpio -warranty Raspberry Pi Подробности: Тип: Модель 2, Версия: 1.1, Память: 1024 МБ, Производитель: Sony [OV] Дерево устройств включено. Этот Raspberry Pi поддерживает доступ GPIO на уровне пользователя. -> См. Справочную страницу для более подробной информации $ gpio readall + ----- + ----- + --------- + ------ + --- + --- Pi 2 --- + --- + ------ + --------- + ----- + ----- + | BCM | wPi | Имя | Режим | V | Физический | V | Режим | Имя | wPi | BCM | + ----- + ----- + --------- + ------ + --- + ---- ++ ---- + --- + - ----- + --------- + ----- + ----- + | | | 3,3 В | | | 1 || 2 | | | 5v | | | | 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5V | | | | 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | ВНЕ | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 1 | IN | GPIO. 4 | 4 | 23 | | | | 3,3 В | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | В | 0 | 21 || 22 | 0 | В | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | В | 0 | 23 || 24 | 1 | В | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | В | 1 | 27 || 28 | 1 | В | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | | | 6 | 22 | GPIO.22 | В | 1 | 31 || 32 | 0 | В | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | В | 0 | 33 || 34 | | | 0v | | | | 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | В | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | В | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 | + ----- + ----- + --------- + ------ + --- + ---- ++ ---- + --- + - ----- + --------- + ----- + ----- + | BCM | wPi | Имя | Режим | V | Физический | V | Режим | Имя | wPi | BCM | + ----- + ----- + --------- + ------ + --- + --- Pi 2 --- + --- + --- --- + --------- + ----- + ----- +

Приведенные выше команды должны дать вам уверенность в том, что wiringPi работает нормально.

Установите Apache и PHP

Выполните следующие команды:

$ cd..

$ sudo apt-get update $ sudo apt-get install apache2 php5 libapache2-mod-php5

Чтобы убедиться, что веб-сервер работает, откройте браузер и в поле URL введите:

♣ малина-пи-ип ♣

Веб-сайт Apache по умолчанию отвечает "Работает!"

Шаг 4: Веб-сайт

Откройте окно терминала в Mac Book. Войдите в Raspberry Pi, затем удалите файл index.html по умолчанию, измените разрешения для каталога веб-сайта и отредактируйте файл с именем index.php.

$ ssh pi @ ♣ малина-пи-ip ♣

пароль: ♣ пароль ♣ $ sudo rm /var/www/index.html $ sudo chown pi: root / var / www $ sudo nano /var/www/index.php

И введите следующий код:

Открывалка для гаража

Домашняя автоматизация

<? php if ($ switch == 1) {эхо"

";} еще {эхо"

"; } ?>

Открывалка для гаражных ворот Руководство для открывания гаражных ворот закрыто 1 открытый 0
<? php if ($ trigger == 0) {echo "<td colspan = \" 4 / "} else {echo"

var13 ->

CTRL-o и ENTER для записи файла и CTRL-x для выхода из редактора.

Изменить права доступа к файлу

$ sudo chmod 664 /var/www/index.php

Шаг 5. Изображение веб-сайта

Изображение веб-сайта
Изображение веб-сайта
Изображение веб-сайта
Изображение веб-сайта

Возьмите дистанционное устройство открывания гаражных ворот с высоким разрешением из Интернета. Измените изображение, как вы хотите, используя кисть Mac. На изображении выше использовался Genie Garage Opener с высоким разрешением, был добавлен логотип Raspberry Pi и удален светодиод.

Одно изображение является фоном (remote-background.jpg), а другое - активным изображением (remote-press.jpg).

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

Скопируйте изображения на raspberry pi:

$ scp *-j.webp

пароль: ♣ пароль ♣

На веб-сайте есть одна кнопка. Для проверки откройте браузер и введите raspberry-pi-ip ♣. Вместо веб-сайта Apache по умолчанию, на котором написано «Это работает!», Должна появиться кнопка. Нажми.

Шаг 6. Удаленное управление веб-сервером

Чтобы упростить доступ к механизму открывания гаражных ворот из удаленного места, я использую динамическое DNS-имя. Потому что я не люблю запоминать IP-адреса.

С помощью этой функции я ввожу ♣ dynamic-hostname ♣.getmyip.com в поле URL-адреса браузера. Примечание. IP-адрес домашних маршрутизаторов может быть изменен без предварительного уведомления, но это случается редко. Я решил использовать DynDNS. Вам нужно будет знать общедоступный IP-адрес вашего маршрутизатора.

IP-адрес маршрутизатора U-Verse: uverse-public-ip ♣

Вы можете просмотреть свои имена хостов и данные учетной записи DynDNS Pro. Вот несколько советов для начала:

  • Создайте свое имя хоста динамического DNS (1 из 30):

    • ♣ динамическое имя хоста ♣
    • Ключ средства обновления: ♣ dynamic-ip-updater-key ♣
  • Установите клиент обновления, чтобы ваше имя хоста всегда указывало на правильный IP-адрес.

    • Скачайте и установите на MacBook
    • IP-адреса AT&T U-verse меняются редко, поэтому указанное выше средство обновления можно запускать всякий раз, когда оно действительно меняется.
    • Следуйте инструкциям:

      • Добавить аккаунт
      • Введите имя пользователя и пароль: ♣ dynamic-ip-username ♣ ♣ dynamic-ip-password ♣
      • Выберите имя хоста
      • Нажмите Настроить выбранные хосты.
      • Хост должен стать активным
    • Настройте свою сеть, чтобы разрешить доступ к вашему устройству из Интернета. Вы можете использовать наш Dyn Wizard для получения некоторых общих инструкций о том, как это сделать, использовать такие ресурсы, как PortForward.com, или обратиться за помощью к производителю устройства.

      • AT&T U-verse
      • Переадресация портов для 2-Wire 3801HGV - это маршрутизатор AT&T U-Verse, который у меня есть. См. Обновления в Приложении, чтобы узнать, как перенаправить порт на маршрутизаторе AT&T U-verse 5268ac.
      • Откройте браузер и перейдите в ♣ raspberry-pi-ip ♣
      • Пароль: ♣ пароль ♣
      • Настройки
      • Межсетевой экран

        • Выберите ♣ raspberry-pi-hostname ♣
        • Серверы

          • Порт веб-сервера 80
          • Сервер HTTPS - порт 443
        • Добавлять
      • Сохранить

Как только это будет сделано, веб-сервер будет работать из Интернета. Для проверки введите ♣ dynamic-hostname ♣, и вы должны увидеть кнопку открывания двери гаража.

Шаг 7: Подключите схему к Raspberry Pi

Подключите схему к Raspberry Pi
Подключите схему к Raspberry Pi

Для предоставленного кода (шаги 4 и 6) я использовал вывод 7 GPIO. По совпадению, GPIO 7 совпадает с выводом 7 wiringPi. В коде PHP используются номера выводов Pi, а НЕ номера выводов GPIO. Вы можете использовать то, что хотите, но не забудьте изменить код.

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

С первой попытки я создал три соединительных кабеля (мама-папа).

  • Используйте три соединительных кабеля типа мама-мама
  • Отрежьте три куска прочной проволоки примерно на 1 дюйм.

    Зачистите 1/4 дюйма с обоих концов сплошной проволоки

  • Вставьте один сплошной провод в один соединительный кабель с внутренней резьбой.

Вот лучший способ создания соединительных кабелей (мама-папа):

  • Используйте только одножильный провод
  • Отрежьте три 4-дюймовых куска твердой проволоки.
  • Зачистите 1/4 дюйма с обоих концов сплошного провода.
  • Используйте соединительные штифты с внутренней резьбой

    • Наденьте один соединительный штифт с внутренней резьбой на один конец сплошного провода и обожмите

      Гнездовой штифт не должен расшатываться, при необходимости припаяйте

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

Подключите реле к пи, как показано на схеме:

  • Подключите женский конец кабеля к контакту Raspberry Pi.
  • Вставьте сплошной провод в реле.

Шаг 8: Создайте службу запуска

Большинство реле, в том числе и купленное, работают следующим образом:

  • Когда сигнал включен, цепь остается выключенной.
  • Когда сигнал выключен, значит, цепь включена.

Если Raspberry Pi теряет питание, реле имеет предохранительный механизм, который отключает цепь.

Проблема может возникнуть, когда питание Rapberry Pi и реле восстанавливается, но до того, как Raspberry Pi завершит загрузку, чтобы включить сигнал, который необходим для отключения цепи. Вы можете проснуться утром с открытым гаражом и, возможно, с несколькими новыми друзьями!

Однако на самом деле реле не инициализируется до тех пор, пока режим вывода GPIO не будет установлен с помощью этой команды: gpio mode 7 out. Кроме того, если вывод GPIO находится в положении ON (gpio write 7 1) до того, как вы установите режим GPIO, реле останется выключенным после инициализации.

Чтобы эта инициализация запускалась при загрузке и не просыпалась от новых друзей, используйте следующий сценарий запуска.

$ ssh pi @ ♣ малина-пи-ip ♣

$ sudo nano /etc/init.d/garagerelay

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

#! / bin / bash

# /etc/init.d/garagerelay # Выполнять определенные функции по запросу системы case "$ 1" в start) echo "Starting Relay" # Включите 7, чтобы реле оставалось выключенным / usr / local / bin / gpio write 7 1 # Запустить режим Gpio / usr / local / bin / gpio 7 out;; stop) echo "Остановка gpio";; *) echo "Использование: /etc/init.d/garagerelay {start | stop}" exit 1;; esac выход 0

Для сохранения: CTRL-o, ENTER

Чтобы выйти из nano, CTRL-x

Сделайте файл исполняемым:

$ sudo chmod + x /etc/init.d/garagerelay

Теперь скажите вашему пи запускать этот скрипт при загрузке:

$ sudo update-rc.d -f garagerelay start 4

(Примечание: предупреждение «Отсутствуют теги LSB» можно игнорировать.)

Убедитесь, что сценарий запуска запущен

$ sudo перезагрузка

Откройте браузер и нажмите кнопку открытия. Реле должно щелкнуть.

Шаг 9: прикрепите Raspberry Pi к гаражу

Прикрепите Raspberry Pi к гаражу
Прикрепите Raspberry Pi к гаражу

При перемещении Raspberry Pi обязательно запустите:

$ выключение -h 0

Вы можете отключить электричество в гараже. Так что дверной звонок не убьет вас электрическим током:). Настоящая причина в том, что каждый раз, когда вы закорачиваете провода, дверь будет подниматься и опускаться.

Отвинтите стенные винты от открывателя дверного звонка, с помощью которого дверной звонок крепится к стене.

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

Пропустите провода реле через отверстие (используйте вешалку).

Ослабьте оба винта на задней стороне устройства открывания дверного звонка.

Зачистите оба конца проводов реле: 1) примерно 1/8 дюйма со стороны реле и примерно ½ дюйма со стороны дверного звонка. Согните проволоку со стороны дверного звонка в виде полупетли, достаточно большой, чтобы ее можно было охватить задним винтом.

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

Шаг 10: прикрепите Raspberry Pi к SECO-LARM

Присоедините Raspberry Pi к SECO-LARM
Присоедините Raspberry Pi к SECO-LARM
Присоедините Raspberry Pi к SECO-LARM
Присоедините Raspberry Pi к SECO-LARM

Прежде чем я закончил код, мы с семьей были в отпуске, и я открыл свой браузер. Последний раз мой браузер видел устройство открывания гаражных ворот - страница обновилась и гаражные ворота открылись. Через несколько дней позвонил сосед и спросил, нужно ли открывать дверь гаража? К счастью, я смог закрыть его за 500 миль.

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

Это ссылка на оригинальную инструкцию по добавлению датчика. Однако, учитывая все, что уже выполнено, установку датчика можно значительно упростить и вместо использования python добавить пару строк кода в index.php.


Fatal error: Uncaught Error: Call to undefined function exec() in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code:518 Stack trace: #0 W:\www\langs\.php-gen-lang\v3-core\macros.php(127): eval() #1 W:\www\langs\.php-gen-lang\v3-core\index-global.php(231): Macros->macros_parse('<!DOCTYPE html>...') #2 W:\www\langs\howwhatproduce.com\ru.howwhatproduce.com\index.php(9): require_once('W:\\www\\langs\\.p...') #3 {main} thrown in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code on line 518