04/27/2024

Yük Hücresi ve Arduino ile Terazi Yapımı

Arduino ve HX711 modülü ile hassas terazi nasıl yapılır? DIY ELEKTRONİK TERAZİ.

 


Bu projede 5kg destekli yük hücresi kullandım. Dilerseniz 1kg, 10kg veya 20kg’lık versiyonlarını da kullanabilirsiniz.
Eğer 5kg (5000g) dışında bir yük hücresi kullanmayı tercih ederseniz aşağıdaki komut satırından “5000” değerini değiştirmelisiniz. Örneğin 1kg için “1000” olmalıdır. Bu komut satırı, yük hücresinin limiti aşıldığında ekranda bir uyarının görünmesini sağlar.
“if (weight>=5000)” yerine “if (weight>=1000)” gibi…

 

 

İNDİRME LİNKİ..
Arduino,  3D, PDF & Gerber Dosyaları:
https://drive.google.com/file/d/174cPp-ucNI5Vp799bI-Xuh0_hA0JaEov/view?usp=sharing

Terazi devresi 4 adet AA (4×1.5V=6V) pil ile çalışmaktadır.

3D Baskı Parçalar …

Ayaklar TPU (Flex Filament) baskılıdır. Diğer tüm parçalar PLA filament ile basılmıştır. Yazdırma için standart DRAFT ayarları yeterlidir.

Gerekli malzemeler: (Bu linkler referans amaçlıdır. Malzemeleri isimleri ile aratıp TR de bir çok farklı satış sitesinde bulabilirsiniz)

5kg Load cell & HX711 module: https://s.click.aliexpress.com/e/_DDKLo6j
Arduino Nano: https://s.click.aliexpress.com/e/_DmlZY0P
1.3inc Oled Screen (4 Pins): https://s.click.aliexpress.com/e/_De9jsa3
4 AA Battery Box: https://s.click.aliexpress.com/e/_DlEyhoT
Copper circuit plate (5×5 or 5×7): https://s.click.aliexpress.com/e/_DeDWEdD
12x12x6 tact push button: https://s.click.aliexpress.com/e/_DdzsQeF
Rocker Switch: https://s.click.aliexpress.com/e/_DdlxZyT
10K resistor: https://s.click.aliexpress.com/e/_DklJgdt
Pin Header connector:  https://s.click.aliexpress.com/e/_DddNsEF
4 Pin Jumper cable wire 2.54 (20cm): https://s.click.aliexpress.com/e/_DmYLKVv


“LoadCell.setCalFactor(399);” 
Bu satırdaki 399 değeri kalibrasyon için bir değerdir. Benim için doğru sayı 399 dur. Kendinize uygun kalibrasyon değerini bulmanız gerekebilir. Sabit bir ağırlıkla (örneğin 1kg) deneyerek doğru değeri elde edebilirsiniz. Bu sayıyı artırarak veya azaltarak doğru kalibrasyonu elde etmek için 3-5 kez denemeniz gerekebilir.

Not: Kalibrasyon değerini bulmak için harici kodlar kullanılabilir. Ama ben onları pratik bulmuyorum. Zaten bir kaç deneme yanılma ile doğru değere ulaşılabiliyor.

Arduino Terazi Ful Kod:

#include <HX711_ADC.h> // https://www.arduino.cc/reference/en/libraries/hx711_adc/
#include <Wire.h>
#include <Adafruit_SH110X.h>

#define i2c_Address 0x3c
#define OLED_RESET -1
int width = 128; // Screen Width | OLED ekran genişliği (piksel olarak)
int height = 64; // Screen Width | OLED ekran yüksekliği (piksel olarak)
// int adress = 0x3C;   
Adafruit_SH1106G display = Adafruit_SH1106G(width, height, &Wire, OLED_RESET);

HX711_ADC LoadCell(4, 5); // dt pin, sck pin
int taree = 7; // taree button pin
int gr = 0;
float oz = 0;
float weight = 0;

void setup() {
  display.begin(i2c_Address, true); 
  display.clearDisplay();
  display.setTextColor(SH110X_WHITE);
  display.setTextSize(1);
  display.display();
  display.clearDisplay();
  
  pinMode (taree, INPUT_PULLUP);
  LoadCell.begin(); // start connection to HX711 | HX711 bağlantısı başlatma
  LoadCell.start(1000); // load cells gets 1000ms of time to stabilize

  LoadCell.setCalFactor(399); // calibration value | kalibrasyon değeri

delay(200);
}
void loop() {

display.setTextColor(SH110X_WHITE);  // OLED Ekrana Yazma
  
  LoadCell.update(); // Retrieves data from the load cell | Yük hücresinden veri alma
  weight = LoadCell.getData(); 

 if (weight<0)
 {
   weight = weight * (-1);
 }  
  gr = weight;
  display.setTextSize(2);
  display.setCursor(3, 6); // set cursor  |  imleç konumu
  display.print(gr, 1); // Printing the output in grams to the screen |  gram cinsinden çıktıyı ekrana yazdırma
  display.setCursor(60, 6);
  display.print(" g");
  
  oz = weight/28.3495;
  display.setTextSize(2);
  display.setCursor(3, 32);
  display.print(oz, 2); // Printing the output in oz to the screen |  oz cinsinden çıktıyı ekrana yazdırma
  display.setCursor(60, 32);
  display.print(" oz");

  if (weight>=5000)
  {
    weight=0;
  display.setCursor(2, 49); // set cursor  | imleç konumu 
  display.print(" Over Loaded "); 
  delay(200);
  }
  if (digitalRead (taree) == LOW)
  {
    display.setTextSize(2);
    display.setCursor(8, 49); // set cursor | imleç konumu
    display.print(" Taring.. ");
    LoadCell.start(1000);
    display.setCursor(0, 46);
    display.print("             ");
 
  }

gr = 0;
oz = 0;
weight = 0;

display.display();
display.clearDisplay();
}


HX711 library indirme linki:
https://www.arduino.cc/reference/en/libraries/hx711_adc/

Oled Screen Library: https://www.arduino.cc/reference/en/libraries/adafruit-sh110x/

Not 1: Mevcut oled ekranınızın özelliklerine bağlı olarak kütüphane dosyasının farklı bir versiyonu gerekli olabilir.

Not 2: Eğer “HX711_ADC” kütüphanesi ile ilgili hata alıyorsanız bu kütüphane dosyasının farklı versiyonlarını denemelisiniz.

Not 3: “#define i2c_Address 0x3c” satırındaki 0x3c adresi Oled ekranla ilgilidir. Sahip olduğunuz ekran için durum aynı olmayabilir. OLED ekranınız Arduino’ya bağlıyken aşağıdaki kod ile doğru adresi bulabilirsiniz. Bazı ekranların arkasında adres bilgisi yazar.


Teraziyi kullandığım video …


I2C Adres Bulma Kodu (Oled Ekran Adresini Tespit için):

//  I2C Adress Finder | Adres Bulma

#include "Wire.h"         

int hata, adres, cihaz_adet; 

void setup() {
  Wire.begin();       
  Serial.begin(9600);   
}

void loop() {
  cihaz_adet = 0;
  for (adres = 1; adres < 127; adres++ ) { 
    Wire.beginTransmission(adres);
    hata = Wire.endTransmission();

    if (hata == 0) {                     
      Serial.print("I2C Device Found | Cihaz Bulundu! | Adres: 0x");
      if (adres < 16) Serial.print("0"); 
      Serial.println(adres, HEX);
      cihaz_adet++;
    }
    else 
      if (hata == 4) {                   
        Serial.print("Unknown Error | Bilinmeyen Hata: 0x");
        if (adres < 16) Serial.print("0");
        Serial.println(adres, HEX);
      }
  }
  if (cihaz_adet == 0)  
    Serial.println("I2C Device Not Found | I2C Cihaz Bulunamadı ...");
  delay(3000);
}


BİLGİ:
Kodu boş bir ARDUINO IDE sayfasına kopyalayıp yapıştırabilirsiniz. Veya yukarıdaki linkten indirebilirsiniz.