Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Wi-Fi Controlled ESP32-Based Robotic Vehicle with Servo Actuation and Ultrasonic Sensing

View and Edit Project In Cirkit DesignerImage of Wi-Fi Controlled ESP32-Based Robotic Vehicle with Servo Actuation and Ultrasonic Sensing

Circuit Documentation

Summary

The circuit in question is designed to control multiple DC motors and servos using an ESP32 microcontroller. The ESP32 is programmed to handle motor control through a web server interface, allowing for remote operation. The circuit includes motor drivers to manage the power requirements of the DC motors, ultrasonic sensors for distance measurement, and a step-down power converter to regulate the voltage for the servos and sensors. The system is powered by 12V batteries, and a voltage converter is used to step down the voltage to 5V where necessary.

Component List

Microcontroller

Motor Drivers

Motors

Servos

Sensors

Power Components

Wiring Details

ESP32 (30 pin)

L298N DC motor driver

DC Motor

Servo

HC-SR04 Ultrasonic Sensor

12v to 5v Step Down Power Converter

battery 12v

48v to 5v

Documented Code

#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <Servo.h>

// Motor pins (L298N Motor Driver)
const int motor1Pin1 = 26;
const int motor1Pin2 = 27;
const int motor2Pin1 = 14;
const int motor2Pin2 = 12;
const int motor3Pin1 = 13;
const int motor3Pin2 = 15;
const int motor4Pin1 = 32;
const int motor4Pin2 = 33;

// Servo pins
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

const int servo1Pin = 2;
const int servo2Pin = 4;
const int servo3Pin = 5;
const int servo4Pin = 18;

// Wi-Fi credentials
const char *ssid = "YOUR_SSID";
const char *password = "YOUR_PASSWORD";

// Server object
AsyncWebServer server(80);

// Function to stop all motors
void stopMotors() {
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, LOW);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, LOW);
  digitalWrite(motor3Pin1, LOW);
  digitalWrite(motor3Pin2, LOW);
  digitalWrite(motor4Pin1, LOW);
  digitalWrite(motor4Pin2, LOW);
}

void setup() {
  // Initialize Serial Monitor
  Serial.begin(115200);

  // Setup motor pins
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
  pinMode(motor3Pin1, OUTPUT);
  pinMode(motor3Pin2, OUTPUT);
  pinMode(motor4Pin1, OUTPUT);
  pinMode(motor4Pin2, OUTPUT);

  // Attach servos
  servo1.attach(servo1Pin);
  servo2.attach(servo2Pin);
  servo3.attach(servo3Pin);
  servo4.attach(servo4Pin);

  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  // Setup web server routes
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(200, "text/plain", "Control your RC Car");
  });

  // Control routes (adjust as per app logic)
  server.on("/forward", HTTP_GET, [](AsyncWebServerRequest *request) {
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    digitalWrite(motor3Pin1, HIGH);
    digitalWrite(motor3Pin2, LOW);
    digitalWrite(motor4Pin1, HIGH);
    digitalWrite(motor4Pin2, LOW);
    request->send(200, "text/plain", "Moving Forward");
  });

  server.on("/stop", HTTP_GET, [](AsyncWebServerRequest *request) {
    stopMotors();
    request->send(200, "text/plain", "Stopped");
  });

  server.begin();
}

void loop() {
  // Handle other actions like servo movement in response to app commands
}

This code sets up the ESP32 to control the motors and servos via a web server. It defines the pin connections, initializes the components, and provides a basic web interface for controlling the vehicle's movement. The stopMotors function is used to stop all motors, and the setup function configures the Wi-Fi connection and server routes. The loop function is left empty, as the server handles the asynchronous requests.