Selasa, 01 Januari 2019

Project Timbangan BMI dengan Sensor Ping dan Load Cell Part 1

Assalamualaikum Wr Wb

Kali ini saya akan share project yang telah selesai saya lakukan yaitu untuk membuat timbangan BMI yang dapat menampilkan status BMI seseorang menggunakan Sensor Ping Dan Load Cell. Sebelum masuk ke koding dan teknisnya mari kita bahas dulu apa itu BMI dan penjelasan singkatnya agar kita paham konsep apa yang akan kita pakai pada project ini.

Apa Itu BMI ? 

BMI adalah singkatan dari Body Mass Index, yang merupakan ukuran yang digunakan untuk menilai proporsionalitas perbandingan antara tinggi dan berat seseorang. ... Rumus untuk BMI adalah berat badan (dalam kilogram) dibagi dengan tinggi badan kuadrat (dalam meter), atau disingkat

 (BMI = BB/TB2)

Berikut adalah klasifikasi dari perhitungan BMI yang akan menjadi standar perhitungan kita nanti.


Apa saja yang dibutuhkan untuk membuat alat ini ?
1. Arduino Uno / Nano / Mega 
2. Sensor Ping / Ultrasonic 
3. Loadcell Yang Support Sampai 150 kg Atau Lebih 
4. Mekanik Profil untuk Peletakan Sensor dan Loadcell 

Nah setelah semua tersedia mari kita bahas cara kerja alat yang akan kita buat, pada dasarnya alat yang kan kita buat akan menggunakan prinsip pengukuran jarak dari reference point untuk menentukan tinggi orang yang akan diukur, kemudian loadcell akan digunakan untuk mengukur berat badan dari orang yang akan diukur, setelah semua selesai maka mikrokontroler akan melakukan perhitungan berapa BMI orang yang diukur.

nah berikut adalah kodenya

#include "HX711.h"

// HX711.DOUT  - pin #A1
// HX711.PD_SCK - pin #A0
// triggerPIn 13
// echoPin 12

HX711 scale(A1, A0);
#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10
#define button1 9
#define button2 8
#define button3 7
#define button4 6

long beratBadan,BMI,idealMin,idealMax;
long tinggiBadan;
bool regUkur = 0;
void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(button3, INPUT);
  pinMode(button4, INPUT);
  Serial.print("BMI Project");
  
}

void loop() {
  
    while (regUkur==0){
        if(digitalRead(button1)==0){
          ukurTBdanBB();
          regUkur=1;
        }
    
    Serial.print("Cek BMI?");
    Serial.print("Tekan Tombol 1");  
    }  

    
  
  

  while (regUkur==1){
     if (button2 == 1){
        //cetak aktual data  
      }
     if (button3 == 1){
        //cetak BMI Rekomendasi data  
      }
     if (button4 == 1){
        //tombol keluar dari menu  
        regUkur=0;
      } 
     if (BMI < 17.0){
        Serial.println("Kurus Berat");
      }
     else if ((BMI >=17.0)&&(BMI<18.5)){
        Serial.println("Kurus Berat");
      }
      else if ((BMI >=18.5)&&(BMI<25.0)){
        Serial.println("Ideal");
      }
      else if ((BMI >=25.1)&&(BMI<27.0)){
        Serial.println("Gemuk Ringan");
      }
      else if (BMI >27){
        Serial.println("Obesitas");
      }
      Serial.println("Berat Ideal Anda");
      Serial.print("Min :");
      Serial.print(idealMin);
      Serial.print(" Max :");
      Serial.println(idealMax);
      Serial.print(" Cetak ? ");
      delay(500);
  }
  
  
}

long getTinggi(){
  long duration, distance, tinggi;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  tinggi = 200 - distance;
 return tinggi;
}

void calibrationHx711(){
  Serial.println("Before setting up the scale:");
  Serial.print("read: \t\t");
  Serial.println(scale.read());      // print a raw reading from the ADC
  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));   // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));   // print the average of 5 readings from the ADC minus the tare weight (not set yet)

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);  // print the average of 5 readings from the ADC minus tare weight (not set) divided 
            // by the SCALE parameter (not set yet)  

  scale.set_scale(2280.f);                      // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();               // reset the scale to 0

  Serial.println("After setting up the scale:");

  Serial.print("read: \t\t");
  Serial.println(scale.read());                 // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));   // print the average of 5 readings from the ADC minus the tare weight, set with tare()

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided 
            // by the SCALE parameter set with set_scale

  Serial.println("Readings:");
}

long getBeratBadan(){
  long berat;
  berat = scale.get_units();
  return berat;
}

void ukurTBdanBB(){
  tinggiBadan=getTinggi();
  beratBadan=getBeratBadan();
  Serial.print("Tinggi Badan :");
  Serial.print(tinggiBadan);
  Serial.println(" cm");
  Serial.print("Berat Badan :");
  Serial.print(beratBadan);
  Serial.println(" kg");
  delay(5000);
  BMI=beratBadan/(pow(tinggiBadan,2)/10000);
  idealMin=18.5*(pow(tinggiBadan,2)/10000);
  idealMax=25*(pow(tinggiBadan,2)/10000);
  delay(500);
}
 
untuk penjelasan dan demonya kita lanjut dipostingan berikutnya ya heheheheh