hero-image
HOME
hero-image

Demo Project

hero-image
Anqi Tao

Project Timeline

Feb 2025 - Current

OVERVIEW

Led the development of an advanced robotic automation system designed to achieve +/- 25 micron precision in manufacturing processes. Key functionalities included the precise dispensing of UV adhesive, high-accuracy part alignment facilitated by integrated camera vision, and robust clamping of components using motorized actuators. This system streamlined assembly workflows and enabled the manufacturing of miniaturized ultrasound devices

HighlightS

  • Achieved +/- 25 micron precision in the alignments of 3 layers, significantly enhancing product quality.
  • Combined three critical assembly steps (UV adhesive dispensing, part alignment, and clamping) into a single, streamlined robotic automation system.
  • Developed a self-aligning mechanism with robotic assistance to enable the precise manufacturing of miniaturized ultrasound devices.

SKILLS

SolidWorksCognexROSPLCCNC

Additional Details

Problem Statement

The convetional manufacturing processes using assembly fixture  lack the precision required for manufacutinrg miniaturized ultrasound devices at high-volume production. This is required to fit inside a small catheter. Achieving the necessary +/- 15 micron accuracy for critical assembly steps, including UV adhesive dispensing, part alignment, and clamping, often relies on manual or semi-automated methods. These methods are prone to human error, time-consuming, and inconsistent, leading to increased scrap rates, higher production costs, and limitations in scaling manufacturing output. Therefore, there is a critical need for an automated solution that can consistently deliver ultra-high precision across multiple assembly stages to enable reliable and efficient manufacturing of these advanced miniaturized components.

 

Bill of Materials (BOM)

The following table lists the components used in the prototype, including part numbers, quantities, materials, estimated costs, and potential suppliers.

Item No. Component Part Number Quantity Material Estimated Cost (USD) Supplier Notes
1 Heat Sink 637-20ABPE 1 Aluminum 25.00 McMaster-Carr 100x100x50 mm, extruded aluminum
2 Cooling Fan (12V, 40 mm) AFB0412SHB 1 Plastic/Metal 10.00 DigiKey Low-noise, 35 dB max, 12V DC
3 Device Housing Custom (3D-printed) 1 PLA 15.00 University 3D Print Lab FDM-printed, 200x150x100 mm
4 Thermal Insulation Foam 851-074 0.5 m² Polyurethane Foam 8.00 Amazon Cut to fit optics compartment
5 Temperature Sensor DS18B20 1 N/A 12.00 Adafruit ±0.5°C accuracy, digital output
6 Arduino Uno A000066 1 N/A 25.00 Arduino Store Runs Python PID via serial interface
7 Fan Muffler Custom (3D-printed) 1 PLA 5.00 University 3D Print Lab Reduces fan noise
8 Fasteners (Screws, M3) 91292A112 10 Stainless Steel 3.00 McMaster-Carr M3x10 mm, for securing components
9 Thermal Paste AS5-3.5G 1 Silicone-based 5.00 Amazon Improves heat transfer to sink
Total Cost $108.00    

 

Motor Review

Basic PID Controller Script

import time

class PIDController:
    """A PID controller for precise control in robotic systems.

    Attributes:
        kp (float): Proportional gain.
        ki (float): Integral gain.
        kd (float): Derivative gain.
        setpoint (float): Desired target value.
        prev_error (float): Previous error for derivative calculation.
        integral (float): Accumulated integral term.
        dt (float): Time step in seconds.
    """

    def __init__(self, kp: float, ki: float, kd: float, setpoint: float = 0.0):
        """Initialize PID controller with gains and setpoint.

        Args:
            kp: Proportional gain for error response.
            ki: Integral gain for accumulated error.
            kd: Derivative gain for error rate of change.
            setpoint: Desired target value (default: 0.0).
        """
        self.kp = kp
        self.ki = ki
        self.kd = kd
        self.setpoint = setpoint
        self.prev_error = 0.0
        self.integral = 0.0
        self.dt = 0.01

    def compute(self, current_value: float) -> float:
        """Compute PID output based on current system value.

        Args:
            current_value: Current measured value of the system.

        Returns:
            float: Control signal to adjust the system.
        """
        # Calculate error
        error = self.setpoint - current_value

        # Proportional term
        p_term = self.kp * error

        # Integral term
        self.integral += error * self.dt
        i_term = self.ki * self.integral

        # Derivative term
        derivative = (error - self.prev_error) / self.dt
        d_term = self.kd * derivative

        # Calculate total output
        output = p_term + i_term + d_term

        # Update previous error
        self.prev_error = error

        return output


if __name__ == "__main__":
    

    # Initialize PID controller
    pid = PIDController(kp=1.0, ki=0.1, kd=0.05, setpoint=10.0)

    # Simulate mode (e.g., motor position)
    current_value = 0.0
    for _ in range(100):
        control_signal = pid.compute(current_value)
        # Simulate system response: position updates based on control signal
        current_value += control_signal * 0.1
        print(f"Current Value: {current_value:.2f}, "
              f"Control Signal: {control_signal:.2f}")
        time.sleep(pid.dt)

 

 

lowinertia
Portfolio Builder for Engineers
Created by Aram Lee
© 2025 Low Inertia. All rights reserved.