我们都去过那里。当您意识到没有卫生纸时,您正在浴室里进行一些” 业务”。您可以告诉家人或室友注意角落里的备用纸卷,但是您知道人们会忘记这一点,这增加了您可能没有备用纸箱的可能性。幸运的是,有一种方法可以使用树莓派防止卫生纸中断,当您的浴室里没有多余的备件时,它会提醒您。
在本文中,我们将向您展示如何构建一个使用树莓派 Zero W 的智能厕纸架和一个超声波传感器,该传感器可以测量厕纸架中的厕纸水平,如果纸箱中的厕纸超过 30 分钟。您可以自定义电子邮件以指定洗手间并建议行动计划。
树莓派厕纸提醒器如何工作?
超声波传感器每 30 分钟检查一次厕纸的高度。如果 2 张支票都过去了,并且支座为空,则树莓派将向您发送电子邮件,要求您重新装满支座或购买更多卫生纸。
树莓派将继续每小时每小时发送一次电子邮件,直到重新填充持有人为止。每封电子邮件都将注明厕纸架何时为空以及它发送了多少次提醒。座架重新装满后,所有设置都会重置,树莓派将停止发送提醒电子邮件。该代码还提供了” 请勿打扰” 选项,以免在晚上发送电子邮件。默认设置为晚上 10 点至上午 8 点,并且还可以自定义。
您需要什么:
- 树莓派 Zero W 带有预焊接的 GPIO 接头或您可以自己焊接。我们可以使用任何模型,但是树莓派 Zero W 体积小且功耗低。
- 电源 / 键盘 / 鼠标 / 显示器 / HDMI 电缆 (适用于树莓派)
- 超声波传感器 HC-SR04
- 小面包板
- 跨接线组 (M 对 F , M 对 M 和 F 对 F)
- 2 个电阻 (330 欧姆和 470 欧姆)
- 5 英寸 x 5 英寸纸板
- 小磁铁
- 强力胶
- 树莓派保护壳
- 超声波传感器外壳
- 厕纸架
第 1 部分:卫生纸提醒器的硬件组装
在此步骤中,我们将把树莓派,超声波传感器和小面包板连接到厕纸架的顶部 (通常将厕纸放在此处)。超声波传感器应朝下,垂直于下面的卫生纸卷; Pi 和面包板应均匀地放在顶部。我们将在本节中将组件连接在一起。在此步骤的最后,您应该准备好为 Pi 通电。
1 将用树莓派 OS 格式化的 microSD 卡插入树莓派。
2 将 2 个小磁铁用胶水粘在外壳的背面,以用于超声波传感器。
3 将 4 条公对公电线连接到超声波传感器的每个插脚。将超声波传感器插入外壳。
4 将带有外壳的超声波传感器 ** 安装到厕纸架 ** 上,使其直接面对顶部厕纸卷。
5 将超声波传感器的 4 根电线穿过厕纸架,然后依次插入面包板。
6 将面包板和树莓派连接到厕纸架的顶部。应该将 Pi 封装起来,以使电路板不会直接接触金属支架并造成短路。我们将 2 个小磁铁粘贴到外壳上,以将树莓派固定在适当的位置。面包板应预先配备粘贴在支架上的背胶。
7 将超声波传感器的 VCC 引脚连接到树莓派的 2 引脚 ** 以获得 5V 电源。
8 将 TRIG 连接到树莓派的 GPIO 18。
9 将 ECHO 连接至 330 欧姆电阻器。
10 将电阻的另一端连接到树莓派的 GPIO 24。
11 将一个 470 欧姆的电阻从 330 欧姆的电阻连接到 GND 轨。
12 将 GNC 引脚从传感器连接到 GND 轨。
13 从硬纸板上切出一个圆圈,其宽度与您的厕纸宽度相同 (直径约 5 英寸)。您将在下一步中使用它。 或者,您可以 3D 打印此 STL 文件。
第 2 部分:用于厕纸提醒的超声波传感器
在本节中,我们将在树莓派厕纸提醒器上设置超声波传感器,以测量距支架底座的距离,以确定是否为空。注意:超声波传感器通过发出听不见的声音来工作,并确定从返回声波起的距离。厕纸吸收超声波,因此,我们将使用上一步中的纸板来确定触发电子邮件的距离。
1 启动您的树莓派。如果您还没有 microSD 卡,请参阅我们的文章如何首次设置树莓派或如何进行无头树莓派安装。
2 启动您的树莓派。
3 打开终端。可以按 CTRL + T 。
4 克隆此存储库:
git clone https://github.com/carolinedunn/TP_Reminder
5 导航到文件管理器中的 TP_Reminder 文件夹。
6 在 Geany 或 Thonny 中打开超声。
7 通过点击 Geany 中的纸飞机图标或 Thonny 中的 PLAY 按钮来运行超声.py。
8 将厕纸卷移入和移出支架,将圆形切口保持在顶部。在添加和 / 或更换卫生纸卷时,您应该看到距离变化。
9 从支架上取出所有厕纸,并将圆形切口留在支架底部。
10 请注意屏幕上的距离读数。注意步骤 4 的距离 (如有必要,记下)。
11 按 Ctrl-C 退出程序。
使用我们的卫生纸架,全 TP 支架的读数约为 1 英寸,而空 TP 支架的读数 > 18 英寸。您的结果可能会有所不同,并且还可能决定在留一卷时使用测量编号因此,您会收到一卷提示,而不是持有人为空时。
图 1 中的 2
图 2 中的 2
第 3 部分:厕纸提醒的电子邮件自动化
在此步骤中,我们将设置一个自动电子邮件服务,并通过树莓派厕纸提醒发送自己的测试电子邮件。此步骤需要一个邮件服务帐户。为了简单起见,我选择了 Mailgun;欢迎您使用您选择的电子邮件服务来修改代码。 Mailgun 需要使用有效的信用卡来创建帐户。对于此项目,我使用 Mailgun 中的默认沙箱域。
1 在浏览器中导航至 mailgun.com。
2 创建和 / 或登录到您的 Mailgun 帐户。 导航到您的沙盒域,然后单击 API ,然后单击 Python 以显示您的 API 凭据。
3 从文件管理器的 TP_Reminder 目录中的 Thonny 或 Geany 中打开 send-email-test.py。
4 第 9 行,”https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages“替换”YOUR_DOMAIN_NAME“
5 在第 10 行,用 Mailgun 中的 API 密钥替换”YOUR_API_KEY”。
6 在第 12 行,从您的 Mailgun 帐户添加您的电子邮件地址。
7 运行代码 send-email-test.py。如果您收到状态码 200 和” 消息:已排队” 消息,请检查您的电子邮件。
成功完成此步骤后,您应该收到以下电子邮件。该电子邮件可能已发送到您的垃圾邮件文件夹。
如果您想通过电子邮件发送除用于设置 Mailgun 帐户的电子邮件地址之外的其他电子邮件地址,则可以在 Mailgun 中的” 授权收件人” 下输入该电子邮件地址。不要忘记在收件箱中验证您的其他电子邮件地址。
第 4 部分:厕纸水位通知
在本部分中,我们将结合第 2 部分中的超声波传感器记录的距离和第 3 部分中的电子邮件发送练习,并设置树莓派在启动时运行 Python 代码。
1 从文件管理器的 TP_Reminder 目录中的 Thonny 或 Geany 中打开 TPLevel.py。
2 与第 3 部分中一样,在第 18 、 19 和 21 行输入您的凭据。
3 将您的 emptyDist (第 9 行) 设置为从第 2 部分减去 2 英寸的尺寸。例如,如果您从第 2 部分开始的空厕纸距离为 19 ,则将 emptyDist = 17 。该代码检查当前距离是否大于 emptyDist。如果您想要更高级的警告,请向左滚动一圈。
4 运行 TPLevel.py,您应该看到出现 1 个距离读数。注意屏幕上打印了一个距离,然后什么都没发生?没错,该代码仅每 30 分钟检查一次距离,并且仅在连续 2 次检查后如果持有人为空时才发送电子邮件。如果您让代码保持运行状态 (并且您的持有人为空),则 30 分钟后您应该会收到一封电子邮件。按 ** Ctrl-X ** 停止代码。
5 为了加快测试速度,请对第 10 行进行注释 (通过在行的开头添加 #) 并取消对第 11 行的注释 (通过在 intervalTime ** 之前删除 #)。这将每 5 秒检查一次音量。运行更新的代码。
6 使用 5 英寸厚纸板测试卫生纸水平的各种情况。请注意,如果您在晚上 10 点至早上 8 点之间从事此项目,则默认代码设置为在这些时间段内不发送电子邮件。您可能需要在第 12 和 13 行上调整”endHour = 22” 或”startHour = 8”。 22 表示 24 小时军事时间,也就是晚上 10 点。
测试方案:
a. 充满厕纸架 10 秒钟。没有电子邮件。
b. 取出一些厕纸,但保留 1 卷。没有电子邮件 (除非您将级别更改为一卷距离)
C. 取出所有厕纸,并将纸板放在底部。在相隔五秒钟的两次检查之后,您应该收到第一封电子邮件。再过 10 秒钟后,您应该会收到第二封电子邮件。要停止电子邮件,请转到下一种情况。
d. 添加 2 卷厕纸,并将纸板放在顶部。等待 10 秒钟。电子邮件应停止。
e. 取出厕纸。电子邮件应该重新开始。
7 调整超声波传感器的位置,以最准确地测量厕纸的高度。会有一些” 抖动”,可能会产生一些不准确的测量值,但这应该可以解决。例如,如果传感器离支架的侧面太近,则距离读数将反映侧面,而不是卫生纸高度。
8 按 Ctrl-X 停止代码。
9 此时,您可以更新代码以适合您的特定需求。例如,您可以在第 22 和 23 行中更新电子邮件的主题或正文。
10 通过撤消本节第 5 步中的工作,将间隔时间调整回 30 分钟。注释掉第 11 行和取消注释第 10 行。
11 保存您的工作。
接下来,我们要设置 TPLevel.py 在启动时运行。
12 在终端中打开 /home/pi/.bashrc 进行编辑。
sudo Nano /home/pi/.bashrc
13 在.bashrc 的底部输入以下文本并保存 (按 CTRL + X)。
python /home/pi/TP_Reminder/TPLevel.py
按 Ctrl-X 退出并按 Y 保存。
重启您的 Pi 。
Pi 重启后,它将每次自动运行 TPLevel.py python 脚本。