Design and document the system integration for your final project

Have you answered these questions?

  • implemented methods of packaging? ✅
  • designed your final project to look like a finished product? ✅
  • documented system integration of your final project? ✅
  • linked to your system integration documentation from your final project page? ✅
Project Design


Systems integration is a key stage in the development of the ZentinelBot project, where the various electronic, mechanical, and software components are connected and synchronized to work together. In this phase, the sensors, actuators, microcontroller, and custom electronic board were configured, allowing the robot to function as an efficient, autonomous surveillance system.

1.-Mechanical design

The robot's structure combines the all-terrain mobility principles of space rovers with the structural efficiency of natural organisms, achieving a design that is not only robust and adaptable, but also aerodynamic. In this research, Autodesk Inventor software with generative design tools is used to optimize the structure's weight and strength.

1.1 Structural system


Once the working parameters have been set, we will proceed to load the generative design calculation:

obtaining the preliminary model

First generative isometric chassis design.


First generative design, chassis plan view.

First generative design, bottom view of the chassis.


1.2 Link and joint design

Piece 1: unions


Piece 2: first leg


Piece 3: Second leg


Piece 4: Chest design


Piece 5: Antenna cover


Piece 6: Cover


1.3 Biomimicry design

The design process focused on reducing the chassis's weight and volume through the application of biomimicry, i.e., imitating solutions that already exist in nature. In this case, the shape and organization of the armadillo's bone structure were studied in detail. This animal's natural armor allows it to withstand impacts while remaining agile.


main structure

preliminary robot design


2. Manufacturing of parts

3D printing of parts

For printing the parts, we have exported the generated files in STL format. For printing small parts, the Bambu Lab printer was used, and for larger parts, the Proxy printer was used.






3.-Electronic Integration

To perform electronic integration, we must make a list of the components we will use for the project:

  • XIAO ESP32-C3
  • ROB-14450 – Motor driver
  • L7805CV – Voltage regulator
  • Polarized capacitor
  • Ultrasonic sensor
  • Servomotor
  • WS2812B LED strip

3.1 schematic diagram

Descripción de la imagen

3.2 PCB layout design

Descripción de la imagen

3.2 3D visualization

Descripción de la imagen

3.3 Component layout

Descripción de la imagen

4.- Component Assembly

The first step of assembly was to place the couplings (hubs) that firmly connect each DC motor to its respective wheel.

After attaching the motors to the wheels, the next step was to assemble the robot's legs (vertical support structures) with the central chassis.


A custom 3D-printed holder was designed to fit the dimensions of the lead-acid battery used, with slots to secure it firmly without damaging its casing.

The battery was then securely installed inside the chassis using a specific bracket.


A protected and accessible area within the chassis was chosen to locate the electronic board (ESP32-C3 Xiao + custom PCB), considering ventilation and space for cables.

I proceeded to install the electronic card (controller board) inside the chassis.


To protect the robot's electronic system from possible short circuits or overcurrents, a safety fuse was integrated into the main power supply path.

Once the main components were placed inside the chassis, I proceeded to tighten the bolts and screws of the body support, thus securing the mechanical structure of the robot.


Place the camera antennas inside the designed support

After integrating all the mechanical and electronic components, the robot assembly was completed.



5.-Programming: Interface (web page)

To begin programming the Xiaoesp32-c3 module, we'll start with the interface, as it will allow us to view all the robot's functionality. We'll use the Google Sites tool:

Descripción de la imagen

We will upload the HTML Code, once the Code is inserted we click on the following:

Descripción de la imagen

we will have a preview of the interface

6.-Using the Arduino IDE

To perform the readings and functional tests, I used the Arduino IDE with the XIAO ESP32-C3.

Motor Control Code (ESP32-C3 + L298N + BLE)


#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>

// Pin definition for the L298N controller
#define IN1 6  // Motor 1 - Direction
#define IN2 7  // Motor 1 - Direction
#define IN3 8  // Motor 2 - Direction
#define IN4 9  // Motor 2 - Direction
#define ENA 5  // Motor 1 - Speed (PWM)
#define ENB 10 // Motor 2 - Speed (PWM)

// Bluetooth Low Energy (BLE) Setup
BLEServer *pServer = NULL;
BLECharacteristic *pCharacteristic = NULL;

#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"

void setup() {
    Serial.begin(115200);
    
    // Output pin configuration for the motor
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);
    pinMode(ENA, OUTPUT);
    pinMode(ENB, OUTPUT);
    
    Stop(); // Ensure the motors are stopped at startup

    // BLE module configuration
    BLEDevice::init("Rover ESP32C3");
    pServer = BLEDevice::createServer();
    BLEService *pService = pServer->createService(SERVICE_UUID);
    pCharacteristic = pService->createCharacteristic(
                        CHARACTERISTIC_UUID,
                        BLECharacteristic::PROPERTY_READ |
                        BLECharacteristic::PROPERTY_WRITE);
    pService->start();
    BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
    pAdvertising->addServiceUUID(SERVICE_UUID);
    pAdvertising->start();
}

void loop() {
    // Check if a command has been received via BLE
    if (pCharacteristic->getValue().length() > 0) {
        String command = pCharacteristic->getValue().c_str();
        Serial.println("Received: " + command);

        // Interpret the received command
        if (command == "F") forward();  // Move forward
        else if (command == "B") backward(); // Move backward
        else if (command == "L") left(); // Turn left
        else if (command == "R") right(); // Turn right
        else if (command == "S") Stop(); // Stop motors
    }
}

// Move rover forward
void forward() {
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    analogWrite(ENA, 200); // PWM speed control
    analogWrite(ENB, 200);
}

// Move rover backward
void backward() {
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    analogWrite(ENA, 200);
    analogWrite(ENB, 200);
}

// Turn left
void left() {
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
}

// Turn right
void right() {
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
}

// Stop motors
void Stop() {
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
}

7.-Results


Conclusions:

This week has been crucial in making significant progress on my final project. As I enter the final phase, I've realized we're incorporating more processes and techniques than I initially anticipated. It's been both a challenging and rewarding experience to see how the project has evolved and taken shape over time.