- Arduino Tartım Makinesi Çalışması
- Arduino Tabanlı Tartım Makinesi için Gerekli Bileşenler
- Arduino Tabanlı Tartım Makinesi - Devre Şeması
- Devreyi Noktalı Bir Tahta Üzerinde Yapma
- Arduino Tabanlı Tartım Makinesi için Muhafaza Oluşturma
- Arduino Tartım Makinesi - Kod
Dijital yük kantarları, günümüzün mühendislik ve tasarımının bir başka mucizesidir. Evet, marketlerin çoğunda ve diğer yerlerde sıklıkla gördüğümüz tartı kantarından bahsediyoruz, ancak bir tartının nasıl çalıştığını hiç merak ettiniz mi? Bu soruyu cevaplamak için bu projede yük hücresine ve çalışmasına bir göz atacağız. Son olarak, 10 kg'a kadar ağırlıkları ölçebilen HX711 Ağırlık Sensörü ile taşınabilir Arduino tabanlı bir yük ölçeği oluşturacağız.
Bu tartı makinesi, ürünleri toplu olarak paketledikleri yerel mağazalar için mükemmeldir. Ticari ürünler gibi, ağırlık ölçeğimizde de ölçeği sıfırlayan bir sıfır düğmesi olacaktır. Ayrıca, ölçüm için ağırlık ayarlama seçeneği vardır, ölçüm ağırlığı ayarlanan ağırlığa ulaştığında, bir sesli uyarı hızlı bir şekilde bipler ve ayarlanan ağırlık ölçüm ağırlığına eşit olduğunda durur. Bu şekilde, kullanıcı sadece sesi duyarak paketleyebilir ve ekrana bakmak zorunda kalmaz. Bu çok basit bir proje olduğu için, bunu Arduino ve gerinim ölçer yük hücresi gibi bileşenleri kullanarak çok kolay bir şekilde inşa edeceğiz. Öyleyse, daha fazla gecikmeden, hemen konuya girelim.
Önceki bir makalede, popüler HX711 yük hücresi amplifikatör modülünü kullanarak Raspberry Pi Tabanlı Ağırlık Sensörü ve E-posta Uyarısı ve Web İzleme ile IoT Akıllı Konteyner gibi projeler yaptık. Öyleyse, şartınız buysa, kontrol edin.
Arduino Tartım Makinesi Çalışması
Bu projenin ana bileşeni bir Yük hücresi ve HX711 yük hücresi amplifikatör modülüdür. Gördüğünüz gibi, bir taraf on kilogram ile işaretlenmiştir. Ayrıca, yük hücresinin üzerinde bir tür beyaz koruyucu yapıştırıcı olduğunu fark edebilirsiniz ve dört farklı renkte telin çıkması, beyaz koruyucu yapıştırıcının altındaki sırrı ve bu dört renkli kabloların işlevini makalenin ilerleyen bölümlerinde ortaya çıkaracaktır.
Bir yük hücresi, kuvveti veya basıncı elektrik çıkışına dönüştüren bir dönüştürücüdür. Diyelim ki sağ ve sol olmak üzere iki tarafı vardır ve alüminyum bloklardan yapılmıştır. Gördüğünüz gibi ortasına büyük bir delik açılarak malzeme inceltilir. Bu nedenle, montaj tarafına bir yük yerleştirildiğinde deformasyona uğrayan nokta budur. Şimdi sağ taraftaki hücrenin tabana monte edildiğini ve sol tarafın yükün yerleştirildiği yer olduğunu hayal edin, bu konfigürasyon ortadaki dev delik nedeniyle gerinim ölçer yük hücresini deforme eder.
Yük hücresinin yük tarafına bir yük yerleştirildiğinde, üst kısım gerilir ve alt kısım sıkıştırılır. Alüminyum çubuk sol tarafta aşağı doğru kıvrılmasının nedeni budur. Bu deformasyonu ölçersek, alüminyum bloğa uygulanan kuvveti ölçebiliriz ve tam da bunu yapacağız.
Şimdi, soru beyaz koruyucu tutkalın içinde ne var? Bu koruyucu yapıştırıcının içinde, gerinim ölçer adı verilen çok ince bir elastik bileşen bulacağız.. Gerinim ölçer, gerilimi ölçmek için kullanılan bir bileşendir. Bu bileşene daha yakından bakarsak, iki bağlantı pedi görebiliriz ve sonra tekrarlayan sapmalara sahip iletken bir tel modelimiz olur. Bu iletken telin tanımlanmış bir direnci vardır. Onu büktüğümüzde direnç değeri değişecek mi? Dolayısıyla, gerinim ölçerin bir tarafı bir yere monte edilmiş ve sabitlenmiştir, alüminyum çubuğun diğer tarafına bir ağırlık koyarsak, bu gerinim ölçeri bükmeye zorlayacak ve bu da dirençte bir değişikliğe neden olacaktır. Bu gerçekte nasıl oluyor? Gerinim ölçerin iletken kalıbı bakırdan yapılmıştır, bu telin belirli bir alanı ve uzunluğu olacaktır, bu nedenle bu iki birim telin direncini verecektir. Bir telin direnci akımın akışına karşıdır. Şimdi, bu telin alanı küçülürse,daha az elektron geçebilir, bu da daha düşük bir akım anlamına gelir. Şimdi alanı arttırırsak, bir iletkenin direncini artıracaktır. Bu tele bir miktar kuvvet uygulanırsa bu bölge gerilir ve aynı zamanda küçülür, direnç artar. Ancak bu direnç değişimi çok düşüktür. Gerinim ölçeri uzatırsak direnç artar ve sıkıştırırsak direnç düşer. Kuvveti ölçmek için direnci ölçmemiz gerekir. Direnci doğrudan ölçmek her zaman pratik değildir, çünkü değişim çok küçüktür. Böylece direnci ölçmek yerine gerilimleri kolayca ölçebiliriz. Dolayısıyla bu durumda gösterge çıktısını direnç değerlerinden gerilim değerlerine çevirmemiz gerekir.Bu tele bir miktar kuvvet uygulanırsa bu bölge gerilir ve aynı zamanda küçülür, direnç artar. Ancak bu direnç değişimi çok düşüktür. Gerinim ölçeri uzatırsak direnç artar ve sıkıştırırsak direnç düşer. Kuvveti ölçmek için direnci ölçmemiz gerekir. Direnci doğrudan ölçmek her zaman pratik değildir, çünkü değişim çok küçüktür. Böylece direnci ölçmek yerine gerilimleri kolaylıkla ölçebiliriz. Dolayısıyla bu durumda gösterge çıktısını direnç değerlerinden gerilim değerlerine çevirmemiz gerekir.Bu tele bir miktar kuvvet uygulanırsa bu bölge gerilir ve aynı zamanda küçülür, direnç artar. Ancak bu direnç değişimi çok düşüktür. Gerinim ölçeri uzatırsak direnç artar ve sıkıştırırsak direnç düşer. Kuvveti ölçmek için direnci ölçmemiz gerekir. Direnci doğrudan ölçmek her zaman pratik değildir, çünkü değişim çok küçüktür. Böylece direnci ölçmek yerine gerilimleri kolaylıkla ölçebiliriz. Dolayısıyla bu durumda gösterge çıktısını direnç değerlerinden gerilim değerlerine çevirmemiz gerekir.direnç düşecek. Kuvveti ölçmek için direnci ölçmemiz gerekir. Direnci doğrudan ölçmek her zaman pratik değildir, çünkü değişim çok küçüktür. Böylece direnci ölçmek yerine gerilimleri kolaylıkla ölçebiliriz. Dolayısıyla bu durumda gösterge çıktısını direnç değerlerinden gerilim değerlerine çevirmemiz gerekir.direnç düşecek. Kuvveti ölçmek için direnci ölçmemiz gerekir. Direnci doğrudan ölçmek her zaman pratik değildir, çünkü değişim çok küçüktür. Böylece direnci ölçmek yerine gerilimleri kolaylıkla ölçebiliriz. Dolayısıyla bu durumda gösterge çıktısını direnç değerlerinden gerilim değerlerine çevirmemiz gerekir.
Bunu Wheatstone köprüsünün yardımıyla yapabiliriz. Gerinim ölçeri Wheatstone köprüsüne eğer köprü dengelenmişse, orta noktadaki voltaj sıfır olmalıdır (daha önce Wheatstone köprüsünün nasıl çalıştığını anlattığımız bir proje inşa etmiştik, isterseniz kontrol edebilirsiniz. konu hakkında daha fazla bilgi edinin). Gerinim ölçer direncini değiştirdiğinde, köprüyü dengesiz hale getirecek ve voltaj da değişecektir. İşte Wheatstone köprüsünün direnç değişimlerini voltaj değerlerine nasıl dönüştürdüğü budur.
Ancak bu voltaj değişimi hala çok küçük, bu yüzden bunu artırmak için HX711 modülünü kullanmamız gerekiyor. HX711, 24 bit Diferansiyel ADC'dir, bu şekilde çok küçük voltaj değişikliklerini ölçebiliriz. 0'dan 2'ye kadar üstel değerler verecektir 24.
Arduino Tabanlı Tartım Makinesi için Gerekli Bileşenler
Bu projeyi olabildiğince basit hale getirmek için, herhangi bir yerel hobi mağazasında bulabileceğiniz çok genel bileşenler kullandık. Aşağıdaki resim size bileşenler hakkında bir fikir verecektir. Ayrıca, aşağıda listelenen Malzeme Listesine (BOM) sahibiz.
- Yük hücresi (10 kg yük hücresi kullanıyoruz)
- HX 711 amplifikatör modülü
- Arduino Nano
- I2C LCD 16X2 - I2C Uyumlu
- 1k direnç -2 Nos
- LED'ler -2Nos
- Buzzer
- Ortak PCB
- 7,4V pil (taşınabilir istiyorsanız)
- LM7805 voltaj regülatörü
Arduino Tabanlı Tartım Makinesi - Devre Şeması
Yük hücresinde kırmızı, siyah, yeşil ve beyaz olmak üzere dört tel bulunur. Bu renk üreticilere göre değişebilir, bu nedenle veri sayfasına başvurmak daha iyidir. Kırmızıyı HX711 kartının E + 'sına bağlayın, siyahı E-'ye bağlayın, beyazı A +' ya bağlayın ve yeşili A-, Dout'a bağlayın ve kartın saati sırasıyla D4 ve D5'e bağlanır. Basmalı düğmelerin bir ucunu D3, D8, D9'a ve diğer uçlarını toprağa bağlayın. I2C LCD'ye sahibiz, bu nedenle SDA'yı A4'e ve SCL'yi A5'e bağlayın. Arasında 5Vpin da, toprağa bağlantı VCCS'li LCD, HX711 ve Arduino ait zemin bağlayın Arduino. Tüm modüller 5V ile çalışır, bu yüzden bir LM7805 voltaj regülatörü ekledik. Taşınabilir olmasını istemiyorsanız, bir USB kablosu kullanarak doğrudan Arduino'ya güç verebilirsiniz.
Devreyi Noktalı Bir Tahta Üzerinde Yapma
Tüm bileşenleri ortak noktalı bir kart üzerinde lehimledik. Devre kartı ile Arduino ve ADC'yi lehimlemek için dişi başlıkları kullandık, ayrıca tüm butonları ve LED'leri bağlamak için teller kullandık. Tüm lehimleme işlemi bittikten sonra LM7805'ten uygun 5V'nin çıktığından emin olduk. Son olarak, devreyi açmak / kapatmak için bir anahtar koyduk. Bitirdiğimizde, aşağıdaki resimdeki gibi görünüyordu.
Arduino Tabanlı Tartım Makinesi için Muhafaza Oluşturma
Gördüğünüz gibi, yük hücresinde bazı vida dişleri var, bu yüzden onu bir taban plakasına monte edebiliriz. Ölçeğimizin tabanı için bir PVC levha kullanacağız, bunun için PVC levhadan önce 20 * 20 cm kare ve dört adet 20 * 5 dikdörtgen kestik. Sonra sert tutkal kullanarak her parçayı yapıştırdık ve küçük bir muhafaza yaptık.
Unutma, bir tarafı tamir etmedik, çünkü butonları, LED'leri ve LCD'yi üzerine yerleştirmemiz gerekiyor. Daha sonra terazinin üstü için plastik bir tahta kullandık. Bu kurulumu kalıcı hale getirmeden önce zeminden yük hücresine kadar yeterli boşluk olduğundan emin olmalıyız, böylece bükülebilir, bu yüzden yük hücresi ile taban arasına vida ve somunlar yerleştirdik, ayrıca ekledik yük hücresi ile üst parça arasında bazı plastik ara parçalar. en iyi denge için yuvarlak plastik bir levha kullandık.
Daha sonra LCD, LED'ler ve butonları ön panele yerleştirdik ve her şeyi uzun yalıtımlı kabloyla birbirine bağladık. Kablolama işlemini bitirdikten sonra ön paneli ana kaideye bir miktar eğimle yapıştırarak LCD'den değerleri çok rahat okuyabiliyoruz. son olarak, ana şalteri terazinin yan tarafına bağladık ve hepsi bu. Ağırlık ölçeğimiz için vücudu böyle yaptık .
Fikirlerinizle tasarım yapabilirsiniz, ancak yük hücresini resimdeki gibi yerleştirmeyi unutmayın.
Arduino Tartım Makinesi - Kod
Artık dijital ölçeğimizin yapım sürecini bitirdiğimiz için, programlama kısmına geçebiliriz. Kolay programlama için HX711 kitaplığını, EEPROM Kitaplığını ve LiquidCrystal kitaplığını kullanacağız. Sen resmi GitHub deposundan HX711 kütüphanesini indirebilir veya gidebilirsiniz araçlar > dahil kütüphane > yönetmek , kütüphane sonra anahtar kelime kullanarak kütüphane arama HX711 kütüphanesini indirdikten sonra, Arduino ide içine yükleyin.
Öncelikle, yük hücresini kalibre etmemiz ve bu değeri EEPROM'a kaydetmemiz gerekir, bunun için dosya> örnekler> HX 711_ADC'ye gidin, ardından kalibrasyon kodunu seçin. Kodu yüklemeden önce, teraziyi sabit düz bir yüzeye yerleştirin. Ardından kodu Arduino ya yükleyin ve seri monitörü açın. Sonra baud hızını 572600 olarak değiştirin. Şimdi monitör ağırlığı almanızı ister, bunun için t'ye basıp enter'a basmamız gerekir.
Şimdi, bilinen ağırlığı teraziye koymamız gerekiyor, benim durumumda, yani 194 gr. Bilinen ağırlığı yerleştirdikten sonra, seri monitöre ağırlık yazın ve enter tuşuna basın.
Şimdi, seri monitör, değeri EEPROM'a kaydetmek isteyip istemediğinizi sorar, bu nedenle evet'i seçmek için Y yazın. Artık ağırlığı seri monitörde görebiliyoruz.
HX711 kütüphanesinin örnek çiziminden geliştirdiğimiz bu projenin ana kodu. Bu projenin kodunu aşağıdan indirebilirsiniz.
Kodlama bölümünde önce üç kütüphaneyi de ekledik. HX711 kitaplığı, yük hücresi değerlerini almak içindir. EEPROM, değerleri EEPROM'da saklamak için kullanılan Arduino ide'nin dahili kütüphanesidir ve LiquidCrystal kütüphanesi l2C LCD Modülü içindir.
#Dahil etmek
Sonra farklı pinler ve atanan değerler için tamsayılar tanımlayın. HX711_ADC yük hücresi işlevi, Dout ve saat pimini ayarlamak içindir.
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; uzun 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;
Kurulum bölümünde, önce seri monitörü başlattık, bu sadece hata ayıklama içindir. Daha sonra pin modlarını tanımladık, tüm butonlar input olarak tanımlandı. Arduino PULL UP fonksiyonu yardımıyla pimleri normalde mantıksal olarak yükseğe ayarladık. Bu yüzden bunun için herhangi bir harici direnç kullanmak istemiyoruz.
pinMode (tpin, INPUT_PULLUP); pinMode (6, ÇIKIŞ); pinMode (12, ÇIKIŞ); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Aşağıdaki kod satırları I2C LCD'yi ayarlamak içindir. Önce LCD.print () işlevini kullanarak karşılama metnini görüntüledik, iki saniye sonra lcd.clear () kullanarak ekranı temizledik. Yani, başlangıçta ekran karşılama metni olarak ARDUINO BALANCE'ı gösterir ve iki saniye sonra, ölçüm ağırlıklarını silecek ve gösterecektir.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print ("ölçelim"); gecikme (2000); lcd.clear ();
Daha sonra loadCell.begin () fonksiyonunu kullanarak loadcell'den değerleri okumaya başladık, sonra kalibre edilen değerler için EEPROM'u okuyoruz, bunu EEPROM.get () fonksiyonunu kullanarak yapıyoruz . Yani, kalibrasyon taslağını kullanarak değeri zaten EEPROM adresinde sakladık, sadece bu değeri tekrar alıyoruz.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, calibrationValue);
Döngü bölümünde ilk olarak LoadCell.update () kullanarak yük hücresinden herhangi bir veri olup olmadığını kontrol ediyoruz, varsa bu verileri okuyor ve saklıyoruz , bunun için LoadCell.getData () kullanıyoruz. Ardından, depolanan değeri LCD'de görüntülememiz gerekir. Bunu yapmak için LCD.print () işlevini kullandık. ayrıca, ayarlanan ağırlığı yazdırıyoruz. Set ağırlığı, buton sayacı yardımıyla ayarlanır. Bu son bölümde açıklanmıştır.
eğer (LoadCell.update ()) newDataReady = true; if (newDataReady) { if (millis ()> t + serialPrintInterval) { float i = LoadCell.getData (); lcd.setCursor (0, 0); lcd.print ("wei'yi ayarla:"); lcd.setCursor (9, 0); lcd.print (buttonPushCounter); lcd.setCursor (14, 0); lcd.print ("GM"); lcd.setCursor (0, 1); lcd.print ("ağırlık:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
Daha sonra dara değerini ayarlıyoruz, bunun için önce digitalRead () fonksiyonunu kullanarak dara butonunun durumunu okuyoruz , eğer durum düşükse bu ağırlığı sıfıra indiriyoruz . Bu ağırlık ölçeğinin dara işlevi, okumaları sıfıra getirmektir. Örneğin, eşyaların yüklendiği bir kasemiz varsa, o zaman net ağırlık, kasenin ağırlığı + nesnelerin ağırlığı olacaktır. Eşyaları yüklemeden önce yük hücresi üzerindeyken dara düğmesine basarsak, sepetin ağırlığı sıfırlanır ve tek başına eşyaların ağırlığını ölçebiliriz.
eğer (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Şimdi, zil gecikmesi ve led durumu gibi farklı göstergeler için koşulları ayarlamamız gerekiyor. Bunu if koşullarını kullanarak yaptık, toplam üç koşulumuz var. İlk olarak, ayarlanan ağırlık ile ölçüm ağırlığı arasındaki farkı hesaplıyoruz, ardından bu değeri k değişkeninde saklıyoruz.
float k = buttonPushCounter-i;
1. Ayarlanan ağırlık ile ölçüm ağırlığı arasındaki fark 50 gms'den büyük veya eşitse, sesli uyarı 200 milisaniye gecikmeyle (yavaşça) çalar.
eğer (k> = 50) { digitalWrite (6, HIGH); gecikme (200); digitalWrite (6, DÜŞÜK); gecikme (200); }
2. Ayarlanan ağırlık ile ölçüm ağırlığı arasındaki fark 50 milisaniye'den düşük ve 1 gramdan büyükse, sesli uyarı 50 milisaniye gecikmeyle (daha hızlı) çalar.
eğer (k <50 && k> 1) { digitalWrite (6, HIGH); gecikme (50); digitalWrite (6, DÜŞÜK); gecikme (50); }
3. Ölçülen ağırlık ayarlanan değere eşit veya daha büyük olduğunda, bu yeşil led'i açacak ve sesli ikazı ve kırmızı ledi sönecektir.
eğer (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, YÜKSEK); }
Ayarlanan ağırlığı ayarlamak için iki boş fonksiyonumuz daha var () (düğmeye basmayı saymak için).
Her basışta ayar değerini 10 gms artıran işlev. Bu, pin düşükse Arduino'nun digitalRead işlevi kullanılarak yapılır, bu, düğmeye basıldığı anlamına gelir ve bu, değeri 10 gms artıracaktır.
up_buttonState = digitalRead (Up_buttonPin); eğer (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
Benzer şekilde, checkdown, her basışta ayar değerini 10gms azaltmak içindir.
down_buttonState = digitalRead (Down_buttonPin); eğer (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
Bu, programlama bölümünün sonunu gösterir.
Bu Arduino tabanlı elektronik tartı, 10 kg'a kadar olan ağırlıkları ölçmek için mükemmeldir (bu sınırı daha yüksek bir yük hücresi kullanarak artırabiliriz). Bu, orijinal ölçümlere göre% 99 doğrudur.
Bu Arduino tabanlı LCD ağırlık dengeleme makinesi devresi ile ilgili herhangi bir sorunuz varsa, lütfen yorum bölümüne gönderin, teşekkür ederim!