LinkedIn YouTube Facebook
Szukaj

Wstecz
IoT

[PRZYKŁAD] Waga elektroniczna – HX711, Arduino i belka tensometryczna

Połączenie wszystkich elementów projektu jest bardzo proste. Nakładkę z ekranem LCD należy założyć na płytkę KAmduino UNO. Przewody zasilania belki należy połączyć z pinami „E+” i „E-” modułu z układem HX711, natomiast sygnał z kanałem A przetwornika. Sam moduł można zasilać napięciem 5V, zaś porty danych należy podpiąć do portów analogowych, których numery następnie trzeba podać w kodzie programu. Poniżej znajduje się schemat połączenia:

 

Rys. 6. Schemat układu

Połączenie przedstawiono również w poniższych tabelach:

Kolor przewodu belki tensometrycznej
Pin modułu z układem HX711
Czerwony E+
Czarny E-
Biały A-
Zielony A+
Pin modułu z układem HX711 Pin KAmduino Uno
GND GND
DT A1
SCK A2
VCC +5V

Połączony układ przedstawiono na poniższym zdjęciu:

Rys. 7. Zdjęcie zmontowanego układu

Po zmontowaniu części sprzętowej układu można przejść do oprogramowania platformy Arduino. (Pełny kod znajduje się w sekcji „do pobrania”)

Do obsługi modułu z układem HX711 można użyć bibliotek dostępnych w internecie. Ja użyłem biblioteki dostępnej pod tym linkiem. Na początku kodu należy zaimportować biblioteki odpowiedzialne za obsługę układu HX711 oraz ekranu LCD. Inicjalizowane są także instancje klas zawartych w ww. bibliotekach oraz zmienne globalne.

#include "HX711.h"
#include <LiquidCrystal.h>

HX711 waga;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 
char odczyt[6];
float ciezar;

W funkcji setup() uruchamiane są moduły wyświetlacza i wzmacniacza HX711. Dokonuje się też tutaj wstępna kalibracja wagi. Funkcja tare odczytuje aktualny poziom zera na wadze. Argument informuje funkcję z ilu pomiarów powinna uśrednić wynik. Podczas wykonywania tej funkcji waga powinna być nieobciążona. Funkcja set_scale skaluje odczyt wagi. Podana wartość jest zmierzoną „surową” wartością (podawaną przez przetwornik) dla obciążenia odważnikiem 20 dag, dla belki tensometrycznej o maksymalnym obciążeniu do 1 kg. Aby otrzymać wartości wyskalowane w gramach, należy podzielić wartość przez ciężar odważnika w gramach. Aby otrzymać na ekranie „surowe” wartości z przetwornika, można uruchomić funkcję set_scale bez argumentu.

void setup() {
  waga.begin(A1, A2);
  lcd.begin(16,2); //inicjalizacja ekranu       
  lcd.setCursor(0,0);
  waga.set_scale(419341.0/200.0);                  
  waga.tare(20);				       
}

W funkcji loop() odczytywana jest aktualna wartość wagi za pomocą funkcji get_units. Argumentem funkcji jest ilość pomiarów, które są potem uśredniane. Funkcja dtostrf dokonuje formatowania wyjścia – z jednym miejscem po przecinku. Następnie wynik pomiaru wyświetlany jest na ekranie LCD. Na koniec każdej pętli przetwornik jest wyłączany i włączany.

void loop() {
  ciezar=waga.get_units(10);
  dtostrf(ciezar,6,1,odczyt);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Odczyt wagi:");
  lcd.setCursor(0,1);
  lcd.print(odczyt);
  lcd.print(" g");
  waga.power_down();
  delay(100);
  waga.power_up();
}

Poniższy film wideo demonstruje działanie przykładu: