#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
// Pin Definitions
#define PIR_SENSOR 15
#define RELAY_LED 13 // LED simulating relay
#define MOTOR_LED 18 // LED simulating stepper motor
#define LED_PIN 5 // Status LED
#define DHT_PIN 4 // DHT22 Sensor pin
// DHT22 Sensor Setup
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
// OLED Display Setup
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
bool previousMotionState = false;
void setup() {
Serial.begin(115200);
// Pin Modes
pinMode(PIR_SENSOR, INPUT);
pinMode(RELAY_LED, OUTPUT);
pinMode(MOTOR_LED, OUTPUT);
pinMode(LED_PIN, OUTPUT);
// Initialize DHT22
dht.begin();
// Initialize OLED Display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 allocation failed");
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10, 10);
display.println("Industrial Auto");
display.display();
delay(2000);
}
void loop() {
int motionDetected = digitalRead(PIR_SENSOR);
float temperature = dht.readTemperature(); // Read temperature in Celsius
if (motionDetected && !previousMotionState) {
Serial.println("Motion Detected!");
digitalWrite(RELAY_LED, HIGH); // Simulating relay activation
digitalWrite(MOTOR_LED, HIGH); // Simulating stepper motor
digitalWrite(LED_PIN, HIGH); // Turn ON Status LED
display.clearDisplay();
display.setCursor(0, 0);
display.println("Machine: ON");
display.setCursor(0, 10);
display.print("Temp: ");
display.print(temperature);
display.print(" C");
display.display();
previousMotionState = true;
} else if (!motionDetected && previousMotionState) {
Serial.println("No Motion.");
digitalWrite(RELAY_LED, LOW); // Simulating relay OFF
digitalWrite(MOTOR_LED, LOW); // Simulating stepper motor OFF
digitalWrite(LED_PIN, LOW); // Turn OFF Status LED
display.clearDisplay();
display.setCursor(0, 0);
display.println("Machine: OFF");
display.setCursor(0, 10);
display.print("Temp: ");
display.print(temperature);
display.print(" C");
display.display();
previousMotionState = false;
}
delay(1000);
}