Rabu, 26 April 2017

Cara memperbaiki membuat timbangan digital (BERHASIL)

Coding aslinya saya peroleh dari link di bawah:
https://circuitdigest.com/microcontroller-projects/arduino-weight-measurement-using-load-cell
Dan skemanya.
Terima kasih...
Saya menggunakan arduino uno R3 cloningan yang harganya Rp75000, modul HX711, load cell 300Kg.
Coding telah saya rubah dengan cara "trial and error" alias coba gagal dan coba lagi.
Coding aslinya diperuntukan untuk satuan dalam unit "gram" yang mana telah saya rubah dalam satuan unit "kilo gram = Kg".
Tentunya ini hasil yg tidaklah sesempurna yang saya harapkan namun inilah yang "terbaik" saat saya berbagai macam coding yg telah saya uji.
Adapun kelemahan timbangan ini sbb:
1. Tidak bisa menimbang benda yg bobotnya kurang dari 1Kg. Sebetulnya bisa saja dibuat, bisa menimbang berat benda kurang dari 1Kg namun akibatnya terjadi fliker di LCD nya.
2. Timbangan ini tidak cocok untuk jual beli.
Namun timbangan ini bisa menimbang berat beban lebih dari 140Kg.
Untuk maksimalnya sampai berapa Kg, belum saya uji.
Lihat codingnya di bawah
===========
Sket pertama
===========

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
#define DT A0
#define SCK A1
#define sw 2
long sample=0;
float val=0;
long count=0;
unsigned long readCount(void)
{
  unsigned long Count;
  unsigned char i;
  pinMode(DT, OUTPUT);
  digitalWrite(DT,HIGH);
  digitalWrite(SCK,LOW);
  Count=0;
  pinMode(DT, INPUT);
  while(digitalRead(DT));
  for (i=0;i<24;i++)
  {
    digitalWrite(SCK,HIGH);
    Count=Count<<1;
    digitalWrite(SCK,LOW);
    if(digitalRead(DT))
    Count++;
  }
  digitalWrite(SCK,HIGH);
  Count=Count^0x800000;
  digitalWrite(SCK,LOW);
  return(Count);
}
void setup()
{
  Serial.begin(9600);
  pinMode(SCK, OUTPUT);
  pinMode(sw, INPUT_PULLUP);
  lcd.begin(16, 2);
  lcd.print("BERAT");
  lcd.setCursor(0,1);
  lcd.print("MENGHITUNG");
  delay(1000);
  lcd.clear();
  calibrate();
}
void loop()
{
  count= readCount();
  int w=(((count-sample)/val)-2*((count-sample)/val));
  Serial.print("berat:");
  Serial.print((int)w);
  Serial.println("Kg");
  lcd.setCursor(0,0);
  lcd.print("BERAT");
  lcd.setCursor(0,1);
  lcd.print(w/100);
  lcd.print(" Kg     ");
  if(digitalRead(sw)==0)
  {
    val=0;
    sample=0;
    w=0;
    count=0;
    calibrate();
  }
}
void calibrate()
{
  lcd.clear();
  lcd.print("KALIBRASI...");
  lcd.setCursor(0,1);
  lcd.print("TUNGGU...");
  for(int i=0;i<100;i++)
  {
    count=readCount();
    sample+=count;
    Serial.println(count);
  }
  sample/=100;
  Serial.print("Avg:");
  Serial.println(sample);
  lcd.clear();
  lcd.print("SIAP");
  count=0;
  while(count<1000)
  {
    count=readCount();
    count=sample-count;
    Serial.println(count);
  }
  lcd.clear();
  lcd.print("TUNGGU LAGI...");
  delay(2000);
  for(int i=0;i<100;i++)
  {
    count=readCount();
    val+=sample-count;
    Serial.println(sample-count);
  }
  val=val/100.0;
  val=137;        // ubahlah 137 utk mendapatkan berat yg sesuai
  lcd.clear();
}

================
Sket kedua alternatif
================

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
#define DT A0
#define SCK A1
#define sw 2
long sample=0.0;
float val=0.0;
long count=0.0;
unsigned long readCount(void)
{
  unsigned long Count;
  unsigned char i;
  pinMode(DT, OUTPUT);
  digitalWrite(DT,HIGH);
  digitalWrite(SCK,LOW);
  Count=0.0;
  pinMode(DT, INPUT);
  while(digitalRead(DT));
  for (i=0;i<24;i++)
  {
    digitalWrite(SCK,HIGH);
    Count=Count<<1;
    digitalWrite(SCK,LOW);
    if(digitalRead(DT))
    Count++;
  }
  digitalWrite(SCK,HIGH);
  Count=Count^0x800000;
  digitalWrite(SCK,LOW);
  return(Count);
}
void setup()
{
  Serial.begin(9600);
  pinMode(SCK, OUTPUT);
  pinMode(sw, INPUT_PULLUP);
  lcd.begin(16, 2);
  lcd.print("BERAT");
  lcd.setCursor(0,1);
  lcd.print("MENGHITUNG");
  delay(1000);
  lcd.clear();
  calibrate();
}
void loop()
{
  count= readCount();
  int w=((((count-sample)/val)-2*((count-sample)/val))/10.0);
  Serial.print("berat:");
  Serial.print((int)w);
  Serial.println(" Kg    ");
  lcd.setCursor(0,0);
  lcd.print("BERAT");
  lcd.setCursor(0,1);
  lcd.print(w/10.0);
  lcd.print(" Kg    ");
  if(digitalRead(sw)==0)
  {
   val=0.0;
   sample=0.0;
   w=0.0;
   count=0.0;
   calibrate();
  }
}
void calibrate()
{
  lcd.clear();
  lcd.print("KALIBRASI...");
  lcd.setCursor(0,1);
  lcd.print("TUNGGU...");
  for(int i=0;i<100;i++)
  {
    count=readCount();
    sample+=count;
    Serial.println(count);
  }
  sample/=100;
  Serial.print("Avg:");
  Serial.println(sample);
  lcd.clear();
  lcd.print("SIAP...");
  count=0.0;
  while(count<1000)
  {
    count=readCount();
    count=sample-count;
    Serial.println(count);
  }
  lcd.clear();
  lcd.print("TUNGGU LAGI...");
  delay(2000);
  for(int i=0;i<100;i++)
  {
    count=readCount();
    val+=sample-count;
    Serial.println(sample-count);
  }
  val=val/100.0;
  val=137;        // ubahlah 137 utk mendapatkan berat yg sesuai
  lcd.clear();
}

Penutup
Semoga tulisan ini tidak berguna sama sekali.
Paling2 tidak ada yg membaca.

Rabu, 12 April 2017

Cara memperbaiki membuat timbangan digital (GAGAL MANING)

Penulisan coding bersumber link di bawah:
Terima kasih...

Saya sudah behasil mebuat (memperbaiki) tmbangan digital, menggunakan arduino uno link di bawah
https://wayanlukito.blogspot.co.id/2017/04/cara-memperbaiki-membuat-timbangan_26.html

Alat yg saya gunakan sbb:
-Load cell 300kg.
-Modul hx711.
-IC Atmega 8A dan 16.
-Minsys

Alat pendukung sbb:
-Adaptor 9V DC.
-Usbasp.
-Kabel jumper.

Software pendukung sbb:
-Driver Usbasp 32bit windows.
-Bascom AVR.
-ProgISP.

Setelah mencoba dgn ic atmega 8a dan atmega 16 bisa disimpulkan sbb:
-LCD agak berkedip kedip.
-Tidak bisa menimbang bobot kurang dari 1kg (1kg jadinya 0.73-0.74Kg).
-Tidak bisa menimbang bobot lebih dari 95kg. Hasilnya malah minus (jadinya -549.75).

Coding dan fotonya menyusul (jika ada yg peduli) meskipun saya pesimis.
Coding pakai bahasa basic.
Meskipun masih ada harapan sangat-kecil dengan menggunakan arduino uno tetapi saya fikir hasilnya akan nyaris sama.
Saya fikir kemungkinan penyebabnya adalah range bacaan pada modul hx711 adalah sempit.
Tulisan ini bukanlah konsep belaka tetapi sudah melalui beberapa kali uji coba.

Penutup
Semoga tulisan ini tidak berguna.


Jumat, 17 Februari 2017

Cara memperbaiki timbangan digital (GAGAL !!!)

Saya sudah behasil mebuat (memperbaiki) tmbangan digital, menggunakan arduino uno link di bawah
https://wayanlukito.blogspot.co.id/2017/04/cara-memperbaiki-membuat-timbangan_26.html

Timbangan yg sy perbaiki, spesikasinya sbb: 
Merek: Great scale.
Kapasitas max: 150kg.
Load cell: Uda 300 Kg.
Kerusakanya pd indikator-displaynya (6xseven-segment) (weighing indicator), mati.

PCB indikator timbangan-digital









Hal yg sdh pernah sy lakukan sbb:
1. Browsing di internet yg didapat harga nya call me alias tdk utk diperjual belikan.
2. Mencari pengganti indikator-display di t4 perakitan timbangan tsb dan ternyata (menurut sy pribadi) harganya mahal kisaran 800ribuan, belum ongkos kalibrasinya kisaran 200ribuan. Gak jd beli.
3. Mengganti Xtal 11,0592Mhz.
4. Mengganti IC atmel tipe serinya lupa (40pin) dg cara menukar IC atmel yg diambil dr timbangan-digital yg normal, tdk berhasil jg displaynya tetap mati.

Kapan2 akan sy coba sbb:
1. Mengganti IC tipe ULN2003A dan 74HC373.
2. Pakai arduino atau atmega + lcd 16x2.
Tapi tdk janji.

Penutup
Semoga tulisan ini tdk berguna sama sekali.
Paling2 tdk ada komentar krn tdk ada pengunjung.

Ciri khas pengemis
Like facebook sy.
Follow twitter sy.
Subscribe youtube sy.