#include <DHT.h>
#include <Wire.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
// Definisikan pin
#define DHT_PIN 2
#define TOUCH_PIN 4
#define IR_PIN 5
#define BUTTON_PIN 18
#define LED_PIN 13
#define BUZZER_PIN 15
#define MOTOR_PIN 14
#define HEART_SENSOR_PIN 32
#define RELAY_PIN 12
// Inisialisasi sensor dan aktor
DHT dht(DHT_PIN, DHT22);
Adafruit_MPU6050 mpu;
// Variabel
float temperature;
float humidity;
bool wheelchair_active = false;
void setup() {
Serial.begin(115200);
// Inisialisasi sensor dan aktuator
dht.begin();
if (!mpu.begin()) {
Serial.println("Failed to initialize MPU6050!");
while (1);
}
pinMode(TOUCH_PIN, INPUT);
pinMode(IR_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(HEART_SENSOR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(MOTOR_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
Serial.println("Smart Wheelchair System Initialized!");
}
void loop() {
// 1. Baca sensor DHT22
temperature = dht.readTemperature();
humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Tampilkan hasil sensor suhu dan kelembapan
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// 2. Cek Touch Sensor untuk mengaktifkan/mematikan kursi roda
if (digitalRead(TOUCH_PIN) == HIGH) {
wheelchair_active = !wheelchair_active;
digitalWrite(MOTOR_PIN, wheelchair_active ? HIGH : LOW);
Serial.println(wheelchair_active ? "Wheelchair Activated" : "Wheelchair Deactivated");
delay(500);
}
// 3. Cek sensor MPU6050 untuk mendeteksi kemiringan
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
if (abs(a.acceleration.y) > 9.0) { // Threshold untuk kemiringan
digitalWrite(MOTOR_PIN, LOW); // Matikan motor
Serial.println("Warning: Tilt Detected! Motor Stopped.");
digitalWrite(BUZZER_PIN, HIGH);
delay(1000);
digitalWrite(BUZZER_PIN, LOW);
}
// 4. Cek Infrared Proximity Sensor untuk halangan
if (digitalRead(IR_PIN) == HIGH) {
digitalWrite(MOTOR_PIN, LOW); // Matikan motor
Serial.println("Obstacle Detected! Motor Stopped.");
digitalWrite(BUZZER_PIN, HIGH);
delay(1000);
digitalWrite(BUZZER_PIN, LOW);
}
// 5. Cek Sensor Detak Jantung (simulasi sederhana)
int heartRate = analogRead(HEART_SENSOR_PIN);
Serial.print("Heart Rate Sensor Value: ");
Serial.println(heartRate);
if (heartRate < 300 || heartRate > 700) { // Nilai threshold
Serial.println("Warning: Abnormal Heart Rate Detected!");
digitalWrite(LED_PIN, HIGH); // Indikasi masalah pada LED
digitalWrite(BUZZER_PIN, HIGH);
delay(1000);
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
// 6. Cek tombol (pengganti sensor suara) untuk aktivasi/deaktivasi
if (digitalRead(BUTTON_PIN) == LOW) {
wheelchair_active = !wheelchair_active;
digitalWrite(MOTOR_PIN, wheelchair_active ? HIGH : LOW);
Serial.println(wheelchair_active ? "Voice Command: Wheelchair Activated" : "Voice Command: Wheelchair Deactivated");
delay(500);
}
// Kondisi suhu ekstrem
if (temperature > 30.0) {
Serial.println("Warning: High Temperature Detected!");
digitalWrite(RELAY_PIN, HIGH); // Aktifkan relay untuk pendingin/ventilator
} else {
digitalWrite(RELAY_PIN, LOW);
}
delay(2000); // Interval pengulangan loop
}