/*
* This code is made by Technical Shubham
* Description: This program reads temperature, humidity (DHT22), and gas concentration (MQ-2 sensor).
* The data is displayed on a 16x2 I2C LCD and printed on the Serial Monitor.
* Note: PPM values are not accurate and need calibration.
*/
#include <Wire.h> // Library untuk I2C communication
#include <LiquidCrystal_I2C.h> // Library untuk LCD
#include <DHT.h> // Library untuk DHT sensor
// Tentukan koneksi pin
#define DHT_PIN 2 // DHT22 sensor data pin connected to pin 2
#define MQ2_PIN A0 // MQ-2 gas sensor analog output connected to A0
#define DHT_TYPE DHT22 // Define sensor type
// Inisialisasi LCD dengan alamat I2C 0x27, 16 kolom, dan 2 baris
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Inisialisasi DHT sensor
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
Serial.begin(9600); // Start serial communication at 9600 baud rate
lcd.init(); // Initialize LCD
lcd.backlight(); // Turn on LCD backlight
dht.begin(); // Initialize DHT sensor
pinMode(MQ2_PIN, INPUT); // Set MQ-2 gas sensor pin as input
}
void loop() {
static unsigned long lastSensorRead = 0;
// Baca data sensor setiap 2 detik
if (millis() - lastSensorRead > 2000) {
float humidity = dht.readHumidity(); // Read humidity from DHT22
float temperature = dht.readTemperature(); // Read temperature from DHT22
int gasValue = analogRead(MQ2_PIN); // Read gas sensor value (Needs Calibration)
// Menampilkan data pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature);
lcd.print("C H:");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Gas: ");
lcd.print(gasValue); // menampilkan nilai sensor gas mentah (Perlu Kalibrasi)
// Cetak data pada Serial Monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.print("%, Gas Level: ");
Serial.println(gasValue);
lastSensorRead = millis(); // Perbarui waktu pembacaan sensor terakhir
}
}