建立无线气象站是一次很棒的学习经历。完成此项目的构建后,您将更好地了解无线通信的工作原理、传感器的工作原理以及 Arduino 平台的强大功能。以这个项目为基础和获得的经验,将来您将能够轻松构建更复杂的项目。
气象站是一种使用许多不同传感器收集与天气和环境相关的数据的设备。我们可以测量很多东西,比如:
在我们将要建造的气象站中,我们将测量两个位置的温度和湿度并显示当前日期和时间。建立气象站非常容易。但是,制造商能否制造出具有彩色 TFT 显示屏和与商业设备相匹配的功能的设备?答案是肯定的!借助开源软件和硬件的力量,可以轻松构建这个令人印象深刻的气象站!
该项目由两部分组成:发射器和接收器。
发射器测量温度和湿度,并将数据无线发送到接收器。接收器测量温度和湿度,接收来自远程传感器的数据,并在大型彩色 TFT 显示屏上显示所有内容。
让我们建立这个项目!
构建此项目所需的部分如下:
该项目的成本约为40美元。如果您使用 Arduino Mega 而不是 Arduino Due,您可以将项目成本降低 5 美元。我选择使用 Arduino Due 作为接收器,因为它速度非常快,而且内存很大。随着我们为项目添加更多功能,这将在未来非常有用。
DHT22 是一种非常流行的温度和湿度传感器。它价格便宜,易于使用,并且规格声称具有良好的精度和准确性。
DHT 传感器由两部分组成:电容式湿度传感器和热敏电阻。里面还有一个芯片,做一些模数转换,输出带有温度和湿度的数字信号。使用任何微控制器都可以轻松读取数字信号。
DHT22的特点
与 Arduino 的连接非常简单。我们将带有 + 号的传感器引脚连接到 Arduino 的 5V 或 3.3V 输出。我们将带有 - 符号的传感器引脚连接到 GROUND。最后,我们将 OUT 引脚连接到 Arduino 的任何数字引脚。
为了在 Arduino 中使用 DHT22 传感器,我们必须使用 DHT 库。
https://github.com/adafruit/DHT-sensor-library
DS3231 实时时钟模块顾名思义就是一个实时时钟。使用它的电池,它可以保持多年的时间,因为它具有最低的功耗。
DS3231 是一款低成本、极其精确的 I2C 实时时钟 (RTC),具有集成的温度补偿晶体振荡器 (TCXO) 和晶体。该设备包含电池输入,并在设备的主电源中断时保持准确的计时。晶体谐振器的集成提高了设备的长期精度,并减少了生产线中的零件数量。
RTC 维护秒、分钟、小时、星期、日期、月份和年份信息。对于少于 31 天的月份,月末的日期会自动调整,包括闰年的更正。时钟以 24 小时制或 12 小时制运行,带有 AM/PM 指示器。提供了两个可编程的时间警报和一个可编程的方波输出。地址和数据通过 I2C 双向总线串行传输。
模组成本极低;它的成本约为 2 美元,包括电池!我们将使用它来保持我们的气象站项目的时间。
NRF24L01 模块是一种低成本的双向收发器模块。它将帮助您了解它的工作方式。
让我们首先构建发射器。
就是这样,您的发射器已准备就绪。现在让我们继续讨论接收器。
为了构建接收器,我们需要以下部分:
首先,我们弯曲 7 个接头引脚并将它们放置在一些 Arduino Due 引脚上。我们需要一个接地,一个接 3.3V。我们需要两个 I2C 引脚。我们需要从 6 到 8 的剩余 3 个数字引脚。我们还必须将三根电线焊接到 Arduino Due 引脚的硬件 SPI 引脚。我们需要 MOSI、MISO 和 SCK。仔细检查图表。我们将电线连接到插头引脚,我们准备好连接显示器。
连接 DS3231
连接 DHT22 传感器
连接 NRF24L01 模块
首先,我们必须下载 RF24 库,以使我们在使用 NRF24L01 无线模块时更轻松。我们还需要 DHT22 传感器的 DHT 库。
让我们先看看发射器代码。它发出一个简单的数据结构,其中包含两个浮点数,即温度和湿度。
为了建立通信链接,我们必须在两个模块之间创建一个“管道”。该管道需要有一个地址。两个模块都必须从同一个管道中写入和读取才能进行通信。这是我们在代码中定义的第一件事。我们将管道地址设置为“0”。接下来,我们定义要与其他模块通信的通道。NRF24L01 芯片支持 126 个不同的通道。两个模块需要使用相同的通道才能相互通信。在此示例中,我使用通道 115。接下来,我定义我要使用模块提供的最大发射功率。它使用更多功率,但扩展了通信范围。接下来我们定义传输的数据速率。我将其设置为 250Kbs,这是可能的最低数据速率,以实现更好的范围。
在循环函数中,我们从传感器读取温度和湿度值,将数据保存到数据结构中,然后通过将数据结构写入管道来发送数据结构。而已。您可以在本教程中找到附加的代码。
现在让我们看看接收器代码。我们需要 4 个库。首先,我们必须从此链接下载用于显示的库:
显示库:https ://github.com/Bodmer/TFT_HX8357_Due
下载库后,您必须打开 User_Setup.h 文件。注释第 13 行并取消注释第 14 行,因为我们的显示器使用的是 HX8357C 驱动程序。现在我们可以继续使用其他 3 个库。我们需要一个库用于实时时钟,一个用于 DHT22 传感器,最后一个用于无线模块。
让我们看一下代码。如果尚未设置,我们要做的第一件事就是将时间设置到实时时钟模块。为了做到这一点,在setRTCTime
函数中输入当前日期和时间,取消注释第setRTCTime
54 行的函数调用并将程序上传到 Arduino。现在时间已定。但是我们必须再次注释setRTCTime
该函数的调用并再次将程序上传到Arduino。
接收器的代码工作如下。在设置函数中,我们初始化所有传感器和模块并打印用户界面。然后,在循环功能中,我们不断检查新的无线数据。如果有新数据,我们会将这些数据保存在变量中并在显示器上打印出来。我们每分钟读取一次温度和湿度,并且仅在值发生变化时才更新显示。通过这种方式,我们可以进一步减少显示屏的闪烁!我还准备了一个以华氏度显示温度的代码版本。您可以在本教程中找到所附代码的两个版本。
启动所有设备并查看一切是否按预期工作的最后一步。谢谢参观!
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !