名称介绍

重量传感器套件

简介

重量传感器是一个比较实用、贴近生活场景的传感器,通过获取物体的重量信息能够制作很多有趣的应用,例如家用电子秤、日用品余量报警、物联网称台等。DFRobot商城中已经有了重量传感器和HX711信号转接模块,但是由于结构搭建难度较大,很多无法搭建结构的朋友们就没法使用这款传感器。

这款重量传感器套件,就是为了解决结构搭建难度大的问题,让您能够便捷的制作出一个电子秤,非常容易的就可以获取物体的重量信息。另外,由于每个人的安装方式、使用习惯都不相同,所以传感器需要校准,信号转接板中内置了校准算法,可一键校准重量信息,重量传感器V2.0版本解决了V1.0需要使用单独的校准代码去校准的问题(当然仍可以使用传统的校准方法)。

注:传感器最大量程为1kg,请勿过多的超出量程,否则会永久性的损坏传感器,导致数据不准

特性

应用场景

技术规格

A0 A1 地址
0 0 0X64
1 0 0X65
0 1 0X66
1 1 0X67

引脚及按键

序号 名称 功能描述 序号 名称 功能描述
1 VCC 正极 6 E+ 传感器红色线
2 GND 公共地 7 E- 传感器黑色线
3 SCL I2C时钟线 8 S- 传感器白色线
4 SDA I2C数据线 9 S+ 传感器绿色线
5 CAL按键 自动校准 10 RST按键 去皮

使用说明

使用教程

准备

#include <DFRobot_HX711_I2C.h>

/*!
 * @brief Constructor 
 * @param pWire I2c controller
 * @param addr  I2C address(0x64/0x65/0x660x67)
 */
DFRobot_HX711_I2C(TwoWire * pWire = &Wire,uint8_t addr = HX711_I2C_ADDR);

/**
 * @brief init function
 * @return Return 1 if initialization succeeds, otherwise return non-zero and error code.
 */
int begin(void);

/**
 * @brief Get the weight of the object
 * @param times Take the average several times
 * @return Return the read weight value, unit: g
 */
float readWeight(uint8_t times = 12);

/**
 * @brief get calibration value 
 * @return return the read calibration value
 */
float getCalibration();

/**
 * @brief Set calibration value
 * @return return the read calibration value
 */
void  setCalibration(float value);

/**
 * @brief Set the trigger threshold for automatic sensor calibration (g)
 */
void  setThreshold(uint16_t threshold);

/**
 * @brief Set the calibration weight when the sensor is automatically calibrated (g)
 */
void  setCalWeight(uint16_t triWeight);

接线图

组装步骤

注意要使秤杆前面的箭头朝下,连接传感器和秤杆的四根线尽量不要弯折,否则会影响数据精度

样例代码1-自动校准获取重量信息

#include <DFRobot_HX711_I2C.h>

//DFRobot_HX711_I2C MyScale(&Wire,/*addr=*/0x64);
DFRobot_HX711_I2C MyScale;

float Weight = 0;

void setup() {
  Serial.begin(9600);
  while (!MyScale.begin()) {
    Serial.println("The initialization of the chip is failed, please confirm whether the chip connection is correct");
    delay(1000);
  }
  //设置重量传感器模块自动校准时的校准重量(g)
  MyScale.setCalWeight(100);
  //设置重量传感器模块自动校准时的触发阈值(g),当只有秤上的物体重量大于此值时,模块才会开始校准流程
  //此值不能大于setCalWeight设置的校准重量
  MyScale.setThreshold(50);
  //获取校准值,校准操作完成后可得到准确的校准值
  Serial.print("the calibration value of the sensor is: ");
  Serial.println(MyScale.getCalibration());
  MyScale.setCalibration(MyScale.getCalibration());
  delay(1000);
}

void loop() {
  Weight = MyScale.readWeight();
  Serial.print("weight is: ");
  if(Weight > 0.5){
    Serial.print(Weight, 1);
  }
  else{
    Serial.print(0, 1);
  }
  Serial.println(" g");
  delay(1000); 
}

样例代码2-手动校准获取重量信息

step1.安装好套件,清空传感器上除秤面以外其他物体,如果秤面上加了托盘,则托盘算作秤面;除秤面外不要放其他物体

step2.按照接线图正确连接传感器,修改weight参数,并上传示例代码,上传成功后打开串口监视器,波特率调节为9600

step3.放上重量为weight的物体,观察打印信息

#include <DFRobot_HX711_I2C.h>

DFRobot_HX711_I2C MyScale;

float weight=100;//校准物体重量
float  cal_error=0.1;//校准精度,数值越低精度越高
long cal_have_errors=2236;//1KG 
//long cal_have_errors = 300;//5KG

float cal_offset;
float readval;
void setup() {
  Serial.begin(9600);
  while (!MyScale.begin()) {
    Serial.println("The initialization of the chip is failed, please confirm whether the chip connection is correct");
    delay(1000);
  }
  MyScale.setCalibration(cal_have_errors);
  while(MyScale.readWeight() < 10){
  Serial.println("放入重量为weight的物品开始校准"); 
  delay(1000);
  }
  Serial.println("已开始,请耐心等待");
  delay(2000);
  MyScale.setCalibration(cal_have_errors);
  cal_offset = cal_have_errors * MyScale.readWeight() / weight;
  MyScale.setCalibration(cal_offset);
  Serial.print("初始校准值:");
  Serial.println(cal_offset);
}

void loop() {
  if(MyScale.readWeight() < weight - cal_error){
    cal_offset = cal_offset - cal_error/2;
    MyScale.setCalibration(cal_offset);  
    Serial.print("当前校准值   ");  
    Serial.print(cal_offset);  
    Serial.print("当前校准重量"); 
    Serial.print(MyScale.readWeight(), 1);
    Serial.println("g-");  
  }
  else if(MyScale.readWeight() > weight + cal_error){
    cal_offset = cal_offset + cal_error/2;
    MyScale.setCalibration(cal_offset); 
    Serial.print("当前校准值    ");  
    Serial.print(cal_offset);  
    Serial.print("当前校准重量"); 
    Serial.print(MyScale.readWeight(), 1);
    Serial.println("g+");  
  }
  else
  {
    Serial.print("校准成功!请记录校准值      "); 
    Serial.print("校准值    ");  
    Serial.print(cal_offset);  
    Serial.print("校准重量"); 
    Serial.print(MyScale.readWeight(), 1);
    Serial.println(" g");
  }
}

step4.记录校准值

step5.清空传感器上除秤面以外其他物体

step6.使用下方代码,并将下方代码中的cal_offset参数修改为step4获得的校准值,重新上传

#include <DFRobot_HX711_I2C.h>

//DFRobot_HX711_I2C MyScale(&Wire,/*addr=*/0x64);
DFRobot_HX711_I2C MyScale;

float cal_offset = 2103.61;
float Weight = 0;

void setup() {
  Serial.begin(9600);
  while (!MyScale.begin()) {
  Serial.println("The initialization of the chip is failed, please confirm whether the chip connection is correct");
  delay(1000);
  }
  //手动设置校准校准值
  MyScale.setCalibration(cal_offset);
}

void loop() {
  // 获取物体重量
  Weight = MyScale.readWeight();
  Serial.print("weight is: ");
  if(Weight > 0.5){
    Serial.print(Weight, 1);
  }
  else{
    Serial.print(0, 1);
  }
  Serial.println(" g");
  delay(1000);  
}

兼容性

MCU Work Well Work Wrong Untested Remarks
Arduino uno
FireBeetle-ESP8266
FireBeetle-ESP32
掌控板
树莓派
microbit