/*Proyek #31: Aplikasi pengukur BMI, berat & tinggi badan otomatis */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // set alamat LCD 0x27, Lcd 24 kolom dan 2 baris
int Hr = 210;//tinggi referensi 210 cm
int pin_sensor_berat = A1;//pin sensor berat
int kode = 1;//variabel untuk memunculkan atau clear teks
float cm;
float inches;
long readUltrasonicDistance(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT); // Clear the trigger
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// Set trigger pin ke HIGH selama 10 microsecond
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
// Baca echo pin, and returns
// gelombang suara dalam microsecond
return pulseIn(echoPin, HIGH);
}
void setup() {
// set jumlah kolom dan baris LCD yang digunakan:
lcd.init(); // inialisasi lcd
lcd.backlight(); //nyalakan baclight
Serial.begin(9600);//buka port komunikasi serial
}
void loop() {
//baca nilai sensor ultrasonik
cm = 0.0344/2 * readUltrasonicDistance(3, 2);
inches = (cm / 2.54);
// baca nilai sensor berat (diasumsikan pakai potensiometer)*/
float val_sensor_berat = analogRead(pin_sensor_berat);
delay(300);
int D = cm; //rumus tinggi badan dalam cm
int TB_cm = Hr - D; //rumus tinggi badan - jarak kepala dg sensor dalam cm
float TB_m = TB_cm/100.0;//konversi tinggi badan ke meter
int berat_badan = map(val_sensor_berat, 0, 1023, 0, 100);// petakan skala
//kondisi jika tidak ada orang bediri alihkan tampilan lcd
if(D <=10 || D >=150){
berat_badan = 0;}
//cetak jarak obyek pada serial monitor
Serial.print("jarak dalam cm : ");
Serial.print(D);
Serial.println();
// rumus Body mass index (BMI)
float BMI = berat_badan/pow(TB_m,2);
//tampilkan pada lcd
if (berat_badan ==0 ){
if(kode==1){
lcd.clear();
kode=0;
}
lcd.setCursor(0,0);
lcd.print(" SELAMAT DATANG ");
lcd.setCursor(0,1);
lcd.print(" SILAHKAN BERDIRI!! ");
lcd.setCursor(0,2);
lcd.print("SEMOGA SEHAT SELALU!");
lcd.setCursor(0,3);
lcd.print("By:Syahwil");
lcd.noDisplay();
delay(10);
lcd.display();
delay(50);
}
else {
if(kode==0){
lcd.clear();
kode=1;
}
lcd.setCursor(0, 0);
lcd.print("TINGGI BDN :");
lcd.print(TB_cm);
lcd.setCursor(18, 0);
lcd.print("cm");
lcd.setCursor(0, 1);
lcd.print("BERAT BDN :");
lcd.print(berat_badan);
lcd.setCursor(18, 1);
lcd.print("Kg");
lcd.setCursor(0, 2);
lcd.print("BMI :");
lcd.print(BMI,2);
lcd.setCursor(15, 2);
lcd.print("Kg/m2");
lcd.setCursor(0, 3);
lcd.print("STATUS :");
//tampilkan status klasifikasi BMI (sesuaikan dg tabel)
if ( BMI < 18.5){
lcd.setCursor(8, 3);
lcd.print("Underweight");
lcd.print(" ");
}
if ( BMI > 18.5 && BMI < 22.9){
lcd.setCursor(8, 3);
lcd.print("Normal/ideal");
lcd.print(" ");
}
if ( BMI >23){
lcd.setCursor(8, 3);
lcd.print("Overweight");
lcd.print(" ");
}}
delay(20);
}