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

ESP32-Based Wi-Fi Controlled Robotic Vehicle with Ultrasonic Sensors and DC Motors

View and Edit Project In Cirkit DesignerImage of ESP32-Based Wi-Fi Controlled Robotic Vehicle with Ultrasonic Sensors and DC Motors

Circuit Documentation

Summary

This document provides a detailed overview of a circuit that includes an ESP32 microcontroller, two HC-SR04 ultrasonic sensors, an L298N DC motor driver, two DC motors, and a 5V battery. The ESP32 is programmed to control the motors based on the distance measured by the ultrasonic sensors. The circuit also includes additional sensors for temperature, gas, voltage, and vibration.

Component List

ESP32

HC-SR04 Ultrasonic Sensor

L298N DC Motor Driver

DC Motor

5V Battery

Wiring Details

ESP32

HC-SR04 Ultrasonic Sensor (First)

HC-SR04 Ultrasonic Sensor (Second)

L298N DC Motor Driver

DC Motor (First)

DC Motor (Second)

5V Battery

Code Documentation

#include <HardwareSerial.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <freertos/timers.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <DHTesp.h>

HardwareSerial loraSerial(2);

// Pin untuk sensor ultrasonik
const int trigPinLeft = 4;   // Sensor kiri
const int echoPinLeft = 5;
const int trigPinFront = 2;  // Sensor depan
const int echoPinFront = 15;
// Pin untuk motor driver L298N
const int in1 = 27;   // Motor A IN1
const int in2 = 26;   // Motor A IN2
const int in3 = 25;   // Motor B IN3
const int in4 = 33;   // Motor B IN4
const int enA = 14;   // Enable pin untuk Motor A (PWM)
const int enB = 32;   // Enable pin untuk Motor B (PWM)

// Variabel PID
float Kp = 1.5;
float Ki = 0.03;
float Kd = 12.5;
float previousErrorLeft = 0;
float integralLeft = 0;
float setPointLeft = 17;
float previousErrorFront = 0;
float integralFront = 0;
float setPointFront = 40;

long durationLeft, durationFront;
int distanceLeft, distanceFront;
int speedA = 220;   // Kecepatan Motor A
int speedB = 220;   // Kecepatan Motor B

// Variabel sensor lainnya
#define DHTPIN 18
#define GAS_SENSOR_PIN 13
#define VOLTAGE_SENSOR_PIN 34
#define VIBRATION_SENSOR_PIN 12

DHTesp dht;

// WiFi & Server Information
const char* ssid = "DTEO-VOKASI";
const char* password = "TEO123456";
const char* serverName = "http://10.17.36.187/mobile_robot/kirimdata.php";

// Variabel tambahan
unsigned long previousMillis = 0;
const long turnDelay = 290;
const unsigned long interval = 1000; // Interval pengiriman data (ms)
const long forwardDelay = 2000;
float V_BEBAN;
int VOLTAGE_SENSOR_RAW;
float RATIO = 5.920; // Sesuaikan rasio tegangan
const float GETARAN_TO_G = 0.1; // Sesuaikan nilai konversi sesuai sensor, contoh 0.001 g per microsecond

// Fungsi sensor
int getDistance(int trigPin, int echoPin);
float computePIDLeft(float input);
void stopMotors();
void turnRight();
void turnLeftAndMoveForward();
void kirimDataLoRaTask(TimerHandle_t xTimer);
void kirimDataKeServer();
void baca_sensor();

void setup() {
  Serial.begin(115200);
  loraSerial.begin(9600, SERIAL_8N1, 16, 17);

  // Inisialisasi pin
  pinMode(trigPinLeft, OUTPUT);
  pinMode(echoPinLeft, INPUT);
  pinMode(trigPinFront, OUTPUT);
  pinMode(echoPinFront, INPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  
  // Inisialisasi DHT
  dht.setup(DHTPIN, DHTesp::DHT22);
  pinMode(VIBRATION_SENSOR_PIN, INPUT);
  // Setup WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(10);
    Serial.println("Mencoba menghubungkan ke WiFi...");
  }
  Serial.println("Terhubung ke WiFi");

  // Membuat task untuk gerakan robot
  xTaskCreate(gerakRobotTask, "GerakRobot", 4096, NULL, 3, NULL);
  // Membuat task untuk mengirim data sensor ke server
  x