Translate

Monitor Berat dan Tinggi serta Lebar Badan Arduino

Monitor Berat dan Tinggi serta Lebar Badan Arduino 


           Pada kesempatan kali ini saya akan menjelaskan mengenai sebuah alat yang dapat mengukur berat badan dan tinggi badan serta lebar badan secara bersamaan. alat ini menggunakan sensor loadcell dan ampli hx711 dan juga HC-SRF04 serta rotary encoder. untuk lebih jelasnya berikut adalah kodingnya.


a. Komponen




b. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include "HX711.h"

#define outputA 4     //CLK pada pin 4
#define outputB 5     //DT pada pin 5
#define button 6      //SW pada pin 6

#define outputA2 7     //CLK pada pin 4
#define outputB2 8     //DT pada pin 5
#define button2 9     //SW pada pin 6

// HX711.DOUT    - pin #2
// HX711.PD_SCK    - pin #3

#define trigPin 11
#define echoPin 10

//int buttonup = A0;
//int buttondown = A1;
//int buttonok = A2;
//int buttonset = A3;

int buttonupx;
int buttondownx;
int buttonokx;
int buttonsetx;

int counter = 0;      //Variabel penghitung nilai
int aState;           //Variabel kondisi
int aLastState;       //Variabel kondisi terakhir

int counter2 = 0;      //Variabel penghitung nilai
int aState2;           //Variabel kondisi
int aLastState2;       //Variabel kondisi terakhir

HX711 scale(2, 3);       

long duration, distance;
float tera = 0;
int berat;
float fix;
int x;
int jarak;
int sp = 30;
float bbmedian;
float hasil;
float hasilnya;

void setup() {

  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  lcd.noCursor();

  //pinMode (buttonup,INPUT_PULLUP); 
  //pinMode (buttondown,INPUT_PULLUP);
  //pinMode (buttonok,INPUT_PULLUP);
  //pinMode (buttonset,INPUT_PULLUP);

  pinMode (outputA,INPUT_PULLUP); //Sertting sebagai input pullup
  pinMode (outputB,INPUT_PULLUP);
  pinMode (button,INPUT_PULLUP);

  pinMode (outputA2,INPUT_PULLUP); //Sertting sebagai input pullup
  pinMode (outputB2,INPUT_PULLUP);
  pinMode (button2,INPUT_PULLUP);
               
  aLastState = digitalRead(outputA);  //Baca kondisi terakhir CLK
  aLastState2 = digitalRead(outputA2);  //Baca kondisi terakhir CLK

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
 
  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

   lcd.setCursor (0,0);
   lcd.print ("LOADING... ");
   delay(5000);
   lcd.clear();
}

void loop() {

//buttonupx = digitalRead(buttonup);
//buttondownx = digitalRead(buttondown);
//buttonokx = digitalRead(buttonok);
//buttonsetx = digitalRead(buttonset);

  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  jarak = sp - distance;
 
  berat = scale.get_units(10) * -1;
  fix = (berat - 0.4233)/0.1586;
  fix = fix / 1000.0;

 if (fix < 0 ) {
  fix = 0;
  }

if(jarak < 0){
  jarak = 0;
 }  

if(jarak == 45){
bbmedian = 2.4;  
hasil = fix - 2.4;
}

if(jarak == 46){
bbmedian = 2.6;    
hasil = fix - 2.6;
}

if(jarak == 47){
bbmedian = 2.8; 
hasil = fix - 2.8;
}

if(jarak == 48){
bbmedian = 2.9; 
hasil = fix - 2.9;
}

if(jarak == 49){
bbmedian = 3.1;   
hasil = fix - 3.1;
}

if(jarak == 50){
bbmedian = 3.3; 
hasil = fix - 3.3;
}

if(jarak == 51){
bbmedian = 3.5; 
hasil = fix - 3.5;
}

if(jarak == 52){
hasil = fix - 3.8;
}

if(jarak == 53){
bbmedian = 4.0;   
hasil = fix - 4.0;
}

if(jarak == 54){
bbmedian = 4.3;   
hasil = fix - 4.3;
}

if(jarak == 55){
bbmedian = 4.5;   
hasil = fix - 4.5;
}

if(hasil < 0){
  hasilnya = ((fix - bbmedian) / bbmedian - (bbmedian - 0.2));
}

if(hasil > 0){
  hasilnya = ((fix - bbmedian) / (bbmedian + 0.3) - bbmedian);
}

lingkarkepala();
lingkarlengan();
 
   lcd.setCursor (0,0);
   lcd.print ("W= ");
   lcd.print (fix );
   lcd.print (" Kg  ");
   lcd.print (hasilnya );
   lcd.print ("  ");
    
   lcd.setCursor (0,1);
   lcd.print ("H= ");
   lcd.print (distance);
   lcd.print (" /");   
   lcd.print (counter);
   lcd.print ("/");
   lcd.print (counter2);
   lcd.print ("   ");
      
  scale.power_down();                  
  delay(100);
  scale.power_up();

}

void lingkarkepala(){
  
    aState = digitalRead(outputA);          //Baca kondisi CLK
    
  if (aState != aLastState){              //Jika ada perubahan kondisi, maka
    if (digitalRead(outputB) != aState) { //Jika berputar ke kiri, maka
      counter ++;                         //Nilai bertambah
    } else {                              //Jika berputar ke kanan, maka
      counter ++;                         //Nilai berkurang
    }
    //Serial.print("Position: ");
    //Serial.println(counter);              //Tampilkan nilai
  } 
  aLastState = aState;                    //Rekam kondisi

  if(digitalRead(button) == LOW){         //Jika tombol ditekan, maka
    counter = 0;                      //Jeda pembacaan 200ms
  }
    
}

void lingkarlengan(){
  
    aState2 = digitalRead(outputA2);          //Baca kondisi CLK
    
  if (aState2 != aLastState2){              //Jika ada perubahan kondisi, maka
    if (digitalRead(outputB2) != aState2) { //Jika berputar ke kiri, maka
      counter2 ++;                         //Nilai bertambah
    } else {                              //Jika berputar ke kanan, maka
      counter2 ++;                         //Nilai berkurang
    }
    //Serial.print("Position: ");
    //Serial.println(counter);              //Tampilkan nilai
  } 
  aLastState2 = aState2;                    //Rekam kondisi

  if(digitalRead(button2) == LOW){         //Jika tombol ditekan, maka
    counter2 = 0;                      //Jeda pembacaan 200ms
  }
    
}



c. VIDEO HASILNYA




No comments:

Post a Comment