About


Hey, my name is Derrick Mak, and I am a mechanical engineer graduate from UCI with experience in consumer electronics. In my free time, I enjoy doing all sorts of physical activities such as weightlifting, boxing, hiking, volleyball, and even pickleball. I have also been trying to learn piano for two years now, though I am not very good!

Contact info:

Phone: 562-395-8689
Email: makdderrick@gmail.com

Projects

Robotics Outreach Project: Mechanical Arm

A senior design project I am in that aims to develop a robotics kit for underrepresented middle and high school students in STEM.

Donkeycar: Open Source DIY Self-Driving Platform

An open source project that incorporates a 1/16th scale RC car, raspberry pi 3b+, and python in order to create a self-driving car that can be trained on different tracks.

Robot Simulation and Controller Competition

This project was a part of the MAE 106 coursework at UCI where students built controllers and competed against each other in an online game called Agar.io.

Self-balancing Robot

A personal project using an arduino nano, IMU, H-Bridge motor driver, and two dc motors.

Workout Data Analysis

A personal project which I undertook in order to get a better look at my weightlifting progress as well as to better understand how to work with data.

Agario Controller

This project was an accumulation of the variety of topics learned in UCI's MAE 106
Mechanical Systems Lab course and had two main parts: designing/modeling a hopper car and creating a controller which would control a simulation of the car. In groups of three, we designed a car based off of three major sections: chassis, propulsion, and steering. I aided with chassis and propulsion, but I was primarily responsible for developing the steering system in which I chose a rack and piston steering system which utilized Ackermann steering geometry. I chose this steering system for its ease of implementation in relation to its effectiveness based off of the parts we had.

The controller was the second part of the project in which students were told to create a controller to control a computer mouse and steer a blob resembling the car in a game called agar.io.

I personally chose to use a proportional controller with a high gain rate to allow for simple yet responsive steering based off of the value of the left potentiometer shown above. The right potentiometer above served to control the speed of the car which varied the distance the mouse traveled in front of the blob in the game. I created a three speed system which would allow me to carefully control the amount of air expended so that I could outlast the other students in our competitions held at the end of the course. Due my design choices and a bit of luck, I managed to place 6th out of over 200 students.

Using MATLAB, I plotted the simulation steering torque with different gain rates and ended up using a gain of 100. This was due to the fact that when actually using the controller to play agar.io, the overcompensations from the large gain allowed me to reach my desired angle much quicker without too much oscillation.


The code can be found here: https://github.com/makdderrick/MAE-106-Final-Project

Workout Data

This is a personal project of mine which I undertook in order to better understand my progress in my hobby of weightlifting. I imported the data from a workout tracker app in the form of a CSV file and manipulated the data such that I could visualize and organize certain aspects of particular exercises. I came up with several functions that displayed important information relevant to lifting weights such as one rep maxes and volume.


The chart above displays the estimated one rep maxes for a given lift based on the Epley formula. This chart was made through three different functions: one to create a data frame of the exercise name, weight, and rep count, another to estimate the rep max, and a third to plot the data. In the data frame function, I calculate the rep max for each set in a day's workout and take the highest per day which gets appended to a list and returned.


The chart above displays the percentage increase of my one rep maxes from the first rep max estimate. It was done in a similar fashion to the chart prior but with the addition of the minor calculation of dividing the rep maxes by the first given max.


This chart above displays the daily volume for a certain exercise where volume is equal to the reps x sets x weight. This is a measure used in weightlifting to see how much work is being done within a training cycle. This was accomplished through creating a data frame of weight and reps and the summing the total per day which is then added to a list.


Lastly, the graph shows the total number of sets for the most popular exercises above a certain set count which in this case was 150 sets.


The code can be found here: https://github.com/makdderrick/Workout_Analysis

Donkeycar


This is my donkeycar which was built using a standard 1/16th RC car (Exceed RC Blaze), a raspberry pi 3b+, and a donkeycar kit which contained the servo driver, camera, and 3D printed parts. After collecting data from the camera, Keras was utilized to create a self-driving model and traffic sign classification.


Above are videos of the car in autopilot mode (left) and what the car saw through the RPI camera (right).

The two charts above are of two different sets of data from the same track. I collected data by driving the donkeycar around the track about 15 times for each dataset using a playstation 3 controller. The chart on the left shows my first attempt at collecting data which was admittedly poor and caused the autopilot to crash frequently. However, on the second try I collected much better data which resulted in the car driving smoothly within the bounds of the track. Using the data from the second attempt, I trained different models including linear, 3D, RNN, categorical, and latent in which the latent model performed the best.

The video above shows a side project using the donkeycar's camera, ROS, yolov3, and Keras. The traffic sign detection and classification models were created by modifying and merging code from two different people, Murtaza Hassan and Sergio from Pysource (links at bottom). Then I implemented ROS to relay information from the camera by subscribing to the raspicam_node topic. I intended to then use ROS to implement low level control for the car based off the specific traffic signs being seen, however, the framerate from the camera was far too low for it to be useful.

Sources

Balance Bot

This is a small robot that can balance on two wheels using an arduino nano and an MPU6050 IMU. I built this robot by following a guide and using spare parts I had from past projects which included everything except the chassis and the IMU. I designed the chassis in Solidworks and then 3D printed it. After soldering all the necessary pieces and assembling the electronics onto the chassis, I calibrated the IMU and uploaded the sketch given by the guide. From there, I manually tuned the PID values using a systematic and straightforward approach which involved: setting all the gains to zero, increasing P until oscillations were occurring, increasing D to minimize those oscillations, and increasing I to reduce the time to reach stabilization.

Overall, this was a fun and simple project that helped me to learn more about designing 3D printed parts and physically seeing the effects changing PID values.

Source: https://github.com/kurimawxx00/arduino-self-balancing-robot

Robotics Outreach Project

This is a 4 DOF arm with a gripper end effector designed to be placed on top of an RC car to pick up tennis balls. I was responsible for designing the arm structure including the base, the first linkage, and the second linkage. I designed this structure in SolidWorks with my main design considerations being safety, due to the future users being middle and high school students, and simplicity for the same reason.

The main challenge I faced with this project was maintaining the simplicity of the structure while being able to properly manage cables that came from the gripper, camera, and servos. These factors heavily shaped the design, and it taught me a lot about how certain requirements can control a large portion of the design work.

While in this project, I also played a part in developing a MATLAB simulation that would represent the team's control strategy for moving the end effector. This control strategy involved having a user input certain keys to move or rotate the end effector a set distance in a certain direction. Then using that desired end effector position, inverse kinematics would be used to relay information on how to rotate each of the linkage joints.

Elements

Text

This is bold and this is strong. This is italic and this is emphasized. This is superscript text and this is subscript text. This is underlined and this is code: for (;;) { ... }. Finally, this is a link.


Heading Level 2

Heading Level 3

Heading Level 4

Heading Level 5
Heading Level 6

Blockquote

Fringilla nisl. Donec accumsan interdum nisi, quis tincidunt felis sagittis eget tempus euismod. Vestibulum ante ipsum primis in faucibus vestibulum. Blandit adipiscing eu felis iaculis volutpat ac adipiscing accumsan faucibus. Vestibulum ante ipsum primis in faucibus lorem ipsum dolor sit amet nullam adipiscing eu felis.

Preformatted

i = 0;

while (!deck.isInOrder()) {
    print 'Iteration ' + i;
    deck.shuffle();
    i++;
}

print 'It took ' + i + ' iterations to sort the deck.';

Lists

Unordered

  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.

Alternate

  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.

Ordered

  1. Dolor pulvinar etiam.
  2. Etiam vel felis viverra.
  3. Felis enim feugiat.
  4. Dolor pulvinar etiam.
  5. Etiam vel felis lorem.
  6. Felis enim et feugiat.

Icons

Actions

Table

Default

Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99
100.00

Alternate

Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99
100.00

Buttons

  • Disabled
  • Disabled

Form