Timbangan digital presisi dan lcd pabrikan dengan arduino

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:

  1. Arduino Uno
  2. Loadcell
  3. HX711
  4. 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#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:

  1. Memiliki 2 block differential ADC sehingga bisa dengan gain yang berbeda disesuaikan dengan tingkat presisi yang diinginkan , yang tersedia 32, 64 dan 128.
  2. Memiliki regulator tegangan sendiri untuk loadcell dan ADC.
  3. Interface serial yang disederhanakan.
  4. Frekuensi keluaran dapat diatur 10SPS dan 80sps
  5. Penyaring/filter riak 50Hz dan 60Hz.

Dengan spesifikasi:

  1. Tegangan operasional dc 2.6 ~ 5.5v.
  2. ADC 24 bit yang presisi.
  3. frekuensi Internal clock 11.0592 MHz.
  4. Konsumsi arus, 1500uA (normal), 0,5uA (power down).

dokumentasi Galeri timbangan digital presisi

Library : HX711.zip

29 thoughts on “Timbangan digital presisi dan lcd pabrikan dengan arduino

  1. 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

    1. 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

    1. 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)

  2. 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

Leave a Reply

Your email address will not be published. Required fields are marked *