參考文檔為極客工坊大神記錄
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); }
下一步進行自動校正功能的添加
