这可能就是你!点击此处提交我们的创客博客系列摘要。
背景
我简直无法在风扇持续对着我吹的情况下入睡。我的丈夫不吹风扇就无法入睡。最初,我认为我们永远无法找到一个折衷方案,因为吊扇的设计要么整晚开启,要么整晚关闭。我意识到,如果我能找到一种方法让我们的风扇在运行五分钟后关闭,然后在 20 分钟后再次开启,我们俩都能睡个好觉。因此,我用大约 30 美元的电子元件和两个 Python 脚本构建了一个可调节的间歇风扇控制器。
这个项目使用 Raspberry Pi Zero、一个低通滤波器和大约 20 厘米的电线来控制吊扇。此外,一个定制的 Python Flask 应用程序允许您设置风扇开启或关闭的时间长度。间歇风扇的优点在于,它有助于防止房间变得闷热,而又不会吹太多冷空气。
警告: 当通用输入/输出 (GPIO) 引脚从高电平快速切换到低电平时,会产生射频 (RF),意识到这一点可能会让您震惊。这些射频信号反过来可以用来为您的风扇供电,而无需使用其遥控器。请注意,在许多频率下发射信号是违法的。您必须使用低通滤波器(433MHz 低通滤波器将使您合法)。
设置
在 Raspberry Pi Zero 上运行的 Python Flask 应用程序将用于配置风扇开启/关闭的时间长度,并设置风扇的速度。Flask 是一个 Python Web 框架,使用户能够轻松开发设置最少的 Web 应用程序。
运行 Flask 应用程序就像在终端中输入 python app.py 一样简单。在这个 Web 应用程序中,按钮按下会触发 Raspberry Pi Zero 上的异步命令。此命令通过 rpiTX 以风扇的接收频率发送开关键控 (OOK) 信号,从而打开/关闭 GPIO 引脚 7。这种打开/关闭 GPIO 引脚的过程会生成射频信号。20 厘米的电线充当天线,因此信号可以到达风扇的接收器。
射频命令
OOK 信号以主频率传输。您必须弄清楚风扇的遥控器发射的频率,以及 OOK 信号是如何编码的。弄清楚遥控器使用什么频率的两种主要方法是测量或阅读手册。一种廉价的测量方法是使用 USB 电视调谐器,如 “用 15 美元的 USB 电视调谐器破解我的吊扇无线电信号” YouTube 视频中演示的那样。或者,参考 FCC 网站。所有发射器都必须报告它们使用的频率。我的使用 304MHz (FCC ID: KUJCE1000)—我测量了 304.2MHz,这足够接近。遥控器之间存在差异;我有三个 Minka Aire 遥控器,有些遥控器的工作频率高于或低于 FCC 网站上声明的频率。
要弄清楚射频信号是如何编码的,您可以使用 USB 电视调谐器(见下文)进行测量,或参考 River’s Educational Channel YouTube 视频。下表列出了 Minka Aire 风扇的 OOK 代码。
Minka Aire 风扇的 OOK 代码
动作
|
代码
|
灯:开
|
01010
|
灯:关
|
10010
|
风扇:低速
|
00100
|
风扇:中速
|
01000
|
风扇:高速
|
10000
|
风扇:关
|
10100
|
风扇:反转
|
00010
|
风扇唯一 ID
大多数遥控器背面、电池附近都有拨动开关。Minka Aire 有两组四位拨动开关(八位数字),用于设置其唯一 ID,其中向上 = 1,向下 = 0。
整合在一起
Raspberry Pi Zero 的软件配置
-
将 此存储库 下载到您的 Raspberry Pi Zero 上。
-
下载 rpiTX 并将其放置在 ./src 文件夹中。
-
配置 Raspberry Pi Zero 以激活其 GPIO 引脚。
- 将您的 Raspberry Pi Zero 连接到您的 Wi-Fi 网络。
- 要查找 IP 地址,请在 bash 终端中输入:hostname -I。
- 更新您的库
-
在 fan_controller.py 中的 FanRemote 类中设置风扇的唯一 ID。
硬件配置
-
将约 20 厘米的电线焊接到 433MHz 低通滤波器的一端。
-
将两条跳线焊接到滤波器的另一端:一条连接到数据线,另一条连接到地线。数据线连接到中心引脚。
-
将信号/数据线连接到 GPIO 引脚 7,并将地线连接到 Raspberry Pi Zero 的电气地线。
零件
运行 Flask 应用程序
Flask 应用程序有三个主要部分:app.py、index.html 和 fan.css。app.py 文件是 Python 脚本,用于运行 Flask 应用程序,并在用户按下 Web 应用程序中的按钮时做出响应。Web 应用程序由 index.html 和 fan.css 文件组成。fan.css 文件使应用程序看起来更漂亮,并模仿了 ESP32_IR Remote 存储库中的 css 文件。
要运行该应用程序,请转到 ./src 文件夹并在终端中输入
python3 app/app.py
这将在 Raspberry Pi Zero 的 IP 地址的 5000 端口上初始化一个 Flask 应用程序。我的地址是 https://192.168.2.80:5000。
Flask 应用程序将一个 fan 类导入到应用程序中。当用户按下应用程序中的按钮时,Flask 应用程序中的主方法会弄清楚如何响应,并向风扇发送异步命令。
警告: 再次强调,在许多频率下发射信号是违法的。您必须使用低通滤波器(433MHz 低通滤波器将使您合法)。
奖励材料:测量射频命令
使用 USB 电视调谐器和 Universal Radio Hacker (URH) 软件*,我能够捕获原始射频信号。该风扇使用 OOK,每个位都以 100 或 101 的形式发送:1 = 101,0 = 100。风扇期望接收 304MHz 的信号,其中前八位是风扇的 ID,后五位是风扇遥控器命令。
*注意:如果您确实想使用 USB 电视调谐器和 URH 软件,我建议创建一个 conda 环境并在其中安装 URH。我还建议在 Raspberry Pi Zero 上安装 miniconda,因为它有一个小型处理器。
通过记录每次按下风扇遥控器上的按钮时的信号,您可以分析每个信号。这将使您能够构建一个 OOK 代码表,例如上面的表格。请注意,不同的遥控器可能使用不同的频率和编码。
就这样!您可以使用 Raspberry Pi Zero、一些 Python 代码和一点电线创建自己的自定义遥控器。请注意,如果您是硬件和射频新手,可能会有一个陡峭的学习曲线。如果您第一次甚至第一百次都无法使项目正常工作,请不要担心;这些事情需要练习。
关于作者
Evelyn Boettcher 创立并领导 DiDacTex, LLC(一家小型女性拥有的企业)。她在电子光学和遥感领域拥有超过 20 年的经验,在电子、建模和算法开发方面拥有丰富的工作经验。她获得了马里兰大学物理学硕士学位和佛罗里达大学物理学学士学位。她曾是受人尊敬的同行评审期刊的主要作者,在国际和国内会议上展示研究成果,并获得了电子光学器件的专利(# 6,738,536 #; 6,944,372)。她在个人时间喜欢支持青少年的 STEM 活动。
关于创客博客系列
Anaconda 正在 每月博客系列 中扩大其最活跃和最受珍视的社区成员的声音。如果您是一位创客,并且一直在寻找机会讲述您的故事、详细阐述您最喜欢的项目、教育您的同行并建立您的个人品牌,请考虑提交摘要。有关更多详细信息并访问丰富的教育数据科学资源和讨论主题,请访问 Anaconda Nucleus。