简介
DFRobot商城已经为用户们提供了上百种不同类型的传感器,但其中很多传感器的输出是电流电压等原始信号,若要获取标准单位的物理量数值,则需查询对应产品数据手册,通过公式换算和代码编程完成转换。同时,由于不同传感器输出的数据格式不同,导致不同传感器在获取数据时需要编写不同的控制程序。以上问题都提高了传感器的使用门槛,为了让用户能够更简单的获取传感器数据,DFRobot推出了Gravity: SCI采集模块。
Gravity: SCI采集模块是一款多功能数据采集模块,目前已支持温湿度、大气压等常见的20余种传感器模块集成了屏幕显示、传感器自动识别、数据存储、RTC时钟、数据处理等探究实验中的常用功能。传感器数据可通过板载的屏幕进行显示和查看,板载16M存储空间,可将传感器数据实时存储下来,通过RTC时钟可为每条存储的数据打上精确时间标签,最后,SCI采集模块会将输出的数据格式标准化,接入任意传感器时,UNO、行空板等控制器都可以使用同一个代码获取到传感器的数据。SCI采集模块极大的降低了传感器数据的获取难度,能够使用户们将更多的精力放在数据分析和处理上,助力老师们更好的进行跨学科项目教学。
产品参数
工作电压: 3.3~5.5V DC
工作电流:
输入接口:
- 数字/模拟*1
- I2C/UART*2
输出接口:I2C*1
U盘空间:16M
RTC电池:CR1220
屏幕尺寸:1.3寸
产品尺寸:62*52*13mm
已支持产品清单
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采集模块可通过更新固件的方式新增支持的传感器数量,更新固件步骤如下:
为避免固件更新时出错导致实验数据丢失,请在更新前之前存储的CSV文件备份好:使用Type-c数据线将模块与电脑相连,在弹出的U盘中将之前的实验文件拷贝到电脑系统中,然后断开Type-c与模块的连接
断电情况下,摁住SCI模块右上角的固件升级按钮(BOOT键),使用Type-c数据线将模块与电脑相连
此时SCI模块的电源灯亮起,屏幕无显示,在电脑中会弹出一个名为“RPI-RP2”的U盘,此时即可松开固件升级按钮
将最新的“.uf2”固件文件拖入“RPI-RP2”U盘
固件烧录完成后,屏幕自动点亮,默认显示模块的ID号和系统时间,此时电脑会弹出一个名为“U盘”的U盘空间,首次使用需要将此U盘格式化
SCI模块单独使用
单独使用SCI采集模块,进行传感器数据的察看、存储和导出
使用I2C传感器
将传感器接入左侧的4Pin口(Port2/Port3),模块即可自动识别接入的传感器型号,相应的传感器数据会直接显示在屏幕中。
硬件准备
- SCI采集模块 x1
- SEN0334 温湿度传感器 x1(或其他支持的传感器)
- SEN0228 环境光传感器 x1(或其他支持的传感器)
- Type-c数据线 x1
- 3.3-5.5V电池盒或锂电池 x1(可选)
接线图
通过电池接口或Type-c口均可为模块供电,按照接线图接好后即可在屏幕上实时观察传感器数据
当同时连接多个传感器时,数据显示顺序为Port1、Port2、Port3
屏幕一页最多显示5条数据,当同时连接多个多参数的传感器时,通过摁下“OK键”进行翻页察看更多数据
使用数字/模拟传感器
- 将传感器接入左侧的Port1口
- 在初始页摁下“S”键,进入设置菜单
- 光标默认处于“Select SKU”,此时摁下“OK”键,进入传感器选择页面
- 通过“S”和“R”键上移/下移光标至要选择的传感器上
- 摁下“OK”键确认选择,至此选择成功,页面会直接跳转至初始页并在第一行显示出已选择的传感器数据
- 说明1:选中“Analog”选项后会在初始页显示Port1口读取到的电压值,单位为mV
- 说明2:传感器选中后会一直处于选中状态,传感器的数据会一直显示在初始页的第一行,若要取消选中状态请选择“NULL”
数据记录和读取
SCI采集模块自带16M存储空间,可将实验数据以CSV表格格式实时记录存储下来。CSV表格包含时间标签、传感器检测的物理量名称、物理量数值、物理量单位等数据。
- 将传感器连接到SCI采集模块,通过手动选择或自动识别,屏幕中已显示出传感器数据
- 传感器已放置到实验环境,需要开始数据记录
- 摁下“R”键,启动数据记录。此时屏幕左下角的REC旁会出现“ * ”标识,“R”键上方的指示灯按照数据刷新率开始闪烁,指示此时SCI采集模块正在进行数据记录
- 说明1:数据记录功能为上电默认关闭,可通过摁“R”键随时暂停或启动该功能
- 说明2:SCI采集模块每次上电后第一次启动数据记录时会创建一个新的CSV文件,文件名为此时的系统时间,例如10_24_09_30_00。文件创建后暂停或启动数据记录不会再创建新的文件,数据会存入最新创建的文件中,每次暂停和启动数据记录后CSV文件中会加入一行空行作标记
- 说明3:若需在不重启SCI采集模块的情况下新建一个CSV文件,需在暂停数据记录的状态时长摁“R”键3秒,直到"R"键上方的指示灯快速闪烁1秒指示新建成功
- 说明4:使用数据线将电脑与模块连接时,在弹出的U盘中进行任何操作都会占用REC功能,将无法开启数据记录,需重启模块后才能正常记录数据。同理,在启动REC功能后禁止对U盘做任何操作,否则会导致数据记录失败。
数据导出
数据记录完毕后可将记录的数据以CSV文件格式导出
- 通过摁“R”键,暂停数据记录,此时屏幕左下角的REC旁无“ * ”标识,“R”键上方的指示灯停止闪烁
- 通过Type-c数据线将模块与电脑连接,此时电脑会弹出一个新的U盘文件
- 打开U盘文件后将需要的CSV文件复制/剪切到电脑中
- 说明1:在数据记录过程中请勿操作U盘和其中的文件
- 说明2:CSV格式文件无法保存绘制的数据图表,若要直接在表格中绘制图表请将CSV另存为xlsx格式
- 说明3:若使用数据线将电脑与模块连接后开启的数据记录,需要重启模块才能显示出记录的CSV文件
SCI采集模块交互介绍
传感器校准
对于使用前需要进行校准的传感器,可通过SCI模块进行校准操作
- 将传感器连接到SCI采集模块,通过手动选择或自动识别,屏幕中已显示出传感器数据
- 在初始界面摁下“S”键,进入设置菜单
- 通过“S”和“R”键上移/下移光标至“Calibration”,此时摁下“OK”键,进入传感器校准页面
- 单点校准的传感器仅进行“Low Point”校准即可,需要双点校准的传感器在低点进行“Low Point”校准,在高点进行“High Point”校准
- 将传感器放入校准环境中,摁下“OK”键,等待屏幕中出现“*”标识,完成低点/高点校准
- 说明1:对应的点位完成校准后屏幕中会出现“*”标识;对应的点位正在校准屏幕中会出现“-”标识;对应的点位校准失败屏幕中会出现“x”标识
- 说明2:校准值会永久保存在SCI采集模块中,直到下一次校准时刷新(“*”标识仅用于指示当次进入校准页面是否进行过校准,重新进入校准页面时“*”标识会消失,若直接退出则校准信息以上一次为准)
- 说明3:KIT0176-重量传感器需要在启动校准后再将100g物体放到秤面,其他传感器在校准时需要先将传感器置入校准环境中再启动校准
设置数据刷新率
- 在初始界面摁下“S”键,进入设置菜单
- 通过“S”和“R”键上移/下移光标至“Set Refresh Rate”,此时摁下“OK”键进入刷新率设置页面
- 通过“S”和“R”键上移/下移光标至需要的刷新率,摁下“OK”确认选择
- 可选项有ms、1S、3S、5S、10S、30S、1min、5min、10min
- 选中ms后,系统会按照最快的速度刷新传感器数据,时间标签精确至ms级
设置存储内容
- 在初始界面摁下“S”键,进入设置菜单
- 通过“S”和“R”键上移/下移光标至“Set REC Content”,此时摁下“OK”键进入存储内容设置页面
- 此页面可选择Port1、Port2、Port3端口的数据是否被存储在CSV文件中,“*”标识代表此端口的数据会存储在CSV文件中,默认为全部开启
- 若有需要可将对应的端口关闭,以节省U盘空间
设置屏幕开关
- 在初始界面摁下“S”键,进入设置菜单
- 通过“S”和“R”键上移/下移光标至“Screen off ”,此时摁下“OK”键可关闭屏幕以降低功耗
- 屏幕关闭后其他功能均不受影响,若要唤醒屏幕则摁下“OK”键即可
设置系统时间
- 在初始界面摁下“S”键,进入设置菜单
- 通过“S”和“R”键上移/下移光标至“Set System Time”,此时摁下“OK”键进入系统时间设置页面
- 可设置 月日时分秒,完成月份设置后摁下“OK”键进行日期设置,以此类推
设置模块ID
- 在初始界面摁下“S”键,进入设置菜单
- 通过“S”和“R”键上移/下移光标至“Set Board ID”,此时摁下“OK”键进入ID设置页面
- 一个SCI采集模块可设置三个地址:0x21、0x22、0x23,设置完成重启后生效
查看版本
- 在初始界面摁下“S”键,进入设置菜单
- 通过“S”和“R”键上移/下移光标至“Version”,此时摁下“OK”键可查看当前的软件版本
UNO使用教程
软硬件准备
- 硬件
- DFRuino UNO R3 x1
- Gravity I/O传感器扩展板 x1
- SCI采集模块 x1
- SEN0334 温湿度传感器 x1(或其他支持的传感器)
- SEN0228 环境光传感器 x1(或其他支持的传感器)
- 双头PH2.0-4P连接线 x2
- Gravity 4P连接线 x1
- 软件
- Arduino IDE 点击下载Arduino IDE
- 下载并安装DFRobot_RP2040_SCI库。如何安装库?
接线图
获取指定物理量名称的数据
通过在函数中填写物理量的名称,来单独获取此物理量的数值或单位,用于进行数据的逻辑处理,物理量名称可直接通过模块屏幕中显示的名字获得,也可通过“以支持产品清单”察看
代码编程
#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+图形化编程
加载Mind+用户库:https://gitee.com/liliang9693/ext-sci
选择主板,兼容Arduino、micro:bit V1、掌控板 (micro:bit V2暂不兼容)
输入想要获取物理量的名称,物理量名称可直接通过模块屏幕中显示的名字获得,也可通过“以支持产品清单”察看
获取传感器全部数据
此例程可直接获取指定接口上传感器的全部数据,格式为 名称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+图形化编程
- 加载Mind+用户库:https://gitee.com/liliang9693/ext-sci
- Mind+切换为Python模式,扩展中选择“官方库-行空板”和“pinpong库-pinpong初始化”
- 输入想要获取物理量的名称,物理量名称可直接通过模块屏幕中显示的名字获得,也可通过“以支持产品清单”察看
- 若运行报错,请将pinpong库更新至0.4.9及以上版本,升级方法:行空板库安装-行空板官方文档 (unihiker.com),行空板官方文档-常见问题 (unihiker.com)
Python代码编程
- 通过
pip install -U pinpong
指令更新pinpong库至0.4.9及以上版本,行空板库安装-行空板官方文档 (unihiker.com),行空板官方文档-常见问题 (unihiker.com) - 下载Python库:https://gitee.com/liliang9693/ext-sci
- 将仓库中的dfrobot_rp2040_suab.py库文件与下方代码放于同一项目文件中
- 根据连接的传感器修改名称标签,名称标签可直接通过模块屏幕中显示的名字获得,也可通过“以支持产品清单”察看,点击运行即可读取SCI模块上连接的光线传感器的数据
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在线客服或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。