#include <Arduino.h>
#include <DHT.h>
// === Pin Configuration ===
#define DHTPIN PB0
#define DHTTYPE DHT22
#define MQ4_PIN PA0 // Sensor Gas
#define LDR_PIN PA1 // Sensor LDR
#define ACS_PIN PA2 // Sensor Arus
#define LDR_LED PB10 // LED indikator cahaya rendah
#define PIR_PIN PB11 // Sensor PIR (digital)
// === DHT Object ===
DHT dht(DHTPIN, DHTTYPE);
// === Sensor Arus Constants ===
const float VREF = 3.3; // Tegangan referensi ADC STM32
const float OFFSET = VREF / 2.0; // Tegangan tengah sensor (biasanya 1.65V)
const float SENSITIVITY = 0.185; // V/A (untuk ACS712-5A)
void setup() {
Serial.begin(9600);
dht.begin();
analogReadResolution(12); // gunakan ADC 12-bit (0–4095)
pinMode(MQ4_PIN, INPUT);
pinMode(LDR_PIN, INPUT);
pinMode(ACS_PIN, INPUT);
pinMode(LDR_LED, OUTPUT); // LED indikator
pinMode(PIR_PIN, INPUT); // Jika perlu, bisa ganti ke INPUT_PULLDOWN
Serial.println("Sistem Monitoring Sensor Siap...");
}
void loop() {
// === Baca Sensor ===
float suhu = dht.readTemperature();
int gasValue = analogRead(MQ4_PIN);
int ldrValue = analogRead(LDR_PIN);
int acsValue = analogRead(ACS_PIN);
int pirState = digitalRead(PIR_PIN); // 1 = gerakan terdeteksi, 0 = tidak
// === Konversi ===
float gasPct = map(gasValue, 0, 4095, 0, 100);
float cahaya = map(ldrValue, 0, 4095, 100, 0);
float voltage = acsValue * VREF / 4095.0;
float current = (voltage - OFFSET) / SENSITIVITY;
// === LED Indikator untuk cahaya rendah ===
if (cahaya < 30) {
digitalWrite(LDR_LED, HIGH);
} else {
digitalWrite(LDR_LED, LOW);
}
// === Tampilkan ke Serial ===
Serial.println("===============");
Serial.print("Suhu : "); Serial.print(suhu); Serial.println(" °C");
Serial.print("Gas : "); Serial.print(gasPct); Serial.println(" %");
Serial.print("Cahaya : "); Serial.print(cahaya); Serial.println(" %");
Serial.print("Arus : "); Serial.print(current, 2); Serial.println(" A");
Serial.print("PIR : "); Serial.println(pirState ? "Gerakan" : "Tidak");
Serial.println("===============");
delay(1000);
}
Loading
stm32-bluepill
stm32-bluepill