SGP40空气质量传感器

简介

即便现在有了手机和电脑,时钟依然是生活的必需品,人们依然会在新装修的房子和刚搬进的办公室考虑时钟的摆放位置。为了让用户能直观的看见时间的“流逝”,我们推出了带数码显示的时钟模块。该模块表面集成了一个块4位时钟数码管,让时间“流逝”更加明显;该模块采用Gravity标准接口,让使用更加简单;该模块采用了高精度时钟晶振,让误差变得更小。该模块可以采用了单节CR1220电池为时钟芯片供电,可保证外部掉电的情况下时钟能继续计时。真正的做到一次校准,终身受用。

除此之外,Digital Clock Module有两种工作方式:

1、脱机工作,我们可以直接通过Type-C供电,然后利用模块本身自带的按键设置年、月、日、时、分等参数。

2、配合主控工作,Digital Clock Module配合Arduino,micro:bit等主控,可以轻松实现时间设定、时间显示,数据采集等功能。

产品特性

1、脱机工作:脱机状态时可以按下”SET”键选择功能比如:时间,日期,年份。按下“A”/“B”键选择调整的范围(A表示 + , B表示 -)。

  • 首先按下“SET”键,进入时间的调整模式,此时”分钟“开始闪烁,按下“A”或“B”键调整范围。范围为:00~59。
  • 调好”分”后。再按“SET”键,此时”小时”开始闪烁,按下“A”或“B”键调整范围。范围为:00~23。
  • 调好“小时”后,再按“SET”键进入到日期的调整模式,此时“日”开始闪烁,按下“A”或“B”键调整范围。范围为:1-31。
  • 调好”日”后,再按“SET”键,此时”月份”开始闪烁,按下“A”或“B”键调整范围。范围为:1-12。
  • 调整好月份后,再按“SET”键,进入年份的调整模式,此时”年份”开始闪烁,按下“A”或“B”键调整范围。范围为:2000~2069。
  • 调整好年份后,最后再按“SET”键,保存所有设定好的数值,并返回到时间显示状态。
  • 同时按下“A”+ “SET”键,进入计时器功能,按下“SET”键开始正计时。再次按下“SET”键 暂停计时。然后接着再按一次“SET”键,返回到时间显示状态。在计时器界面,按下“A”键,可以清零计时器。

2、配合主控使用。

  • 通过I2C获取时钟模块的时间,日期,年份。

  • 通过编程自定义设置时间,日期,年份。

  • 通过编程设置时钟模块的计时功能。计时器程序在运行的过程中,切换到其他界面时,计时器任然在工作。

    比如,我在程序中设置了一个倒计时30秒后,蜂鸣器响的功能。但是倒计时到15秒时,我将时钟模块上的界面切换到月份的界面,但是计时器还是在工作,当30秒倒计时完之后,蜂鸣器响。

  • 可以将手动调整好的时间自动更新到主控设备中。

3、切换显示项。

在时间显示的状态下,按“A”键进入显示项的切换功能,显示项将在 时间--->日期--->年份 之间切换,每按一次A键,切换一次显示项。三个参数都显示完之后,在按一次“A”键就跳动到时间显示界面。

技术规格

  • 所用电池规格:CR1220
  • 工作电压:3V~5V
  • 通信接口:I2C
  • I2C地址:0x18
  • 可输出数据:年、月、日、星期、时、分、秒
  • 可显示数据:年、月、日、时、分
  • 计时范围:2000~2069(带闰年补偿)
  • 供电方式:Type-C、I2C
  • 数码管连接方式:共阴极数码管
  • 数码管发光颜色:红、翠绿、蓝
  • 数码管尺寸:0.56寸;(L×W×H):50.2×19.0×8.0mm
  • 模块尺寸:67*27mm

引脚说明

序号 丝印 功能描述
1 VCC/+ 电源正极
2 GND/- 电源负极
3 SCL/C I2C时钟线
4 SDA/D I2C数据线

Arduino使用教程

产品使用的是Gravity标准I2C接口,使用起来比较简单,按接线图所示将传感器与uno(或其它主板)相连接。

准备

  • 硬件
    • 1 x Arduino UNO控制板
    • 1 x Digital Clock Module
    • 若干 杜邦线
  • 软件

关于如何安装库文件,点击链接

  • 连接图

  • 寄存器地址分配

| 寄存器地址 | 意义 | 地址范围 |
| ------------- | --------- ---| ------------- |
| 0x00 | Second | 0x00~0x3B |
| 0x01 | Minute | 0x00~0x3B |
| 0x02 | Hour | 0x00~0x18 |
| 0x03 | DayOfWeek | 0x00~0x06 |
| 0x04 | DayOfMonth | 0x01~0x1F |
|0x05 |Month |0x01~0x0C |
|0x06 |Year |0x00~0x63|
|0x07 |CountUpStatus |0x00/0x01|
|0x08 |CountUpSecond |0x00~0x3B|
|0x09 |CountUpMinute | 0x00~0x3B|
|0x0A |CountDownStatus | 0x00/0x01|
|0x0B |CountDownSecond | 0x00~0x3B|
|0x0C |CountDownMinute | 0x00~0x3B|

  • 函数列表
/**
   * @brief  设置正计时时间
   * @param  status 停止/开始  0/1
   * @param  Min 0~99
	* @param  Sec 0~59
   */
  void setCountUpTime(uint8_t status, uint8_t Min, uint8_t Sec);

/**
   * @brief  获取正计时状态
* @return 结束/正在计时 0/1
   */
  uint8_t getCountUpStatus();

/**
   * @brief  设置倒计时时间
   * @param  status 停止/开始  0/1
   * @param  Min 99~0
	* @param  Sec 0~59
   */
  void setCountDownTime(uint8_t status, uint8_t Min, uint8_t Sec);

/**
   * @brief  获取倒计时状态
* @return 结束/正在计时 0/1
   */
uint8_t getCountDownStatus();
/**
   * @brief  设置RTC时间
   */
void setDSTime();

/**
   * @brief  获取RTC时间
   */
void ReadDSTime();

样例代码 - 设置时间

功能描述: 设置时间为 2021.4.15,14:29,并通过串口打印出来。

#include "Wire.h"

/*
 * 设置RTC时间 
 */
void setDSTime(){
  Wire.beginTransmission(0x18);
  Wire.write(0x00);
  Wire.write(30);//sec
  Wire.write(29);//min
  Wire.write(14);//hour
  Wire.write(2);//week
  Wire.write(15);//day
  Wire.write(4);//mon
  Wire.write(21);//year
  Wire.endTransmission();
}

/*
 *  获取RTC时间
 */
void ReadDSTime(){
  Wire.beginTransmission(0x18);
  Wire.write(0x00);
  Wire.endTransmission();
  Wire.requestFrom(0x18,7);
  Serial.print("Sec:");
  Serial.print(Wire.read());
    Serial.print(" Min:");
  Serial.print(Wire.read());
    Serial.print(" Hour:");
  Serial.print(Wire.read());
    Serial.print(" Week:");
  Serial.print(Wire.read());
    Serial.print(" Day:");
  Serial.print(Wire.read());
    Serial.print(" Mon:");
  Serial.print(Wire.read());
  Serial.print(" Year:");
  Serial.println(Wire.read());
}

void setup() {
  // put your setup code here, to run once:
  Wire.begin();
  Serial.begin(115200);
  setDSTime();
 
}

void loop() {
  delay(500);
  ReadDSTime();
}

结果

数码时钟模块上显示的时间与程序中设置的时间一致。都是2021.4.15,14:29。

串口读取到的时间:

样例代码 - 倒计时

功能描述:设置倒计时30秒,计时结束后,点亮P2脚的LED灯。


#include "Wire.h"
int ledPin = 2;  // 选择灯的引脚

void setCountUpTime(uint8_t status, uint8_t Min, uint8_t Sec){
  Wire.beginTransmission(0x18);
  Wire.write(0x07);
  Wire.write(status);
  Wire.write(Sec);
  Wire.write(Min);
  Wire.endTransmission();
}

uint8_t getCountUpStatus(){
  uint8_t ret;
  Wire.beginTransmission(0x18);
  Wire.write(0x07);
  Wire.endTransmission();
  Wire.requestFrom(0x18,1);
  ret = Wire.read();
  return ret;
}

/*
 * 设置倒计时时间
 * status:停止/开始  0/1
 * Min: 99~0
 * Sec: 0~59
 */
void setCountDownTime(uint8_t status, uint8_t Min, uint8_t Sec){
  Wire.beginTransmission(0x18);
  Wire.write(0x0A);
  Wire.write(status);
  Wire.write(Sec);
  Wire.write(Min);
  Wire.endTransmission();
}

/*
 * 获取倒计时状态
 * return 结束/正在计时 0/1
 */
uint8_t getCountDownStatus(){
  uint8_t ret;
  Wire.beginTransmission(0x18);
  Wire.write(0x0A);
  Wire.endTransmission();
  Wire.requestFrom(0x18,1);
  ret = Wire.read();
  return ret;
}

/*
 * 设置RTC时间 
 */
void setDSTime(){
  Wire.beginTransmission(0x18);
  Wire.write(0x00);
  Wire.write(30);//sec
  Wire.write(29);//min
  Wire.write(14);//hour
  Wire.write(2);//week
  Wire.write(15);//day
  Wire.write(4);//mon
  Wire.write(21);//year
  Wire.endTransmission();
}

/*
 *  获取RTC时间
 */
void ReadDSTime(){
  Wire.beginTransmission(0x18);
  Wire.write(0x00);
  Wire.endTransmission();
  Wire.requestFrom(0x18,7);
  Serial.print("Sec:");
  Serial.print(Wire.read());
    Serial.print(" Min:");
  Serial.print(Wire.read());
    Serial.print(" Hour:");
  Serial.print(Wire.read());
    Serial.print(" Week:");
  Serial.print(Wire.read());
    Serial.print(" Day:");
  Serial.print(Wire.read());
    Serial.print(" Mon:");
  Serial.print(Wire.read());
  Serial.print(" Year:");
  Serial.println(Wire.read());
}

void setup() {
  // put your setup code here, to run once:
  Wire.begin();
  Serial.begin(115200);
  setDSTime();
  setCountDownTime(1,0,30);
  //pinMode(buzzPin, OUTPUT);
}

void loop() {
  delay(500);
  //setDSTime();
  Serial.println(getCountDownStatus());
if (getCountDownStatus() == 0) {            // 检查倒计时是否结束。
        digitalWrite(ledPin, HIGH); // 灯亮起状态
      } else {
        digitalWrite(ledPin, LOW);  // 灯关闭状态
      }
  // ReadDSTime();
}

结果

当倒计时完之后,P2脚的LED灯被点亮。

除以上功能外,该模块还能将手动设置好的时间自动更新到系统中,当我们通过按键将时间设置成2021年4月15日,15:32。当我们确认好时间后,时间自动更新到系统中了。

脱机使用教程

脱机设置时间

功能描述:通过模块上板载的按键将时间设置成:2021年4月15日 11:11。

1、首先按下“SET”键,进入时间的调整模式,此时”分钟“开始闪烁,按下“A”或“B”键调整分钟范围。分钟为:11。

2、调好”分”后。再按“SET”键,此时”小时”开始闪烁,按下“A”或“B”键调整小时。小时为:11。

3、调好“小时”后,再按“SET”键进入到日期的调整模式,此时“日”开始闪烁,按下“A”或“B”键调整日期,日期为:15。

4、调好”日”后,再按“SET”键,此时”月份”开始闪烁,按下“A”或“B”键调整月份的范围。将月份为:04。

5、调整好月份后,再按“SET”键,进入年份的调整模式,此时”年份”开始闪烁,按下“A”或“B”键调整年份的范围。年份为:2021

6、调整好年份后,最后再按“SET”键,保存所有设定好的数值,并返回到时间显示状态。

结果

脱机设置计时器

功能描述:计时到30秒时,暂停计时。
-同时按下“A”+ “SET”键,进入计时器功能,按下“SET”键开始正计时。再次按下“SET”键 暂停计时。

PS:然后接着再按一次“SET”键,返回到时间显示状态。在计时器界面,按下“A”键,可以清零计时器。

结果

常见问题

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

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

更多

DFshopping_car1.png DFRobot商城购买链接