Tensometryczna waga elektroniczna (2/2)


Tomasz Bartuś



2019-03-24
Tensometryczna waga elektroniczna

Wstęp

W pierszej części cyklu poświeconego projektowi wagi elektronicznej opisałem budowę i zasadę działania tensometrów z typowych wag łazienkowych, opowiedziałem o zasadzie działania mostka Wheatstona oraz jego typowych układach aplikacyjnych w wagach tensometrycznych, a na koniec opisałem sposób łączenia tensometrów z wag łazienkowych w układ mostka. W drugim odcinku cyklu skupimy się na praktycznym wykorzystaniu tej wiedzy. Wykonamy układ wagi tensometrycznej (Fig. 1), zajmiemy się oprogramowaniem wagi i dokonamy jej kalibracji.

Waga elektroniczna wykonana z zastosowaniem platformy Arduino
Fig. 1. Waga elektroniczna wykonana z zastosowaniem platformy Arduino

Montaż układu

Korzystając ze schematu przedstawionego w poprzednim odcinku tego cyklu, zmontujmy układ mostka (Fig. 2).

Schemat montażowy mostka
Fig. 2. Schemat montażowy przetworników tensometrycznych w układzie pełnego mostka Wheatstona

Aby ułatwić połączenie tensometrów w mostek Wheatstona, układy wag łazienkowych i podobne, wykorzystują specjalne płytki połączeniowe (Fig. 3). Niektóre firmy np. SparkFun
posiadają takie płytki w swojej ofercie handlowej.

Płytka połączeniowa czujników tensometrycznych
Fig. 3. Płytka połączeniowa czujników tensometrycznych

Zmiany napięcia pomiędzy wyprowadzeniami "S +" i "S -" mostka Wheatstona są na tyle małe, że bezpośrednie podłączenie go do układu Arduino nie jest możliwe. Zanim sygnał trafi do układu mikrokontrolera należy go odpowiednio wzmocnić. Popularnym modułem wzmacniacza układów tensometrycznych jest układ HX711 (Fig. 4). Jest to wzmacniacz operacyjny z dokładnym 24-bitowym konwerterem analogowo-cyfrowym. Moduł oparty jest na układzie Avia Semiconductor HX711. Dzięki wbudowanemu stabilizatorowi napięcia oferuje dużą swobodę zasilania. Może być stosowany w aplikacjach wykorzystujących napięcie zasilania zarówno 5V jak i 3,3V.

HX711
Fig. 4. Moduł pomiarowy tensometru HX711

Moduł HX711 dysponuje następującymi pinami:

E+ - Excitation+ VCC dla belki tensometrycznej
E- - Excitation- GND dla belki tensometrycznej
A- / A+ - wejście belki tensometrycznej (kanał A)
B- / B+ - wejście belki tensometrycznej (kanał B)
GND - masa
DT - dane (magistrala szeregowa)
SCK - zegar (magistrala szeregowa)
VCC - zasilanie modułu

Jak widać HX711 umożliwia podłączenie dwóch układów tensometrycznych (kanały A i B). Jeżeli korzystamy z jednego mostka Wheatstona, jego wyprowadzenia "S +" i "S -" podpinamy odpowiednio do wejść "A +" i "A -", pozostawiając wejścia "B +" i "B -" niepodłączone.

Schemat

Schemat montażowy wagi elektronicznej
Fig. 5. Schemat montażowy wagi elektronicznej

Lista części

  1. platforma Arduino nano,
  2. przetworniki tensometryczne z wagi łazienkowej typu GML692 lub podobne, szt. 4,
  3. moduł wzmacniacza operacyjnego HX711,
  4. płytka prototypowa,
  5. moduł wyświetlacza LCD 16 × 2,
  6. przewody/mostki.

Aby wykorzystać moduł HX711 musimy zainstalować bibliotekę HX711.

Kalibracja wagi

Firma Sparkfun udostępnia skrypt pod Arduino umożliwiający kalibrację urządzenia (określenie współczynnika kalibracji). Najnowsze wersję skryptu można pobrać z repozytorium GitHub. Szkic SparkFun_HX711_Calibration jest przykładowym programem dołączonym do biblioteki. Aby określić współczynnik kalibracji należy na czujniki tensometryczne położyć płaski przedmiot, np. deskę kuchenną, a następnie uruchomić układ. Na desce nie powinno się znajdować żadne obciążenie. Następnie wkładamy na deskę przedmiot o znanej masie. Za pomocą przycisków "+" i "-" (lub "a" i "z"), zatwierdzając to enterem, ustawiamy odczyt tak, aby zgadzał się z naszą znaną masą. Zapisujemy wartość współczynnika konwersji.

Kod

/*
 Example using the SparkFun HX711 breakout board with a scale
 By: Nathan Seidle
 SparkFun Electronics
 Date: November 19th, 2014
 License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).

 This is the calibration sketch. Use it to determine the calibration_factor that the main example uses. It also
 outputs the zero_factor useful for projects that have a permanent mass on the scale in between power cycles.

 Setup your scale and start the sketch WITHOUT a weight on the scale
 Once readings are displayed place the weight on the scale
 Press +/- or a/z to adjust the calibration_factor until the output readings match the known weight
 Use this calibration_factor on the example sketch

 This example assumes pounds (lbs). If you prefer kilograms, change the Serial.print(" lbs"); line to kg. The
 calibration factor will be significantly different but it will be linearly related to lbs (1 lbs = 0.453592 kg).

 Your calibration factor may be very positive or very negative. It all depends on the setup of your scale system
 and the direction the sensors deflect from zero state
 This example code uses bogde's excellent library: https://github.com/bogde/HX711
 bogde's library is released under a GNU GENERAL PUBLIC LICENSE
 Arduino pin 2 -> HX711 CLK
 3 -> DOUT
 5V -> VCC
 GND -> GND

 Most any pin on the Arduino Uno will be compatible with DOUT/CLK.

 The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.

*/

#include "HX711.h"

#define DOUT  3
#define CLK  2

HX711 scale;

float calibration_factor = -7050; //-7050 worked for my 440lb max scale setup

void setup() {
  Serial.begin(9600);
  Serial.println("HX711 calibration sketch");
  Serial.println("Remove all weight from scale");
  Serial.println("After readings begin, place known weight on scale");
  Serial.println("Press + or a to increase calibration factor");
  Serial.println("Press - or z to decrease calibration factor");

  scale.begin(DOUT, CLK);
  scale.set_scale();
  scale.tare(); //Reset the scale to 0

  long zero_factor = scale.read_average(); //Get a baseline reading
  Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects.
  Serial.println(zero_factor);
}

void loop() {

  scale.set_scale(calibration_factor); //Adjust to this calibration factor

  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 1);
  Serial.print(" kg"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.println();

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 10;
  }
}

Po określeniu wartości współczynnika kalibracji, określoną wartość należy wykorzystać w programie SparkFun_HX711_Example (kolejny przykładowy skrypt w zasobach biblioteki HX711).

Kod

/*
 Example using the SparkFun HX711 breakout board with a scale
 By: Nathan Seidle
 SparkFun Electronics
 Date: November 19th, 2014
 License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
 
 This example demonstrates basic scale output. See the calibration sketch to get the calibration_factor for your
 specific load cell setup.
 
 This example code uses bogde's excellent library: https://github.com/bogde/HX711
 bogde's library is released under a GNU GENERAL PUBLIC LICENSE
 
 The HX711 does one thing well: read load cells. The breakout board is compatible with any wheat-stone bridge
 based load cell which should allow a user to measure everything from a few grams to tens of tons.

 Arduino pin 2 -> HX711 CLK
 3 -> DAT
 5V -> VCC
 GND -> GND
 
 The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.
 
*/

#include "HX711.h"

#define calibration_factor -7050.0 //This value is obtained using the SparkFun_HX711_Calibration sketch

#define DOUT  3
#define CLK  2

HX711 scale(DOUT, CLK);

void setup() {
  Serial.begin(9600);
  Serial.println("HX711 scale demo");

  scale.set_scale(calibration_factor); //This value is obtained by using the SparkFun_HX711_Calibration sketch
  scale.tare();	//Assuming there is no weight on the scale at start up, reset the scale to 0

  Serial.println("Readings:");
}

void loop() {
  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 1); //scale.get_units() returns a float
  Serial.print(" kg"); //You can change this to kg but you'll need to refactor the calibration_factor
  Serial.println();
}

Schemat

Schemat montażowy wagi elektronicznej z wyświetlaczem OLED
Fig. 6. Schemat montażowy wagi elektronicznej z wyświetlaczem OLED

Film



Wykorzystane materiały

Al-Mutlaq S., Giant A., Load Cell Amplifier HX711 Breakout Hookup Guide
DegrawSt, Arduino Bathroom Scale With 50 Kg Load Cells and HX711 Amplifier
 
 

Doktorat

Spis treści
Rozdzialy
Abstrakt [pl]
Abstract [eng]