Arduino 无线气象站
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
关于这个项目
图> 图> 图>
构建无线气象站是一次很棒的学习经历。完成此项目的构建后,您将更好地了解无线通信的工作原理、传感器的工作原理以及 Arduino 平台的强大功能。以本项目为基础,积累经验,以后可以轻松构建更复杂的项目。
气象站是一种使用许多不同传感器收集与天气和环境相关的数据的设备。我们可以衡量很多事情,例如:
- 温度
- 湿度
- 风
- 气压
- 紫外线指数
- 下雨
在我们将要建造的气象站中,我们将测量两个位置的温度和湿度并显示当前日期和时间。建造气象站极其容易。但是,制造商能否制造出具有与商业设备相匹配的彩色 TFT 显示屏和功能的设备?答案是肯定的!借助开源软件和硬件的力量,您可以轻松构建这个令人印象深刻的气象站!
该项目由发射器和接收器两部分组成。
发射器 测量温度和湿度,并将数据无线发送到接收器。 接收器 测量温度和湿度,接收来自远程传感器的数据,并在大彩色TFT显示屏上显示所有内容。
让我们来构建这个项目!
第 1 步:获取所有零件
构建此项目所需的部分如下:
- Arduino Due ▶ http://educ8s.tv/part/ArduinoDue
- Arduino Mega ▶ http://educ8s.tv/part/ArduinoMega
- Arduino Nano ▶ http://educ8s.tv/part/ArduinoNano
- 3.2" TFT 显示屏 ▶ http://educ8s.tv/part/32TFT
- DHT22 ▶ http://educ8s.tv/part/DHT22
- NRF24L01 ▶ http://educ8s.tv/part/NRF24L01
- DS3231 RTC ▶ http://educ8s.tv/part/DS3231
- 面包板 ▶ http://educ8s.tv/part/SmallBreadboard
- 电线 ▶ http://edu8s.tv/part/Wires
- 标题引脚 ▶ http://educ8s.tv/part/HeaderPins
- 小米移动电源▶ http://educ8s.tv/part/Powerbank
该项目的成本约为 40 美元。 如果您使用 Arduino Mega 而不是 Arduino Due,您可以将项目成本降低 5 美元。我选择使用 Arduino Due 作为接收器,因为它速度非常快并且有很多内存。随着我们向项目添加更多功能,这将在未来非常有用。
第 2 步:温度和湿度传感器 - DHT22
DHT22 是一种非常受欢迎的温度和湿度传感器。价格便宜,使用方便,说明书要求精密度和准确度好。
DHT 传感器由两部分组成:电容式湿度传感器和热敏电阻。内部还有一个芯片,可以进行一些模数转换,并输出带有温度和湿度的数字信号。使用任何微控制器都可以轻松读取数字信号。
DHT22 的特性
- 低成本
- 3 至 5V 电源和 I/O
- 转换过程中使用的最大电流为 2.5mA
- 0-100% 湿度读数,精度为 2-5%
- -40 至 125°C 温度读数 ±0.5°C 精度
- 慢
与 Arduino 的连接非常简单。我们将带有 + 符号的传感器引脚连接到 Arduino 的 5V 或 3.3V 输出。我们将带有 - 符号的传感器引脚连接到 GROUND。最后,我们将 OUT 引脚连接到 Arduino 的任何数字引脚。
为了在Arduino上使用DHT22传感器,我们必须使用DHT库。
https://github.com/adafruit/DHT-sensor-library
第 3 步:DS3231 实时时钟模块
DS3231 实时时钟模块顾名思义就是一个实时时钟。使用它的电池,它可以保持数年的时间,因为它的功耗最小。
模块成本极低;包括电池在内,它的成本约为 2 美元!我们将使用它来在我们的气象站项目中保持时间。
第 4 步:NRF24L01+:无线模块 图>
NRF24L01 模块是一种低成本的双向收发器模块。它的成本不到3美元!它工作在2.4GHz频段,可以达到2Mbits的数据速率!是不是令人印象深刻?它使用 SPI 接口来与 Arduino 通信,因此使用起来非常容易。我们必须连接模块的 8 个引脚中的 7 个才能使其与 Arduino 配合使用。
不幸的是,我们无法将模块插入面包板,因此我们将使用公对母线将模块连接到 Arduino。模块的引脚编号 1 为 GND。您必须将其连接到 Arduino Ground。下一个引脚是 Vcc。您必须将其连接到 Arduino Uno 的 3.3V 输出。当心!请勿将其连接到 5V,否则会损坏模块!第三个引脚名为 CE,您可以将其连接到您喜欢的任何数字引脚。在这个例子中,我将把它连接到数字引脚 7。引脚 4 是 CS,你也可以连接到任何数字引脚。我将连接到数字引脚 8。下一个引脚是 SCK,它连接到 Arduino Uno 的数字引脚 13。下一个引脚是 MOSI,它连接到数字引脚 11,而 MISO 中的最后一个引脚连接到数字引脚 12。就是这样!
为了使用方便,Arduino的模块我们必须使用以下库:https://github.com/TMRh20/RF24
如果您到目前为止还没有使用过 NRF24L01+ 模块,请查看所附的视频,以通过构建一个简单的项目来了解如何使用它。它将帮助您了解它的工作方式。
第 5 步:构建传送器 图> 图>
让我们首先构建发射器。这很简单。
对于我们使用的发射器:
- Arduino Nano
- 一个 DHT22 传感器
- NRF24L01+ 无线模块
- 面包板
- 一些电线
我们将传感器的输出引脚连接到 Arduino Nano 的数字引脚 4。我们连接接地和 Vcc,我们准备好了。我们现在要做的就是连接NRF24L01无线模块。
请使用第三张图片中显示的别针连接它。有关更多详细信息,请观看我在上一步中附加的详细视频。
就是这样,您的发射器已准备就绪。现在让我们转到接收器。
第 6 步:构建接收器 图> 图> 图> 图> 图>
为了构建接收器,我们需要以下部分:
- Arduino Due 或 Mega
- DS3231 实时时钟模块
- DHT22 温湿度传感器
- NRF24L01+ 无线模块
- 3.2" 彩色 TFT 显示屏
- 面包板
- 7 个头针
- 一些电线
首先,我们弯曲 7 个插头引脚,并将它们放置在一些 Arduino Due 引脚上。我们需要一个接地,一个接 3.3V。我们需要两个 I2C 引脚。我们需要从 6 到 8 的剩余 3 个数字引脚。我们还必须将三根电线焊接到 Arduino Due 引脚的硬件 SPI 引脚上。我们需要 MOSI、MISO 和 SCK。仔细检查图表。我们将电线连接到插头引脚,然后我们就可以安装显示器了。
连接 DS3231
- Arduino 3.3V 输出上的 VCC 引脚
- GND 引脚连接到 Arduino 的 GND 和
- SDA(串行数据线)引脚连接到 Arduino 的 SDA 引脚和
- SCL(串行时钟线)引脚连接到 Arduino 的 SCL 引脚
连接 DHT22 传感器
- Arduino 3.3V 输出上的 VCC 引脚
- GND 引脚连接到 Arduino 的 GND 和
- 输出引脚到 Arduino 的数字引脚 8
连接 NRF24L01 模块
- GND 引脚连接到 Arduino 的 GND
- VCC 引脚连接到 Arduino 3.3V
- Arduino 数字引脚 6 的第 3 个引脚
- Arduino 数字引脚 7 的第 4 个引脚
- 我们焊接的第 5 个引脚到 SCK 引脚
- 我们焊接的第 6 个引脚到 MOSI 引脚
- 我们焊接的第 7 个引脚到 MISO 引脚
第 7 步:发射器代码
首先,我们必须下载RF24库,以便我们在使用NRF24L01无线模块时更轻松。我们还需要 DHT22 传感器的 DHT 库。
- DHT22 库:https://github.com/adafruit/DHT-sensor-library
我们先来看看 Transmitter 代码。它发出一个简单的数据结构,其中包含两个浮点数,温度和湿度。
为了建立通信链接,我们必须在两个模块之间创建一个“管道”。该管道需要有一个地址。两个模块都必须从同一个管道中写入和读取才能进行通信。这是我们在代码中定义的第一件事。我们将管道地址设置为“0”。接下来,我们定义要与其他模块通信的通道。 NRF24L01 芯片支持 126 个不同的通道。两个模块需要使用相同的通道才能相互通信。在本例中,我使用的是 115 通道。接下来,我定义我要使用模块提供的最大发射功率。它使用更多功率,但扩展了通信范围。接下来我们定义传输的数据速率。我将它设置为 250Kbs,这是尽可能低的数据速率,以实现更好的范围。下一步是打开管道以便稍后写入。
在循环函数中,我们从传感器读取温度和湿度值,将该数据保存到数据结构中,然后通过将数据结构写入管道来发送数据结构。而已。您可以在本教程中找到随附的代码。
FU361QHIQFCEYSE.ino
第 8 步:接收方代码 图>
现在让我们看看接收器代码。我们需要 4 个库。首先,我们必须从此链接下载用于显示的库:
显示库:https://github.com/Bodmer/TFT_HX8357_Due
下载库后,您必须打开 User_Setup.h 文件。注释第 13 行并取消注释第 14 行,因为我们的显示器使用的是 HX8357C 驱动程序。现在我们可以继续使用其他 3 个库。我们需要一个实时时钟库,一个用于DHT22传感器,最后一个用于无线模块。
- NRF24L01:https://github.com/TMRh20/RF24
- DHT22:https://github.com/adafruit/DHT-sensor-library
- DS3231:https://github.com/SodaqMoja/Sodaq_DS3231
我们来看一下代码。如果还没有设置,我们首先要做的就是给实时时钟模块设置时间。为此,请在 setRTCTime
中输入当前日期和时间 函数,取消注释 setRTCTime
调用第 54 行的函数并将程序上传到 Arduino。现在时间已经确定。但是我们必须注释 setRTCTime
再次调用该函数并再次将程序上传到 Arduino。
接收器的代码如下工作。在设置函数中,我们初始化所有传感器和模块并打印用户界面。然后,在循环函数中,我们不断检查新的无线数据。如果有新数据,我们将这些数据保存在变量中并将它们打印在显示器上。我们每分钟读取一次温度和湿度,只有在数值发生变化时才更新显示。通过这种方式,我们可以进一步减少显示器的闪烁!我还准备了一个以华氏度显示温度的代码版本。您可以在本教程中找到两个版本的代码。
F053BTXIQFCEZ09.ino FNV3X4LIQFCEZ0C.ino
第 9 步:测试项目 图>
启动一切并查看一切是否按预期工作的最后一步。如果是,则在显示屏顶部显示当前日期和时间。在显示屏底部,您可以看到来自远程和本地传感器的温度和湿度。
如果没有显示遥感器的数据 , 将发射器移近 - 它可能超出范围。如果问题仍然存在,请再次检查所有连接 - 那里一定有问题。
如您所见,该项目很好地展示了开源硬件和软件的功能。在几个小时内,您就可以构建出如此令人印象深刻的项目!当然,这只是一个开始。我们可以为项目添加更多功能。我很快就会添加一个按钮,这样我们就可以显示图形,并有不同的模式。我们还可以添加更多传感器、数据记录、互联网连接等。我们正在使用 Arduino Due,所以我们有足够的内存来实现更多的东西。我很想听听你对这个项目的看法。你希望看到它如何发展?请在下面的评论部分发表您的意见或想法!
如果您想了解更多详情,请观看介绍中的 YouTube 视频或访问我的网站。感谢观看!
代码
Github
https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-libraryGithub
https://github.com/TMRh20/RF24https://github.com/TMRh20/RF24Github
http://DISPLAY:%20https://github.com/Bodmer/TFT_HX8357_Duehttp://DISPLAY:%20https://github.com/Bodmer/TFT_HX8357_DueGithub
https://github.com/SodaqMoja/Sodaq_DS3231https://github.com/SodaqMoja/Sodaq_DS3231制造工艺