← back

Summer At University of Southern California

8 min read ·

Discover Engineering at USC for Four Weeks

I attended a 4 week Pre-College Summer Program where we explored different fields of engineering. My four biggest projects were:

Portfolio

Circuits

Group 10 Week 1 Research Paper

COVID-19 Detection Circuit

The Project

This circuit is used to detect COVID-19 based on three symptoms: coughing, temperature, and O2 levels.

If no symptoms are detected, the green light should be lit. If one symptom is detected, the yellow light should be lit. If two symptoms are detected, the red light should be lit. If all three symptoms are detected, the alarm should sound.

The circuit uses various logic gates to determine how many symptoms are present and utilizes that information to power the lights and alarm correctly. We also added flip-flops that are regulated by a timer to make our circuit read information at a set interval. This is because the circuit should not be checking for symptoms all the time as there are other temporary causes to the symptoms. For example, one’s body may raise in temperature due to exercise. Without the flip-flops, the circuit may read this as a sign of Covid-19. With the addition of flip-flops, the user just has to avoid these possible causes at the intervals when the circuit reads their vitals.

Overall Design Process:

We decided to build the different components of the circuit (alarm, clock, logic) separately and then combine them together in the end.

Logic Circuit:

The logic circuit was planned out on the whiteboard and comprised of AND, NOT, OR, and XOR gates. The first design didn’t work because the yellow and red lights were turning on together in strictly yellow cases. We then re-designed the red light cases in Tinkercad and made sure that it worked before re-building it.

Now came the biggest challenge in creating our logic circuit. Even though all the logic worked out in the Tinkercad, it didn’t on our bread board. Through systematic debugging the logic gates, we found that one of the logic gates was inconsistent and was fluctuating between 0 and 1.

These combinations of logic gates allow us to correctly pass a signal to the other parts of the circuit and power the lights and alarm according to the conditions.

The Alarm Circuit

The alarm circuit was very straight forward because we had a the schematic for it. This was the one part of the circuit that we nailed in the first try. This section of the circuit is the alarm. It uses a 555-timing chip to control the speaker and produce sound of different frequencies.

The Clock Circuit

The clock circuit also uses a 555-timing chip to give a signal to the flip flops to check if there were any changes to the signals they receive and change the lights and alarm accordingly.

The first attempt for the clock circuit resulted in the testing LED shining momentarily before dimming, with no cycle. We concluded that something must have gone wrong with the wiring, so we decided to test the circuit on Tinkercad.

The first attempt in Tinkercad resulted in a cycle time of 3 seconds, which was too short, so we replaced the 5uF capacitor with a 10uF capacitor, resulting in better cycle time of around 6.5 seconds. With a more concrete visualization of our idea, we were able reliably and physically recreate the circuit with the LED turning on and off every 3.25 or so seconds, which we could then attach to the flipflops on the logic circuit.

Conclusion: Error Analysis

In the end, there were two issues that we did not have time to fix. Firstly, we realized at the end that the switches that we got needed to be grounded AND powered through two pins. We originally thought that they were SPDT so we only grounded the switch. Secondly, we realized that our AND logic gate was fluctuating its output because we were using the wrong voltage/power supply. We only had 3 volts of power when the AND gate required around 4-6V.

Robots

Website: Group 10 Week 2 Research Paper Group 10 Week 2 Research Paper

VEXIQ Robot Simulation

cpp
void turnRight (int angle) {
int initGyro = getGyroDegrees (port4);
if (angle > 0) {
setMotorSpeed(rightMotor, -50);
while (getGyroDegrees (port4) - initGyro) + angle > 0) {delay (50);}
} else {
setMotorSpeed (leftMotor, -50);
setMotorSpeed (rightMotor, 50);
while (getGyroDegrees (port4) - initGyro) + angle < 0) {delay(50);}
}
setMotorSpeed(leftMotor, 0);
setMotorSpeed(rightMotor, 0);
}
void checkDirection () {
int distances [2] = {0,0}; // left and right distance
turnRight(-90);
delay(500);
distances[0] = getDistanceValue(distanceMM);
turnRight(180);
delay(500);
distances[1] = getDistanceValue(distanceMM);
if (distances [0]<=50 && distances [1]<=50) {turnRight(90);} //If both directions are blocked, turn around
else if (distances [0]>=distances [1]) {turnRight(-180);}//If left has more space, turn left
//If right has more space, turn right aka ignore
}
task main() { while(true) {
setMotorSpeed(leftMotor, 100); setMotorSpeed(rightMotor, 100);
while(getDistanceValue(distanceMM) > 400) { delay (50); }
setMotorSpeed (leftMotor, 0); setMotorSpeed (rightMotor, 0);
checkDirection();
}}
cpp
void turnRight (int angle) {
int initGyro = getGyroDegrees (port4);
if (angle > 0) {
setMotorSpeed(rightMotor, -50);
while (getGyroDegrees (port4) - initGyro) + angle > 0) {delay (50);}
} else {
setMotorSpeed (leftMotor, -50);
setMotorSpeed (rightMotor, 50);
while (getGyroDegrees (port4) - initGyro) + angle < 0) {delay(50);}
}
setMotorSpeed(leftMotor, 0);
setMotorSpeed(rightMotor, 0);
}
void checkDirection () {
int distances [2] = {0,0}; // left and right distance
turnRight(-90);
delay(500);
distances[0] = getDistanceValue(distanceMM);
turnRight(180);
delay(500);
distances[1] = getDistanceValue(distanceMM);
if (distances [0]<=50 && distances [1]<=50) {turnRight(90);} //If both directions are blocked, turn around
else if (distances [0]>=distances [1]) {turnRight(-180);}//If left has more space, turn left
//If right has more space, turn right aka ignore
}
task main() { while(true) {
setMotorSpeed(leftMotor, 100); setMotorSpeed(rightMotor, 100);
while(getDistanceValue(distanceMM) > 400) { delay (50); }
setMotorSpeed (leftMotor, 0); setMotorSpeed (rightMotor, 0);
checkDirection();
}}

The goal of the VEXIQ simulation is to code the virtual robot to find its way out of a maze autonomously. Our code works by first moving the robot forwards until it is 40 centimeters away from the wall. Then, the robot checks how far the left and right wall is and travels down the farther wall. If there is not enough space on the left and right, the robot goes backwards. Our code is attached underneath.

Tamiya Bot

We built the Tamiya bot with knowledge from programming the VEX robot on our simulation. The components that were used were exactly the same. An optical sensor and motors for moving the robot. Thus, we used the same logic from the VEXIQ code. We have a circuit diagram of the robot on the left.

We attached the Arduino and ultrasonic sensor to the Tamiya tank chassis and double motor drive to finish the structure of the robot.

Red Bot

The Red Bot is a line following robot built with two motors and three line sensors. We were given a completely built robot so we just had to code the sensors to follow the line correctly. The three line sensors are placed on the left, middle, and right of the robot. When the line turns, the middle line sensor loses track of the line and one of the left or right line sensors will sense the line. If the left sensor senses the line, the robot re-orients itself by turning left. If the right sensor senses the line, the robot re-orients itself by turning right. Video of it working ----->

Zumi

The Zumi is an AI powered robot which we trained to recognize obstacles and commands to navigate its way through a building to simulate escaping a building that is on fire. It is able to detect obstacles and navigate through the maze.

Bridges

Group 10 Week 3 Research Paper

Friday

we first drew out possible concepts on a whiteboard and removed several designs such as catilever for being too complicated, suspestion would be very hard because we cant get a bent cable.

we had to chose was between cable strung and Pennsylvania / Petit Truss so we schetched both options out in 8mm:6in ratio. we choose the petit in the end because we were concerned how well cable strung would work with balsa wood as the cable.

Weekend

we then designed the bridge in cad (solid works which Alex is used to) to plan out what we want to build.

we then simulated the design using finite element analysis (using ansys) and found out it there exists a weak point in the bridge so we added more supports to it. after that change, the simulation says the bridge should hold 1000N+ however this does not take into account the strength of the joints.

we then rendered the bridge in keyshot cuz why not

Monday

we started the morning by making a bill of materials then split the task for everyone to cut those lengths, in the afternoon we started glueing and finished the base.

Tuesday

Continued working on the bridge and finished building the base and truss. We also added some supports under the bridge to support the center of the road.

Wednesday

Testing day! 🙏 lord have mercy

Error Analysis

We didn’t consider the height of the bricks after stacking 10-12 of them. If we were able to go later in order, we would have seen more configurations to stack the bricks more efficiently in x and z space to conserve vertical space.

Climate Change & Sustainability

Group 10 Week 4 Research Paper 1 Group 10 Week 4 Research Paper 2

The Drone

We coded the drone using block codes on the CoDrone RoboLink website. The drone stops at different places and simulates collecting CO2 (beeps and LED turns on), going to another place once done with one place. We had to change the settings of the drone at the beginning to make it stable while hovering.

Elastic Powered Plane

This plane was made by winding up a rubber band to power the motor. We also had to make the sure the wings were tilted at the right angle to provide enough lift for the plane to fly. This took many tries, and in the end our plane flew pretty well.

Model Rocket

Before building the actual rocket, we did a smaller model which could be launched by blowing. This was to get an idea of the aerodynamics of a rocket as well as test our initial design.

The Parachute

We made a parachute out of a trash bag and tied strings, which were connected to the data bot. The bot will drop after the rocket falls down, and the parachute will slowly bring it down.

The Rocket

Our final rocket launched. We were able to successfully launch on test launch day; however, our parachute did not deploy. We modified the design with a water bottle in the middle that contained the parachute, so the parachute could release easier. However, on official day, we were unable to launch due to problems with the fuel stick.