Zbudujmy własną wagę, czyli krótko o HX711

Niedawno w naszym sklepie pojawił się nowy moduł – HX711. Jest to precyzyjny wzmacniacz wrażliwy na zmiany rezystancji belki tensometrycznej. Dzięki niemu z niesamowitą łatwością zaprogramujemy w naszym mikrokontrolerze funkcję pomiaru wagi.

Co będzie potrzebne?

Jak podłączyć?

Po jednej stronie płytki mamy złącze 4-pinowe. Wszystkie 4 piny podłączamy do mikrokontrolera. VCC to zasilanie z zakresu 2,6 do 5,5 V (dzięki tak szerokiemu zakresowi możemy podłączyć moduł zarówno do kontrolerów o logice 3V3 jak i 5V). GND to standardowo masa zasilania. DT oraz SCK to magistrala komunikacyjna. Te piny możemy podłączyć praktycznie do dowolnych GPIO mikrokontrolera.

Z drugiej strony płytki znajduje się złącze 6-pinowe. Wszystkie te piny przeznaczone są do podłączenia do belki tensometrycznej. Już śpieszę z wyjaśnieniem co oznaczają te literki:

E+ oraz E- to zasilanie belki. Para A+, A- oraz B+, B- to wyprowadzenia sygnałowe oznaczane po stronie belki jako S+ i S-. Na module mamy oznaczenia A oraz B, ponieważ posiada on 2 kanały do których możemy podłączyć belkę.

Schemat oraz kod w tym artykule pisany jest dla NodeMCU, ale bez problemu będzie on działał także w innych mikrokontrolerach, które wymieniłem na początku artykułu, wystarczy tylko zmienić piny na których podłączony jest moduł.

U mnie po podłączeniu wygląda to tak:

Jak rozróżnić kabelki w belce tensometrycznej?

Z reguły producenci stosują się do poniższych zasad:

  • E+ – czerwony
  • E- – czarny
  • S+ – biały
  • S- – niebieski / zielony

Dla pewności możemy sprawdzić belkę omomierzem. Pomiędzy E+ a E- oraz S+ a S- powinna być podobna rezystancja, a pomiędzy dowolnym kabelkiem sygnałowym, a zasilającym około 2x mniejszy opór.

Ewentualnie jeżeli mamy jeszcze przylutowane kabelki do płytki z oryginalnej wagi, to mogą znajdować się na niej oznaczenia. Np. u mnie wyglądało to tak:

Jeżeli pomylimy S+ oraz S- ze sobą to nic się nie stanie. Po prostu waga będzie działała w drugą stronę – na większy nacisk zareaguje wyświetlając mniejszą wagę.

Kod

Cały kod można pobrać tutaj.

Dodatkowo musimy zainstalować w Arduino bibliotekę autorstwa bodge ze strony na GitHubie: https://github.com/bogde/HX711

Jak widać podstawowy kod do obsługi takiej wagi jest niesamowicie prosty. Na początku jak zwykle definiujemy sobie kilka stałych, które będą oznaczały odpowiednie piny.

W funkcji setup uruchamiamy port szeregowy, tarujemy wagę i ustawiamy piny ADD oraz SUB (służące do zmiany współczynnika kalibracji) jako INPUT_PULLUP. Warto te piny podciągnąć do stanu wysokiego rezystorami np. 10K, gdyż np. u mnie w NodeMCU to podciąganie coś nie działa.

void setup() {
  Serial.begin(9600);
  scale.set_scale();
  scale.tare();
  pinMode(ADD, INPUT_PULLUP);
  pinMode(SUB, INPUT_PULLUP);
}

Natomiast w funkcji loop ustawiamy współczynnik kalibracji, wypisujemy wynik oraz robimy ewentualną korektę.

void loop() {
  scale.set_scale(cal);

  Serial.print(scale.get_units());
  Serial.print(" g");
  Serial.print(", wsp. kalibracji: ");
  Serial.println(cal);

  if(!digitalRead(ADD)) {
    cal += 50;
  } else if(!digitalRead(SUB)) {
    cal -= 50;
  }
}

Jak skalibrować wagę?

Ustawmy współczynnik kalibracji początkowo na np. -100 (zmienna cal). Wgrywamy program i uruchamiamy monitor portu szeregowego.

Powinniśmy ujrzeć tam wynik równy 0 kg/g/funtów/jakiejkolwiek innej jednostki, którą sobie wybraliśmy.

Następnie bierzemy jakiś przedmiot o znanej wadze i kładziemy go na naszej wadze. Odczyt wagi powinien się zmienić, nie koniecznie na poprawny. Kolejną czynnością, którą musimy wykonać to dobranie odpowiedniej wartości współczynnika dla naszej belki tensometrycznej. Robimy to poprzez zwieranie do masy pinów ADD (zwiększenie współczynnika) lub SUB (zmniejszenie współczynnika). Kiedy na monitorze pojawi się poprawna waga dla położonego przedmiotu spisujemy wyświetloną wartość współczynnika i wpisujemy ją na stałe do programu.

Po takiej kalibracji warto też postawić na wadze kilka innych przedmiotów o znanej wadze i sprawdzić, czy wskazania są poprawne.