×

车库门监视器开源分享

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-16

凌流浪

分享资料个

描述

hackster.io 和其他 Maker 网站上有很多车库门监控项目。我想要一个可扩展的项目,可以在此基础上构建,用于未来的 IOT 项目。另外,我想要一个有据可查且得到良好支持的平台。Adafruit 为 Makers 提供的云服务adafruit.io符合要求。

此外,我的动力来自个人需要。我的好邻居经常在深夜打电话提醒我车库门是开着的;-)

这在很大程度上受到Todd Treece 为 Adafruit的Adafruit IFTTT Door Detector项目以及reddit 上提到的其他工作的启发和基础,并进行了一些代码调整和附加组件。

这篇文章以较长的形式出现,讨论“创客之旅”。

该项目与 Adafruit IFTTT Door Detector 的区别:

  • GarageDoorMon 不使用电池,由 5V 壁式适配器供电;您需要从门上连接一根长电线,并将 Feather Huzzah 放置在电源附近
  • 逻辑相反,当车库门打开时向 adafruit.io 发送“1”,关闭时发送“0”(SHUT)
  • 补充:树莓派零W运行系统服务来监控门的状态,显示在4位显示器上
  • 不需要 IFTTT!当然,您可以根据需要使用它,添加或替代。
  • pi 零 W 使用 MQTT 通过 python 客户端代码直接从 adafruit.io 订阅源订阅。

概述

Adafruit Feather Huzzah 通过磁性开关检查车库门是否打开/关闭,然后将当前状态发送到 adafruit.io 提要。在屋内,带有 4 位 alpha 显示屏的 Raspberry Pi Zero W 通过 MQTT 订阅源并显示当前状态。您还可以从 IFTTT 在手机上收到通知。

成本

有两个版本:

选项 1:大约 20 美元,构建一个 Adafruit Huzzah 状态检查器并使用 IFTTT 将通知发送到您的手机(免费,需要注册)

选项 2:约 40 美元(包括选项 1 成本),构建选项 1,并添加一个带有 Raspberry Pi 零 W 的 LED 状态显示器

困难

简单的。大约 2-3 小时,具体取决于选项。

过程

  • 如果您没有,请注册一个 adafruit.io 帐户;为车库门创建提要
  • 从 github 下载 GarageDoorMonitor.ino
  • 焊接 Huzzah 并个性化/上传草图GarageDoorMonitor.ino和 config.h
  • 用磁性开关连接车库门并测试进料是否正常工作
  • 设置 IFTTT 以监控提要
  • 下载最新的 Raspbian 并安装在 pi zero W 上
  • 在 pi 零 W 上,git clone GarageDoorMon 并安装其他软件(尤其是 Adafruit Python LED Backpack)

建造它!

选项1

使用 Adafruit 文章Using IFTTT with Adafruit.IO to Make an IOT Door Detector up 通过 Adafruit IO 设置部分。通过链接,这将引导您完成注册 adafruit.io 并启动项目。创建一个名为 GarageDoor 的提要。

 
 
 
 
poYBAGOYIMCABsLtAAo8NqrWPYc351.jpg
 
1 / 2安装在车库导轨上的磁性开关
 

硬件

Adafruit 项目安装在室内门框上,由电池供电。我的车库门框上有传感器,开关上有长电线,可将 Huzzah 定位在 5V 壁式电源附近。打开时将传感器安装在车库门上,传感器与其磁铁对齐

这是如何工作的!

远离磁铁时,磁性开关/传感器为 NO(“常开”)。当磁铁足够靠近时,开关将“闭合”。Adafruit Door Detector post 预计敞开的门将是罕见的事件如果门关闭,Adafruit Arduino 代码不会发出任何通知!

Adafruit 的代码

2020 年 9 月 2 日更新:

截至 2020 年 7 月,Adafruit 已更新其访问 adafruit.io的安全“指纹” 。此更新包含在Adafruit IO Arduino库中,由 Arduino IDE 的管理库部分提供。您至少需要安装 3.7.0 版。

下面讨论代码是如何按照文章中所写的那样工作的。我的代码不同,它反转了逻辑,因此低电平(连接到 GND/闭合开关)被发送到 Huzzah 引脚以打开门!

Huzzah 如何检测打开或关闭的门?魔法!

嗯,抵抗的魔力。磁性开关连接到 GND 和一个被显着电阻(10K 欧姆)“拉高”到 +V 的引脚。如果开关闭合(在有磁铁的情况下),则 GND 侧的电阻几乎为零,但引脚侧的电阻很高。使用阻力最小的路径,这将注册为“低”条件并且没有通知。

但!如果门打开,传感器被拉离磁铁,则 GND 侧的电阻几乎可以认为是“无限的”。由于引脚侧的电阻(与 +V 相关)为1 ,但小于无穷大,因此这记录为“高”状态door_open(并且只有 door_open)的代码运行,并且向 adafruit.io 提供了一个提要。

 
pYYBAGOYIMOAFH4CAAAR9JYA20w908.png
外部上拉接线,图片:Adafruit
 

有关更多信息,请参阅关于上拉/下拉电阻器的出色 Adafruit教程

我的构建存在问题 - 即使在代码中设置了上拉电阻,值仍然保持浮动。我在原型板上使用了一个由 10K 欧姆和 100 欧姆电阻组成的外部上拉电阻网络——修复了这个问题!Adafruit 代码还使用了一个小技巧来定期运行。所有功能代码都在 void setup 例程中 - 主循环没有代码通过连接到 Huzzah 上的 RST 引脚,设置例程根据SLEEP_LENGTH变量的值(以秒为单位)重置(默认为 3 秒)。每次运行重置时都会运行设置例程 - 无需循环代码!

我的代码 - 与 Adafruit这个车库监视器的区别:

  • 使用墙壁电源而不是电池运行 - 没有 Adafruit 版本中的电池充电检查代码
  • 从 void 循环连续运行,不按时间间隔重置
  • 当“状态”(OPEN/SHUT)改变时发送一个新的 feed 值

如果您有一个免费的 Adafruit 帐户,您应该监控您的喂食率 - 最多 10 次喂食,每分钟 30 次喂食。当您发送状态更改的提要时,提要速率要低得多。

为什么我在代码中更改了门逻辑?简单 - 打开时开关会更靠近电源,需要更少的电线来连接它。使用文章中的Arduino 代码部分设置和加载 Huzzah,但从 github 加载 Garage_Door_Monitor.ino 草图及其所需的 config.h 文件。不要忘记!为您的 adafruit.io 用户名和密钥更改config.h文件,并提供您的 wifi SSID 和密码。

将磁铁和传感器小心地放在车库门上。您希望磁铁和传感器在触发时水平对齐,相距约 6 毫米。将传感器放在门的固定部分,将磁铁放在移动门本身上。操作门时请注意不要有障碍物,以免磁铁脱落。按照 Adafruit 文章接线部分中的说明设置您的 Huzzah :

  • 针 13到门传感器的一侧
  • GND到门磁对面

我将母跳线焊接到长线上。要连接到 Huzzah,请使用公对母跳线 - 母对 Huzzah,公对长线。通过操作门并从网页监控您的 adafruit.io 提要来测试它

当 Huzzah 和 adafruit.io 一起工作时,按照说明将IFTTT 设置到 adafruit.io。Adafruit 文章发送了一封电子邮件。下图显示了如何向手机发送通知:

 
 
 
 
pYYBAGOYIMiAZ1CQAAB7hV8hBIE977.png
 
1 / 7IFTTT - 选择 IF 触发服务
 

选项 2

第 1 步:Raspbian Stretch Lite

在 Windows 上,创建一个名为 ssh 的空文件和一个名为 wpa_supplicant.conf 的文件,其内容如下所示(第二个框)。

对于 Linux/Mac:

sudo touch ssh   
sudo nano wpa_supplicant.conf

对于 Windows/Linux/Mac,输入并保存以下内容,将 ssid 和 psk 更改为路由器的 ssid 和密码:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev   
update_config=1   
country=US   
network={   
ssid="Your network SSID"   
psk="Your WPA/WPA2 security key"   
key_mgmt=WPA-PSK   
}

配置 Raspbian 后,无头运行(无显示器/键盘/鼠标) - 将 SD 卡插入您的 pi 并打开电源。等待几分钟让 pi 完全启动。如果您运行的是 Windows,请下载 putty 终端模拟器以使用 SSH 连接到 pi。您应该能够从路由器的网页中找到 IP 地址。并且,从 Mac/Linux 终端通过 SSH 登录:

ssh "192.168.0.xxx" -l pi

其中“192.168.0.xxx”=您的 pi 的 IP 地址(不带引号)。默认密码是覆盆子。确保在第一次登录时更改它。您还应该通过以下方式配置其他设置:sudo raspi-config

  • 网络选项/主机名(我将主机命名为 GarageMon)
  • 本地化选项
  • 高级选项 - 扩展文件系统

完成配置后,重启。当您重新登录时,更新软件包并设置 git:

sudo apt-get update
sudo apt-get upgrade # This step takes a long time!   
sudo apt-get install git-core   
git clone http://github.com/thisoldgeek/GarageDoorMon

克隆这个 github 存储库将在 /home/pi/GarageDoorMon 下创建一个新目录。此 GarageDoorMon 目录包含此项目所需的所有资产,包括设置脚本和代码。做:

sudo shutdown -h now

第 2 步:显示和系统服务

按照 Adafruit 上的说明焊接 4 位 AlphaNumeric 显示屏。Adafruit 在这里有一个接线图。关闭电源后,安装显示器的电线:

  • 将display +(电源)连接Raspberry Pi 3.3V 或 5V 电源(红线)。5V 更亮,但如果 I2C 总线上有其他设备,最好使用 3.3V
  • 显示器 -(接地)连接Raspberry Pi 接地(黑线)。
  • 显示器 D(数据/SDA)连接到Raspberry Pi SDA (橙色线)。
  • 显示器 C(时钟/SCL)连接到Raspberry Pi SCL (紫线)。
  • 如果有Vi2cIO引脚,也将其连接到 3.3V

备用电源。

从连接到树莓派零 W 的终端,运行以下命令:

  • 按照 Adafruit使用说明安装 14 段显示器的软件 - 向下滚动一点以找到示例脚本 (alphanum4_test.py) 以测试 14 段字母数字显示器下的显示器
git clone http://github.com/thisoldgeek/GarageDoorMon
cd ~/GarageDoorMon
  • 使用 pi 上的 nano 编辑器为您的 adafruit.io 用户名和密钥修改garage_mon.py;用 python3garage_mon.py 运行它,它应该显示 STRT
chmod +x garage_mon.py
sudo cp garage_mon_service.txt  /etc/systemd/system/gmon.service
sudo chmod 644 /etc/systemd/system/gmon.service 
sudo systemctl enable gmon

显示屏最初将显示 STRT,直到数据馈送发生变化。之后,稍有延迟,它应该会显示当前状态 - SHUT/OPEN。

更新:2019 年 12 月 15 日

在显示屏上添加了一个可选的蜂鸣器,当首次收到 OPEN 状态时会发出三声蜂鸣声。蜂鸣器脚本中有一个默认的“quiet_time”功能 - 在您设置的时间之间,蜂鸣器不会响起,目前在 21:00 和 09:00 之间。

新的 Python 脚本名为garage_mon_buzzer.py。下载这个脚本并像这样复制它:

cd ~/GarageDoorMon 
sudo cp garage_mon_buzzer.py garage_mon.py
# Add the library: 
sudo apt-get install python-rpi.gpio python3-rpi.gpio

记住!复制后更改garage_mon.py 中的用户名和AIO_Key。

使用有源压电蜂鸣器,连接母对母跳线:

  • +/正极(通常是较长的引脚)到 BCM 引脚 17
  • -/负(较短的引脚)到 GND
sudo systemctl restart gmon # Restart the service

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !