- Praca maszyny ważącej Arduino
- Komponenty wymagane dla wagi opartej na Arduino
- Waga oparta na Arduino - schemat połączeń
- Wykonywanie obwodu na kropkowanej tablicy perforowanej
- Budowa obudowy dla wagi opartej na Arduino
- Maszyna do ważenia Arduino - kod
Cyfrowe wagi obciążeniowe to kolejny cud współczesnej inżynierii i projektowania. Tak, mówimy o wadze, którą często widzimy w większości sklepów spożywczych i innych miejscach, ale czy kiedykolwiek zastanawiałeś się, jak działa waga? Aby odpowiedzieć na to pytanie, w tym projekcie przyjrzymy się ogniwu obciążnikowemu i jego działaniu. Na koniec zbudujemy przenośną wagę opartą na Arduino z czujnikiem wagi HX711, który może mierzyć wagę do 10 kg.
Ta waga doskonale sprawdza się w lokalnych sklepach, w których pakują towary luzem. Podobnie jak produkty komercyjne, nasza waga ma przycisk zerujący, który zeruje wagę. Posiada również opcję ustawienia wagi do pomiaru, gdy waga pomiarowa osiągnie ustawioną wagę, brzęczyk szybko wyda dźwięk i przestanie, gdy ustawiona waga zrówna się z masą pomiarową. W ten sposób użytkownik może go spakować po prostu słysząc dźwięk i nie musiałby patrzeć na wyświetlacz. Ponieważ jest to bardzo prosty projekt, będziemy go bardzo łatwo budować przy użyciu komponentów takich jak Arduino i czujnik tensometryczny. Więc bez dalszej zwłoki przejdźmy od razu do tego.
W poprzednim artykule stworzyliśmy projekty takie jak czujnik wagi oparty na Raspberry Pi i inteligentny kontener IoT z alertem e-mail i monitoringiem sieciowym przy użyciu popularnego modułu wzmacniacza ogniw obciążnikowych HX711. Więc sprawdź to, jeśli to jest twoje wymaganie.
Praca maszyny ważącej Arduino
Głównym elementem tego projektu jest komórka obciążenia i HX711 obciążenie moduł wzmacniacza komórka. Jak widać, jedna strona jest oznaczona dziesięcioma kilogramami. Możesz również zauważyć jakiś rodzaj białego ochronnego kleju na ogniwie obciążnikowym i wychodzą cztery różne kolory drutów, które odkryją sekret pod białym ochronnym klejem i funkcję tych czterokolorowych drutów w dalszej części artykułu.
Ogniwo obciążnikowe to przetwornik, który przekształca siłę lub ciśnienie na moc elektryczną. Ma dwie strony, powiedzmy prawą i lewą, i jest zrobiona z aluminiowych bloków. Jak widać w środku materiał rozrzedza się poprzez włożenie dużej dziury. Dlatego właśnie jest to punkt, który ulega deformacji, gdy ładunek jest umieszczony po stronie mocowania. Teraz wyobraź sobie, że komora po prawej stronie jest zamontowana do podstawy, a po lewej stronie znajduje się ładunek. Ta konfiguracja odkształca ogniwo obciążnikowe z powodu gigantycznego otworu w środku.
Kiedy ładunek zostanie umieszczony po stronie obciążenia ogniwa obciążnikowego, górna część ulegnie naprężeniu, a dolna część ulegnie ściskaniu. Dlatego aluminiowa listwa wygina się w dół po lewej stronie. Jeśli zmierzymy to odkształcenie, możemy zmierzyć siłę, która została przyłożona do bloku aluminiowego i właśnie to zrobimy.
Pozostaje pytanie, co znajduje się wewnątrz białego ochronnego kleju? Wewnątrz tego ochronnego kleju znajdziemy bardzo cienki elastyczny element zwany tensometrem. Tensometr to element służący do pomiaru odkształcenia. Jeśli przyjrzymy się bliżej temu komponentowi, możemy zobaczyć dwa pola połączeniowe, a następnie mamy wzór przewodzącego drutu z powtarzającymi się ugięciami. Ten przewodzący drut ma określoną rezystancję. Kiedy go zginamy, wartość oporu się zmieni? Tak więc jedna strona tensometru jest zamontowana i zamocowana w miejscu, jeśli położymy ciężarek po drugiej stronie aluminiowego pręta, zmusi to tensometr do zgięcia, co spowoduje zmianę oporu. Jak to się właściwie dzieje? Przewodzący wzór tensometru jest wykonany z miedzi, ten drut będzie miał określony obszar i długość, więc te dwie jednostki będą dawać rezystancję drutu. Rezystancja drutu przeciwdziała przepływowi prądu. Teraz jest oczywiste, że jeśli obszar tego drutu zmniejszy się,mniej elektronów może przejść, co oznacza niższy prąd. Teraz, jeśli zwiększymy obszar, zwiększy to rezystancję przewodnika. Przyłożenie pewnej siły do tego drutu spowoduje rozciągnięcie obszaru i jednocześnie zmniejszy się, opór wzrośnie. Ale ta zmiana rezystancji jest bardzo mała. Jeśli rozciągniemy tensometr, opór wzrośnie, a jeśli go ściśniemy, opór się zmniejszy. Aby zmierzyć siłę, musimy zmierzyć opór. Bezpośredni pomiar rezystancji nie zawsze jest praktyczny, ponieważ zmiana jest bardzo mała. Więc zamiast mierzyć rezystancję, możemy łatwo mierzyć napięcia. Tak więc w tym przypadku musimy przekonwertować wyjście miernika z wartości rezystancji na wartości napięcia.Przyłożenie pewnej siły do tego drutu spowoduje rozciągnięcie obszaru i jednocześnie zmniejszy się, opór wzrośnie. Ale ta zmiana rezystancji jest bardzo mała. Jeśli rozciągniemy tensometr, opór wzrośnie, a jeśli go ściśniemy, opór się zmniejszy. Aby zmierzyć siłę, musimy zmierzyć opór. Bezpośredni pomiar rezystancji nie zawsze jest praktyczny, ponieważ zmiana jest bardzo mała. Więc zamiast mierzyć rezystancję, możemy łatwo mierzyć napięcia. W tym przypadku musimy przekonwertować dane wyjściowe miernika z wartości rezystancji na wartości napięcia.Przyłożenie pewnej siły do tego drutu spowoduje rozciągnięcie obszaru i jednocześnie zmniejszy się, opór wzrośnie. Ale ta zmiana rezystancji jest bardzo mała. Jeśli rozciągniemy tensometr, opór wzrośnie, a jeśli go ściśniemy, opór się zmniejszy. Aby zmierzyć siłę, musimy zmierzyć opór. Bezpośredni pomiar rezystancji nie zawsze jest praktyczny, ponieważ zmiana jest bardzo mała. Więc zamiast mierzyć rezystancję, możemy łatwo mierzyć napięcia. Tak więc w tym przypadku musimy przekonwertować wyjście miernika z wartości rezystancji na wartości napięcia.opór spadnie. Aby zmierzyć siłę, musimy zmierzyć opór. Bezpośredni pomiar rezystancji nie zawsze jest praktyczny, ponieważ zmiana jest bardzo mała. Więc zamiast mierzyć rezystancję, możemy łatwo mierzyć napięcia. W tym przypadku musimy przekonwertować dane wyjściowe miernika z wartości rezystancji na wartości napięcia.opór spadnie. Aby zmierzyć siłę, musimy zmierzyć opór. Bezpośredni pomiar rezystancji nie zawsze jest praktyczny, ponieważ zmiana jest bardzo mała. Więc zamiast mierzyć rezystancję, możemy łatwo mierzyć napięcia. Tak więc w tym przypadku musimy przekonwertować wyjście miernika z wartości rezystancji na wartości napięcia.
Możemy to zrobić za pomocą mostu Wheatstone'a. Tensometr umieszczamy w mostku Wheatstone'a jeśli mostek jest wyważony, napięcie w środkowym punkcie powinno wynosić zero (wcześniej budowaliśmy projekt, w którym opisaliśmy, jak działa mostek Wheatstone'a, możesz to sprawdzić, jeśli chcesz dowiedzieć się więcej na ten temat). Kiedy tensometr zmieni swoją rezystancję, wyrówna mostek, a napięcie również się zmieni. W ten sposób mostek Wheatstone'a przekształca zmiany rezystancji na wartości napięcia.
Ale ta zmiana napięcia jest nadal bardzo mała, więc aby ją zwiększyć, musimy użyć modułu HX711. HX711 to 24-bitowy różnicowy przetwornik ADC, dzięki czemu mogliśmy mierzyć bardzo małe zmiany napięcia. da wartości od 0 do 2 wykładnicze 24.
Komponenty wymagane dla wagi opartej na Arduino
Aby maksymalnie uprościć ten projekt, użyliśmy bardzo ogólnych komponentów, które można znaleźć w każdym lokalnym sklepie hobbystycznym. Poniższy obrazek daje wyobrażenie o komponentach. Ponadto poniżej znajduje się lista materiałów (BOM).
- Ogniwo obciążnikowe (używamy 10 kg ogniwa obciążnikowego)
- Moduł wzmacniacza HX 711
- Arduino Nano
- I2C LCD 16X2 - kompatybilny z I2C
- Rezystor 1k -2 Nos
- Diody LED -2 szt
- Brzęczyk
- Wspólna płytka drukowana
- Bateria 7,4 V (jeśli chcesz, aby była przenośna)
- Regulator napięcia LM7805
Waga oparta na Arduino - schemat połączeń
Ogniwo obciążnikowe ma cztery przewody, które są czerwone, czarne, zielone i białe. Ten kolor może się różnić w zależności od producentów, dlatego lepiej zapoznać się z arkuszem danych. Podłącz czerwony do E + płyty HX711, czarny do E-, biały do A + i zielony do A-, Dout, a zegar płyty podłącz odpowiednio do D4 i D5. Podłącz jeden koniec przycisków do D3, D8, D9, a drugi koniec do uziemienia. Mamy LCD I2C, więc podłącz SDA do A4 i SCL do A5. Podłącz masę wyświetlacza LCD, HX711 i Arduino do masy, a także podłącz VCC do 5Vpin Arduino. Wszystkie moduły pracują na 5V, dlatego dodaliśmy regulator napięcia LM7805. Jeśli nie chcesz, aby był przenośny, możesz bezpośrednio zasilać Arduino za pomocą kabla USB.
Wykonywanie obwodu na kropkowanej tablicy perforowanej
Przylutowaliśmy wszystkie komponenty na zwykłej płytce perforowanej. Użyliśmy żeńskich nagłówków do lutowania Arduino i ADC z płytką drukowaną, a także użyliśmy przewodów do podłączenia wszystkich przycisków i diod LED. Po zakończeniu całego procesu lutowania upewniliśmy się, że z LM7805 wychodzi odpowiednie 5V. Na koniec umieściliśmy przełącznik włączający / wyłączający obwód. Kiedy wszyscy skończyliśmy, wyglądało to tak, jak na poniższym obrazku.
Budowa obudowy dla wagi opartej na Arduino
Jak widać, ogniwo obciążnikowe ma kilka gwintów, więc możemy je zamontować na płycie bazowej. Będziemy używać płyty PCV jako podstawy naszej wagi, w tym celu najpierw wycinamy kwadrat 20 * 20 cm i cztery prostokąty 20 * 5 z płyty PCV. Następnie za pomocą twardego kleju skleiliśmy każdy kawałek i zrobiliśmy małą obudowę.
Pamiętaj, że nie naprawiliśmy jednej strony, ponieważ musimy umieścić na niej przyciski, diody i wyświetlacz LCD. Następnie użyliśmy plastikowej tablicy na górę skali. Przed utrwaleniem tej konfiguracji musimy upewnić się, że mamy wystarczającą przestrzeń od podłoża do ogniwa obciążnikowego, aby mógł się zginać, więc umieściliśmy śrubę i nakrętki pomiędzy ogniwem obciążnikowym a podstawą, również dodaliśmy kilka plastikowych przekładek pomiędzy ogniwem obciążnikowym a częścią górną. użyliśmy okrągłego plastikowego arkusza jako najwyższego sprytu równowagi.
Następnie umieściliśmy LCD, diody i przyciski na przednim panelu, a wszystko połączone długim izolowanym przewodem. Po zakończeniu procesu okablowania przykleiliśmy panel przedni do podstawy głównej z pewnym nachyleniem, dzięki czemu możemy bardzo łatwo odczytać wartości z wyświetlacza LCD. na koniec podłączyliśmy wyłącznik główny z boku wagi i to wszystko. W ten sposób stworzyliśmy ciało na naszą wagę.
Możesz projektować według swoich pomysłów, ale pamiętaj, aby umieścić ogniwo obciążnikowe tak, jak na obrazku.
Maszyna do ważenia Arduino - kod
Ponieważ zakończyliśmy już proces tworzenia naszej wagi cyfrowej, możemy przejść do części programistycznej. Aby ułatwić programowanie, użyjemy biblioteki HX711, biblioteki EEPROM i biblioteki LiquidCrystal. Można pobrać bibliotekę HX711 z oficjalnego repozytorium GitHub lub przejdź do Narzędzia > obejmują bibliotekę > zarządzanie biblioteką, następnie wyszukać bibliotekę przy użyciu słowa kluczowego HX711, po pobraniu biblioteki, zainstaluj go w Arduino IDE.
Najpierw musimy skalibrować ogniwo obciążnikowe i zapisać tę wartość w pamięci EEPROM, w tym celu przejdź do pliku> przykłady> HX 711_ADC, a następnie wybierz kod kalibracji. Przed wgraniem kodu wagę należy ustawić na stabilnej, płaskiej powierzchni. Następnie prześlij kod do Arduino i otwórz monitor szeregowy. Następnie zmień prędkość transmisji na 572600. Teraz monitor poproś o wzięcie wagi, w tym celu naciśnij t i enter.
Teraz musimy umieścić na wadze znaną wagę, w moim przypadku, która jest 194gm. Po umieszczeniu znanej wagi wpisz wagę na monitorze szeregowym i naciśnij enter.
Teraz szeregowy monitor zapyta, czy chcesz zapisać wartość w pamięci EEPROM, czy nie, więc wpisz Y, aby wybrać tak. Teraz możemy zobaczyć wagę na monitorze szeregowym.
Główny kod tego projektu, który opracowaliśmy z przykładowego szkicu biblioteki HX711. Możesz pobrać kod tego projektu poniżej.
W sekcji kodowania najpierw dodaliśmy wszystkie trzy biblioteki. Biblioteka HX711 służy do pobierania wartości ogniw obciążnikowych. EEPROM to wbudowana biblioteka Arduino ide, która służy do przechowywania wartości w EEPROM, a biblioteka LiquidCrystal jest przeznaczona dla modułu LCD l2C.
#zawierać
Następnie zdefiniowano liczby całkowite dla różnych pinów i przypisane wartości. Funkcja loadcell HX711_ADC służy do ustawiania pinów Dout i zegara.
const int HX711_dout = 4; const int HX711_sck = 5; int tpin = 3; HX711_ADC LoadCell (HX711_dout, HX711_sck); const int calVal_eepromAdress = 0; długi t; const int Up_buttonPin = 9; const int Down_buttonPin = 8; float buttonPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; float down_buttonState = 0; float down_lastButtonState = 0;
W sekcji ustawień najpierw uruchomiliśmy monitor szeregowy, służy to tylko do debugowania. Następnie zdefiniowaliśmy tryby pinów, wszystkie przyciski są zdefiniowane jako wejścia. Za pomocą funkcji Arduino PULL UP normalnie ustawiamy piny na logiczny wysoki. Nie chcemy więc używać do tego żadnych zewnętrznych rezystorów.
pinMode (tpin, INPUT_PULLUP); pinMode (6, WYJŚCIE); pinMode (12, WYJŚCIE); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Poniższe linie kodu służą do ustawiania I2C LCD. Najpierw wyświetliliśmy tekst powitalny za pomocą funkcji LCD.print () , po dwóch sekundach wyczyściliśmy wyświetlacz za pomocą lcd.clear () . Oznacza to, że na początku wyświetlacz pokazuje ARDUINO BALANCE jako tekst powitalny, a po dwóch sekundach wyczyści się i wyświetli masy pomiarowe.
lcd.init (); podświetlenie LCD(); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print ("pomierzmy"); opóźnienie (2000); lcd.clear ();
Następnie zaczęliśmy odczytywać wartości z loadcell za pomocą funkcji loadCell.begin () , po czym czytamy EEPROM dla skalibrowanych wartości, robimy to za pomocą funkcji EEPROM.get () . Oznacza to, że już zapisaliśmy wartość za pomocą szkicu kalibracyjnego w adresie EEPROM, po prostu ponownie ją pobieramy.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress,ibrationValue);
W sekcji pętli najpierw sprawdzamy, czy jakiekolwiek dane z ogniwa obciążnikowego są dostępne za pomocą LoadCell.update (), jeśli są dostępne, czytamy i przechowujemy te dane, w tym celu używamy LoadCell.getData () . Następnie musimy wyświetlić przechowywaną wartość na LCD. W tym celu użyliśmy funkcji LCD.print () . drukujemy również wagę zestawu. Waga ustawiana jest za pomocą licznika Pushbutton. Wyjaśniono to w ostatniej sekcji.
if (LoadCell.update ()) newDataReady = true; if (newDataReady) { if (millis ()> t + serialPrintInterval) { float i = LoadCell.getData (); lcd.setCursor (0, 0); lcd.print ("set wei:"); lcd.setCursor (9, 0); lcd.print (buttonPushCounter); lcd.setCursor (14, 0); lcd.print ("GM"); lcd.setCursor (0, 1); lcd.print ("waga:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
Następnie ustawiamy wartość tary, w tym celu najpierw odczytujemy stan przycisku tary za pomocą funkcji digitalRead () , jeśli stan jest niski to tarujemy tę wagę do zera. Funkcja tarowania tej wagi polega na sprowadzeniu odczytów do zera. Na przykład, jeśli mamy miskę, do której ładowane są rzeczy, wówczas ciężar netto będzie równy ciężarowi miski + ciężar rzeczy. Jeśli przed załadowaniem rzeczy naciśniemy przycisk tarowania z misą na ogniwie obciążnikowym, waga kosza zostanie zanegowana i będziemy mogli zmierzyć wagę samych rzeczy.
if (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Teraz musimy ustawić warunki dla różnych wskazań, takich jak ustawienie opóźnienia brzęczyka i stanu diody. Zrobiliśmy to, używając warunków if , mamy w sumie trzy warunki. Najpierw obliczamy różnicę między wagą zadaną a wagą pomiarową, a następnie zapisujemy tę wartość w zmiennej k.
float k = buttonPushCounter-i;
1. Jeśli różnica między ustawioną wagą a wagą pomiarową jest większa lub równa 50 g, brzęczyk wyda dźwięk z 200-milisekundowym opóźnieniem (powoli).
if (k> = 50) { digitalWrite (6, WYSOKI); opóźnienie (200); digitalWrite (6, NISKI); opóźnienie (200); }
2. Jeśli różnica między ustawioną wagą a wagą pomiarową jest mniejsza niż 50 i większa niż 1 gram, brzęczyk emituje sygnał dźwiękowy z 50-milisekundowym opóźnieniem (szybciej).
if (k <50 && k> 1) { digitalWrite (6, HIGH); opóźnienie (50); digitalWrite (6, NISKI); opóźnienie (50); }
3. Gdy masa pomiarowa jest równa lub większa od ustawionej wartości, spowoduje to zaświecenie zielonej diody oraz wyłączenie brzęczyka i czerwonej diody.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, WYSOKI); }
Mamy jeszcze dwie funkcje void () do ustawiania wagi (do liczenia naciśnięć przycisku).
Funkcja zwiększająca ustawioną wartość o 10gms dla każdego naciśnięcia. Odbywa się to za pomocą funkcji digitalRead Arduino, jeśli pin jest niski, co oznacza, że przycisk jest naciśnięty, co spowoduje zwiększenie wartości o 10gms.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
Podobnie, checkdown służy do zmniejszania ustawionej wartości o 10gms przy każdym naciśnięciu.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
Oznacza to koniec części programowania.
Ta elektroniczna waga oparta na Arduino jest idealna do pomiaru ciężarów do 10 kg (możemy zwiększyć ten limit, używając wyższej znamionowej wagi). Jest to 99% dokładne w stosunku do oryginalnych pomiarów.
Jeśli masz jakiekolwiek pytania dotyczące tego obwodu maszyny do wyważania LCD opartego na Arduino, zamieść je w sekcji komentarzy, dziękuję!