HX711 arduino vægt støj - Hvilket filter? (Læst 3814x)

Offline joeytribbiani

  • Modstanden
  • **
  • Indlæg: 29
  • Antal brugbare Indlæg: 0
    • Vis profil
HX711 arduino vægt støj - Hvilket filter?
« Dato: August 01, 2015, 11:54:26 »
Hej  :)

Jeg kom for noget tid siden til at brænde min gamle vægt af og har derfor lavet en arduino projekt ud af den gamle load cell. Vægten fungere ok, men jeg har lidt problemer at den konstant står og svinger med +/- 0,2 gram, med og uden belastning.

Jeg har kunne læse mig til at et filter måske kan hjælpe på det. Den kode jeg har fået er sat til at lave 28 læsninger / sekund og så tage gennemsnit af disse målinger, men det er altså ikke præcist nok. Jeg kan sætte den helt op til 80 læsninger / sekund, og så bliver den lidt mere stabil, men så bliver den også meget sløv.

Jeg har google mig frem til at man måske kan bruge et running/moving filter som microsmooth eller måske endnu bedre, et mode filter. Men jeg har ikke selv evnerne til at sætte det ind i HX711 koden. 

Er der nogen der kan komme med nogle anbefalinger til et filter der ikke sløver vægten og kan give mig nogle pænere målinger? evt hjælpe med at sætte dem ind i min kode :)

HX711 standart koden ser således ud:
Kode:
#include "HX711.h"

// HX711.DOUT - pin #A1
// HX711.PD_SCK - pin #A0

HX711 scale(A1, A0); // parameter "gain" is ommited; the default value 128 is used by the library

void setup() {
  Serial.begin(38400);
  Serial.println("HX711 Demo");

  Serial.println("Before setting up the scale:");
  Serial.print("read: \t\t");
  Serial.println(scale.read()); // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));  // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight (not set yet)

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1); // print the average of 5 readings from the ADC minus tare weight (not set) divided
// by the SCALE parameter (not set yet) 

  scale.set_scale(2280.f);                      // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();         // reset the scale to 0

  Serial.println("After setting up the scale:");

  Serial.print("read: \t\t");
  Serial.println(scale.read());                 // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight, set with tare()

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided
// by the SCALE parameter set with set_scale

  Serial.println("Readings:");
}

void loop() {
  Serial.print("one reading:\t");
  Serial.print(scale.get_units(), 1);
  Serial.print("\t| average:\t");
  Serial.println(scale.get_units(10), 1);

  scale.power_down();         // put the ADC in sleep mode
  delay(5000);
  scale.power_up();
}

microsmooth: https://github.com/asheeshr/Microsmooth
 
mode filter: http://www.elcojacobs.com/eleminating-noise-from-sensor-readings-on-arduino-with-digital-filtering/

min kode: https://dl.dropboxusercontent.com/u/2613065/SartoriusScaleOLEDblink.zip
 
Mvh

 

Offline gerd

  • Administrator
  • µProcessoren
  • *****
  • Indlæg: 915
  • Antal brugbare Indlæg: 97
    • Vis profil
    • Hjemmeside med nogle af mine projekter
Sv: HX711 arduino vægt støj - Hvilket filter?
« Svar #1 Dato: August 03, 2015, 21:44:01 »
Hej Joey,
Når du sætter koden til at lave 28 læsninger kan du filtrere det senere med en moving average filter.
Størrelsen af filteret starter med "1" når der er store ændringer og filterets størrelse kan vokse op til n_max.
Jeg lavede her en eksempel med n_max=10: http://www.sebulli.com/scale_filter/index.php?lang=da

gerd