#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <HX711.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 20, 4);
HX711 loadcell;
#define NTP_SERVER "id.pool.ntp.org"
#define UTC_OFFSET 7 * 3600
#define UTC_OFFSET_DST 0
#define LOADCELL_DOUT_PIN 18
#define LOADCELL_SCK_PIN 19
#define ldrPin 34
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
const int led = 2;
int startTime = 0;
int hitung = 0;
int data = 0;
const float gama = 0.7;
const float rl10 = 50;
void spinner() {
static int8_t counter = 0;
const char* glyphs = "\xa1\xa5\xdb";
LCD.setCursor(19, 3);
LCD.print(glyphs[counter++]);
if (counter == strlen(glyphs)) {
counter = 0;
}
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
LCD.setCursor(0, 0);
LCD.println("Connection Err");
return;
}
LCD.setCursor(0, 0);
LCD.println(&timeinfo, "%H:%M:%S WIB ");
}
void setup() {
Serial.begin(115200);
LCD.init();
LCD.backlight();
LCD.setCursor(1, 1);
LCD.print("Booting System....");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
spinner();
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
loadcell.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
loadcell.set_scale(0.42);
loadcell.tare();
pinMode(led, OUTPUT);
LCD.clear();
LCD.setCursor(4, 1);
LCD.println("IMOS CONNECT ");
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
startTime = millis();
}
void loop() {
float loadcell_reading = loadcell.get_units();
unsigned long currentTime = millis();
int nilaiLDR = analogRead(ldrPin);
nilaiLDR = map(nilaiLDR, 4095, 0, 1024, 0);
float voltase = nilaiLDR / 1024.*5;
float resistansi = 2000 * voltase / (1-voltase/5);
float kecerahan = pow(rl10*1e3*pow(10,gama)/resistansi,(1/gama));
int droplets = hitung * 60000 / (currentTime - startTime);
printLocalTime();
Serial.print("Kecerahan = ");
Serial.print(kecerahan);
Serial.print(" Lux ");
Serial.print("; Beban = ");
Serial.print(loadcell_reading);
Serial.println(" gram ");
LCD.setCursor(0, 1);
LCD.print("Beban: ");
LCD.print(loadcell_reading);
LCD.print(" g ");
// LCD.setCursor(0, 2);
// LCD.print("Tetes: ");
// LCD.print(startTime);
// LCD.setCursor(0, 3);
// LCD.print(data);
digitalWrite(led, HIGH);
if (loadcell_reading >= 1000) {
hitung++;
// data = hitung;
// startTime = currentTime;
// currentTime = 0;
}
if (hitung >= 5) {
startTime = currentTime;
data = droplets;
hitung = 0;
droplets = 0;
}
LCD.setCursor(0, 2);
LCD.print("Tetes : ");
LCD.print(data);
delay(10);
}