In this project, I conducted a comprehensive study of the C29x core architecture used in TI’s C2000™ real-time microcontrollers, which are an upgrade from widely adopted C28x family in digital control systems such as motor drives, automotive, and power conversion applications. Key contributions included:
Tool: C, Cuda
Breadth First Search is a significant implementation of graph processing. Besides from the ordinary solution for the application, such as shortest path and minimum spanning tree for unweighted graph, peer to peer networks, crawlers in search engines, and social networking websites, I discovered deeply in the optimization of breadth first search through parallelization, blocking, and other algorithms, such as hybrid algorithm and Dijkstra’s algorithm. I also dug into the performance on CPU and GPU, comparing the efficiency of the different algorithms.
I collaborated on a technical research project focused on Man-in-the-Middle (MitM) attacks — one of the most persistent and difficult-to-detect threats in modern network security. Our project explored:
I conducted an in-depth research project on pumped heat energy storage (PHES) — an emerging, scalable solution for large-scale renewable energy storage. This system, known as the "Brayton battery", stores excess energy using high-pressure working fluids and molten solar salts, providing a low-cost and efficient alternative to lithium-ion batteries. My research focused on:
Tool: Flutter, Python, Unity, Swift, Augmented Reality (AR)
Tool: React Native, Firebase
Tool: C, Node.js, JavaScript
Smoothie Dispenser is a remote food drop system that consumers can use to drop smoothie onto smoothie container by pressing a remote button on their phone; afterwards, customers can obtain the smoothie from the smoothie container. The main process includes 5 steps: 1) place the smoothie container at smoothie drop zone. 2) observe the LIDAR distance and box location through WebCam. 3) observe the accelerometer data when stabilizes. 4) we click the drop button, and then the temperature decreases. 5) the customer can take the smoothie away.
We use 2 actuators, 3 sensors and a RPI WebCam to implement this dispensing system. We used a servo for dropping food, a LIDAR sensor for determining the distance between the drop zone and the food container, an alphanumeric display for displaying the LIDAR value, a thermistor for determining the smoothie temperature and an accelerometer for determine if the food container is being moved or staying still.
Tool: C, Node.js, JavaScript
We connected the crawler, range sensors, esc & steering servos, optical encoder to esp32, and used udp & socket.io to implement cruise control on the crawler, making it an autonomous vehicle. We utilized three sensors(Lidar v4, IR RangeFinder, and Ultrasonic Sensor) around the crawler for detecting the distance between the obstacles and the car so that it does not crash. We also used an optical encoder to measure the crawler speed. Our goal is to drive the crawler along a designated straight line, maintaining a constant speed of 0.1 - 0.4 m/s. The system also needs to rely on PID control to control both the speed and the steering. Finally, the crawler needs to stop within 20cm of an obstacle or the end of the road. We tuned all sensors and PID control to achieve these goals. We also set up a html client with start/stop buttons to press on and use socket.io to send to a command.js server, which then sends to esp32 through udp to start/stop the crawler forward movement and PID tuning. The vehicle is controlled in wireless mode.
Tool: C, Node.js
E-voting will be enabled by unique devices (fobs) given to all registered voters. Voting will consist of creating a secure near field communications link between two fobs. There are in total of three fobs for voting. Original votes can only be communicated by a secure IR channel from one fob to another. Once the vote has been received, it should be communicated to the Poll Leader. It will send the results to a server which will log the vote to a database. Poll results will be accessible via the server via http, and there is a reset button that will restart the vote. Overall, this quest used IR TX/RX to select between Red, Green, Blue candidates. Furthermore, we got two buttons, one to select the LED candidate we want to choose, the other to send the final vote decision of the candidate.
Tool: C, Ajax, JavaScript
We connected the thermistor and accelerometer sensors to the ESP32 by using ADC, and connected the led with ESP32 using GPIO pins. The sensors output values are read into ESP32's ADC ports every 2 seconds once this microcontroller is flashed. Then, we send the sensor data through udp protocol over wifi from ESP32 to RPI. RPI IP is 10.0.0.138, and the udp protocol used Port 1131 for data transmission. In addition, LED status is data is received through udp protocol to turn ON/OFF the led light.
We run the canvas_ajax.js file (server side) so that sensor values obtained through udp protocol are parsed and transmitted as an array using the "express" module's "get" from the server to the client. "Express" module's "post" method is used to receive led ON/OFF status data. Once again, UDP protocol is used to send back the led data to the esp32 over wifi.
After running canvas_ajax.js file, we accessed the sensor_ajax.html (client side) through "get" method as well. To access the html page, we used port 1132, and the RPI camera page is set to port 1133. Since we have used DDNS and port forwarding, the html page can be accessed at "hrsun.ddns.net:1132" and there is a camera link button on this page that will take us directly to "hrsun.ddns.1133" to observe the physical devices. JQuery AJAX protocol is used in the html file to receive sensor data from the server. 2 Graphs (Accelerometer & Thermistor Graphs) are created on the html page to display the 2 sensor value separately, and sensors' new data are continuously pushed into a global array to update the graph. Once the LED Button is clicked, the led status data will be send back to the server using AJAX protocol as well.
Tool: C, Node.js, JavaScript
We connected the 3 sensors(thermistor, ultrasonic sensor, IR range sensor) to the ESP32 using ADC, and output these sensor values and graph them on a localhost:8080 to build a tactile Internet. The three sensors output values into ESP32's ADC ports every 2 seconds once this microcontroller is flashed. Then, when running the read_serialport.js file, sensor values are read through esp32's uart port. Next, sensor values are parsed and saved into a .csv file. Finally, charts.html file read the .csv file, graphs all sensor values onto the same chart, which is updated in real time every 2 seconds.
Tool: MatLab
In this project, I did an binary classification on helping training the computer to recognize whether the picture is dog or cat. After several tests and training, using different machine learning skills, I finally made the computer have an accuracy of almost 99%.
Tool: Verilog
Multicycle CPU is a pipelined CPU from computer organization. It
includes several functions, such as ALU, rigisters, sign extension, etc.
Tool: Java
We focused on designing GreenMate, an Android application that incentivizes users to live a more sustainable lifestyle. Acting as a tool to promote walking, riding bikes, and recycling, the app employs a customized character that changes on user input through a point system. The main functions of GreenMate include a step counter that records the user's walking or bike-riding and a recycling database and counter that communicates whether an inputted item can or cannot be recycled and increments the user's 'points' based on what they enter.
Tool: C++
This program is a game allows player to train their own pokemons
and battle. There are stamina and money system while these
calculate automatically after training or refilling the stamina.
Tool: MatLab
The project imported a large database and gave the top 10
recommended countries to visit based on different proportion of
air cleanness and popularity that the user input through slider under different years.
Tool: MatLab
The design is to build a truss that supports the maximum weight as we can. By analyzing the truss with Matlab code, the theoretical load, cost, and load cost ratio can be calculated. These data will be helpful in visualizing the truss that will be built and determining the exact dimensions of the truss. The goal is to maximize as much load for the truss as possible. In terms of analyzing the data, actual maximum load can also be calculated using the actual length of the straws. The actual straw length is shorter than the joint-to-joint length since the straws are pinned on the gusset plate. Thus, the actual truss design will have a higher maximum load than the theoretical maximum load. The final truss design focuses on the maximum load instead of the cost or the load to cost ratio. In order to reach a higher maximum load, the design has been slightly changed by adjusting the angles and dimensions of the straws. However, Warren is still the style of the design, and the main changes of the final design are the internal dimensions and angles. Since the maximum load has been increased, it is reasonable that the cost may go up.