参考文档为极客工坊大神记录
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=2315&highlight=hx711
库文件注释:
1 HX711(byte sck, byte dout, byte amp = 128, double co = 1); // 定义 sck、dout 接脚,增益倍数(默认128)和修正系数(默认1) 2 void set_amp(byte amp); // 改变增益倍数和对应的通道,至少调用一次 read() 后起作用 3 bool is_ready(); // 返回 hx711 是否可用,在 read() 函数中会被调用 4 long read(); // 返回传感器电压值,如果 hx711 不可用则程序会暂停在此函数 5 double bias_read(); // 返回:(read() - 偏移值) * 修正系数 6 void tare(int t = 10); // 将皮重添加到偏移值,影响每次 read(); 的调用 7 void set_co(double co = 1); // 修改修正系数(默认为1) 8 void set_offset(long offset = 0); // 修改偏移值(默认为0)
手动矫正的代码:
1 #include <HX711.h> // 包含库的头文件 2 3 HX711 hx(9, 10); // 数据接脚定义 4 5 void setup() { 6 Serial.begin(9600); 7 } 8 9 void loop() 10 { 11 double sum = 0; // 为了减小误差,一次取出10个值后求平均值。 12 for (int i = 0; i < 10; i++) // 循环的越多精度越高,当然耗费的时间也越多 13 sum += hx.read(); // 累加 14 Serial.println(sum/10); // 求平均值进行均差 15 }
以此代码空载测试输出一次,负重测试输出一次即A和B!
实际值/B-A=误差系数
输出校准后的数据做对比参考
#include <HX711.h> HX711 hx(9, 10, 64,0.009375 );//误差系数 void setup() { Serial.begin(9600); hx.set_offset(169600);//偏移值 } void loop() { delay(500); double sum0 = 0; double sum1 = 0; for (int i = 0; i < 10; i++) { sum0 += hx.read(); sum1 += hx.bias_read(); } Serial.print(sum0/10); Serial.print(" "); Serial.println(sum1/10); }
输出结果如下
1 81613.21 166.37 实际物体重量165 2 81636.21 166.74 3 81576.40 165.88 4 81598.40 166.57 5 81604.30 166.33 6 81546.60 165.67 7 81545.80 165.94 8 81594.80 166.27 9 81600.00 166.34 10 81580.90 166.05 11 81604.60 166.25 12 81592.10 165.60 13 81626.00 166.26 14 81667.00 166.47 15 81591.50 166.45 16 81589.71 166.43 17 81568.40 165.95 18 81587.60 166.18
自动除皮重
#include <HX711.h> HX711 hx(9, 10,64,0.009375); void setup() { Serial.begin(9600); hx.set_offset(64000); } void loop() { if(digitalRead(4) == LOW) hx.tare();//按下按钮即可去皮 delay(500); double sum0 = 0; double sum1 = 0; for (int i = 0; i < 10; i++) { sum0 += hx.read(); sum1 += hx.bias_read(); } Serial.print(sum0/10); Serial.print(" "); Serial.println(sum1/10); }
下一步进行自动校正功能的添加