Hello! My name is Keyan Cassis. I'm a fourth year Computer Systems Engineering student at Carleton University who is very passionate about technology and music. On this website you will find engineering projects and music productions I have completed in the past years. Enjoy!

Updates

  • 18/07/20 - Updated website with projects from the last two years.
  • 06/01/18 - Purchased SSL certificate to allow website to use HTTPS protocol
  • 13/08/17 - Improved elmement positioning for mobile device viewing
  • 12/08/17 - DNS obtained and website now accessible on the web
  • 06/08/17 - Improved element positioning during window resizing
  • 26/07/17 - Music productions are now playable

Listed below you will find engineering projects I have completed in school or during my free time. The projects are ordered by date. Each one contains a detailed description of the project as well as the source code and relevant images.

Curb Detection with LiDAR for Autonmous Vehicles

  • Year: 2020
  • Languages/Tools: Python, Numpy, Pandas, C, Linux, QNX OS, Velodyne HDL64 LiDAR

For my fourth year engineering project, my team and I developped a real-time curb detection algorithm for autonomous vehicles using a 3D LiDAR sensor. The project was done in collaboration with BlackBerry QNX who provided us with real Velodyne HDL64 LiDAR data as well as telemetry data collected from their self-driving Lincoln MKZ. See more...

Remote Controlled Car with ADAS

  • Year: 2020
  • Languages/Tools: C/C++, Arduino

A remote controlled car with an ADAS system for lanekeeping and collision avoidance. The car was built using an Arduino, two DC motors, infrared sensors, sonar sensors, and other peripherals. See more...

Safe Access Security System

  • Year: 2019
  • Languages/Tools: C/C++, Python, UDP, Arduino, Raspberry Pi, Linux

A security system for users to store documents in an array of safes. A prototype safe was built using cardboard, a keypad, an electromagnetic bolt, magnetic sensors, LEDs, an Arduino, and a Raspberry Pi. A second Raspberry Pi was used for storing credentials, validating user input, and controlling the safe's locking mechanism over the network. See more...

Real-Time Elevator System Simulator

  • Year: 2019
  • Languages/Tools: Java, AWT, Sockets, UDP

A very accurate simulation of a multi-elevator real-time system. The simulation receives elevator calls from different floors at different times and the scheduler selects the best elevator to fulfill the request. A GUI was developped to view the elevators moving from floor to floor. The system includes a logger and a test suite. See more...

Food Bank REST API

  • Year: 2018
  • Languages/Tools: Java, JAX-RS, JSON, XML, GlassFish Server

Food Bank is a RESTFul web service written in Java using JAX-RS that allows users to retrieve a list of ingredients available in a food bank.The user can retrieve ingredients based on their name and view the remaining quantity in the food bank. The user can also make API calls to remove items from the bank. The web service is deployed on a GlassFish Server. See more...

Online Shopping Website Sign-Up Form (Work In Progress)

  • Year: 2017
  • Languages/Tools: HTML, CSS, JavaScript, jQuery, Ajax, JSON

A typical login/sign up form for an online shopping website. The form validation, creation of new users and authentication of users loging in are done using Ajax. See more...

Greenhouse Management System

Motorola M68HC12 project board
  • Year: 2017
  • Languages/Tools: C, Motorolla M68HC12 Assembly

The Greenhouse Management System is a real-time embedded system that controls a Motorola M68HC12 microcontroller and its project board. Its goal is to simulate an automated control system for greenhouses. It compromises of a thermostat, a fan, a heater, a water pump, a keypad for system controls, and an LCD display indicating the status of the system's components. See more...

Tic Tac Toe

Tic Tac Toe GUI
  • Year: 2016
  • Languages/Tools: Java, AWT, Swing

A classic Tic Tac Toe game for two players written with Java's AWT API and Swing library; the GUI displays the Tic Tac Toe board and indicates which player's turn it is. It also keeps track of wins and loses for the players. The game menu allows players to start a new game, reset the score or quit the game. See more...

Text-Based Chess Game

Chess Game console
  • Year: 2016
  • Languages/Tools: Java

A text-based chess game for two players that is printed in the console; the row and column indexed chess board is printed with all the chess pieces and the players are prompted to enter coordinates to move their pieces. After a legal move, the board is reprinted in the console and the next player may take his turn. The game also warns players when their oponent has placed them in check. See more...

Reverse Engineering Project - Universal Ratchet

Universal Ratchet
  • Year: 2015
  • Languages/Tools: Creo Parametric 3.0

A ratchet is a mechanical tool used to tighten and loosen bolts. The problem with a standard ratchet is that the user must always change the socket according to the bolt size. As a result, ratchet users often carry a large and heavy box of different sized sockets. My partner and I reverse engineered a ratchet and improved it by designing a universal ratchet that only has one socket. The improved ratchet was designed and 3D printed with Creo Parametric 3.0. See more...

Arduino Home Security System

Arduino Keypad Lock
  • Year: 2015
  • Languages/Tools: C/C++, Arduino

The Home Security System detects intruders across a door or a window. It was designed with an Arduino Uno microcontroller that is connected to LEDs, push-buttons, photoresistors, a piezo, etc. The system works by means of a wide laser pointing into a series of photoresistors; when the photoresistors detect a dramatic change in light (i.e. the laser is cut), the alarm is triggered. The system is connected to a push-button keypad that arms or turns off the alarm. See more...

Return to Engineering Projects page

Curb Detection with LiDAR for Autonomous Vehicles

Description

For my fourth year engineering project, my team and I developped a real-time curb detection algorithm for autonomous vehicles using a 3D LiDAR sensor. The project was done in collaboration with BlackBerry QNX who provided us with real Velodyne HDL64 LiDAR data as well as telemetry data collected from their self-driving Lincoln MKZ.

My part in the project was threefold. First, I investigated de-noising and clustering methods and helped significantly reduce the number of non-curb points in the point cloud. Second, once our single-snapshot curb detection algorithm was completed in Python, I rewrote and optimized the algorithm in C as a real-time algorithm so that we could run it in the self-driving car simulation. I had to optimize the algorithm to run under the 100ms real-time deadline. Implementing this was no easy task as I had to re-implement functions that are provided by python machine learning libraries in C. Thirdly, I developped a novel method of real-time point cloud computation acceleration. I called it the Rear-Envrionment Recall method. In this method, the vehicle keeps track of the last processed point cloud. Rather than processing an entire point cloud of over 100k points each snapshot, the vehicle only computes new points in front of the car. The points behind the car are re-used from the previous LiDAR snapshot all while being adjusted in 3D space for the displacement and rotation of the vehicle between the two snapshots. I achieved very desirable results with this method, even speeding up the algorithm by 138%. You can read more about this method in sections 6.8, 6.8.2, and 6.8.3 of my project's final report below.

Lanugages/Tools used: Python, Numpy, Pandas, C, Linux, QNX OS, Velodyne HDl64 LiDAR
Concepts applied: Real-Time Systems, MSE, Cosine Similarity, DBSCAN and HDBSCAN Clustering, Principle Component Analysis, Confidence Metrics, etc.

Source Code

Project Final Report: Curb Detection with LiDAR Final Report.pdf
Single Snapshot Python Algorithm source: single-snap-detection-python.zip
Real-Time C Algorithm source: real-time-c-algorithm.zip

Images

Raw LiDAR data vs Detected Left and Right Curbs:
(Single snapshot detection in Python)

Raw LiDAR data vs Detected Left and Right Curbs

Below is the Lincoln MKZ simulation using our real-time algorithm. It is worth noting that, due to time constraints, I was not able to re-implement the complete curb detection algorithm that was implemented in Python. That is why there is still noise present outside of the curbs and there is a gap in the curbs adjacent to the vehicle. In the video, the curbs tend to appear and disappear. This is only due to the computer lagging from the burden of the simulation and screen recording at the same time, not because the algorithm is failing.

Return to Engineering Projects page

Remote Controlled Car with ADAS

Description

In this project, my team and I designed a remote controlled car with an ADAS system for lanekeeping and collision avoidance. This is accomplished through the use of infrared sensors to detect course delimters and sonar sensors to detect nearby objects. The vehicle was tested on an obstacle-course as shown in the video in the Media section. The car was built using:

  • 1x Arduino Nano
  • 3x sonar sensors
  • 2x infrared sensors
  • 1x H-bridge motor driver
  • 2x DC motors
  • 1x car-switch push ubtton
  • 1x wireless remote controller with 2 analog sticks
  • 1x LED for the car light
  • 4x AAA batteries

Languages/Tools used: C/C++, Arduino
Concepts applied: Project Design Lifecycle, Real-Time Systems, ADAS, Interrupts, A/D Conversion, Hardware Drivers

Files

Project source code: project-4805-bittersweet-master.zip
Project presentation: SYSC4805 Presentation.pptx
Project Final Report: SYSC4805 Final Report.docx

Media

The car with labeled sensors:

Car with sensor labels

The car circuit diagram:

Car circuit diagram

Video demonstration:

Return to Engineering Projects page

Safe Access Security System

Description

In this project, my team and I designed a security system for users to store documents in an array of safes. Upon entering the correct credentials on a keypad, the according safe's electromagnetic bolt is retracted to open the safe door. Users are only able to open a safe if they have the credentials for it. A prototype safe was built using cardboard and:

  • An Arduino Uno for controlling the safe's door mechanism
  • An electromagnetic bolt for locking/unlocking the safe door
  • Magnetic sensors to detect whether the safe door is currently open/closed
  • An ethernet shield for the Arduino
  • A Rasperbby Pi for storing credentials, validating user input, and communicating with the Arduino over the network to control the safe's locking mechanism
  • A Raspberry Pi for controlling the keypad and sending user input to the main Pi
  • One red and green LED for visual confirmation of valid/invalid user credentials
  • A keypad for entering credentials

Tools used: C/C++, Python, UDP, Arduino, Raspberry Pi, Linux
Concepts applied: Real-Time Systems, Networking

Source Files

Safe Access Security System source files: safe-access-system.zip
Safe Access Security System project Final Report: 3010 Final Report.pdf

Media

The Safe prototype:

Safe prototype

Video demonstration:

Return to Engineering Projects page

Real-Time Elevator System Simulator

Description

A very accurate simulation of a multi-elevator real-time system. The simulation receives elevator calls from different floors at different times and the scheduler selects the best elevator to fulfill the request. A GUI was developped to view the elevators moving from floor to floor. The system includes a logger and a test suite.

Tools used: Java, AWT, Sockets, UDP
Concepts applied: Real-Time Systems, Networking, Logging, Testing

Source Code

elevator-simulator project files: elevator-simulator.zip

Images

The Elevator System Simulator GUI:

Elevator System GUI

Return to Engineering Projects page

Food Bank REST API

Description

Food Bank is a RESTFul web service written in Java using JAX-RS that allows users to retrieve a list of ingredients available in a food bank.The user can retrieve ingredients based on their name and view the remaining quantity in the food bank. The user can also make API calls to remove items from the bank. The web service is deployed on a GlassFish Server.

Tools used: Java, JAX-RS, JSON, XML, GlassFish Server
Concepts applied: REST APIs

Source Code

Foodbank REST API files: FoodBankRESTService.zip

Images

Food Bank API source code:

Food Bank API

Return to Engineering Projects page

Online Shopping Website Sign-Up Form

Description

A typical login/sign up form for an online shopping website. The form validation, creation of new users and authentication of users loging in are done using Ajax.

Tools/Languages used: HTML, CSS, JavaScript, Ajax, JSON

Source Code

HttpRequest Module: HttpRequest.js

Online Shopping Website Sign-Up Form

Online Shopping Website

LOG IN

SIGN UP


Log In

Email Address:
Password:

Account Details

*First Name:
*Last Name:
*Username:   Check Availability
*Email:   Check Availability
*Password:
*Confirm Password:

Billing Info

*Country:
*State/Province:
*City:
*Postal Code:
  *Address Line 1:
  Address Line 2:




Return

Return to Engineering Projects page

Greenhouse Management System

Description

The Greenhouse Management System is a real-time embedded system that controls a Motorola M68HC12 microcontroller and its project board. Its goal is to simulate an automated control system for greenhouses. It consists of:

  • A thermostat to monitor the current temperature in the greenhouse
  • A fan to run if the temperature is too hot
  • A heater to run if the temperature is too cold
  • An automated blind (stepper motor) that rolls itself up or down on command
  • A pump (DC motor) that distributes water at variable flow rates
  • A keypad with buttons to increase/decrease the pump rate and raise/lower the blinds
  • An LCD display that shows the current time, temperature, and pump rate

Concepts applied: Real time interrupts (RTIs), interrupt service routines (ISRs), pulse width modulation (PWM), pulse accumulation, A/D conversion algorithms

Source Code

Project specifications document: GMS specifications.pdf
Greenhouse Managment System .c file: GMS.c
Greenhouse Managment System vector table for interrupts and ISRs: GMSvectors.c

Images

The M68HC12 Motorola microcontroller and its project board containing the thermostat, fan, heater, stepper motor, DC motor, keypad, and LCD:

Motorola M68HC12 Project Board

Return to Engineering Projects page

Tic Tac Toe

Description

A classic Tic Tac Toe game for two players written with Java's AWT API and Swing library; the GUI displays the Tic Tac Toe board, a scoreboard, and indicates which player's turn it is. The game menu allows players to start a new game, reset the score or, quit the game.

Tools used: Java AWT API and Swing library for the GUI
Concepts applied: Java Event Model (event listeners and handlers)

Source Code

Tic Tac Toe files: Tic Tac Toe.zip
Tic Tac Toe files: Tic Tac Toe.jar

Images

The Tic Tac Toe GUI with a scoreboard and a turn indicator:

Tic Tac Toe GUI

The same GUI with the game menu:

Tic Tac Toe GUI with game menu

Return to Engineering Projects page

Text-Based Chess Game

Description

A text-based chess game for two players that is printed in the console; the row and column indexed chess board is printed with all the chess pieces and the players are prompted to enter coordinates to move their pieces. After a legal move, the board is reprinted in the console and the next player may take his turn. The game also warns players when their oponent has placed them in check.

Concepts applied: Inheritance, Abstraction, Interfacing, UML notations.

Source Code

Chess Game files: Chess Game.zip
Chess Game files: Chess Game.jar

Images

The Chess Game board printed in the console:

Chess Game console

The Chess Game classes in BlueJ IDE:

Chess Game classes in BlueJ

The Chess Game UML class diagram:

Chess Game UML diagram

Return to Engineering Projects page

Universal Ratchet

Description

A ratchet is a mechanical tool used to tighten and loosen bolts. The problem with a standard ratchet is that the user must always change the socket according to the bolt size. As a result, ratchet users often carry a large and heavy box of different sized sockets. My partner and I reverse engineered a ratchet and improved it by designing a universal ratchet that only has one socket. The improved ratchet was designed and 3D printed with Creo Parametric 3.0.

The universal ratchet works by means of small retractable metal beams in the ratchet's socket that fit around the bolt once pushed against it. With a solid metal used for the retractable beams, the ratchet's socket tightly grips around any bolt size thus allowing the user to tighten/loosen it.

Design Improvements: To improve our design, the number of rectractable beams in the socket is to be increased to fit a wider range of bolt sizes. The design was intended to have many more beams however we were limited by the accuracy of the 3D plastic printer.

Project Files

Universal Ratchet Project Report: Universal Ratchet - Reverse Engineering Project Report.docx

Images

Intellicad orthographic drawing of the universal ratchet:

Universal Ratchet 2D

3D rendered solid model of the universal ratchet:

Universal Ratchet 3D

Return to Engineering Projects page

Home Security System

Description

The Home Security System detects intruders across a door or a window. It was designed with an Arduino Uno microcontroller that is connected to LEDs, push-buttons, photoresistors, a piezo, etc. The system works by means of a wide laser pointing into a series of photoresistors; when the photoresistors detect a sudden dramatic change in light, the alarm is triggered. The system is connected to two push-button keypads; one that arms or turns off the alarm and one that acts as a keypad lock on the door of the house which opens the door after the right combination is entered. The keypads also allow the user to set and change the lock and alarm combinations. They are combined with LEDs and a piezo which react depending on whether the proper combination was inputted or not.

Note: The system was built in 2 modules as I only had one Arduino UNO which did not have enough ports for all the peripherals. Unfortunately, my hard drive broke in 2015 and I was not able to recover all the files on my hard drive including the source code and images of the second module consisting of the laser pointing into photoresistors and activating the alarm if intercepted. Lesson learnt: always back up your files!

Concepts applied: Interrupts, interrupt service routines (ISRs), pulse width modulation (PWM), A/D conversion, circuit analysis.

Source Code

Arduino Keypad Lock code: Alarm_System_Keypad_Lock.ino

Images

The Keypad Lock for the security system with the 0-9 enumerated push-buttons, the LEDs, the piezo, and the stepper motor that opens the door after the right combination is entered. (The alarm keypad is exactly the same minus the stepper motor for opening the door):

Arduino Keypad Lock

Listed below you will find music productions I have completed on my free time. The productions are ordered by date.

Keyano - Blue Light Effect

  • Year:    2019
  • Genre:  Hip Hop
  • BPM:    98

Keyano - Man's World

  • Year:    2018
  • Genre:  Hip Hop
  • BPM:    84

Keyano - RIP Mac

  • Year:    2018
  • Genre:  Hip Hop
  • BPM:    74

Keyano - Pick Yourself Up

  • Year:    2018
  • Genre:  Hip Hop
  • BPM:    94

Keyano - Fetch

  • Year:    2018
  • Genre:  Hip Hop
  • BPM:    106

Keyano - Okinawa

  • Year:    2017
  • Genre:  Hip Hop
  • BPM:    104

Keyano - Dojo

  • Year:    2017
  • Genre:  Trap
  • BPM:    106

Keyano - Bob Snow

  • Year:    2017
  • Genre:  Hip Hop
  • BPM:    90

Keyano - Meteor

  • Year:    2016
  • Genre:  EDM
  • BPM:    128

Keyano - Juno

  • Year:    2016
  • Genre:  Hip Hop
  • BPM:    106

Keyano - Titan

  • Year:    2016
  • Genre:  Hip Hop
  • BPM:    90

Keyano & Teal - Keyan Idea

  • Year:    2016
  • Genre:  Hip Hop
  • BPM:    112

Keyano - Winter

  • Year:    2016
  • Genre:  Hip Hop
  • BPM:    81

Keyano - Dreams

  • Year:    2015
  • Genre:  Hip Hop
  • BPM:    132

Keyano - Ghost

  • Year:    2015
  • Genre:  Hip Hop
  • BPM:    126

Keyano & Teal - Black Market

  • Year:    2015
  • Genre:  Trap
  • BPM:    85

Keyano - Heaven

  • Year:    2015
  • Genre:  Hip Hop
  • BPM:    84

Keyano - Never Look Back

  • Year:    2015
  • Genre:  Hip Hop
  • BPM:    82

Keyano - Rewind

  • Year:    2015
  • Genre:  Hip Hop
  • BPM:    120

Keyano - The Grind

  • Year:    2015
  • Genre:  Hip Hop
  • BPM:    81

Keyano - Smoke

  • Year:    2014
  • Genre:  Hip Hop
  • BPM:    140

Keyano - Full House

  • Year:    2014
  • Genre:  House
  • BPM:    128

Keyano - Infinite

  • Year:    2014
  • Genre:  Hip Hop
  • BPM:    89

Keyano - On A Good Day

  • Year:    2014
  • Genre:  Hip Hop
  • BPM:    94


Education

  • Carleton University Ottawa, ON
  • Bachelor of Engineering, Computer Systems (Co-op) 2015-Present

  • GPA: 11.13/12 (A)
  • Expected Graduation: December 2020

Technical Skills

Languages:

Java, C, Python, Javascript, SQL
HTML, CSS

Tools/Frameworks:

Linux, Git, REST APIs, CMake, bash, Mockito, Swing, AWT, jQuery, Ajax, Eclipse, Jira, Arduino

Work Experience

  • BlackBerry QNX Ottawa, ON
  • Software Developer Student - Self-Driving Car TechnologyMay 2020 - Present


  • IBM Ottawa, ON
  • Software DeveloperMay-December 2018
  • Developed a QRadar extension application to facilitate customer configuration processes for a new product using React and Python
  • Investigated and resolved defects raised by customers and QA in QRadar, an industry leading SIEM platform
  • Fixed and tested XSS and SQL injection vulnerabilities across the QRadar console

  • Ross Video Ltd Ottawa, ON
  • Software DeveloperSeptember-December 2017
  • Designed and implemented new features for Overdrive, a multi-threaded and multi-system Java application, using frameworks such as Hibernate, Swing, AWT, JMS, Google Event Bus, and JUnit and Mockito for Test Driven Development
  • Investigated and resolved issues raised by customers and QA in JSP, JavaScript, Java, and business logic layers of the application
  • Worked as an active scrum team member in an Agile development environment to complete stories and resolve bugs; participated in daily scrums, sprint plannings, backlog groomings, and pair programming
  • Attended and contributed in software architecture and legacy code refactoring meetings

  • Carleton UniversityOttawa, ON
  • Artificial Intelligence Research Intern May-August 2016
  • Designed and implemented behaviors for a robot vacuum in an AI machine learning simulator written in Java
  • Collaborated with a graduate student to compare and minimize the difference in behavior between the expert and learner vacuums
  • Created and optimized algorithms in RoboCup simulator to make software agents find the soccer ball on the field and kick it towards the goal

Hobbies

  • Electronic music production and DJing
  • Working out and playing soccer
  • Competive video gaming
  • Investing/Trading

About Me

In 12th grade, I took a computer course in which I learned the basics of programming and digital electronics. I quickly developed a passion for programming and the science behind it. In order to pursue this passion, I decided to enroll at Carleton University in Computer Systems Engineering.

I am a hardworking and ambitious student with a sound understanding of good software design methodologies. I am always driven to learn new things and improve my work. I hope to one day pursue a master's degree in artificial intelligence or quantum computing.

Follow me on LinkedIn