使用 Python 创建间歇式风扇控制器

这可能是你!点击 这里 提交我们的创客博客系列摘要。


背景

我根本无法在风扇不停地吹着的情况下入睡。我丈夫却 _必须_ 才能入睡。最初,我认为我们永远无法找到一个两全其美的办法,因为吊扇的设计要么整晚开着,要么整晚关着。我意识到,如果我能找到一种方法,让风扇运行五分钟后关掉,然后在 20 分钟后再次打开,我们就能睡个好觉。因此,我用大约 30 美元的电子元件和两个 Python 脚本构建了一个可调节的间歇式风扇控制器。

该项目使用 Raspberry Pi Zero、低通滤波器和约 20 厘米的电线来控制吊扇。此外,自定义 Python Flask 应用程序允许您设置风扇打开或关闭的时间长度。间歇式风扇的优点是,它有助于防止房间变得闷热,而不会吹太多风让您感到寒冷。

(左) Raspberry Pi Zero 间歇式风扇控制器的 Flask 应用程序。(右) Raspberry Pi Zero 间歇式风扇控制器。

警告:您可能会感到惊讶地发现,当通用输入/输出 (GPIO) 引脚以非常快的速度从高电平切换到低电平时,会产生无线电频率 (RF)。这些 RF 信号反过来可以用来为您的风扇供电,_无需_ 使用其遥控器。请注意,在许多频率上传输是 _违法的_。您必须使用低通滤波器(433MHz 低通滤波器将确保您的行为合法)。

设置

在 Raspberry Pi Zero 上运行的 Python Flask 应用程序将用于配置风扇打开/关闭的时间长度并设置风扇的速度。 Flask 是一个 Python Web 框架,它使用户能够轻松地开发 Web 应用程序,并具有最少的设置。

运行 Flask 应用程序就像在终端中键入 python app.py 一样简单。在这个 Web 应用程序中,按钮按下会触发 Raspberry Pi Zero 上的异步命令。该命令通过 rpiTX 以风扇的接收频率发送开关键控 (OOK) 信号,该信号会打开/关闭 GPIO 引脚 7。这个打开/关闭 GPIO 引脚的过程会产生 RF 信号。20 厘米的电线充当天线,因此信号可以到达风扇的接收器。

无线电频率命令

OOK 信号以主频率传输。您必须找出风扇遥控器传输的频率以及 OOK 信号的编码方式。确定遥控器使用频率的两种主要方法是测量它或阅读手册。一种廉价的测量方法是使用 USB 电视调谐器,如“用 15 美元的 USB 电视调谐器破解我的吊扇无线电信号”YouTube 视频中所示。或者,参考 FCC 网站。所有发射机都必须报告它们使用的频率。我的使用 304MHz (FCC ID:KUJCE1000)——我测量了 304.2MHz,这已经足够接近了。遥控器之间存在差异;我有三个 Minka Aire 遥控器,有些在比 FCC 网站上说明的频率更高或更低。

Minka Aire 遥控器:背面

要找出 RF 信号的编码方式,您可以使用 USB 电视调谐器 (见下文) 进行测量或参考 River 的教育频道 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。
  • 更新您的库
    • python3 -m pip install RPi.GPIO

    • conda install -c anaconda flask

  • 在 fan_controller.py 中的 FanRemote 类中设置风扇的唯一 ID。

    • 这是两组四位 (二进制数字)。

硬件配置

  • 将约 20 厘米的电线焊接到 433MHz 低通滤波器的一端。

  • 将两个跳线焊接到滤波器的另一端:一个连接到数据线,另一个连接到地线。数据线连接到中心引脚。

  • 将信号/数据线连接到 GPIO 引脚 7,将地线连接到 Raspberry Pi Zero 的接地。

零件

  • 433MHz 低通滤波器 (5.50 美元)

  • 约 20 厘米的电线

  • Raspberry Pi Zero (约 25 美元)

  • SD 卡 (10 美元)

  • 可选 USB 电视调谐器 (约 30 美元)

运行 Flask 应用程序

Flask 应用程序有三个主要部分:app.py、index.html 和 fan.css。app.py 文件是运行 Flask 应用程序并响应用户在 Web 应用程序中按下按钮的 Python 脚本。Web 应用程序由 index.html 和 fan.css 文件组成。fan.css 文件使应用程序看起来更美观,它是根据 ESP32_IR 遥控器存储库 中的 css 文件建模的。

要运行应用程序,请转到 ./src 文件夹并在终端中键入

python3 app/app.py

这将在 Raspberry Pi Zero 的 IP 地址上的端口 5000 初始化 Flask 应用程序。我的在 https://192.168.2.80:5000 上。

Flask 应用程序将风扇类导入到应用程序中。当用户在应用程序中按下按钮时,Flask 应用程序中的主方法会确定如何响应并向风扇发送异步命令。

警告:再说一次,在许多频率上传输是 _违法的_。您必须使用低通滤波器(433MHz 低通滤波器将确保您的行为合法)。

附加资料:测量 RF 命令

(左) 带有 Raspberry Pi Zero 遥控器的官方遥控器。(右) 第一个信号来自按下遥控器上的按钮,第二个信号来自 Raspberry Pi Zero。“官方”遥控器重复信号导致宽度差异。

使用 USB 电视调谐器和 通用无线电黑客 (URH) 软件*,我能够捕获原始 RF 信号。风扇使用 OOK,每个比特都以 100 或 101 发送:1 = 101,0 = 100。风扇期望在 304MHz 处接收信号,其中前八位是风扇 ID,接下来的五位是风扇遥控器命令。

*注意:如果您想使用 USB 电视调谐器和 URH 软件,我建议创建一个 conda 环境并在其中安装 URH。我还建议在 Raspberry Pi Zero 上安装 miniconda,因为它有一个小的处理器。

通过在按下风扇遥控器上的每个按钮时记录信号,您就可以分析每个信号。这将使您能够构建一个类似于上面所示的 OOK 代码表。请注意,不同的遥控器可能使用不同的频率和编码。

RF 解释
RF 分析

就是这样!您可以使用 Raspberry Pi Zero、一些 Python 代码和一些电线创建您自己的自定义定义遥控器。请注意,如果您不熟悉硬件和 RF,那么学习曲线可能会很陡峭。如果第一次甚至一百次都无法让项目正常工作,也不要担心;这些都需要练习才能掌握。


关于作者

Evelyn Boettcher 创立并领导 DiDacTex, LLC(一家小型女性拥有的企业)。她拥有超过 20 年的电光学和遥感领域经验,在电子、建模和算法开发方面拥有工作经验。她获得了马里兰大学物理学硕士学位和佛罗里达大学物理学学士学位。她曾担任受人尊敬的同行评审期刊的首席作者,在国际和国家会议上发表研究成果,并获得了电光器件的专利(# 6,738,536 #; 6,944,372)。她在业余时间喜欢支持青少年 STEM 活动。

关于制造者博客系列

Anaconda 在每月博客系列中放大了一些最活跃和最受喜爱社区成员的声音。如果您是制造者,一直在寻找一个机会来讲述您的故事,详细说明您最喜欢的项目,教育您的同行,并建立您的个人品牌,请考虑提交摘要。有关更多详细信息并访问大量教育数据科学资源和讨论主题,请访问Anaconda Nucleus

与专家交谈

与我们的专家交谈,为您的 AI 之旅寻找解决方案。

与专家交谈