6 virtual implementation - A-Division-Even-2024-25/Repo-06 GitHub Wiki

6.1 2D sketch

WhatsApp Image 2025-06-17 at 18 12 51_1179eee4

6.2 3D model of all parts

Screenshot (197) Screenshot (198) Screenshot (199) Screenshot (201) Screenshot (205) Screenshot (207) Screenshot (208)

6.3 circuit diagram

WhatsApp Image 2025-06-17 at 16 00 19_a8fa6b4d

6.4 Flow Chart

ChatGPT Image Jun 18, 2025, 05_07_37 PM

6.5 bill of materials

Sl. No Sprint No Date Part Name / Drawing Name of the Consumables Specification Qty Student Sign Guide Sign Store Incharge Sign
1 1 - Project (Lymphatic Pump) Acrylic sheet 105 × 135 01
2 1 - Project Acrylic sheet 85 × 85 02
3 1 - Project Acrylic sheet 85 × 135 01
4 1 - Project M3×30 bolt - 04
5 2 - Frame Box Fevikwik - 01
6 2 - Frame Box Upper Rod 6 mm Ø 01
7 2 - Frame Box Squid Rod 6 mm Ø 01
8 3 - Rod Nylon Pipe 8 mm Ø 01
9 3 - Rod Squid Rod 6 mm Ø 01
10 3 - Rod Nylon Pipe 6 mm Ø 01
11 3 - Rod Acrylic Pipe 8 mm Ø 01
12 4 - Rod Squid Rod 6 mm Ø 01
13 4 - Rod Steel Rod 6 mm Ø 01
14 4 - Rod Steel Rod 6 mm Ø 01
15 4 - Rod Acrylic Pipe 6 mm Ø 01
16 5 - Clamp Nut M3 02
17 5 - Clamp Clamp U 01
18 5 - Clamp Clamp D 01
19 6 - - Clamp U 01
20 6 - - Clamp D 01

6.6 3D model assembly

Screenshot (200) Screenshot (202) Screenshot (203)

DOIT Esp32 DevKit code with Web Controls

#include <WiFi.h>
#include <WebServer.h>

// WiFi credentials
const char* ssid = "YourWiFiSSID";     // Replace with your WiFi SSID
const char* password = "YourWiFiPassword"; // Replace with your WiFi password

// Pin definitions
#define RELAY_IN1 18  // Relay IN1 connected to D18
#define RELAY_IN2 13  // Relay IN2 connected to D13
#define IR_SENSOR 5   // IR sensor OUT connected to D5

// Web server on port 80
WebServer server(80);

// Motor states
enum MotorState { STOP, FORWARD, BACKWARD };
MotorState motorState = STOP;

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("Starting ESP32...");

  pinMode(RELAY_IN1, OUTPUT);
  pinMode(RELAY_IN2, OUTPUT);
  pinMode(IR_SENSOR, INPUT);

  digitalWrite(RELAY_IN1, HIGH);
  digitalWrite(RELAY_IN2, HIGH);

  Serial.print("Connecting to WiFi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  unsigned long startAttemptTime = millis();
  const unsigned long timeout = 10000;

  while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < timeout) {
    delay(500);
    Serial.print(".");
  }

  if (WiFi.status() == WL_CONNECTED) {
    Serial.println("\nConnected to WiFi");
    Serial.print("IP Address: ");
    Serial.println(WiFi.localIP());
  } else {
    Serial.println("\nFailed to connect to WiFi. Check SSID, password, or signal strength.");
    return;
  }

  server.on("/", handleRoot);
  server.on("/forward", handleForward);
  server.on("/backward", handleBackward);
  server.on("/stop", handleStop);

  server.begin();
  Serial.println("Web server started");
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    server.handleClient();
  } else {
    Serial.println("WiFi disconnected. Attempting to reconnect...");
    WiFi.reconnect();
    delay(5000);
  }

  if (digitalRead(IR_SENSOR) == LOW) {
    stopMotor();
    Serial.println("Obstacle detected, motor paused");
  } else {
    switch (motorState) {
      case FORWARD:
        forwardMotor();
        Serial.println("No obstacle, resuming Forward");
        break;
      case BACKWARD:
        backwardMotor();
        Serial.println("No obstacle, resuming Backward");
        break;
      case STOP:
        stopMotor();
        break;
    }
  }
  delay(100);
}

void handleRoot() {
  String html = "<html><body><h1>Rope Walking Bot Control</h1>";
  html += "<p><a href=\"/forward\"><button style=\"font-size:20px; padding:10px; margin:5px;\">Forward</button></a></p>";
  html += "<p><a href=\"/backward\"><button style=\"font-size:20px; padding:10px; margin:5px;\">Backward</button></a></p>";
  html += "<p><a href=\"/stop\"><button style=\"font-size:20px; padding:10px; margin:5px;\">Stop</button></a></p>";
  html += "<p>Motor State: " + String(motorState == FORWARD ? "Forward (Anticlockwise)" : motorState == BACKWARD ? "Backward (Clockwise)" : "Stopped") + "</p>";
  html += "</body></html>";
  server.send(200, "text/html", html);
}

void handleForward() {
  if (digitalRead(IR_SENSOR) == HIGH) {
    motorState = FORWARD;
    forwardMotor();
    Serial.println("Forward button pressed (should be anticlockwise)");
  } else {
    Serial.println("Obstacle detected, cannot start forward");
  }
  server.sendHeader("Location", "/");
  server.send(303);
}

void handleBackward() {
  if (digitalRead(IR_SENSOR) == HIGH) {
    motorState = BACKWARD;
    backwardMotor();
    Serial.println("Backward button pressed (should be clockwise)");
  } else {
    Serial.println("Obstacle detected, cannot start backward");
  }
  server.sendHeader("Location", "/");
  server.send(303);
}

void handleStop() {
  motorState = STOP;
  stopMotor();
  Serial.println("Stop button pressed");
  server.sendHeader("Location", "/");
  server.send(303);
}

void forwardMotor() {
  Serial.println("Forward: IN1 LOW, IN2 HIGH");
  digitalWrite(RELAY_IN1, LOW);
  digitalWrite(RELAY_IN2, HIGH);
}

void backwardMotor() {
  Serial.println("Backward: IN1 HIGH, IN2 LOW");
  digitalWrite(RELAY_IN1, HIGH);
  digitalWrite(RELAY_IN2, LOW);
}

void stopMotor() {
  Serial.println("Stop: IN1 HIGH, IN2 HIGH");
  digitalWrite(RELAY_IN1, HIGH);
  digitalWrite(RELAY_IN2, HIGH);
}

⚠️ **GitHub.com Fallback** ⚠️