This project consisted of creating both a physical and computational mechanism that would ease travel through an airport, assisting in safely and efficiently moving luggage to and from platforms, as well as lowering the rising statistic in regards to lost luggage due to mishandling.
Each team members contributed to the completion of AutoCAD models, python coding controlling a mechanical QArm, and code resulting in display of airport and flight information.

QArm programmed to bring luggage from loading bay to physical mechanism

Our group!

This project lasted from October 4th, 2024 until December 4th, 2024
Our team was tasked to design, iterate, and fabricate a mechanical design that would transport luggage, as well as implement a computer program that assisted in this endeavor. We managed to create a functional mechanism cited above, which intertwined both aspects well, delivering an efficient final result that completed the task.
The team was not formally separated into smaller sub teams, so each member was responsible of small sections of each deliverable, resulting in a bit of overlap. Though this vastly improved team work abilities as every member had a deep understanding of what was going on through every stage of the process. Each team member contributed to different aspects of the AutoCAD model, as well as adding sections of code to the coding file that work in unison with one another using 2 Dimensional Arrays.
We started off the project presented with an interesting problem, and tasked with how to effectively and efficiently create a small scaled model that could transport luggage from platform A to platform B.

We went through many iterations in our initial design phase, creating many different possible solutions to the problem. As a group we decided that we would implement both motor types, linear and rotary, as well as a system that has a pivot at the base of the table to allow the table to tilt as the linear motor pushed upwards on it.

The Final Cad Drawing Depicting each Modelled Part of the Physical Mechanism
Each individual member was tasked with creating their own function, most of which were extremely challenging. We were given generic file data and were asked to retrieve certain data by using 2-dimensional list indexing and other techniques to format the data into lists and then use those lists to create more specific lists. Such as, the number of layover passengers, the amount of passengers with overweight bags, the amount of late passengers, and more.
We initially began with creating a series of flow charts for the team functions, and using this as a basis to build upon for our own individual functions.

One flow chart for collecting the passengers data from the data provided
We continued by implementing this into a collaborative coding assignment, allowing everyone to share ideas on the different ways this could be handled and finalized with an efficient and well working function.
#Written by team
def passenger_data():
passengerfile = open("passenger_data_v1.txt", "r")
passenger_list = []
for i in passengerfile:
list1 = (i.strip())
passenger_list.append(list1.split(","))
return passenger_list
In the coding mechanism, our team was able to create a functional visual display showing an array of information including, late passengers, layovers, and more.

This aspect was by far the most time consuming and intensive in terms of the coding needed for this project. Though it showed the peak of our collaborative and teamwork skills, as it not only required a lot of back and forth within our teams communication line, but it required patience and organization to create something that required so many iterations as a group.
def graphical_Fri01(oversold,overweight,layover,time_delay):
Import the turtle module
import turtle
# Constants (you can change these)
SCREEN_WIDTH = 900
SCREEN_HEIGHT = 500
WINDOW_TITLE = "Isoceles Triangles"
# Set up the screen object
turtle.setup(SCREEN_WIDTH, SCREEN_HEIGHT)
screen = turtle.Screen()
screen.title(WINDOW_TITLE)
# Create the turtle object
t = turtle.Turtle()
t.hideturtle()
# Start of your code
# ------------------
#sorting information
oversold_bus,oversold_econ = oversold
overweight_bag,pass_info = overweight
layover_status,pass_info2 = layover
delayed_pass = time_delay
info_list = [oversold_bus,oversold_econ,overweight_bag,layover_status,delayed_pass]
info_list_titles = ["Oversold Business Seats", "Oversold Economy Seats", "Overweight Bags", "Layover Passengers", "Late Layover Passengers"]
# ------------------
# End of your code
t.up()
starting_position = (int(SCREEN_WIDTH/len(oversold_bus)))
init_starting_position = starting_position
t.goto(-(SCREEN_WIDTH/2)-starting_position+25,100)
x,y=t.pos()
for i in range(len(oversold_bus)):
t.goto(x+starting_position,100)
t.write(f"{(oversold_bus)[i][0]}")
xtable,ytable =t.pos()
for j in range(len(info_list)):
t.goto(xtable,ytable-10)
ytable-=10
string = info_list_titles[j] + ":"+ f"{(info_list[j])[i][1]}"
t.write((string),font=("Arial", 6, "normal"))
starting_position += init_starting_position
# Make a clean exit
screen.exitonclick()
turtle.done()
When designing my own model to present to the group I came up with a model that uses a system of a single gear and rack and a table that pivots when it meets the other side. After realizing the torque of the rotary motor i chose was far too low to execute such a maneuver we decided to add a linear actuator to the base of our table allowing it to be lifted when needed.


These models acted as a great contribution and a strong base to build off of to our finalized model.
The contributions I made to the physical mechanism’s AutoCAD model came through gear creation using gear ratios and a rack and pinion system. I designed the gear to work with a rotary actuator and push the base of our mechanism using a rack.

Gear used by rotary actuator

Rack connected the base of the table using a pivot to tilt the table guiding the suitcases

Using many techniques I modelled the gear and rack ratio and was able to view the moving gear and rack system, allowing us to have a perfect gear system that was functional and had minor issues.
In the coding aspect of this project I did a function that took from a team function created for passenger data and daily data, and created a function for the number of oversold seats on each plane in business class and economy class respectively.
I began with a flowchart similar to the team one, to organize my thoughts and describe how I would approach this using clear and concise steps.

#Written by Ramin
def oversold(fleet_data,daily_data):
data_list_business = []
for i in range(len(fleet_data)):
data = [fleet_data[i][0]]
data_list_business.append(data)
for i in range(len(daily_data)):
#ask if you need to check in case its not in the order given
oversoldbus = int(daily_data[i][1]) - int(fleet_data[i][1])
if oversoldbus >0:
data_list_business[i].append(oversoldbus)
else:
data_list_business[i].append(0)
#economy
data_list_economy = []
for i in range(len(fleet_data)):
data1 = [fleet_data[i][0]]
data_list_economy.append(data1)
for i in range(len(daily_data)):
#ask if you need to check in case its not in the order given
oversoldecon = int(daily_data[i][2]) - int(fleet_data[i][2])
if oversoldecon >0:
data_list_economy[i].append(oversoldecon)
else:
data_list_economy[i].append(0)
return data_list_business, data_list_economy
In this code I used double list indexing to choose the pieces of data I wanted from the other functions and reorient it to create a new list that provides the specific output desired for the task.
#Written by Ramin
def oversold(fleet_data,daily_data):
data_list_business = []
for i in range(len(fleet_data)):
data = [fleet_data[i][0]]
data_list_business.append(data)
for i in range(len(daily_data)):
#ask if you need to check in case its not in the order given
oversoldbus = int(daily_data[i][1]) - int(fleet_data[i][1])
if oversoldbus >0:
data_list_business[i].append(oversoldbus)
else:
data_list_business[i].append(0)
#economy
data_list_economy = []
for i in range(len(fleet_data)):
data1 = [fleet_data[i][0]]
data_list_economy.append(data1)
for i in range(len(daily_data)):
#ask if you need to check in case its not in the order given
oversoldecon = int(daily_data[i][2]) - int(fleet_data[i][2])
if oversoldecon >0:
data_list_economy[i].append(oversoldecon)
else:
data_list_economy[i].append(0)
return data_list_business, data_list_economy
Image Sources
[1] on, “airplane on airport runway baggage loading for departure nose cockpit closeup view of modern passenger plane at terminal gate with maintenance worker person unloading luggage from aircraft on arrival Stock Photo,” Adobe Stock, 2025. https://stock.adobe.com/ca/images/airplane-on-airport-runway-baggage-loading-for-departure-nose-cockpit-closeup-view-of-modern-passenger-plane-at-terminal-gate-with-maintenance-worker-person-unloading-luggage-from-aircraft-on-arrival/289047494 (accessed Jan. 05, 2025).
[2] “Warehouse Control System,” Russell Conveyor & Equipment, Mar. 26, 2021. https://www.russellconveyor.com/warehouse-control-system/?msclkid=696a41c7c6511523e19826bc9bcc6ed8 (accessed Jan. 05, 2025).
[3] “QArm - Quanser,” Quanser, Nov. 15, 2021. https://www.quanser.com/products/qarm/ (accessed Jan. 05, 2025).
Final Design Report!