Gravity: SCI DAQ Module

简介

DFRobot商城已经为用户们提供了上百种不同类型的传感器,但许多传感器的输出是原始的电流电压信号,需要查询产品手册并进行繁琐的计算和编程才能获得标准单位的物理量数值。此外,不同传感器的数据格式也不一致,导致不同传感器在获取数据时需要编写不同的控制程序。以上问题都提高了传感器的使用门槛,为了解决这些问题,DFRobot推出了Gravity: SCI采集模块。

Gravity: SCI采集模块是一款功能强大且高度集成的数据采集模块,该模块融合了屏幕显示、传感器自动识别、传感器校准、数据存储、RTC时钟以及数据优化等多种特性,让数据采集变得更加便捷和高效。此外,SCI采集模块还具有多种供电方案,并可通过I2C接口输出优化后的传感器数据,兼容Arduino、micro:bit、掌控板、行空板、树莓派等常用的开源硬件主控。

目前,SCI采集模块已经支持了20余种受欢迎的传感器,包括温湿度、大气压、空气质量、氧气浓度等等。未来,我们将继续扩充支持的传感器数量,为大家带来更多的创新和应用场景。无论是在科学探究、跨学科教学还是物联网应用中,SCI采集模块都将是您不可或缺的数据采集利器。

注意:请自行将纽扣电池装入模块背面的电池座,电池正极朝向亚克力板一面,此纽扣电池用于为RTC芯片供电,安装后模块可提供精准的时间输出

产品参数

已支持产品清单

SKU 传感器 物理量 名称标签 典型数据 设备地址 校准 版本
SEN0161-V2 模拟pH计V2 水质PH PH_Wate PH_Water: 7.0 Analog Low Point:PH7溶液
High Point:PH4溶液
V1.0.1
SEN0244 模拟TDS传感器 水质TDS TDS TDS: 17 ppm Analog Low Point:707ppm溶液 V1.0.1
DFR0300 模拟电导率计V2 水质EC EC_Water EC_Water: 12.9 mS/cm2 Analog Low Point:1413us/cm2溶液
High Point:12.88ms/cm2溶液
V1.0.1
SEN0232 模拟分贝计 分贝 Sound Sound: 55.2 db Analog V1.0.1
SEN0231 甲醛传感器 甲醛浓度 HCHO HCHO: 0.03 ppm Analog V1.0.1
SEN0193 土壤湿度传感器 土壤湿度 Moisture Moisture: 50 %RH Analog Low Point:浸入水中
High Point:空气
V1.0.1
SEN0114 土壤湿度传感器 土壤湿度 Moisture Moisture: 50 %RH Analog Low Point:浸入水中
High Point:空气
V1.0.2
DFR0023 温度传感器-LM35 空气温度 Temp_Air Temp_Air:28.65 C Analog V1.0.3
DFR0051 电压传感器 电压 Voltage Voltage : 3.5 V Analog V1.0.3
KIT0021 防水温度传感器-DS18B20 防水温度 Temp_W Temp_W: 20.23 ℃ Digital V1.0.1
DFR0067 温湿度传感器-DHT11 空气温度
空气湿度
Temp_Air
Humi_Air
Temp_Air: 28.65 ℃
Humi_Air: 30.12 %RH
Digital V1.0.3
SEN0137 温湿度传感器-DHT22 空气温度
空气湿度
Temp_Air
Humi_Air
Temp_Air: 28.65 ℃
Humi_Air: 30.12 %RH
Digital V1.0.3
SEN0334 数字温湿度传感器-SHT31 空气温度
空气湿度
Temp_Air
Humi_Air
Temp_Air: 28.65 ℃
Humi_Air: 30.12 %RH
0x45 V1.0.1
SEN0497 温湿度传感器-DHT20 空气温度
空气湿度
Temp_Air
Humi_Air
Temp_Air: 28.65 ℃
Humi_Air: 30.12 %RH
0x38 V1.0.3
SEN0228 数字环境光传感器 环境光 Light Light: 125.47 lx 0x10 V1.0.1
SEN0517 大气压温度传感器-ICP10111 海拔高度
大气压强
空气温度
Altitude
Pressure
Temp_Air
Altitude: 522.9 m
Pressure:1106.34hPa
Temp_Air: 30.08 C
0x63 V1.0.1
SEN0251 大气压温度传感器-BMP388 海拔高度
大气压强
空气温度
Altitude
Pressure
Temp_Air
Altitude: 522.9 m
Pressure:1106.34hPa
Temp_Air: 30.08 C
0x77 V1.0.3
SEN0322 氧气传感器 氧气浓度 O2 O2: 20.01 %vol 0x72
A0A1:10
传感器自带校准按键,长按2S V1.0.1
SEN0321 臭氧传感器 臭氧浓度 O3 O3: 1544 ppb 0x70
0x71
0x73
V1.0.1
SEN0514 空气质量传感器 空气质量
TVOC
ECO2
AQI
TVOC
ECO2
AQI: 1
TVOC: 88 ppb
ECO2: 529 ppm
0x52
0x53
V1.0.1
SEN0456 气压传感器 容器气压 Pressure Pressure: 110.76 Kpa 0x16-0x18 Low Point:110.0Kpa V1.0.1
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.1
KIT0176 重量传感器 重量 Weight Weight: 300.04 g 0x64-0x67 Low Point:100g V1.0.1
SEN0518 心率血氧传感器 血氧
心率
SPO2
Heart
SPO2: 99 %
Heart: 93 T/min
0x57 V1.0.1
SEN0304 超声波测距传感器 距离 Distance Distance: 213 cm 0x11 V1.0.1
SEN0364 可见光谱传感器 光谱 405-425
435-455
...
405-425: 11
435-455: 61
...
0x39 V1.0.1
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.1
SEN0206 红外温度传感器 温度 Temp Temp: 22.41 ℃ 0x5A V1.0.1
SEN0291 数字功率计 电压
电流
功率
Voltage
Current
Power
Voltage: 12V
Current: 1000mA
Power: 12620mW
0x40
A0A1:00
暂不支持校准 V1.0.1
TEL0157 GNSS北斗定位模块 纬度
经度
海拔
Lat
Lon
Altitude
Lat : 31.204107
Lon : 121.599082
Altitude: 522.9 m
0x20 V1.0.2
SEN0536 红外光声二氧化碳传感器 二氧化碳浓度 CO2
Temp_Air
Humi_Air
CO2 : 401.37 ppm
Temp_Air: 28.65 C
Humi_Air: 30.12 %RH
0x62 V1.0.2
SEN0575 雨量传感器 雨量 Rainfall Rainfall: 3.91mm 0x1D V1.0.3
EDU0157 云雀气象仪 风速
风向
温度
湿度
大气压
...
Speed
Dir
Temp_Air
Humi_Air
Pressure
Altitude
...
Speed:0.7m/s
Dir:N
Temp_Air:28.65 C
Humi_Air:30.12 %RH
Pressure:94.34 hPa
Altitude:52.9 m
其他参数根据传感器扩展情况显示
0x42 V1.0.3

功能说明

升级固件

SCI采集模块可通过更新固件的方式新增支持的传感器数量,更新固件步骤如下:

SCI模块单独使用

单独使用SCI采集模块,进行传感器数据的察看、存储和导出

使用I2C传感器

将传感器接入左侧的4Pin口(Port2/Port3),模块即可自动识别接入的传感器型号,相应的传感器数据会直接显示在屏幕中。

硬件准备

接线图

通过电池接口或Type-c口均可为模块供电,按照接线图接好后即可在屏幕上实时观察传感器数据。 Type-C口不能为电池充电

当同时连接多个传感器时,数据显示顺序为Port1、Port2、Port3

屏幕一页最多显示5条数据,当同时连接多个多参数的传感器时,通过摁下“OK键”进行翻页察看更多数据

使用数字/模拟传感器

数据记录和读取

SCI采集模块自带16M存储空间,可将实验数据以CSV表格格式实时记录存储下来。CSV表格包含时间标签、传感器检测的物理量名称、物理量数值、物理量单位等数据。

数据导出

数据记录完毕后可将记录的数据以CSV文件格式导出

SCI采集模块交互介绍

传感器校准

对于使用前需要进行校准的传感器,可通过SCI模块进行校准操作

设置数据刷新率

设置存储内容

设置屏幕开关

设置系统时间

设置模块ID

查看版本

UNO使用教程

软硬件准备

接线图

获取指定物理量名称的数据

通过在函数中填写物理量的名称,来单独获取此物理量的数值或单位,用于进行数据的逻辑处理,物理量名称可直接通过模块屏幕中显示的名字获得,也可通过“以支持产品清单”察看

代码编程

#include "DFRobot_RP2040_SCI.h"

DFRobot_RP2040_SCI_IIC sci(/*addr=*/RP2040_SCI_ADDR_0X21, &Wire);

void setup() {
  Serial.begin(115200);
  while(!Serial){                                                     //Waiting for USB Serial COM port to open.
  }

  Serial.print("Initialization SCI Acquisition Module...");
  while(sci.begin() != 0){
      Serial.println("failed. Please check whether the hardware connection is wrong.");
      delay(1000);
      Serial.print("Initialization SCI Acquisition Module...");
  }
  Serial.println("done.");

}

void loop() {
  String TimeStamp = sci.getTimeStamp();
  float Temp_Air_val  = sci.getValue(sci.eALL,"Temp_Air").toFloat();
  String Temp_Air_unit = sci.getUnit(sci.eALL,"Temp_Air");
  float Humi_Air_val  = sci.getValue(sci.eALL,"Humi_Air").toFloat();
  String Humi_Air_unit = sci.getUnit(sci.eALL,"Humi_Air");
  Serial.print(" TimeStamp: "); Serial.print(TimeStamp);
  Serial.print(" Temp_Air: "); Serial.print(Temp_Air_val); Serial.print(" ");Serial.print(Temp_Air_unit);
  Serial.print(" Humi_Air: "); Serial.print(Humi_Air_val); Serial.print(" ");Serial.println(Humi_Air_unit);
  Serial.println();
  delay(1000);
}
  /**
   * @fn getValue(eInterfaceList_t inf, char *keys)
   * @brief 获取指定接口中物理量名称为 keys 的数据值,多个属性值之间用','号隔开
   * @param inf    接口选择,及参数查找范围
   * @n     ePort1                                          选中Port1接口,在A&D接口所连接的传感器中查找属性名称为keys的属性值
   * @n     ePort2                                          选中Port2接口,在I2C&UART1接口所连接的传感器中查找属性名称为keys的属性值
   * @n     ePort3                                          选中Port3接口,在I2C&UART2接口所连接的传感器中查找属性名称为keys的属性值
   * @n     eALL  or  (ePort1 | ePort2 | ePort3)            选中(ePort1 | ePort2 | ePort3)  接口,在所有接口接口所连接的传感器中查找属性名称为keys的属性值
   * @param keys  物理量名称
   * @return 指定接口中物理量名称为 keys 的数据值,多个值之间用','号隔开
   * @n 例Temp_Air:  28.65,28.65
   */
  String getValue(eInterfaceList_t inf, char *keys);
  /**
   * @fn getUnit(eInterfaceList_t inf, char *keys)
   * @brief 获取指定接口中物理量名称为 keys 的数据单位,多个属性单位之间用','号隔开
   * @param inf    接口选择,及参数查找范围
   * @n     ePort1                                          选中Port1接口,在Port1接口所连接的传感器中查找属性名称为keys的属性单位
   * @n     ePort2                                          选中Port2接口,在Port2接口所连接的传感器中查找属性名称为keys的属性单位
   * @n     ePort3                                          选中Port3接口,在Port3接口所连接的传感器中查找属性名称为keys的属性单位
   * @n     eALL  or  (ePort1 | ePort2 | ePort3)      选中Port1, Port2和Port3接口,在所有接口接口中查找属性名称为keys的属性单位
   * @param keys  传感器属性名称
   * @return 指定接口所连接的传感器中属性名称为 keys 的数据单位,多个属性单位之间用','号隔开
   * @n 例Temp_Air:  C,C
   */
  String getUnit(eInterfaceList_t inf, char *keys);
  /**
   * @fn getTimeStamp()
   * @brief 获取时间戳,此时间戳为(SCI Acquisition Module)数据刷新时间
   * 
   * @return 时:分:秒(00:00:00) 或 分:秒.百分之(0~99)秒(00:00.00)
   */
  String getTimeStamp();

mind+图形化编程

获取传感器全部数据

此例程可直接获取指定接口上传感器的全部数据,格式为 名称1:数值1 单位1,名称2:数值2 单位2,... 。可编写通用脚本程序直接解析程序绘制表格。

代码编程

#include "DFRobot_RP2040_SCI.h"

DFRobot_RP2040_SCI_IIC sci(/*addr=*/RP2040_SCI_ADDR_0X21, &Wire);

void setup() {
  Serial.begin(115200);
  while(!Serial){                                                     //Waiting for USB Serial COM port to open.
  }

  Serial.print("Initialization SCI Acquisition Module...");
  while(sci.begin() != 0){
      Serial.println("failed. Please check whether the hardware connection is wrong.");
      delay(1000);
      Serial.print("Initialization SCI Acquisition Module...");
  }
  Serial.println("done.");
}

void loop() {
  String ifAll = sci.getInformation(sci.eALL, true);
  Serial.println(ifAll);
  Serial.println();
  delay(1000);
}
  /**

   * @fn getInformation
   * @brief 获取SCI采集模块(SCI Acquisition Module)上一个或多个接口连接的传感器的信息,名称:数值 单位,多条信息之间
   * @n 用','号隔开
   * 
   * @param inf    接口选择
   * @n     ePort1                                           选中Port1接口
   * @n     ePort2                                           选中Port2接口
   * @n     ePort3                                           选中Port3接口
   * @n     eALL  or  (ePort1 | ePort2 | ePort3)             选中Port1, Port2和Port3接口
   * @param timestamp 获取的信息中是否加时间戳
   * @n     false  不加时间戳
   * @n     ture   加时间戳   
   * @return 选中的接口上连接的传感器的属性,每条属性格式为:名称:数值 单位,多条属性之间用','号隔开,单位和数值之间用空格隔开
   * @n 不加时间戳 例SEN0334:  Temp_Air:28.65 C,Humi_Air:30.12 %RH
   * @n 加时间戳   例SEN0334:  分:秒.百分之(0~99)秒 Temp_Air:28.65 C,Humi_Air:30.12 %RH 或 时:分:秒 Temp_Air:28.65 C,Humi_Air:30.12 %RH
     */
       String getInformation(eInterfaceList_t inf = eALL, bool timestamp = false);

通过代码控制是否启动存储

代码编程

#include "DFRobot_RP2040_SCI.h"

DFRobot_RP2040_SCI_IIC sci(/*addr=*/RP2040_SCI_ADDR_0X21, &Wire);

void setup() {
  Serial.begin(115200);
  while(!Serial){                                                     //Waiting for USB Serial COM port to open.
  }

  Serial.print("Initialization SCI Acquisition Module...");
  while(sci.begin() != 0){
      Serial.println("failed. Please check whether the hardware connection is wrong.");
      delay(1000);
      Serial.print("Initialization SCI Acquisition Module...");
  }
  Serial.println("done.");
  sci.enableRecord();
  //sci.disableRecord();
}

void loop() {
  String TimeStamp = sci.getTimeStamp();
  float Temp_Air_val  = sci.getValue(sci.eALL,"Temp_Air").toFloat();
  String Temp_Air_unit = sci.getUnit(sci.eALL,"Temp_Air");
  float Humi_Air_val  = sci.getValue(sci.eALL,"Humi_Air").toFloat();
  String Humi_Air_unit = sci.getUnit(sci.eALL,"Humi_Air");
  Serial.print(" TimeStamp: "); Serial.print(TimeStamp);
  Serial.print(" Temp_Air: "); Serial.print(Temp_Air_val); Serial.print(" ");Serial.print(Temp_Air_unit);
  Serial.print(" Humi_Air: "); Serial.print(Humi_Air_val); Serial.print(" ");Serial.println(Humi_Air_unit);
  Serial.println();
  delay(1000);
}

mind+图形化编程

行空板使用教程

Mind+图形化编程

注意:连接行空板之后会检测依赖库版本,如果弹出提示有库需要升级,需点击升级,否则会因为pinpong库版本低报“Response pkt is error!”的错误。 若出现“'NoneType' object is not subscriptable”错误,通常是由于SCI与行空板连接不稳定导致,请检查SCI与行空板是否已经接好,或更换连接线后重试。

Python代码编程

from dfrobot_rp2040_sci import *
from pinpong.board import Board
import time


Board().begin()
SCI1 = DFRobot_RP2040_SCI_IIC(addr=0x21)
while SCI1.begin() != 0:
    print("Initialization Sensor Universal Adapter Board failed.")
    time.sleep(1)
print("Initialization Sensor Universal Adapter Board done.")

while True:
    print(SCI1.get_timestamp())
    print((str(SCI1.get_value1(SCI1.eALL,"Temp_Air")) + str(SCI1.get_unit1(SCI1.eALL,"Temp_Air"))))
    print((str(SCI1.get_value1(SCI1.eALL,"Humi_Air")) + str(SCI1.get_unit1(SCI1.eALL,"Humi_Air"))))
    print((str(SCI1.get_value1(SCI1.ePort3,"Light")) + str(SCI1.get_unit1(SCI1.ePort3,"Light"))))
    time.sleep(1)

MakeCode使用教程

接线图

MakeCode图形化编程


同时使用多个SCI

接线图

SCI设置

代码编程

#include "DFRobot_RP2040_SCI.h"

DFRobot_RP2040_SCI_IIC SCI1(/*addr=*/0x21, &Wire);
DFRobot_RP2040_SCI_IIC SCI2(/*addr=*/0x22, &Wire);

void setup() {
  Serial.begin(115200);
  while(SCI1.begin() != 0){delay(1000);};
  while(SCI2.begin() != 0){delay(1000);};
}
void loop() {
  Serial.println(SCI1.getValue(SCI1.eALL,"Temp_Air"));
  Serial.println(SCI1.getValue(SCI1.eALL,"Humi_Air"));
  Serial.println(SCI1.getValue(SCI1.eALL,"Light"));
  Serial.println("-------------------");
  Serial.println(SCI2.getValue(SCI2.eALL,"AQI"));
  Serial.println(SCI2.getValue(SCI2.eALL,"TVOC"));
  Serial.println(SCI2.getValue(SCI2.eALL,"ECO2"));
  Serial.println(SCI2.getValue(SCI2.eALL,"Altitude"));
  Serial.println(SCI2.getValue(SCI2.eALL,"Pressure"));
  Serial.println("-------------------");
}

图形化编程

硬件兼容性

C++ Python Arduino IDE MindPlus Makecode
Arduino
micro:bit V1 V2
ESP32
掌控板
Raspberry Pi
UNIHIKER

常见问题

Q:接入支持清单中的传感器后屏幕不显示数据
若连接的是3Pin的传感器,即传感器接在了Port1口,此时需要手动选择传感器,选择方法请查看:使用数字/模拟传感器

若连接的是4Pin传感器,即传感器接在了Port2或Port3口,请调节传感器上的拨码开关,具体对应关系请查看:设备地址

若问题仍未解决,请使用Arduino等主控扫描传感器地址,若扫描不到传感器地址说明传感器损坏
Q:氧气传感器接上后屏幕显示的是臭氧O3,且数据一直是0
需要将拨码开关调节至“A0A1:10”的状态,然后重新连接传感器
Q:使用Arduino、行空板等主控获取不到SCI的数据
代码中填写的物理量名称要与屏幕显示的完全一致,注意大小写,注意字母“O”与数字“0”

注意SCI采集模块的ID号是否与程序对应,具体教程请查看:同时使用多个SCI
Q:SCI采集模块屏幕右上角显示的时间不是时分秒的状态
跟数据刷新率设置有关,请查看设置数据刷新率
Q:SCI采集模块数据刷新很慢或数据不刷新
数据刷新率设置过低,请查看设置数据刷新率

数据刷新率设置后数据仍不刷新,请重启模块,可能是由于传感器连接不稳定导致通信失败

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

更多