当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]这里有一个非常实用的功能:一个简易的室内温度与湿度测量系统,通过将AHT10传感器连接到Arduino Nano,并利用SSD1306显示屏来显示AHT10传感器采集到的温度数据。

这里有一个非常实用的功能:一个简易的室内温度与湿度测量系统,通过将AHT10传感器连接到Arduino Nano,并利用SSD1306显示屏来显示AHT10传感器采集到的温度数据。

整个系统最初是作为未来房间温度计的原型设计,后续将基于AVR微控制器,使用Attiny、Atmega或SAMD21等微控制器,结合AHT10传感器和SSD1306显示屏实现更高级的版本。

开展这个项目的目的在于实时掌握自己所在房间的温度情况。由于我目前居住在德里,夏季气温可能骤然升高,因此持续监测周围环境的热状况至关重要。

本文将介绍如何通过几个简单步骤完成这个简易项目。我们开始吧。

所需材料

这些是本次建造所使用的材料

•Arduino Nano

•AHT10 传感器

•SSD1306 显示屏

•面包板

•跳线

•移动电源

AHT10 温湿度传感器

AHT10 温湿度传感器模块是一款紧凑且高精度的传感器,适用于多种应用场景中的温度和湿度测量。该模块集成了一颗高性能的 AHT10 传感器芯片,采用电容式传感元件来检测温度和湿度的变化。

它可提供可靠且精确的测量结果,温度测量精度为 ±0.3°C,湿度测量精度为 ±2% RH。

AHT10 模块工作电压范围为 1.6V 至 6V,若使用外部 5V 电源同时为该传感器、SSD1306 显示屏和 Arduino 板供电,则非常合适。

通过标准 I2C 接口与主机设备通信,便于轻松集成和数据读取。由于功耗低、响应速度快,AHT10 温湿度传感器模块是环境监测、气象站、暖通空调系统及工业自动化等应用的理想选择。

基础设置

温度湿度计的搭建中,我们使用Arduino Nano作为主控单元,AHT10作为传感器,并搭配SSD1306 I2C OLED显示屏,用于显示从AHT10传感器获取的温度读数。

此设置为临时性方案,因此我们使用面包板完成了该项目。

接线组装

•该设置非常简单:我们将显示屏和温度传感器的VCC分别连接至Arduino的5V电源;

•温度传感器和显示屏的GND连接至Arduino Nano的GND;

•温度传感器与显示屏的SCL相连,再连接至Nano的A5引脚;

•温度传感器与显示屏的SDA相连,再连接至Nano的A4引脚。

•我们使用跳线将所有部件连接起来,按照接线图完成布线后,设备即可正常工作。

所需代码与库

该代码使用 AHT10 库从 AHT10 传感器读取温度和湿度值,并将数据显示在 SSD1306 OLED 显示屏上。

让我们逐步分析代码:

•代码包含了 AHTxx 传感器所需的库(AHTxx.h)、OLED 显示屏所需的库(Adafruit_SSD1306.h 和 Adafruit_GFX.h),以及用于 I2C 通信的 Wire 库。

•代码定义了 OLED 显示屏的宽度、高度和 I2C 地址常量。

•创建了一个名为 "display" 的 Adafruit_SSD1306 类实例,指定其宽度和高度。

•声明了一个浮点型变量“ahtValue”用于存储温度和湿度值。

•创建了一个名为“aht10”的AHTxx类实例,指定了I2C地址和传感器类型。

在setup()函数中:

•禁用WiFi相关配置(适用于ESP8266)。

•初始化OLED显示屏。

•启动串口通信。

使用begin()函数初始化AHT10传感器,等待传感器连接并加载校准系数完成。

在loop()函数中:

示例1:通过调用readTemperature()函数进行温度测量,该函数返回摄氏度数值,并将其存储在“ahtValue”中。

清除OLED显示屏内容,并使用display库函数将温度值显示在屏幕上。

如果温度值有效(不等于AHTXX_ERROR),则在OLED显示屏上显示;否则调用printStatus()函数打印温度命令状态,并根据需要执行软重置。

在温度和湿度测量之间添加2000毫秒的延时。

通过调用 readHumidity() 函数进行湿度测量,该函数返回相对湿度值(以百分比表示),结果存储在 "ahtValue" 中。

OLED 显示屏被清空,然后使用显示库函数将湿度值打印到屏幕上。

如果湿度值有效,则在 OLED 显示屏上显示;否则调用 printStatus() 函数,打印湿度命令的状态。

在进入 DEMO 2 之前,先添加 2000 毫秒的延迟。

DEMO 2:再次使用 readTemperature() 函数进行温度测量,结果存储在 "ahtValue" 中。

如果温度值有效,则在串口监视器上打印,并附带精度范围。

使用 readHumidity() 函数进行湿度测量,同时指定 AHTXX_USE_READ_DATA。这会重用温度测量期间读取的 6 字节数据,从而加快执行速度。

如果湿度值有效,则在串口监视器上打印,并附带精度范围。

在循环开始前,先添加 10000 毫秒的延迟。

在 loop() 函数中:

演示1:通过调用readTemperature()函数进行温度测量,该函数返回摄氏度数值,结果存储在“ahtValue”中。

清除OLED显示屏,并使用显示库函数将温度值打印到屏幕上。

如果温度值有效(不等于AHTXX_ERROR),则在OLED显示屏上显示;否则调用printStatus()函数,打印温度命令的状态,并根据需要执行软重置。

在温度和湿度测量之间添加2000毫秒的延迟。

通过调用readHumidity()函数进行湿度测量,该函数返回相对湿度百分比值,结果存储在“ahtValue”中。

清除OLED显示屏,并使用显示库函数将湿度值打印到屏幕上。

如果湿度值有效,则在OLED显示屏上显示;否则调用printStatus()函数,打印湿度命令的状态。

在进入演示2之前,先添加2000毫秒的延迟。

示例2:再次使用readTemperature()函数进行温度测量,结果存储在"ahtValue"中。

如果温度值有效,则会打印到串行监视器上,并附带精度范围。

湿度测量通过调用 readHumidity() 函数进行,函数参数指定为 AHTXX_USE_READ_DATA。该方式重用了温度测量期间先前读取的6字节数据,从而加快了执行速度。

如果湿度值有效,也会打印到串行监视器上,并附带精度范围。

在循环重复前添加10000毫秒的延迟。

定义了 printStatus() 函数用于显示 AHT10 传感器的状态。该函数检查 getStatus() 函数返回的状态码,并根据状态码打印相应的消息。

总体而言,此代码设置了 OLED 显示屏,初始化 AHT10 传感器,使用 AHTxx 库读取温度和湿度值,并将这些值显示在 OLED 显示屏和串行监视器上。

结果

温度传感器AHT10运行正常,上传代码后,每2000毫秒间隔依次显示温度和湿度读数。

我们使用一个移动电源模块,通过USB端口为Arduino设置提供5V电源,以驱动Arduino板。

版本2

我们在面包板上搭建的TEMP Meter电路只是开始;最终成品将是一个一体化电路板,搭载更小的微控制器,可选XIAO M0或Atmega328AU芯片。此外,该装置还将加入电池,为微控制器、显示屏和温度传感器供电。

整个设备将被封装在一个设计精美的3D打印外壳中,并配有安装在墙上的孔位。

目前,这是本项目第二版的全部内容。

本文编译 自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭