Wykorzystanie belki tensometrycznej przy pomocy Arduino
Belka tensometryczna umożliwia zważenie danego przedmiotu. Ten krótki poradnik pokazuje jak ją obsłużyć wykorzystując płytkę Arduino Uno.
W przykładzie wykorzystano następujące elementy:
Podłączenie
Moduł jest zasilany bezpośrednio z Arduino, więc nie potrzebujemy zewnętrznego źródła energii. Piny podpinamy według poniższej tabeli:
Pin wzmacniacza | Pin Arduino |
---|---|
VCC | 5 V |
DAT | 3 |
CLK | 2 |
GND | GND |
Z drugiej strony modułu wzmacniacza podpinamy belkę tensometryczną według kolorów przewodów.
- RED - czerwony
- BLK - czarny
- WHT - biały
- GRN - zielony
Schemat podłączenia belki, wzmacniacza i Arduino Uno.
Obsługa
Na początku bibliotekę należy dodać do środowiska Arduino (Szkic -> Include Library -> Add .ZIP Library...).
W przykładzie zostały wykorzystane programy z dołączonej biblioteki. Na początek należy uruchomić program kalibracyjny SparkFun_HX711_Calibration (Plik -> Przykłady -> HX711 -> SparkFun_HX711_Calibration). Dzięki niemu możemy określić współczynnik dla użytej belki tensometrycznej.
Uruchamiamy układ bez obciążenia na belce. Następnie wkładamy przedmiot o znanej masie. Teraz za pomocą przycisków "+" i "-" (lub "a" i "z") ustawiamy odczyt tak, aby zgadzał się z naszą znaną masą, np.
Zrzut ekrany z monitora portu szeregowego.
Poniżej wykorzystany program (na podstawie tego z biblioteki)
- #include "HX711.h"
- #define DOUT 3 //pin 3 Arduino i wyjście DAT czujnika
- #define CLK 2 //pin 2 Arduino i wyjście CLK czujnika
- HX711 scale(DOUT, CLK);
- float calibration_factor = -7050; //współczynnik kalibracji
- void setup() {
- Serial.begin(9600);
- Serial.println("HX711 - program kalibracyjny");
- Serial.println("Usun obciazenie z belki");
- Serial.println("Po rozpoczeciu odczytu, umiesc znana mase na belce");
- Serial.println("Wcisnij + lub a by zwiekszyc wspolczynnik kalibracji");
- Serial.println("Wcisnij - lub z by zwiekszyc wspolczynnik kalibracji");
- scale.set_scale();
- scale.tare(); //Resetuje skalę na 0
- long zero_factor = scale.read_average(); //Odczyt podstawy
- Serial.print("Zero factor: "); //Może być wykorzystane aby usunąć potrzebę tarowania skali. Użyteczne w projektach o stałej skalli
- Serial.println(zero_factor);
- }
- void loop() {
- scale.set_scale(calibration_factor); //Wyrównanie według współczynnika kalibracji
- Serial.print("Odczyt: ");
- Serial.print(scale.get_units(), 1);
- Serial.print(" kg"); //Dowolnie możemy wybrać kilogramy lub funty, ponieważ między nimi jest liniowa zależność
- Serial.print(" Wspolczynnik_kalibracji: ");
- Serial.print(calibration_factor);
- Serial.println();
- if(Serial.available())
- {
- char temp = Serial.read(); //pobranie wpisanej wartości i zmiana współczynnika kalibracji
- if(temp == '+' || temp == 'a')
- calibration_factor += 10;
- else if(temp == '-' || temp == 'z')
- calibration_factor -= 10;
- }
- }
Następnie odczytaną wartość należy wykorzystać w programie SparkFun_HX711_Example (Plik -> Przykłady -> HX711 -> SparkFun_HX711_Example). My użyjemy spolszczonego programu:
- #include "HX711.h"
- #define calibration_factor -3350.0 //Odczytana wartość z programu kalibracyjnego
- #define DOUT 3 //pin 3 Arduino i wyjście DAT czujnika
- #define CLK 2 //pin 2 Arduino i wyjście CLK czujnika
- HX711 scale(DOUT, CLK);
- void setup() {
- Serial.begin(9600);
- Serial.println("HX711 scale demo");
- scale.set_scale(calibration_factor); //Ustawienie kalibracji
- scale.tare(); //Zerowanie wskazania na początek
- Serial.println("Odczyty:");
- }
- void loop() {
- Serial.print("Odczyt: ");
- Serial.print(scale.get_units(), 1); //scale.get_units() zwraca zmienną float
- Serial.print(" kg"); //Dowolnie możemy wybrać kilogramy lub funty, lecz przy zmianie zmienia się również współczynnik kalibracji
- Serial.println();
- }
Teraz możemy ważyć dowolne przedmioty. Wynik pracy programu widoczny jest na screenie poniżej:
Zrzut ekrany z monitora portu szeregowego.