The circuit is designed to control an AC bulb and a servomotor (SG92R) through an ESP8266 NodeMCU microcontroller. The NodeMCU is connected to a motion sensor (HC-SR501) and a light-dependent resistor (LDR) to detect motion and light levels, respectively. The microcontroller can be manually controlled via a web server hosted on the NodeMCU, allowing the user to open/close the servomotor (acting as a door) and turn the AC bulb on/off. The circuit is powered by an HLK-PM12 AC-DC converter, providing a stable 3.3V supply to the components.
+V0
: Connected to the 3.3V power rail supplying the NodeMCU, motion sensor, LDR, and servomotor.-V0
: Connected to the ground rail shared by all components.GND
: Connected to the ground rail.OUT
: Connected to the D3
pin on the ESP8266 NodeMCU.VCC
: Connected to the 3.3V power rail.P
: Controlled by the SD0
pin on the ESP8266 NodeMCU.N
: Connected to the ground rail.A0
: Not connected in this circuit.D0
: Connected to the D7
pin on the ESP8266 NodeMCU.GND
: Connected to the ground rail.VCC
: Connected to the 3.3V power rail.SIG
: Controlled by the SD1
pin on the ESP8266 NodeMCU.VCC
: Connected to the 3.3V power rail.GND
: Connected to the ground rail.D3
: Receives the motion signal from the HC-SR501 motion sensor.D7
: Receives the light level signal from the LDR.SD0
: Controls the AC Bulb.SD1
: Controls the servomotor SG92R.3V3
: Supplies power to the motion sensor, LDR, and servomotor.GND
: Common ground for the circuit.#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Servo.h>
#define PIR_PIN D3 // HC-SR501 OUT pin connected to D3
#define LDR_PIN D7 // LDR D0 pin connected to D7
#define BULB_PIN SD0 // AC Bulb P pin connected to SD0
#define SERVO_PIN SD1 // Servo SIG pin connected to SD1
Servo myservo;
ESP8266WebServer server(80);
const char* ssid = "your_SSID"; // Replace with your Wi-Fi SSID
const char* password = "your_PASSWORD"; // Replace with your Wi-Fi password
void handleRoot() {
String html = "<html><body><h1>ESP8266 Control</h1>";
html += "<p><a href=\"/open\">Open Door</a></p>";
html += "<p><a href=\"/close\">Close Door</a></p>";
html += "<p><a href=\"/bulbOn\">Turn Bulb On</a></p>";
html += "<p><a href=\"/bulbOff\">Turn Bulb Off</a></p>";
html += "</body></html>";
server.send(200, "text/html", html);
}
void handleOpen() {
myservo.write(90); // Open the door
delay(1000); // Keep the door open for 1 second
myservo.write(0); // Close the door
server.send(200, "text/html", "<html><body><h1>Door Opened</h1><p><a href=\"/\">Back</a></p></body></html>");
}
void handleClose() {
myservo.write(0); // Close the door
server.send(200, "text/html", "<html><body><h1>Door Closed</h1><p><a href=\"/\">Back</a></p></body></html>");
}
void handleBulbOn() {
digitalWrite(BULB_PIN, HIGH); // Turn on the bulb
server.send(200, "text/html", "<html><body><h1>Bulb On</h1><p><a href=\"/\">Back</a></p></body></html>");
}
void handleBulbOff() {
digitalWrite(BULB_PIN, LOW); // Turn off the bulb
server.send(200, "text/html", "<html><body><h1>Bulb Off</h1><p><a href=\"/\">Back</a></p></body></html>");
}
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(LDR_PIN, INPUT);
pinMode(BULB_PIN, OUTPUT);
myservo.attach(SERVO_PIN);
myservo.write(0); // Initial position of the servo (door closed)
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
server.on("/", handleRoot);
server.on("/open", handleOpen);
server.on("/close", handleClose);
server.on("/bulbOn", handleBulbOn);
server.on("/bulbOff", handleBulbOff);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}
This code sets up a simple web server on the ESP8266 NodeMCU, allowing the user to control the servomotor and the AC bulb through a web interface. The server provides buttons for opening/closing the door (controlled by the servomotor) and turning the bulb on/off. The code includes setup for the Wi-Fi connection, web server routes, and the initial state of the outputs.