Lark Weather Station

大气是一个复杂多变的系统,受到众多因素的影响,其中风速、风向、温度、湿度、气压被普遍视为最重要的五个要素。为了深入了解大气运动的状态和变化原因,准确检测和记录这些数据至关重要。过去,在获取气象数据时要将多种传感器组合,这一过程需要耗费大量时间进行接线、编程调试和组装,操作难度极高,给许多对气象探究课题感兴趣的老师和同学们带来了困扰。与此同时,现有的成品气象仪大多是专业的气象监测设备,无法调整功能且体积庞大,无法满足多样化的探究需求。为了解决这些问题,我们推出了云雀气象仪,云雀气象仪内部集成多个传感器,设计了及其小巧的结构,同时兼具灵活性,使用户能够根据自己的探究需求进行定制和调整。现在,您可以轻松获取气象数据,实现个性化的气象探究,探索大气的奥秘!

云雀气象仪能够测量风速、风向、温度、湿度、气压数据,可输出标准物理量数据,用户可通过I2C/UART通信接口实时获取气象5要素,兼容Arduino、Microbit、行空板等常用的开源硬件控制器,同时,气象仪内置16M存储空间,可以将采集到的数据以CSV格式存储下来,并通过Type-C接口将数据导出进行分析。在气象仪内部,预留了两个传感器扩展接口,以接入更多传感器,气象仪整体采用模块化设计,若空间不足,用户可叠加百叶扇来增加内部空间。气象仪底部,采用了1/4英制标准的螺纹口,用户可使用我们赠送的可调节桌面三角架使用,也可根据不同的使用场景,更换不同其他三角架。气象仪机身高度16cm,直径5.5cm,整体体积接近一瓶可乐罐大小,利于携带和收纳。

产品参数

  • 工作电压:3.3~5.5V DC
  • 工作电流:40mA
  • 休眠电流:2mA
  • 通信方式:I2C/UART
  • 风速:0.5~12m/s
  • 风向:八方位
  • 温度:-20~60℃ ±0.2℃
  • 湿度:0~99%RH ±2%RH
  • 气压:300~1100hPa ±1Pa
  • U盘空间:16M
  • 主体尺寸:160x55mm
  • 主体重量:270g

结构概览

注:风向标通过按压可快速插拔,拆卸时轻轻按压即可弹出,切勿用力拉扯

序号 名称 功能
1 指南针 辅助方位辨别
2 风杯 风速检测装置,配合内部传感器检测风速
3 风杯盖 用于收纳时保护风杯,使用指南针时需取下
4 百叶箱 确保空气流通,用于温湿度和气压检测
5 风向标 风向检测装置,配合风向转轴和内部传感器检测风向
6 风向转轴 由风向标带动旋转,用于风向检测
7 Gravity接口 支持I2C/UART通信,可与Arduino等开发板进行数据交互
8 Type-C接口 用于配置或导出数据
9 可调节三脚架 用于支撑气象仪
10 电源&通信预留接口 用于与扩展仓中的电池和数据传输模块连接
11 1/4英寸螺纹孔 用于固定气象仪,可与三脚架连接
12 固件升级 升级系统固件

快速使用

准备

  • 5V移动电源/5V适配器 *1
  • 电脑 *1

STEP1:设备安装

  • 1.将风向标对准风向转轴的插槽位置,轻轻按压即可完成安装。拆卸时轻轻按压即可弹出,且勿用力拉扯。
  • 2.连接三脚架至气象仪底部的1/4英寸螺纹孔。

STEP2:数据采集

  • 1.将5V移动电源或5V适配器连接到气象仪的Type-C接口,为气象仪供电。
  • 2.请在每次启动气象仪时,校准其方位以确保准确性。调整气象仪的角度,使Type-C接口朝向指南针S所指的方向,即将Type-C口对准正南方向。一旦气象仪正常启动,黄灯将熄灭,此时您需要将风向标转动一圈以完成风向校准。
  • 3.校准完成后等待10秒,气象仪将自动开始数据采集和存储,默认每30秒采集并存储一次,存储时百叶扇位置会闪烁绿灯。

注意:此时不能直接使用电脑进行供电。如果将电脑连接至气象仪,气象仪仅提供数据导出功能,无法进行数据存储。

STEP3:数据导出

  • 1.数据采集完毕后,先断开气象仪与5V电源的连接。将电脑连接至气象仪的Type-C接口,此时电脑将弹出一个U盘。

  • 2.打开U盘,找到最新的CSV文件,打开即可查看记录的数据。

功能说明

风向测量

请在每次启动气象仪时,校准其方位以确保准确性。调整气象仪的角度,使Type-C接口朝向指南针S所指的方向,即将Type-C口对准正南方向。一旦气象仪正常启动,黄灯将熄灭,此时您需要将风向标转动一圈以完成风向校准。

您可以利用盖子上的指南针辅助校准。在使用指南针时,需要取下盖子,并将其与气象仪保持至少10厘米的距离。请注意周围电脑、手机等电子设备可能对磁场产生的干扰。

参数配置

将气象仪与电脑通过Type-C连接,此时电脑会弹出一个16M的U盘,打开U盘中的config文件

名称 功能 可选项 默认
Communication 设置通信方式 I2C/UART I2C
Sample_rate 设置数据采样率 1-60S或1-60M 30S
Record 设置是否开启数据存储功能 ON/OFF ON
Delay_record 设置存储功能延时启动时间,单位S 10~60 10
Light_Switch 设置RGB指示灯是否常亮 ON/OFF OFF
Low_Power 设置是否开启低功耗模式 ON/OFF OFF

UART 波特率固定为 115200。

Delay_record 只延迟每次启动后的第一条数据记录,这段时间用于将云雀置于适当的位置。

修改配置需要重启后生效。

修改配置文件并重启 Lark 时,如果黄灯熄灭,红灯亮起,则表示配置文件写入了错误的配置信息。在这种情况下,您需要执行以下操作:格式化 Lark 的 USB 驱动器,然后关闭电源。重新打开电源并等待黄灯熄灭,然后关闭电源并重新打开。此时,您将在 Lark 的 USB 驱动器上看到一个全新的配置文件。

数据存储和导出

  • 使用Type-C数据线将气象仪连接到电脑,并在弹出的U盘中打开config文件。

  • 在config文件中将"Record"配置项设置为"Record:ON"。若未改动过,默认情况下它已经是"Record:ON"状态。

  • 断开气象仪与电脑的连接,然后为气象仪连接外部电源供电。

  • 当气象仪启动后,等待达到"Delay_Record"设置的时间后,将开始存储数据。数据的存储间隔由"Sample_Rate"设置的时间决定。

注意:气象仪与电脑连接时,气象仪仅提供数据导出功能,无法进行数据存储。

固件升级

  • 为了避免在固件更新过程中发生错误导致数据丢失,请在更新之前备份之前存储的CSV文件:使用Type-C数据线将模块连接到电脑,在弹出的U盘中将之前的数据CSV文件复制到电脑系统中,然后断开Type-C与模块的连接。

  • 使用M2螺丝刀、SIM卡针或其他尖头工具,插入气象仪底部的固件升级位置,并按住其中的按钮。

  • 在按住按钮的同时,通过Type-C口将气象仪连接到电脑,电脑将弹出一个名为“RPI-RP2”的U盘,此时可以释放按钮。

  • 将最新的".uf2"固件文件拖入"RPI-RP2"U盘,即可完成固件升级

低功耗模式说明

  • 当配置项"Low_Power"设置为"Low_Power:ON"时,将启用低功耗模式。

  • 在低功耗模式下,I2C/UART功能将被关闭,无法通过Arduino等控制器获取数据。

  • 在低功耗模式下,如果没有连数据传输模块,请确保打开存储功能。

  • 在低功耗模式下,系统会根据"Sample_Rate"中设置的时间间隔定时唤醒以采集数据,如果启用了存储功能,采集到的数据将会存储起来。请注意,"Sample_Rate"的最小值为60秒,如果设置的时间间隔小于60秒,系统会自动强制将其设置为60秒。

  • 在低功耗模式下,当气象仪上电启动后,会先进行一次数据采集操作,然后进入休眠状态。如果启用了存储功能,采集到的数据将会存储后进入休眠。

  • 在低功耗模式下,当风向标被风吹动并产生动作时,系统会被唤醒进行一次数据采集。如果启用了存储功能,采集到的数据将会存储,然后系统继续进入休眠状态。

RGB指示灯状态说明

  • 黄灯:系统正在初始化,约1S

  • 红灯:系统异常,原因有:config文件配置异常、内部传感器故障

说明:不管Light_Switch设置为ON还是OFF,开机后都会亮1S黄灯,若系统异常则亮红灯。当Light_Switch设置为OFF时,系统正常启动后指示灯默认处于不亮状态,在有数据存储时会亮一下;当Light_Switch设置为ON时,指示灯默认处于常亮状态,在有数据存储时会灭一下。

  • 绿灯:当前通信方式为I2C

  • 蓝灯:当前通信方式为UART

  • 绿灯闪烁:数据存储中,且此时通信方式为I2C

  • 蓝灯闪烁:数据存储中,且此时通信方式为UART

  • 当Light_Switch设置为OFF时,指示灯默认关闭,当有数据存储时进行闪烁

云雀系统时间设置

云雀可通过U盘中的config文件来设置时间,在config文件中新建一行,输入“Time:2023/7/24/17:56:15”, 并保存。云雀断电重启后会自动读取config中设置的时间并更新系统时间。

  • 说明:使用config文件设置时间时,建议填入的时间比实际时间快10S,预留出系统初始化时间及操作时间。系统初始化时,会自动检测config文件中是否有Time标签及相应数据,有的话则更新系统时间,更新完成后会将config文件中的Time标签及数据清除,以防止下次启动时再次重新设置时间。

  • 注意:config文件中最后有一行空行,空行被删除后会出现异常情况,在手动填入“Time:2023/7/24/17:56:15”时 ,注意填完后要保证最后有一行空行。

也可通过代码设置系统时间,具体方法见下方UNO使用教程行空板教程部分

电源&预留通信口说明

序号 名称 功能 序号 名称 功能
1 V_GNSS 定位模块独立供电端 5 V_DTU 通信模块独立供电端
2 VBAT2 充电端,连接电池正极 6 GND 系统地
3 GND 电池负极端 7 SCL I2C时钟
4 VBAT1 电池正极端 8 SDA I2C数据

扩展仓中将预留电池安装空间,若不使用扩展仓自行安装电池,请注意正负极方向,接反会有烧毁风险。

若自己连接可充电电池时,VBAT1和VBAT2都要连接至电池正极。VBAT1用于为云雀供电,VBAT2用于为电池充电。

UNO使用教程-I2C

软硬件准备

接线图

代码编程

#include "DFRobot_LarkWeatherStation.h"
#define DEVICE_ADDR                  0x42
DFRobot_LarkWeatherStation_I2C atm(DEVICE_ADDR,&Wire);

void setup(void){
  Serial.begin(115200);
  delay(1000);
  while(atm.begin()!= 0){
    Serial.println("init error");
    delay(1000);
  }
  Serial.println("init success");
  //atm.setTime(2023,3,1,17,20,0);
}

void loop(void){
    Serial.println(atm.getTimeStamp());
    Serial.print(atm.getValue("Speed").toFloat());
    Serial.println(atm.getUnit("Speed"));
    Serial.println(atm.getValue("Dir"));
    Serial.print(atm.getValue("Temp").toFloat());
    Serial.println(atm.getUnit("Temp"));
    Serial.print(atm.getValue("Humi").toFloat());
    Serial.println(atm.getUnit("Humi"));
    Serial.print(atm.getValue("Pressure").toFloat());
    Serial.println(atm.getUnit("Pressure"));
//    Serial.print(atm.getValue("Battery"));//接入锂电池可用
//    Serial.println(atm.getUnit("Battery")); //接入锂电池可用
//    Serial.print(atm.getValue("Lat"));//接入GNSS模块后可用
//    Serial.print(atm.getValue("Lon"));//接入GNSS模块后可用    
    Serial.println("----------------------------");
//    Serial.println(atm.getInformation(true));
    delay(1000);
}

Mind+

加载Mind+用户库:https://gitee.com/liliang9693/ext-yunque

UNO使用教程-UART

软硬件准备

接线图

云雀配置

将云雀连接到电脑,打开电脑上弹出的 USB 驱动器,然后打开 Config.txt。将第一行从 I2C 改为 UART,大写和小写 UART 均可。

代码编程

#include "DFRobot_LarkWeatherStation.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(/*rx =*/4, /*tx =*/5);
DFRobot_LarkWeatherStation_UART atm(&mySerial);
void setup(void){
  Serial.begin(115200);
  mySerial.begin(115200);
  delay(1000);
  while(atm.begin()!= 0){
    Serial.println("init error");
    delay(1000);
  }
  Serial.println("init success");
  //atm.setTime(2023,3,1,17,20,0);
}

void loop(void){
    Serial.println(atm.getTimeStamp());
    Serial.print(atm.getValue("Speed").toFloat());
    Serial.println(atm.getUnit("Speed"));
    Serial.println(atm.getValue("Dir"));
    Serial.print(atm.getValue("Temp").toFloat());
    Serial.println(atm.getUnit("Temp"));
    Serial.print(atm.getValue("Humi").toFloat());
    Serial.println(atm.getUnit("Humi"));
    Serial.print(atm.getValue("Pressure").toFloat());
    Serial.println(atm.getUnit("Pressure"));
//    Serial.print(atm.getValue("Battery"));//Available when connected to a lithium battery
//    Serial.println(atm.getUnit("Battery")); //Available when connected to a lithium battery
//    Serial.print(atm.getValue("Lat"));//Available when connected to a GNSS module
//    Serial.print(atm.getValue("Lon"));//Available when connected to a GNSS module
    Serial.println("----------------------------");
//    Serial.println(atm.getInformation(true));
    delay(1000);
}

行空板教程

Mind+

Python编程

from DFRobot_Atmospherlum import *
from pinpong.board import Board
import time 
Board().begin()
yunque_i2c = DFRobot_Atmospherlum_I2C(0x42)
while (yunque_i2c.begin() != 0):
    print("yunque_i2c initialize failed!!")
    time.sleep(1)
print("Sensor initialize success!!")
yunque_i2c.set_local_time()
time.sleep(1)
while  True:
    print((yunque_i2c.get_time_stamp()))
    print((str((yunque_i2c.get_value("Speed"))) + str((yunque_i2c.get_unit("Speed")))))
    print((yunque_i2c.get_value("Dir")))
    print((str((yunque_i2c.get_value("Temp"))) + str((yunque_i2c.get_unit("Temp")))))
    print((str((yunque_i2c.get_value("Humi"))) + str((yunque_i2c.get_unit("Humi")))))
    print((str((yunque_i2c.get_value("Pressure"))) + str((yunque_i2c.get_unit("Pressure")))))
    time.sleep(1)

Makecode使用教程

接线图

图形化编程

  • 打开MakeCode在线编程网页
  • 新建项目并加载云雀气象仪扩展库:https://github.com/DFRobot/pxt-DFRobot_lark.git
  • 通过下拉菜单选择要获取的物理量数据

运行结果

传感器扩展

云雀气象仪内置了两个Gravity I2C扩展接口,可以连接更多的传感器来采集更加丰富的气象数据。这为用户提供了更加灵活的选项,使他们可以根据自己的需求自由选择传感器,并且轻松地将其集成到系统中。

操作方法

1.取下气象仪底部中间的两颗螺丝

2.将连接线从底端拔出

3.拧出百叶扇下方的三颗螺丝约5mm,将整块百叶取下

4.将要扩展的传感器接入扩展接口

5.装回时要注意风向转轴位置有磁铁的一面要面向底座

可扩展传感器清单

SKU 传感器 物理量 名称标签 典型数据 设备地址 版本
SEN0228 数字环境光传感器 环境光 Light Light: 125.47 lx 0x10 V1.0.0
SEN0322 氧气传感器 氧气浓度 O2 O2: 20.01 %vol 0x72
A0A1:10
V1.0.0
SEN0321 臭氧传感器 臭氧浓度 O3 O3: 1544 ppb 0x70
0x71
0x73
V1.0.0
SEN0514 空气质量传感器 空气质量
TVOC
ECO2
AQI
TVOC
ECO2
AQI: 1
TVOC: 88 ppb
ECO2: 529 ppm
0x52
0x53
V1.0.0
SEN0529 三轴地磁传感器 方向
X轴地磁
Y轴地磁
Z轴地磁
Angle_N
Mag_X
Mag_Y
Mag_Z
Angle_N: 157.38 °
Mag_X: 20 uT
Mag_Y: -48 uT
Mag_Z: -14 uT
0x13
A0A1:11
V1.0.0
SEN0364 可见光谱传感器 光谱 405-425nm
435-455nm
...
405-425nm: 11
435-455nm: 61
...
0x39 V1.0.0
SEN0460 PM2.5空气质量传感器 PM1.0
PM2.5
PM10
PM1.0
PM2.5
PM10
PM1.0: 43 ug/m³
PM2.5: 77 ug/m³
PM10: 93 ug/m³
0x19 V1.0.0
SEN0206 红外温度传感器 温度 Temp Temp: 22.41 ℃ 0x5A V1.0.0
SEN0536 二氧化碳传感器 二氧化碳浓度 CO2 CO2 :401.37 ppm 0x62 V1.0.0
TEL0157 卫星定位 纬度
经度
海拔
Lat
Lon
Altitude
Lat :dd.dddddd
Lon :dd.dddddd
Altitude:522.9 m
0x20 V1.0.0

数据获取

此处以获取SEN0322氧气浓度为例,只需要将getValue和getUnit函数中的参数写入物理量的名称标签即可

#include "DFRobot_LarkWeatherStation.h"
#define DEVICE_ADDR                  0x42
DFRobot_LarkWeatherStation_I2C atm(DEVICE_ADDR,&Wire);
void setup(void){
  Serial.begin(115200);
  delay(1000);
  while(atm.begin()!= 0){
    Serial.println("init error");
    delay(1000);
  }
  Serial.println("init success");
  //atm.setTime(2023,3,1,17,20,0);
}

void loop(void){
    Serial.println(atm.getTimeStamp());
    Serial.print(atm.getValue("Speed"));
    Serial.println(atm.getUnit("Speed"));
    Serial.print(atm.getValue("O2"));
    Serial.println(atm.getUnit("O2"));  
    Serial.println("----------------------------");
    delay(1000);
}

常见问题

还没有客户对此产品有任何问题,欢迎通过QQ在线客服或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png DFRobot商城购买链接