Siłomierz to urządzenie przeznaczone do pomiaru siły. Klasyczne rozwiązania – tzw. niutonomierze, zawierają sprężynę, którą można rozciągać (lub ściskać, zależnie od konstrukcji urządzenia), aby zmierzyć siłę. Jest to jednak w pełni mechaniczny system i ciężko jest zdigitalizować ten pomiar, aby np. zautomatyzować system pomiarowy. Dlatego też stosuje się nowoczesne siłomierze, bazujące na przetwornikach siły zwanych tensometrami. W artykule opiszemy konstrukcję prostego elektronicznego układu do pomiaru siły oraz omówimy, jakie trudności napotkano w trakcie jego uruchamiania. Dodatkowo wyjaśnimy podstawy działania tensometrów i sposoby ich zastosowania we własnych projektach.
Potrzebne elementy
Lista potrzebnych materiałów i elementów wygląda następująco:
- tworzywo PLA do drukowania 3D części mechanicznych oraz oczywiście drukarka 3D,
- sensor tensometryczny do jednoosiowego pomiaru siły o czułości (wadze maksymalnej) dobranej do aplikacji – w tym przypadku 200 kg,
- wzmacniacz dla tensometru – moduł zawierający układ HX711,
- moduł Arduino – autor zastosował Arduino UNO, jednak każdy podobny moduł z mikrokontrolerem będzie odpowiedni do tej aplikacji,
- przewody połączeniowe,
- pręt gwintowany M4 (4 mm) o długości 70 mm.
Projekt mechaniczny
W artykule nie będziemy zagłębiać się w szczegóły działania samego ekstrudera, omówimy jego konstrukcję tylko na tyle, aby zrozumieć, jak i gdzie umieszczono czujnik tensometryczny do pomiaru siły nacisku. Zasadniczo urządzenie ma za zadanie wycisnąć specjalną pastę za pomocą niestandardowej strzykawki. Materiał jest przepychany przez strzykawkę dzięki tłokowi dopasowanemu do jej średnicy. Wytłaczarka została pokazana na fotografii 1.
Łatwo zrozumieć, że cała siła potrzebna do wytłoczenia materiału przechodzi przez tłoczek strzykawki. Dlatego projektując ten system, jego autorzy zdecydowali się na zbudowanie niestandardowego tłoka, który będzie zawierał w sobie sensor do pomiaru siły nacisku. W ten sposób będą mogli mierzyć i monitorować siłę nacisku ekstrudera, potrzebną do wyciśnięcia materiału z głowicy.
Po wstępnym opracowaniu koncepcji model całego systemu powstał w CATIA V5, ale podobne zadanie można zrealizować w dowolnym innym oprogramowaniu CAD 3D. Zostały przygotowane modele 3D niestandardowego tłoka, takie jak pokazano na rysunku 1. Tłok składa się z 2 różnych części, a między nimi włożony jest sensor do pomiaru nacisku. Tensometr pokazano na fotografii 2. Model 3D przekroju tłoka ze zintegrowanym sensorem nacisku pokazano na rysunku 2.
Dwie części tłoka są połączone ze sobą za pomocą pręta gwintowanego o średnicy 4 mm, który mieści się w otworach obu elementów i przechodzi przez środek tensometru. Pomiędzy tymi dwoma elementami zachowano odrobinę luzu, dzięki luźnemu spasowaniu otworów dwie części mogą się trochę poruszać po przyłożeniu do nich siły. Pomaga to w pomiarze siły i ułatwia wejście tłoka do strzykawki.
Jak łatwo zauważyć – na fotografii 2, na górze sensora znajduje się mały wypustek. To właśnie w tej części tensometru jest czuły na nacisk element, który mierzy siłę. W przypadku tego układu górna część tłoka będzie się o niego opierać. Problem w tym, że ten tłok będzie drukowany w PLA i sekcja przycisku jest naprawdę mała. Stąd ograniczenie co do projektu tego elementu systemu. W rzeczywistości siła jest tam tak duża, że podczas pierwszych testów urządzenia autorzy zaobserwowali, że trwale odkształcił się wydruk z PLA. Osiągnęliśmy granicę elastyczności naszego PLA.
Na fotografii 3 widać na górze nowy element, a poniżej uszkodzoną część. Aby rozwiązać ten problem, w tym miejscu zainstalowano mały stalowy element, przejmujący na siebie nacisk. Ta część jest na tyle wytrzymała, że nie zostanie odkształcona przez nacisk sensora. Można zobaczyć ją na przekroju z rysunku 2.
Modele STL wszystkich elementów można pobrać ze strony projektu, aby samodzielnie wydrukować wszystkie te elementy.
Podstawy zastosowania tensometru
Co tak naprawdę oznacza pomiar siły? W rzeczywistości nie można tej wartości zmierzyć bezpośrednio systemem elektronicznym, gdyż jest to wartość nieelektryczna. Jedną rzeczą, którą można zamiast tego zrobić, jest zmierzenie napięcia za pomocą sensora nacisku. Jest to urządzenie, które zazwyczaj zawiera w swojej strukturze 4 tensometry w konfiguracji mostka Wheatstone’a.
Tensometr to opornik, którego rezystancja jest proporcjonalna do jego odkształcenia. W dużym uproszczeniu, tensometr można wyobrazić sobie jako długą ścieżkę, której rezystancja zmienia się, ponieważ ścieżka ta jest rozciągana i zmienia się jej geometria. Jeśli taki tensometr zainstalowany jest np. na kawałku stali o znanej geometrii i właściwościach fizycznych, to monitorując odkształcenie sensora (i w związku z tym także podłoża), można wyznaczyć naprężenie tego kawałka stali, a znając jej własności, takie jak moduł Younga, można wyznaczyć siłę, która wywołała to naprężenie.
Na fotografii 4 pokazano przykładowy tensometr w postaci folii do naklejenia na dowolnym podłożu.
Pomiar z użyciem tensometru to po prostu pomiar rezystancji. Może się wydawać, że nie ma nic prostszego w realizacji – wystarczy doprowadzić stały prąd i mierzyć spadek napięcia. Niestety, jak wiele rzeczy w elektronice analogowej, wymaga to precyzyjnego pomiaru niewielkich sygnałów, podatnych na zakłócenia, o niewielkim zakresie dynamiki – rezystancja zmienia się w bardzo małym zakresie i wymaga wysokiej rozdzielczości przetwornika ADC. Dodatkowo, należy pamiętać, że na rezystancję tego elementu mają wpływ także inne parametry otoczenia, w szczególności temperatura. Aby uniknąć opisanych powyżej problemów, stosuje się specjalny układ pomiarowy, nazywany mostkiem Wheatstone’a. Są to cztery oporniki połączone w sposób pokazany na rysunku 3.
Jeśli do punktów A i C podłączymy napięcie V, to różnica potencjałów (napięcie) pomiędzy punktami B i D będzie wynosiła:
Dzięki temu można w łatwy sposób wyliczyć wartość nieznanej rezystancji Rx. Jednak takie rozwiązanie nie kompensuje wpływu temperatury na rezystancję oporników. Aby uniknąć tego problemu, a jednocześnie zwiększyć odpowiedź mostka na zmianę naprężenia, w sensorze stosuje się układ pokazany na schemacie z rysunku 4a. W takim wariancie mostka Wheatstone’a stosuje się cztery zmienne oporniki (w tym przypadku tensometry) rozmieszczone po przekątnej w taki sposób, że dwa z nich są ściskane, a dwa rozciągane. Działanie tego rodzaju sensora pokazuje rysunek 4b. Dzięki temu, że tensometry umieszczone są parami po przekątnej, zmiana napięcia niezbalansowania mostka w funkcji naprężenia jest (w przybliżeniu) czterokrotnie większa. Z drugiej strony, jako że wszystkie tensometry znajdują się na tym samym metalowym elemencie, różnice temperatur pomiędzy nimi są w zasadzie zerowe. Ponieważ mają tę samą temperaturę, zmiana ich rezystancji w funkcji temperatury nie wpływa w żaden sposób na napięcie niezbalansowania.
Do pomiaru napięcia niezbalansowania konieczny jest różnicowy pomiar napięcia w punktach B oraz D (rysunek 3). Używa się do tego wzmacniaczy pomiarowych lub układów wzmacniaczy różnicowych/operacyjnych. Następnie, jako że projektujemy układ cyfrowy, wartość ta musi być zdigitalizowana za pomocą przetwornika analogowo-cyfrowego (ADC). Zintegrowany moduł dla belki tensometrycznej – HX711 integruje te wszystkie funkcje w sobie. Ten pojedynczy układ scalony zawiera cały niezbędny front-end analogowy (stabilizator napięcia wzbudzenia mostka oraz wzmacniacz sygnału niezbalansowania) oraz przetwornik analogowo-cyfrowy. Z tego też powodu znalazł on swoje miejsce w tym urządzeniu. Znacznie ułatwia zaprojektowanie całego toru pomiarowego, szczególnie że jest dostępny w postaci gotowego do podłączenia modułu, jak pokazano na fotografii 5.
Układ HX711 podłączony jest do tensometru oraz modułu Arduino, tak jak pokazuje schemat na rysunku 5. Układ do komunikacji z procesorem potrzebuje zaledwie dwóch linii – CLK (zegar) oraz DOUT (szeregowe wyjście danych). W Arduino IDE dostępna jest biblioteka, która obsługuje kompleksowo ten kontroler.
Zapisywanie danych pomiarowych
Na listingu 1 zaprezentowano kod programu dla modułu Arduino, który obsługuje tensometr, podłączony przez kontroler HX711.
#include <HX711.h>
int letter;
// Współczynnik kalibracyjny belko tensometrycznej
#define calibrationFactor 640
#define DOUT 3
#define CLK 2
HX711 loadCell;
bool firstMeasure = true;
bool ongoingDataAcquisition = false;
unsigned long currentTime = 0;
unsigned long t0 = 0;
unsigned long previousDataAcqTime = 0;
void startOrStopDataAcquisition(String t_command) {
if (t_command == "on") {
ongoingDataAcquisition = true;
}
else if (t_command == "off") {
ongoingDataAcquisition = false;
firstMeasure = true;
}
}
void makeAMeasure() {
if (firstMeasure == true) {
t0 = millis(); // Definiuje czas pierwszego pomiaru
Serial.println("Starting load cell
data acquisition. Force unit is Newton.
Time unit is second");
Serial.print("time");
Serial.print(";");
Serial.print("Extrusion Force");
Serial.print(";");
Serial.println();
Serial.print((currentTime – t0) * 0.001, 2);
Serial.print(";");
Serial.print(loadCell.get_units(), 1);
Serial.print(";");
Serial.println();
firstMeasure = false;
}
else {
if (currentTime – previousDataAcqTime > 10) {
previousDataAcqTime = currentTime;
Serial.print((currentTime – t0) * 0.001, 2);
Serial.print(";");
Serial.print((loadCell.get_units())/(1.4595*0.9827) +
0.6944/0.9827 + 12.885/0.9827, 1);
Serial.print(";");
Serial.println();
}
}
}
String readSerialMonitor(int t_letter) {
String command;
// Sprawdza czy dostępne są dane
while (Serial.available() > 0)
{
t_letter = Serial.read();
command += char(t_letter);
delay(1);
}
return command;
}
void setup() {
Serial.begin(115200);
loadCell.begin(DOUT, CLK);
// Wartość kalibracyjna
loadCell.set_scale(calibrationFactor);
// Tarowannie – przy uruchomieniu
// nie powinno być obciażenia
loadCell.tare();
}
void loop() {
currentTime = millis();
// Odczyt z portu szeregowego
String command = readSerialMonitor(letter);
startOrStopDataAcquisition(command);
if (ongoingDataAcquisition) {
makeAMeasure();
}
}
Dane dotyczące siły nacisku, mierzonej przez układ, są przesyłane do komputera poprzez port szeregowy (emulowany port szeregowy na USB – wirtualny port COM), jaki zaimplementowany jest w module Arduino. Obsługa układu HX711 jest bardzo prosta. Wszystko realizują funkcje biblioteki, dzięki czemu użytkownik nie musi wgłębiać się w niuanse działania tego układu. Sensor inicjalizowany jest w momencie utworzenia obiektu HX711 loadCell i zainicjalizowania komunikacji (rozpoczęcia pomiarów) za pomocą metody loadCell.begin(DOUT, CLK). Układ i biblioteka wspierają kompletne charakteryzowanie wyjścia, jego kalibrację, a nawet tarowanie.
Na koniec pozostaje do pokonania ostatnie wyzwanie: jak przechowywać dane, które zostały zmierzone przez system? W najprostszym podejściu można odczytać pomiary na monitorze szeregowym w Arduino IDE, ale w takiej sytuacji nie ma możliwości ich magazynowania. Oczywiście, można zebrane wartości kopiować i wklejać np. w notatniku czy Excelu, ale nie jest to satysfakcjonujące rozwiązanie, jak wskazuje autor projektu. Konieczna była implementacja wyższego poziomu automatyki. Autor proponuje dwa potencjalne rozwiązania:
- zapis danych na karcie SD za pomocą rozbudowanego programu Arduino,
- nagrywanie danych na komputerze połączonym z Arduino za pomocą zewnętrznego fragmentu kodu napisanego na przykład w Pythonie, uruchamianym na komputerze PC.
Decyzja padła na rozwiązanie drugie, ponieważ autor nie ma problemu z programowaniem w Pythonie, a ponadto takie rozwiązanie pozwala w łatwy sposób stworzyć interfejs graficzny do rejestracji danych. Zastosowano pakiet pyserial, który umożliwia użytkownikowi wysyłanie i odczytywanie informacji przez port USB komputera, który funkcjonuje jako wirtualny port szeregowy (port COM). W szkicu Arduino za wysyłanie danych do komputera odpowiada metoda portu szeregowego Serial.print() za pomocą, której w funkcji makeAMeasure() wysyłane są skonwertowane do odpowiednich jednostek dane pomiarowe. Arduino ma także możliwość odczytywania danych z portu szeregowego za pomocą funkcji readSerialMonitor(), która odczytuje znaki z portu szeregowego tak długo, jak są dostępne (tj. warunek Serial.available() > 0 jest spełniony). W zależności od wysłanej komendy system zaczyna i przestaje mierzyć i przesyłać dane dotyczące nacisku.
GUI datalogera
Na rysunku 6 pokazano schematycznie algorytm pracy systemu logowania danych.
System działa w ośmiu krokach:
- Wysłanie instrukcji startu do modułu Arduino – pomiar rozpoczyna się.
- Arduino odczytuje wartość z tensometru (rozpoczęcie pomiaru).
- Arduino wysyła dane przez port szeregowy.
- Skrypt na komputerze PC odczytuje wartość z portu szeregowego i zapisuje ją w pamięci.
- Kroki 2, 3 oraz 4 powtarzane są wielokrotnie.
- Wysyłana jest instrukcja zatrzymania.
- Arduino zatrzymuje odczyt wartości z sensora.
- Skrypt w Pythonie zapisuje zebrane dane w pliku tekstowym na komputerze PC.
Dla rejestratora opracowano graficzny interfejs użytkownika (GUI). Pozwala to na wygodną obsługę całego systemu z poziomu komputera PC. Za obsługę okienkowego GUI odpowiedziany jest skrypt napisany w Pythonie, który używa funkcji z biblioteki tkinter. Jest to interfejs do korzystania z Tk – jest to wolna, otwarta, wielosystemowa biblioteka widżetów do budowy graficznego interfejsu użytkownika. Powstała 30 lat temu i początkowo wykorzystywana była jako pakiet do języka skryptowego Tcl, jednak obecnie doczekała się dowiązań do wielu innych języków programowania, w tym także Pythona. Tkinter wydaje się idealnie dostosowany do tego, co trzeba było zrobić, aby stworzyć GUI siłomierza.
Skrypt składa się z dwóch części – pliku GUI_acquisition.py oraz rx_threading.py. Pierwszy z nich zawiera GUI programu i całą jego logikę, natomiast w drugim zawarto interfejs dla portu szeregowego, opracowany tak, aby działał w innym wątku, niż GUI. Dzięki temu program może sprawnie i płynnie funkcjonować, niezależnie od ilości przyjmowanych w danym momencie danych na porcie szeregowym. Skrypty napisane w Pythonie można znaleźć na stronie z projektem. Aby skorzystać z GUI, wystarczy uruchomić skrypt Pythona (GUI_acquisition.py), podłączyć Arduino (z wgranym odpowiednim szkicem) do komputera i uruchomić Arduino. Następnie należy wybrać odpowiedni port COM (ten, do którego podłączono Arduino) i dostosować prędkość transmisji do ustawionej w szkicu Arduino. I gotowe, wystarczy nacisnąć „rozpocznij akwizycję”.
Kalibracja tensometru
Przed zastosowaniem systemu konieczna jest jego kalibracja. W ten sposób zbierane dane będzie można łatwo przeliczyć na fizyczne, rzeczywiste jednostki. W tym celu pomocne będą ustawienia, skrypt i tutorial dostarczany przez SparkFun. Jednak autor wykorzystał fakt, że na uczelni ma dostęp do precyzyjnej prasy mechanicznej, którą można wywierać dokładnie i precyzyjne konfigurowany nacisk. Prasa taka również ma wbudowany i już skalibrowany siłomierz.
Na fotografii 6 pokazano proces kalibracji, a na rysunku 7 jego wynik – zależność pomiędzy odczytaną z tensometru siłą a rzeczywistą siłą nacisku. Jak widać, zależność ta jest liniowa, więc łatwo można dopasować do tych danych prostą i używać jej do przeliczania zmierzonych wartości z wykorzystaniem prostego wzoru, pokazanego na rysunku.
Podsumowanie i przykładowe zastosowanie
Tłok zawierający sensor umieszczony został w strzykawce. Końcówka tłoka wykonana jest z gumowego tworzywa, zapewniającego wodoszczelność. Ale oznacza to, że gumowa część ociera się o ściankę strzykawki i pojawia się siła tarcia. Ta dodatkowa siła składa się na całkowitą wartość, którą mierzymy podczas badania siły potrzebnej do wytłoczenia materiału ze strzykawki – ekstrudera. Autorzy konstrukcji zastosowali siłomierz do optymalizacji działania ekstrudera – przesuwali tłok w pustej strzykawce dla różnych prędkości wytłaczania i udało im się uzyskać wartość siły tarcia dla każdej prędkości wytłaczania. Potem odejmowali tę wartość od siły, którą zmierzyli podczas wytłaczania, aby uzyskać jedynie siłę wytłaczania.
Na rysunku 8 znajduje się zrzut ekranu z wykresem ilustrującym pomiar, który został wykonany. Pokazuje on siłę nacisku w funkcji czasu podczas wytłaczania materiału z ekstrudera napędzanego stabilnie obracającym się prętem gwintowanym (2 obroty na sekundę).
Nie jest to oczywiście jedyne zastosowanie siłomierza. Tego rodzaju układ można zastosować w szerokiej gamie systemów, które muszą mierzyć siłę, nacisk, ciężar itp. Tylko wyobraźnia ogranicza konstruktorów przy aplikacji tego rodzaju sensora.
Nikodem Czechowski, EP
Źródła: