Gravity: SCI Acquisition Module

简介

DFRobot商城已经为用户们提供了上百种不同类型的传感器,但其中很多传感器的输出是电流电压等原始信号,若要获取标准单位的物理量数值,则需查询对应产品数据手册,通过公式换算和代码编程完成转换。同时,由于不同传感器输出的数据格式不同,导致不同传感器在获取数据时需要编写不同的控制程序。以上问题都提高了传感器的使用门槛,为了让用户能够更简单的获取传感器数据,DFRobot推出了Gravity: SCI采集模块。

Gravity: SCI采集模块是一款多功能数据采集模块,目前已支持温湿度、大气压等常见的20余种传感器模块集成了屏幕显示、传感器自动识别、数据存储、RTC时钟、数据处理等探究实验中的常用功能。传感器数据可通过板载的屏幕进行显示和查看,板载16M存储空间,可将传感器数据实时存储下来,通过RTC时钟可为每条存储的数据打上精确时间标签,最后,SCI采集模块会将输出的数据格式标准化,接入任意传感器时,UNO、行空板等控制器都可以使用同一个代码获取到传感器的数据。SCI采集模块极大的降低了传感器数据的获取难度,能够使用户们将更多的精力放在数据分析和处理上,助力老师们更好的进行跨学科项目教学。

产品参数

已支持产品清单

SKU 传感器 物理量 名称标签 典型数据 设备地址 校准 版本
SEN0161-V2 模拟pH计V2 水质PH PH_Wate PH_Water: 7.0 Analog Low Point:PH7溶液
High Point:PH4溶液
V1.0.0
SEN0244 模拟TDS传感器 水质TDS TDS TDS: 17 ppm Analog Low Point:707ppm溶液 V1.0.0
DFR0300 模拟电导率计V2 水质EC EC_Water EC_Water: 12.9 mS/cm2 Analog Low Point:1413us/cm2溶液
High Point:12.88ms/cm2溶液
V1.0.0
SEN0232 模拟分贝计 分贝 Sound Sound: 55.2 db Analog V1.0.0
SEN0231 甲醛传感器 甲醛浓度 HCHO HCHO: 0.03 ppm Analog V1.0.0
SEN0193 土壤湿度传感器 土壤湿度 Moisture Moisture: 50 %RH Analog Low Point:浸入水中
High Point:空气
V1.0.0
KIT0021 防水温度传感器 防水温度 Temp_W Temp_W: 20.23 ℃ Digital V1.0.0
SEN0334 数字温湿度传感器 空气温度
空气湿度
Temp_Air
Humi_Air
Temp_Air: 28.65 ℃
Humi_Air: 30.12 %RH
0x44
0x45
V1.0.0
SEN0228 数字环境光传感器 环境光 Light Light: 125.47 lx 0x10 V1.0.0
SEN0517 气压温度传感器 海拔高度
大气压强
空气温度
Altitude
Pressure
Temp_Air
Altitude: 522.9 m
Pressure: 94.34 KPa
Temp_Air: 30.08 C
0x63 V1.0.0
SEN0322 氧气传感器 氧气浓度 O2 O2: 20.01 %vol 0x72
A0A1:10
传感器自带校准按键,长按2S 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
SEN0456 气压传感器 容器气压 Pressure Pressure: 110.76 Kpa 0x16-0x18 Low Point:110.0Kpa 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
KIT0176 重量传感器 重量 Weight Weight: 300.04 g 0x64-0x67 Low Point:100g V1.0.0
SEN0518 心率血氧传感器 血氧
心率
SPO2
Heart
SPO2: 99 %
Heart: 93 T/min
0x57 V1.0.0
SEN0304 超声波测距传感器 距离 Distance Distance: 213 cm 0x11 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
SEN0291 数字功率计 电压
电流
功率
Voltage
Current
Power
Voltage: 12V
Current: 1000mA
Power: 12620mW
0x40
A0A1:00
暂不支持校准 V1.0.0

功能说明

更新固件

写给内测用户:内测用户收到的模块默认烧录了测试版固件,首次使用模块时请更新固件至V1.0.1正式版

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

SCI模块单独使用

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

使用I2C传感器

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

硬件准备

接线图

通过电池接口或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);

行空板使用教程

Mind+图形化编程

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)

硬件兼容性

MCU Arduino Mind+ Python
Arduino Uno
ESP32
micro:bit V1
micro:bit V2 暂不兼容,修复中
掌控板
行空板

常见问题

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

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

更多

DFshopping_car1.png DFRobot商城购买链接