#include <Wire.h>
#include <Adafruit_INA219.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi sensor
Adafruit_INA219 ina219;
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Inisialisasi LCD 16x2 I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin sensor infrared untuk RPM
#define IR_SENSOR_PIN 3
volatile int pulseCount = 0;
unsigned long prevTime = 0;
float rpm = 0.0;
// Pin LED indikator
#define LED_PIN 5
// Fungsi Interrupt untuk RPM
void countPulse() {
pulseCount++;
}
void setup() {
Serial.begin(9600);
// Inisialisasi sensor
if (!ina219.begin()) {
Serial.println("Gagal inisialisasi INA219");
while (1);
}
dht.begin();
// Konfigurasi sensor RPM
pinMode(IR_SENSOR_PIN, INPUT);
attachInterrupt(digitalPinToInterrupt(IR_SENSOR_PIN), countPulse, FALLING);
// Konfigurasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Monitoring...");
// LED indikator
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// Baca tegangan & arus
float busVoltage = ina219.getBusVoltage_V();
float current_mA = ina219.getCurrent_mA();
float power_mW = busVoltage * (current_mA / 1000.0);
// Baca suhu & kelembaban
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Hitung RPM setiap 1 detik
unsigned long currentTime = millis();
if (currentTime - prevTime >= 1000) {
rpm = (pulseCount * 60) / 20.0; // Asumsi 20 lubang per putaran
pulseCount = 0;
prevTime = currentTime;
}
// Tampilkan data di Serial Monitor
Serial.print("Tegangan: "); Serial.print(busVoltage); Serial.println(" V");
Serial.print("Arus: "); Serial.print(current_mA); Serial.println(" mA");
Serial.print("Daya: "); Serial.print(power_mW); Serial.println(" mW");
Serial.print("Suhu: "); Serial.print(temperature); Serial.println(" C");
Serial.print("Kelembaban: "); Serial.print(humidity); Serial.println(" %");
Serial.print("RPM: "); Serial.print(rpm); Serial.println(" RPM");
Serial.println("-----------------------------");
// Tampilkan data ke LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RPM: "); lcd.print(rpm);
lcd.setCursor(0, 1);
lcd.print("V: "); lcd.print(busVoltage, 1);
lcd.print(" A: "); lcd.print(current_mA, 1);
delay(2000); // Tampilkan selama 2 detik
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Daya: "); lcd.print(power_mW, 1);
lcd.print(" mW");
lcd.setCursor(0, 1);
lcd.print("S:"); lcd.print(temperature, 1);
lcd.print("C H:"); lcd.print(humidity, 1);
lcd.print("%");
delay(2000); // Tampilkan selama 2 detik
// Nyalakan LED jika generator aktif (RPM > 0)
if (rpm > 0) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
}