[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:
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: