Arduino İle Ağırlık Sensörü Kullanımı
Bu yazımızda hem endüstriyel hem de hobi amaçlı bir çok projemizde kullandığımız ağırlık sensörünün kullanımını öğreneceğiz. İlk olarak ağırlık sensörümüzün HX711 amplifikatörü ile bağlantısını ve ardından arduino ile bağlantısını öğreneceğiz. Daha sonra kalibrasyonunu yapıp kendi tartımızı yapmış olacağız.
İlk olarak ağırlık sensörümüzü tanıyalım.

Ağırlık sensörü, uygulanan kuvveti ölçülebilen bir elektrik sinyaline dönüştürür. Elektrik sinyali uygulanan kuvvete orantılı olarak değişir. Gerinim(strain gauges) ölçerler, pnömatik ve hidrolik olmak üzere çeşitleri vardır.
Gerinim ölçer yük hücreleri, bağlı gerinim ölçerlere sahip bir metal çubuktan oluşur (yukarıdaki resimdeki beyaz tutkalın altında). Gerinim ölçer, bir nesne üzerindeki kuvveti veya gerinimi ölçen bir elektrik sensörüdür. Gerinim ölçerlerin direnci, bir nesneye harici bir kuvvet uygulandığında değişir ve bu da nesnenin şeklinin (bu durumda metal çubuğun) deformasyonuna neden olur. Gerinim ölçer direnci, uygulanan yüke orantılıdır ve bu da nesnelerin ağırlığını hesaplamamızı sağlar.
Genellikle, yük hücreleri Wheatstone köprüsüne (aşağıda gösterildiği gibi) bağlanmış dört gerinim ölçere sahiptir ve bu da doğru direnç ölçümleri elde etmemizi sağlar.

Ağırlık sensörlerinde olan kablolar genellikle şu şekildedir.
- Red: VCC (E+)
- Black: GND (E-)
- White: Output – (A-)
- Green: Output + (A+)
Nesneleri tartarken oluşan gerilim değişiklikleri çok küçük olduğundan bir amplifikatöre ihtiyacımız var. Kullandığımız yük hücresi genellikle bir HX711 amplifikatörüyle birlikte satılır. Yani, kullanacağımız amplifikatör bu olacak.
HX711 Amplifikatör
Avia Semiconductor’un patentli teknolojisine dayanan HX711, tartı terazileri ve endüstriyel kontrol uygulamaları için doğrudan bir köprü sensörüyle arayüz oluşturmak üzere tasarlanmış hassas 24 bit analogdan dijitale dönüştürücüdür (ADC). HX711, iki kablolu arayüz (Clock ve Data) kullanarak mikrodenetleyiciyle iletişim kurar.

HX711 Amplikatör Özellikleri
- İki seçilebilir diferansiyel giriş kanalı
- 32, 64 ve 128 seçilebilir kazançlı çip üstü aktif düşük gürültülü PGA
- Yük hücresi ve ADC analog güç kaynağı için çip üstü güç kaynağı regülatörü
- Harici bileşen gerektirmeyen çip üstü osilatör, isteğe bağlı harici kristal
- Çip üstü güç-sıfırlama
- Basit dijital kontrol ve seri arayüz: pin tahrikli kontroller, programlama gerekmez
- Seçilebilir 10SPS veya 80SPS çıkış veri hızı
- Eşzamanlı 50 ve 60Hz besleme reddi
- Çip üstü analog güç kaynağı regülatörü dahil akım tüketimi: normal çalışma < 1,5mA, güç kesintisi < 1uA
- Çalışma besleme voltajı aralığı: 2,6 ~ 5,5V
- Çalışma sıcaklık aralığı: -40 ~ +85℃
- 16 pin SOP-16 paketi
HX711 Amplikatörü daha detaylı incelemek için aşağıdan datasheetine ulaşabilirsiniz.
Malzeme Listesi
Bu yazımızda kullanacağımız malzeme listesi aşağıdadır.
- Arduino Uno
- 20 Kg Ağırlık Sensörü(Benim elimde bu var siz yüksek veya düşük kapasiteli de kullanabilirsiniz)
Her şey hazırsa artık bağlantı şemamıza geçebiliriz.
Arduino İle Ağırlık Sensörü Bağlantı Şeması
| Ağırlık Sensörü | HX711 | HX711 | Arduino | |
| Red (E+) | E+ | GND | GND | |
| Black (E-) | E- | DT | Pin 2 | |
| White (A-) | A- | SCK | Pin 3 | |
| Green (A+) | A+ | VCC | 5V | 

Bağlantılarımız hazır ise artık kod kısmına geçebiliriz.
Hx711 İle Ağırlık Sensörü Kullanım Kodları
Ağırlık sensörünü kullanabilmemiz için hx711 yükseltici devresini kullanmamız lazım ama bunu da kallanabilmemiz için gerekli kütüphanelerini kurmamız lazım. Aşağıdaki linkten kütüphanemizi indirip kuralım.
Kütüphanemizi kurduysanız ilk olarak sensörümüzün kalibrasyonunu yapmamız gerekmektedir.
Ağırlık Sensörünün Kalibrasyonu
Aşağıdaki kodumuzu arduinoya yükleyelim ve seri port ekranını açalım ve adımları takip ederek kalibrasyon değerini alalım.
#include "HX711.h"
// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;
HX711 scale;
void setup() {
  Serial.begin(9600);
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
}
void loop() {
  if (scale.is_ready()) {
    scale.set_scale();    
    Serial.println("Dara alinacak ustundenki agirliklari alin!");
    delay(5000);
    scale.tare();
    Serial.println("Dara alindi!");
    Serial.print("Agirligi bilinen cismi koyun!");
    delay(5000);
    long reading = scale.get_units(10);
    Serial.print("Kalibrasyon Sonucu: ");
    Serial.println(reading);
  } 
  else {
    Serial.println("HX711 bulunamadi!");
  }
  delay(1000);
}Ben burada bilinen değer olarak 500 gramlık terazi ağırlığı kullandım ve sonucum 52505 çıktı.

Sonucumuzu elde ettiğimize göre şimdi kalibrasyon değerimizi hesaplayalım.
Kalibrasyon Değeri = (Okunan Değer)/(Bilinen Ağırlık)Değerlerimizi yerlerine koduğumuzda
Kalibrasyon Değeri = 52505/500Kaibrasyon Değeri= 105.01
Şimdi kalibrasyon değerimizi ölçüm kodumuza girelim.
#include "HX711.h" // Kütüphanemizi ekliyoruz.
const int LOADCELL_DOUT_PIN = 2; // DT Pinimizi tanımlıyoruz
const int LOADCELL_SCK_PIN = 3;  // SCK Pininmizi tanımlıyoruz
HX711 scale; // objemizi tanımlıyoruz
void setup() { 
  Serial.begin(9600);    // Seri haberleşmemizi 9600 baudrate'de başlatıyoruz.
  Serial.println("Arduino Destek HX711 Demo");
  Serial.println("Olcum baslatiliyor..");
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); // objemize pin tanımlamaları verilip başlatılıyor.
  Serial.println("Tartimdan once ayarlamalar yapiliyor:");
  Serial.print("Okuma: \t\t");
  Serial.println(scale.read());      // ADC değeri okunuyor
  Serial.print("Ortalama ADC Degeri: \t\t");
  Serial.println(scale.read_average(20));   // 20 adet ADC değerinin ortalaması yazdırılıyor
  Serial.print("Olcum Degeri: \t\t");
  Serial.println(scale.get_value(5));   // Daha dara ağırlığı çıkarılmış 5 adece değerinin ortalamasını yazdır. Kalibrasyon değeri daha girilmedi.
  Serial.print("Birim Okuma: \t\t");
  Serial.println(scale.get_units(5), 1);  // ADC'den 5 değeri oku darayı çıkar ve 5'e böl. Kalibre edilmedi
            
  scale.set_scale(105.01); // Kalibrasyon değerini buraya girip. Ayarlamasını yapıyoruz
  scale.tare();               // Darayı sıfırlıyoruz
  Serial.println("Terazi Ayarlamalari Yapildi:");
  Serial.print("ADC Degeri: \t\t");
  Serial.println(scale.read());                 //ADC Değeri okunuyor
  Serial.print("20 ADC Degeri Ortalamasi: \t\t");
  Serial.println(scale.read_average(20));       // 20 ADC değerinin ortalaması alınıyor.
  Serial.print("Olcum Degeri: \t\t");
  Serial.println(scale.get_value(5));   // Dara Ağırlığı çıkarılmış 5 değerin ortalaması yazdırılıyor
  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);        // Ortalaması alınmış 5 değerden dara çıkarılmış hali yazdırılıyor
  Serial.println("Okumalar:");
}
void loop() {
  Serial.print("Tek Olcum:\t");
  Serial.print(scale.get_units(), 1);
  Serial.print("\t| Ortalama 10 Olcum:\t");
  Serial.println(scale.get_units(10), 5);
  delay(5000); //5 saniye bekletiyoruz
}Benim sistemim aşağıdaki gibidir.

Kodumuzun ekran seri monitör çıktısı aşağıdaki gibidir.

Bir sonraki yazımızda görüşmek üzere, bizi youtube ve instagramda da takip ederseniz seviniriz 🙂

 
			



