风筝
发表于: 2022-4-11 14:57:47 | 显示全部楼层

在本篇文章中,我们将学习如何使用Adafruit风速计传感器模块和Arduino开发板测量风速。风速计是用于测量风速和风向的设备,它也是一种非常常见的气象站仪器。


在所有涉及风速测量的研究中,例如气象学、风力涡轮机和农业,我们需要准确的风速信息来进行决策。市面上有几种类型的风速计,如风杯、热线和皮托管。这里使用的风速计是杯型风速计。


在本文中,我们使用的风速计传感器是Adafruit公司的风速计。Adafruit风速计能够测量高达70m/s或156mph的风速,这对于我们来说应该足够了。我们可以将Adafruit风速计传感器与Arduino和OLED显示屏连接起来。传感器将以m/s为单位测量风速,然后在OLED屏幕上显示该值。您可以将风速从m/s转换为英里/小时或公里/小时。


所需的组件

●    Arduino Nano开发板

●    Adafruit风速计传感器

●    0.96寸I2C OLED显示屏

●    MT3608升压转换器模块

●    3.7V锂离子电池


什么是风速计?

风速计Anemometer)是用于测量风速和风向的设备。它广泛用于测量大气、风洞和其他气流应用中的气流速度。该术语源自希腊语 anemos,意思是风,用于描述气象学中使用的任何风速仪器。

Anemometer-Animation.gif


用于风速测量的最广泛使用的风速计是转杯式电动风速计。旋转风杯驱动发电机。发电机的输出运行一个在风速中校准的电表。三杯风速计目前被用作风资源评估研究和实践的行业标准。


杯型风速计由安装在水平臂上的3或4个半球形杯组成,这些杯安装在垂直轴上。在任何水平方向通过杯子的气流以大致与风速成比例的速度转动轴。因此,在设定的时间间隔内计算轴的转数会产生一个与速度范围内的平均风速成比例的值。


Adafruit风速计传感器

Adafruit风速计传感器是一种三杯型风速计,能够测量高达 70m/s 或 156mph 的风速。它由外壳、风杯、电路模块组成。

Adafruit-Anemometer.jpg


传感器配有3芯电缆。黑色线连接电源信号地,棕色线用于电源,可以是7-24v DC,第三根蓝色线通过模拟电压提供测量值。输出模拟电压范围为0.4V(0 m/s 风)至 2.0V(32.4m/s 风)。


传感器模块的规格

1.    所需电压:7-24v DC

2.    输出:0.4V至2V

3.    测试范围:0.5m/s至50m/s

4.    启动风速:0.2m/s

5.    分辨率:0.1m/s

6.    精度:最差情况1米/秒

7.    最大风速:70m/s

8.    引脚: 1 – 电源 (棕色线), 2 – 地 (黑色线), 3 – 信号 (蓝色线)


传感器的内部电路

去除掉外壳后就可以传感器。内部电路包含集成到内部驱动器中的光伏模块、工业处理器、电流发生器。

Anemometer-Internal-Circuit.jpg


电路PCB的材料为军工A级,保证了参数的稳定性和电性能的质量。内部电子元件均为工业级芯片,具有极其可靠的抗电磁干扰能力。内部系统可在–20℃~+50℃,湿度35%~85%下正常工作。


电缆的插头是军用插头。具有良好的防腐和防侵蚀性能,可确保仪器长期使用。


使用风速计和Arduino测量风速

现在让我们将Adafruit风速计传感器与Arduino开发板连接并测量风速。查看下面的原理图或电路。

arduino-anemometer-project.jpg


Adafruit 风速计在7-24VDC 之间工作。所以Arduino的电压不足以启动传感器。因此,必须使用MT3608 DC-DC升压转换器模块将锂离子电池的3.7V升压至7.5V。要调整输出电压,首先将电池连接到MT3608模块的输入端,然后旋转电位器,直到万用表上的输出电压显示为7.5V。


传感器的VCC和Arduino的Vin引脚由升压转换器模块的输出提供7.5V。作为风速计传感器模拟输出引脚的蓝线连接到Arduino开发板的A0。OLED显示屏的I2C引脚,即SDA和SCL连接到Arduino的A4和A5。 OLED显示屏由Arduino的3.3V引脚提供电压。

anemometer-sensor-arduino-Wind-Speed.jpg


Arduino风速计的源代码/程序

以下是使用Arduino IDE编写的简易Arduino风速计代码。编译Arduino风速计项目代码并上传到Arduino开发板。您可以将风速更改为m/s 或 mph。


该代码需要SSD1306和GFX OLED库进行编译。首先下载以下库并将其添加到 Arduino IDE。

1.  下载SSD1306库:https://github.com/adafruit/Adafruit_SSD1306

2.  下载Adafruit GFX库:https://github.com/adafruit/Adafruit-GFX-Library


您现在可以复制代码并将其上传到Arduino板。 main.rar (792 Bytes, 下载次数: 4)


代码说明

以下是对arduino风速计代码的简单介绍。

  1. #include <Adafruit_GFX.h>
  2. #include <Adafruit_SSD1306.h>
复制代码

首先,在代码中包含用于OLED显示屏的库,因为它需要两个库,即用于SSD1306 OLED驱动程序的Adafruit SSD1306库和用于图形显示的Adafruit GFX库。

  1. #define SCREEN_WIDTH 128  // OLED display width, in pixels
  2. #define SCREEN_HEIGHT 64  // OLED display height, in pixels
  3. #define OLED_RESET    4  // Reset pin # (or -1 if sharing reset pin)
  4. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
复制代码

然后我们定义OLED显示屏的高度、宽度、复位引脚,然后创建一个OLED显示屏实例。

  1. Serial.begin(9600);
  2.   if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))
  3.   {
  4.     Serial.println(F("SSD1306 allocation failed"));
  5.     for (;;); // Don't proceed, loop forever
  6.   }
复制代码

在setup()函数中,初始化串口和OLED显示屏。OLED显示屏的I2C地址为0x3c。某些OLED显示屏的地址为0x3D。如果OLED不工作,请更改I2C地址。

  1. float sensorValue = analogRead(A0);
  2. float voltage = (sensorValue / 1023) * 5;
复制代码

然后我们读取传感器模拟值,然后将值转换为电压。

  1. float wind_speed = mapfloat(voltage, 0.4, 2, 0, 32.4);
复制代码

将电压映射到速度很简单。风速在0.4V时从 1m/s 开始,在 2 左右时最大为 32.4m/s。Arduino有一个内置的map()函数,但是 map() 对浮点数不起作用,所以我们编写了一个简单的mapFloat() 函数。

  1. float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
  2. {
  3.   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
  4. }
复制代码

此函数用于将变量映射到浮点数下。

  1. float speed_mph = ((wind_speed *3600)/1609.344);
复制代码

使用该代码,您可以将风速从 m/s 转换为英里/小时 (m/ph)。

  1. //  display.setTextSize(2);
  2. //  display.setCursor(25, 30);
  3. //  display.print(wind_speed, 1);
  4. //  display.setTextSize(1);
  5. //  display.print(" m/s");

  6.   display.setTextSize(2);
  7.   display.setCursor(25, 30);
  8.   display.print(speed_mph, 1);
  9.   display.setTextSize(1);
  10.   display.print(" mph");
复制代码

在OLED显示屏中显示风速。


测量风速和测试设备

将Arduino风速计代码上传到Arduino开发板后,OLED显示屏将开始显示风速。当风速杯稳定时,OLED会显示0.1m/s 到0.3m/s 左右的速度。当传感器在有风的地区拍摄时,速度会发生变化或增加。

Testing-Anemometer.jpg


最初我尝试以m/s为单位测量速度并得到如下图所示的结果。速度变化取决于叶片旋转。然后我使用工业标准测量并将 m/s 转换为英里/小时 (mph)。您还可以使用数学计算将速度转换为每小时公里 (kph)。

Wind-speed-in-ms.jpg


以上就是如何制作Arduino风速计项目来测量风速。如果有任何疑问,请随时在本帖下面回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-20 15:55 , Processed in 0.132286 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表