W tym artykule zajmiemy się obsługą czujnika tensometrzycznego z wykorzystaniem wzmacniacza HX711 i dedykowanej dla niego biblioteki HX711.h. Następnie zmierzoną wagę wyświetlimy z użyciem dostępnego na naszej platformie ADEAS APP widgetu wagi. Widok ten umożliwia nam wyświetlanie aktualnego wskazania wagi na naszym tensometrze, dostosowanie czasu jej odświeżania oraz wyzerowania wagi za pomocą przycisku tarowania. Jest to jeden z kilku widgetów które korzystają z funkcji przesyłania danych za pomocą serwera websocketowego, dzięki czemu proces tarowania wagi jest szybki i nie obciąża niepotrzebnie bazy danych. Omówimy sobie krok po kroku proces stworzenia tego widoku oraz odpowiednie dostosowanie kodu naszego urządzenia ADEAS UNO do pracy z tensometrem. Jeżeli nie wiesz jak stworzyć nowy widok oraz punkt pomiarowy, to zapraszam Cię do naszego poprzedniego artykułu - Proces wysyłania i odbierania danych na serwer gdzie proces ten został dokładnie omówiony.
Na początku dodajmy do naszego urządzenia ADEAS UNO nowy punkt pomiarowy, który będzie przechowywał dane z tensometru. Aktualna waga wyświetlana będzie w formie liczby zmiennoprzecinkowej więc należy jako typ danych wybrać "Number".


Po dodaniu nowego punktu pomiarowego możemy przejść do stworzenia nowego widgetu dla naszego dashboardu. Z listy dostępnych widoków wybierzmy opcję "Waga".


Opcje konfiguracyjnego tego widoku są nieco zmodyfikowane aby dostosować je do jego działania. Opcje wyboru wielkości widoku zostały ograniczone do jedynie 50% aby zachować odpowiednią skalowalność umieszczonego tam dedykowanego obrazka. Dodany został również nowy parametr jakim jest czas odświeżania naszego widoku. Wybierając odpowiedni czas w sekundach, widok będzie odświeżał się automatycznie co zadaną wartość niezależnie od szybkości przesyłania danych z urządzenia ADEAS UNO. Dodatkowo ilość dostępnych punktów pomiarowych została ograniczona jedynie do jednego. Skonfigurujmy nasz widok dostosowując go do naszych potrzeb wybierając odpowiednią nazwę, czas odświeżania oraz uprzednio dodany do naszego urządzenia punkt pomiarowy.


Jeżeli udało nam się poprawnie skonfigurować nasz widok, to w naszym dashboardzie pojawi się nowe okno z obrazkiem wagi i aktualną wartością jej wskazania.


Proces konfiguracji mamy już za sobą, teraz możemy przejść do dostosowania naszego kodu do pracy z czujnikiem tensometrycznym i wzmacniaczem HX711. Aby móc poprawnie korzystać ze wzmacniacza HX711 niezbędne jest dodanie do naszego środowiska ARDUINO IDE dedykowanej do jego obsługi biblioteki HX711.h. Link do pobrania biblioteki znajdziecie w artykule : Biblioteka ADEAS_HX711.h, a jeżeli nie wiesz jak dodać bibliotekę skorzystaj z analogicznych kroków jak w przypadku dodawania biblioteki ADEAS.h z poprzedniego artykułu : Instalacja biblioteki ADEAS.h w Arduino IDE.
Kiedy mamy już dodaną bibliotekę, możemy przejść do napisania kodu do jej obsługi. Stwórzmy nowy szkic i uzupełnijmy go o niniejszy kod :
#include <ADEAS.h>
#include <ADEAS_HX711.h>
/**** SETUP ****/
void setup()
{
ADEAS::setup("WIFI_SSID", "WIFI_PASSWORD", "XXXXXXXXX");
SerialConnector::commandsHandler.attach("Tensometer::tare", Tensometer::setTensometerZeroFactor);
Tensometer::prepare(4, 5);
}
float weight = 0;
/**** LOOP ****/
void loop()
{
ADEAS::process();
if (API::isReady())
{
weight = Tensometer::getWeight();
API::updateData("waga", weight);
}
}
Pamiętaj aby uzupełnić funkcję ADEAS::setup() o odpowiednie dane Twojego łącza wi-fi oraz tokenu urządenia które posiadasz!
Zanim przejdziemy do analizy naszego kodu, omówmy sobie pokrótce specyfikację urządzenia ADEAS UNO oraz sposób podłączenia wzmacniacza HX711 do naszego urządzenia. Platforma ADEAS UNO wyposażona jest w 14 pinów wejścia/wyjścia które możemy wykorzystać do podłączenia różnego rodzaju czujników/urządzeń. Wzmacniasz HX711 wyposażony jest w cztery piny wyjścia : napięcie 5V, masa oraz piny SCK i DATA. Schemat podłączenia wzmacniacza do ADEAS UNO dla przykładu użytego w artykule przedstawia się następująco :
HX711 ADEAS
+5V -> +5V
SCK -> D4
DATA -> D5
GND -> GND
Kiedy udało nam się odpowiednio podłączyć wzmacniacz do urządzenia możemy przejść do analizy krok po kroku utworzonego kodu.
SerialConnector::commandsHandler.attach("Tensometer::tare", Tensometer::setTensometerZeroFactor);
Dodanie funkcji tarowania przez serwer websocket.
Tensometer::prepare(4, 5);
Funkcja informująca urządzenie na jakich pinach znajdują się wyjścia SCK i DATA wzmacniacza HX711. Pierwszy argument funkcji odpowiada za wyjście SCK a drugi za wyjścia DATA. W przypacku tego przykładu wyjście SCK podłączone jest do pinu D4 a wyjście DATA do pinu D5 naszego urządzenia ADEAS UNO. W waszym przypadku może to być każdy inny pin wejścia/wyjścia należy wtedy odpowiednio zmienić argumenty funkcji Tensometer::prepare().
float weight = 0;
Inicjalizacja zmiennej do przechowywania aktualnego wskazania wagi.
weight = Tensometer::getWeight();
API::updateData("waga", weight);
Funkcja Tensometer::getWeight() zwraca aktualne wskazanie wagi jako liczbę zmiennoprzecinkową z dokładnością do dwóch miejsc po przecinku. Następnie wysyłamy otrzymane wskazanie do serwera za pomocą WEB API.
Wgrajmy nasz kod do urządzenia i połóżmy obciążenie na wadze aby zaobserwować zmiany wskazania na widgecie. Jeżeli udało nam się wszystko poprawnie wgrać, wskazanie wagi powinno się zmienić tak jak na przykładzie poniżej:


Spróbujmy teraz wytarować naszą wagę za pomocą przycisku "Tarowanie". Po krótkiej chwili wskazanie wagi powinno zmienić się na 0 kg, a następnie po zdjęciu obciążenia waga powinna wskazywać wynik ujemny. Stan aktualnego wytarowania zapisuje się w pamięci urządzenia, więc nawet po odłączeniu i ponownym podłączeniu zasilania, nie jest konieczne przeprowadzenie kolejnego tarowania wagi. Jeżeli chcemy przywrócić naszą wagę do początkowej wartości tary, należy zdjąć całe obciążenie z wagi i ponownie nacisnąć przycisk tarownia.


W taki oto sposób przy minimalnej ilości kodu udało nam się w prosty sposób skonfigurować i wyświetlić aktualne wskazanie naszej wagi. Dzięki wykorzystaniu transmisji danych z użyciem serwera websocketowego nie obciążamy dodatkowo naszej bazy danych przy prostych operacjach. W kolejnych artykułach szczegółowo omówimy kolejne widgety, które współgrając ze sobą dadzą możliwość stworzenia wielu ciekawych projektów.
Instalacja biblioteki ADEAS.h w środowisku Arduino IDE
Funkcja wysyłania i odbierania danych na serwer