dalam projek msin timbangan otomatis ini saya memanfatkan timbangan digital merk Quattro yang sudah tidak berfungsi normal. Fokus proyek ini adalah untuk memanfatkan Sensor berat/loadcell yang presisi dan linear serta LCD pabrikannya sehingga timbangan bisa dimanfatkan kembali.
komponen yang digunakan:
- Arduino Uno
- Loadcell
- HX711
- LCD pabrikan (driver HT1621)
Diagram:
Loadcell
Loadcell atau sensor berat pada perangkat quttro yang digunakan memiliki ukuran lebih besar dari loadcell yang ada dipasaran namun memiliki kesamaan cara kerja dan pengkabelan, kabel terdiri dari empat warna yaitu merah – E+, hitam – E-, putih – A/B+ dan hijau – A/B-.
HX711
komponen (modul) ini berfungsi sebagai ADC – analog to digital converter 24 bit yang akan mengkonversi nilai resistansi dari jembatan Wheatstone menjadi nilai yang berbanding lurus dengan berat benda yang ditimbang
LCD pabrikan
LCD yang digunakan merupakan bawaan perangkat timbangan quattro yang khusus dipakai untuk jenis timbangan ini saja. karakter Terdiri dari 6 digit seven segmen, 3 digit character segmen (seperti seven segmen digabung dengan garis diagonal), 10 bar/garis penanda berat, dan tampilan penunjuk lainnya.
LCD ini dikontrol oleh driver HT1621 dengan 4 jalur input, saya hanya menggunakan 3 saja yaitu CS, WR dan Data. sedangkan untuk tampilannya saya hanya menggunakan 6 seven segmen dan 2 character segment untk text “Gr”.
Skema:
program/sketch:
#include "HX711.h" HX711 scale(8,9); #define jumlahSegmen 15 //Command #define ComMode 0x52 #define RCosc 0x30 #define LCD_on 0x06 #define LCD_off 0x04 #define Sys_en 0x02 #define CTRl_cmd 0x80 #define Data_cmd 0xa0 //pin int CS = A3; int WR = A1; int Data = A0; int backLight = 7; int buttonESC = 5; int buttonPCS = 4; int buttonUNIT = 3; int buttonTARE = 6; int buttonZERO = 2; byte angka[] = {0xBE, 0x06, 0x7C, 0x5E, 0xC6, 0xDA, 0xF2, 0x0E, 0xFE, 0xCE}; byte byteArrayBerat[8]; byte strBerat[6]; void SendBit_1621(byte sdata,byte cnt) { for(byte i=0;i<cnt;i++) { digitalWrite(WR, LOW); if(sdata&0x80) digitalWrite(Data, HIGH); else digitalWrite(Data, LOW); digitalWrite(WR, HIGH); sdata<<=1; } } void SendCmd_1621(byte command) { digitalWrite(CS, LOW); SendBit_1621(0x80,4); SendBit_1621(command,8); digitalWrite(CS, HIGH); } void Write_1621(byte addr,byte sdata) { addr<<=3; digitalWrite(CS, LOW); SendBit_1621(0xa0,3); SendBit_1621(addr,6); SendBit_1621(sdata,8); digitalWrite(CS, HIGH); } void doubleToDecArray(double value, byte *byteArray) { double divider = 1000.0; for(byte i=0;i<8;i++) { byte divValue = value / divider; byteArray[i] = divValue; value = value - (divValue * divider); divider /= 10; } } void setup() { pinMode(CS, OUTPUT); pinMode(WR, OUTPUT); pinMode(Data, OUTPUT); pinMode(backLight, OUTPUT); pinMode(buttonESC, INPUT_PULLUP); pinMode(buttonPCS, INPUT_PULLUP); pinMode(buttonUNIT, INPUT_PULLUP); pinMode(buttonTARE, INPUT_PULLUP); pinMode(buttonZERO, INPUT_PULLUP); digitalWrite(backLight,LOW); digitalWrite(CS, HIGH); digitalWrite(Data, HIGH); digitalWrite(WR, HIGH); Serial.begin(9600); Serial.println("Timbangan Arduino"); Serial.println("https://www.project.semesin.com"); delay(50); SendCmd_1621(Sys_en); SendCmd_1621(RCosc); SendCmd_1621(ComMode); SendCmd_1621(LCD_on); for(byte i=0;i<jumlahSegmen;i++) { Write_1621(i,0xff); } delay(1000); for(byte i=0;i<jumlahSegmen;i++) { Write_1621(i,0x00); } Write_1621(6,0x85);// huruf 'G' Write_1621(7,0xA6); Write_1621(10,0x02);//Huruf 'r' Write_1621(11,0x40); scale.set_scale(2280.f); scale.tare(); } void loop() { double Berat = scale.get_units(10); Serial.println(Berat); bool getNum = false; byte numPointer = 0; byte numCounter = 0; if(Berat < 0) { Berat = 0; } else { doubleToDecArray(Berat, byteArrayBerat); for(byte i=0;i<8;i++) { if(byteArrayBerat[i] != 0) { getNum = true; } if(getNum) { numCounter++; strBerat[numPointer] = angka[byteArrayBerat[i]]; if(i==3) { strBerat[numPointer] |= 0x01;//Koma } if(numPointer++ == 6) { numCounter--; break; } } else if(i==3) { getNum = true; strBerat[numPointer++] = angka[0] | 0x01; } } byte j=0; for(int8_t i=0;i<6-numCounter;i++) { Write_1621(i,0x00); } for(byte i=6-numCounter;i<6;i++) { Write_1621(i,strBerat[j++]); } } if(!digitalRead(buttonTARE)) { delay(200); if(!digitalRead(buttonTARE)) { scale.tare(); while(!digitalRead(buttonTARE)); } } delay(50); }
Fitur-fitur modul HX711:
- Memiliki 2 block differential ADC sehingga bisa dengan gain yang berbeda disesuaikan dengan tingkat presisi yang diinginkan , yang tersedia 32, 64 dan 128.
- Memiliki regulator tegangan sendiri untuk loadcell dan ADC.
- Interface serial yang disederhanakan.
- Frekuensi keluaran dapat diatur 10SPS dan 80sps
- Penyaring/filter riak 50Hz dan 60Hz.
Dengan spesifikasi:
- Tegangan operasional dc 2.6 ~ 5.5v.
- ADC 24 bit yang presisi.
- frekuensi Internal clock 11.0592 MHz.
- Konsumsi arus, 1500uA (normal), 0,5uA (power down).
dokumentasi Galeri timbangan digital presisi
Library : HX711.zip
Untuk lcd diplay nya apa bisa di ganti dengan led 7segment.
Mohon pencerahanya
tentu bisa
Gan kalo load cell beda tipe programnya tetep sama ga gan? mohon pencerahannya terimakasih 🙂
[dalam hal penggunaan amplifier hx711] tetap sama karena arduino hanya berkomunikasi dengan hx711
Boleh kursus ga gan. Saya ingin belajsr
belum ada kelas kursus, cuma praktek langsung
Halo. Saya ingin nanya,
Apakah hasil timbangan dapat ditampilkan di monitor PC/Handphone untuk kemudian diambil value-nya?
bisa
tampil di PC, gunakan kabel usb serial to ttl
tampil di handphone gunakan bluetooth atau wifi
Mas, arduino load cell ini apa bisa dijadikan alat timbang yang ditentukan nilainya dulu sekalian sensor relay? misal saya mau nimbang beras yang disimpan di Silo/Hoper, buka tutup oleh cylinder/pneumatic, misal saya mau mengeluarkan beras 25 kg, kita masukkan angkanya 25 KG (dimana? lewat alat apa)(maaf masih awam) trus pas tombol on dipencet cylinder akan buka hoper, setelah timbangan menunjukkan angka 25 KG maka cylinder akan nutup pintu. logika ini bisa diterapkan di PLC cuma di arduino saya belum paham, demikian, terima kasih
bisa juga diaplikasikan pada arduino,
misalkan input berat menggunakan keypad
valve buka tutup dikontrol dari arduino melalui relay
saat pengisian beras berlangsung, arduino melalui sensor berat misal hx711+loadcell membaca berat hingga berat yang diinginkan tercapai
Maaf pak mau tanya,apa sumber daya yg digunakan?pemula ikut belajar??
Saat pengujian menggunakan power dari laptop (5v) melalui kabel usb
bisa saja penggunaannya menggunakan baterai atau adaptor
Satuan berat yg digunakan apa ya pak?apakah bisa dirubah,semisal gram menjadi kilo gram?
bisa diubah, metode :
1. proses kalibrasi : kalo kalibrasi dengan satuan kilo, outputnya kilo dsb
2. proses program : konversi satuan di program
Untuk kode error ‘scale’ was not declared in this scope,solusinya bagaimana pak?
Kemungkinan kurang lengkap copy paste koding dari halaman ini.
::install juga library HX711 (link download ada di halaman ini)
Tingkat ketelitiannya dalam program itu berapa gan?? Bisa sampek 1mg gak??
program-nya bisa dibuat tingkat ketelitian berapa saja (dalam artikel ini tingkat ketelitian = 1mg)
tetapi secara kelesluruhan tingkat ketelitian sangat bergantung karakteristik komponen2 nya.
Ikut nyimak om, ada keinginan yg kuat untuk bisa bikin timbangan digital
gan kalo output pake modul p10 bisa ga ya
bisa, tambahkan kode untuk tampilan di p10 nya
bang kalo disply nya pake p10..gimama cara nya
gunakan library dmd (buka dan pelajari juga contoh/example2 nya)
tambahkan kode2 display dmd pada sketch yang ingin di kembangkan:
1) ubah nilai berat (float) dalam bentuk string (jika diperlukan)
2) draw/tampilkan nilai tersebut (biasanya disertai posisi x, y)
gan saat saya veryfikasi aa pesan erorr seperti ini:
no matching function for call to ‘HX711::HX711
gmana mengatasi nya ya
sya pake lcd 1602
coba ganti librarynya dengan yang cocok (beda versi), bisa di download di link di halaman ini
gan, kalo pake lcd 1602 bagian mana yang harus di rubah, sekalian apa bisa dua display sekaligus, 1.LCD 1602 dan sekalian P10
banyak yang mesti di ganti, lebih baik dibuat program baru khusus tampilan lcd 1602
dan bisa saja dibuat dua display (lcd 1602 dan p10)
Klau untuk bisa dicharger pakai baterai berapa volt dan skemanya bagaimana?
minimum tergangan supplu = 2.7 volt
pemasangannya secara sederhana boleh langsung diparalelkan dengan baterai serta charger, pengembangannya bisa di tambahkan auto cut off, changer switch dsb