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
#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