- mois-Blog - https://www.euse.de/wp -

Durchbruch Bienenwaage

Das ist Eintrag 10 in der Serie "Bienenwaage [1]".

Der Bauanleitungen dieser Serie sind veraltet. Aktuell ist die Serie Bienenkiste 2.0 [2].

Beim Bienenwaagenprojekt haben wir mit vereinten Kräften einen Durchbruch geschafft: Die Waage läuft und sie produziert Werte mit einem Schwankungsbereich von +-15 Gramm.

Und so kams: Nachdem wir uns nach einem Tipp von Finn für eine Wägezelle [3] entschieden hatten, sollte erstmal ein stabiles Gestell für die spätere Waage her. Hier ein paar Eindrücke von den Arbeiten in der Metallwerkstatt unseres Vertrauens:

Und so sieht das dann aus mit der Wägezelle zwischen den beiden Auflageteilen des Gestells:

Wägezelle verschraubt zwischen den zwei H-Stücken des Wiegegestells [8]
Wägezelle verschraubt zwischen den zwei H-Stücken des Wiegegestells

Zwischen die Wägezelle und den Arduino haben wir einen Analog-Digital-Wandler geschaltet, weil wir uns nicht zutrauten, die entsprechenden Schaltungen auf dem Breadboard aufzubauen. Wir verwenden den Texas Instruments ADS1231 [9] 24-Bit Analog-to-Digital Converter for Bridge Sensors (Clemens bringt im Arduino-Forum noch den HX711 als Alternative [10] in die Diskussion und beteiligt sich mit weiteren Vorschlägen am einschlägigen Bienenwaagenthread [11]). Auf eine breadboardtauglichen Platine (z.B. bei Adafruit [12] – dort auch Löttipps [13], wichtig ist die Orientierung von Pin1 [14] -, bei ebay [15] oder auch im Laden bei Segor in Berlin: fertig gelötet [16] oder zum Selberlöten [17] mit den passenden Steckern [18] – Vorsicht: Mittagspause) sieht das winzige Ding so aus:

Zum Betrieb mit dem Arduino ist eine spezielle Bibliothek nötig. Bei uns funktioniert die aus dem zip-File am Ende eines einschlägigen Beitrags im Arduinoforum [21].

Aber bevor es losgehen kann, brauchts ja erst noch eine Schaltung. Die sieht z.B. so aus (Wir orientierten uns dabei an der Beispielschaltung für eine Wägezelle in der Doku des AD-Wandlers [22]  auf S. 16):

Bei einem längeren Breadboard unbedingt auf die ggf. nicht durchgängigen +- und --Leitungen achten! [23]
Bei einem längeren Breadboard unbedingt auf die ggf. nicht durchgängigen +- und –Leitungen achten!

Wichtig ist die richtige Verkabelung der Wägezelle am ADS1231. Folgendes Schema sollte das Foto erläutern:

litze (farbe)   kommt an     kabelfarbe
von wägezelle   pin nr.      auf dem foto
+ EXC (rot)      10             rot
+ Sig (grün)     7              grün
- EXC (schwarz)  9              grau
- Sig (weiß)     8              weiß

Das ganze erschließt sich auch aus der Beispielschaltung für eine Wägezelle in der Doku des AD-Wandlers [22]  auf S. 16: Dort den Load Cell-Anschluss ansehen und das mit den Anschlüssen auf der letzten Seite der Wägezellendoku [24] abgleichen. Bei den drei roten Kondensatoren handelt es sich um einen 0,1μF [25]– und zwei 1μF [26]-MKS-Folienkondensatoren.

Wenn alles gut gegangen ist, dann den Sketch hochladen und den Monitor anschalten. Dort sollten schneller als im Sekundentakt Zeilen durchrauschen:

P1040457 [27]
Bild der Monitorausgabe

 

Den Arduino-Sketch hat Clemens beigesteuert. Er liest sich wie folgt.

Wichtig dabei: Der Variablen long loadCellZeroOffse muss ein Wert zugewiesen werden, der dem jeweiligen Waagenaufbau entspricht, damit die Messungen bei einer Auflage von 0 auch 0 anzeigen.

/*
 Open Bee Scale
 :: Test ADS1231
2014-02 Clemens Gruber
This code is in the public domain.
 */
// load cell characteristic
 // define here individual values for used load cell type
 //
 // - 11994383 sensor value for "0 kg"
 // write down the sensor value of the scale with no load and adjust it here
 // - 6016676 is the value for a 1 kg weight load
 // add a load with known weight in kg to the ceall, note the sesor value, calculate
 // the value for a 1 kg load and adjust it here
 long loadCellZeroOffset = 48748056;
 long loadCellKgDivider = 6016676;
// Libraries
 #include
 ADS1231 loadCell; // create ADS1231 object
 long weightSensorValue;
 float weightKg;
 boolean weightKgTrusted = false;
#include
 // RunningMedian sample size is 11
 RunningMedian weightSamples = RunningMedian(11); // create RunningMedian object
// debug
 long outputLines = 0;
void setup() {
 // initialize serial communication
 Serial.begin(9600);
 // load cell / ADS1231 pin definition: SCL 8, Data 5, PowerDown 9
 loadCell.attach(8,5,9);
 }
void loop() {
 // ADS1231 ready?
 if (loadCell.check()) {
 // read input of ADS1231:
 weightSensorValue = loadCell.readData();
 // calculate weight in kg
 weightKg =1 {
 weightKgTrusted = true;
 }
// debug
 // print debug info
// print header every 20 lines
 if (outputLines % 20 == 0) {
 Serial.println();
 Serial.println("sensor \t\tkg \tSize \tCnt \tLow \tAvg \tMed \tTrust \tHigh");
 }
// print out the weight sensor data and calculated kg
 Serial.print(weightSensorValue);
 Serial.print("\t");
 Serial.print(weightKg, 3);
 Serial.print("\t");
// output debug values
 Serial.print(weightSamples.getSize());
 Serial.print("\t");
 Serial.print(weightSamples.getCount());
 Serial.print("\t");
 Serial.print(weightSamples.getLowest(), 3);
 Serial.print("\t");
 Serial.print(weightSamples.getAverage(), 3);
 Serial.print("\t");
 Serial.print(weightSamples.getMedian(), 3);
 Serial.print("\t");
 Serial.print(weightKgTrusted);
 Serial.print("\t");
 Serial.println(weightSamples.getHighest(), 3);
 // delay(100);
// clear RunningMedian samples array all 35 lines
 if (outputLines % 35 == 0) {
 weightSamples.clear();
 weightKgTrusted = false;
 }
outputLines ++;
 }
}

Im Beitrag „Bienenwaage: Prototyp im Testbetrieb“ [28] sind die weiteren Schritte beschrieben.

 

  • [29]
  • [30]
  • [31]
  • [32]
  • [33]
Series Navigation<< Solarladegerät fertig [34]Bienenwaage: Prototyp im Testlauf (Bauanleitung) >> [35]
  1. float)weightSensorValue - loadCellZeroOffset) / loadCellKgDivider; // add data to runnig median sample weightSamples.add(weightKg); // complete sample? if (weightSamples.getCount() == weightSamples.getSize( [ [36]]