My Portfolio

Past, Current, and Future Projects

Autonomous Intersection Simulation & A.I.

Developing and Simulating Self-Driving Car A.I. Without Need for Traffic Lights

Expand

Summary

  • The purpose of this project was to create a computer simulation of a four-way intersection with no traffic controls (stop signs or traffic lights) and then develop an autonomous artificial intelligence such that the self-driving cars regulate their speed and pass through the intersection without any collisions.
  • This 2D simulation was created entirely from scratch in Visual Studio 2017 using C#, and leveraged the MonoGame framework, an improvement to Microsoft's discontinued XNA 4.0 framework.
  • The physics and mathematical details of the simulation were created from scratch specifically for this simulation, with acceleration and deceleration physics derived from data on real world tests of the Tesla Model S.
  • The simulation is incredibly flexible and gives the operator extremely granular control over all characteristics of the simulation. This is thanks to the Vars.cs file which contains nearly 50 public global constants that both the simulation and the AI have access to. This means that the even the thickness and length of the dashed lines on the road can be modified. By drawing the simulation dynamically based on these constants, a myriad of different scenarios can be simulated.
  • What separates this AI from any other existing solutions out there, is that is fully decentralized and autonomous. There is no central server controlling all the vehicles. Rather, each vehicle makes its own decisions using basic utilitarian values such that the efficiency and safety of the intersection as a whole is the number one priority. By making the AI decentralized, there is no risk of having every car on the road crash when there is a failure with the central server.
  • This was accomplished by leveraging what is known as "swarm intelligence" - all the cars intercommunicate such that they knew exactly what all the other car's current states are and can accurately predict where collisions would occur and then decide how to avoid them.

Collapse

Custom Smart Deadbolt

Brainstormed, designed, built, and programmed a smart deadbolt from scratch

Expand

Summary

  • Attaches to my backdoor’s OEM deadbolt and turns the deadbolt lever to lock and unlock door
    • Mounts to the door and deadbolt without any adhesive or mounting hardware that could potentially damage the door
  • Leverages radio modules for communication with smart home controller
  • Powered by an Arduino Pro Mini 5v that drives a high torque TT motor
  • Comprised of 13 different 3D-printed parts
    • Designed from scratch in Autodesk Inventor and 3D printed by yours truly
    • Custom modular design allows for rapid prototyping and iterative design
  • The deadbolt lever has a 3D-printed adapter that snaps around it (no adhesive necesssary) to convert it into one big gear
    • This gear is then turned by the TT motor through a smaller gear with half the teeth which
  • Limit switch senses when door is closed or open - useful for functionality such as preventing deadbolt from being extended when trying to shut door
  • Potentiometer sitting opposite the motor shaft provides two-fold functionality:
    • Acts as an axle of sorts for the gear driven by the TT motor
    • Is a highly precise, non-volatile, axle "encoder" that allows for knowing the position of the deadbolt gear, and can thus infer when the deadbolt is turned into the unlocked or locked position
  • Seamlessly integrates with my custom smart home ecosystem
  • Functionality provided by Smart Home:
    • Automatically locks deadbolt after a minute if it is left unlocked
    • Remote monitoring of whether door is ajar/open
    • Remote monitoring and control of the deadbolt from anywhere, enabling the ability to let guests into home remotely
    • Function that prevents deadbolt from locking for any reason - useful for when you want to step outside quickly without needing your keys or a smarthpone
  • Currently on its 4th major version (V4)
    • V1 was the proof of concept
    • V2 was a more complete prototype, with only small improvements over V2, mostly just improved modularity
    • V3 saw the complete overhaul of the design into a proper enclosure with better modularity and better complexity
    • V4 took V3's complete design and cleaned up the aesthetics considerably, while adding fully realized modularity allowing for the addition of more attachments and sensors
Collapse

Smart Mat Alarm Clock

Alarm clock on smartphone that is turned off only by standing on a pressure sensitive mat for 10 minutes

Expand

Summary

  • This project had 3 different pieces
    • The smart mat
      • Pressure sensitive mat that acts as button of sorts - when stepped on, its resistance drops to nearly zero and allows current to flow through.
      • Raspberry Pi Zero W that runs a python script which sends HTTP requests to the API hosted on my server
        • Sends periodic "heartbeat" POST request every 30 seconds
        • Sends POST request whenever the state of that mat changes
        • Has ghosting/accidental step off prevention - mat's state must change for >5 seconds before POST request gets send to API
    • The alarm clock software and automation on my phone
      • "Wake me up!" Android app provides the alarms that are monitored and triggered by "Tasker"
      • "Tasker" Android app monitors and triggers alarms provided "Wake me up!"
      • The Tasker app is where all of the logic lives:
        • Request current state of the mat (stood on / not stood on) every minute
        • If mat is not being stood on, retrigger the alarm and reset the minutes stood on counter
        • If 10 consecutive iterations (each 1 minute long) occur where the mat is stood on, then disable the alarm
    • The public API hosted on my server
      • Node.Js with Express
      • Receives the mat's current state and filters out false positives
Collapse

Smart Backdoor Auth Panel

3D-Printed access panel that will provide authentication for my custom smart deadbolt using either RFID, fingerprints, or a keypad

Expand

Summary

  • Leverages NRF24 radio modules to connect to my MySensors network which is controlled by my Home Assistant smart home ecosystem
  • Features several methods of authentication that allow for various levels of convenience and security, but regardless of which methods are used, two must be used for any given authentication attempt, creating a 2FA system to significantly enhance security.
  • At certain hours of the day, such as 2am to 6am, can enhance security requirements by disabling some less secure authentication methods
  • Authentication methods will include:
    • 10+ digit pin entered via physical keypad
    • rfid key
    • fingerprint scanner
Collapse

Custom Spotify API Interface & Projects

A monorepo for the custom interface I made for the Spotify web api and the various projects and scripts that leverage it

Expand

Summary

  • Created custom interface for the spotify API that provides a simplified, easy to use library for leveraging various functionality of the spotify API.
    • Various python libraries and packages already exist for the spotify API, but after using them for a few months, I knew I wanted to make my own
    • Reasons for making my own DIY spotify library:
      • The existing libraries felt too bloated
      • Designing and implementing a custom interface from scratch would allow for me to shape it and customize it to fit my needs and use cases
      • I wanted to have my own way of handling authentication for the Spotify web API
    • The "Spotify Jukebox" project is a working concept of a web-app that will act as simplified Spotify app, centered around sharing a common queue of music, the "jukebox", if you will, so that 2 or more users can act as DJ
      • A proof of concept of the jukebox queue has been implemented in the form of a simple CLI
      • The next step will be to build an API to handle the basic functions of the juxebox and then build a web-app as a front end that leverages this API
Collapse

Bedroom Smart Home Arduino Controller

Arduino that connects to my smart home via RF as controller for LED strips, speakers, and more

Expand

Summary

  • Integrates perfectly with my Smart Home Ecosystem via RF module using the MySensors protocol, allowing for easy control from my phone or any browser.
  • Manipulates 3 zones of LED strips, allowing for individual control of RGB color, brightness, and on/off per zone
  • Controls an 20 year old Sony soundbar & subwoofer combo by sending IR codes via an IR blaster, allowing for control of volume and input selection without need for a remote.
  • Detects motion in room and reports this information for use with presence detection and other automations.
Collapse

3D Modelling Sandbox / Showcase

A collection of various 3D models I created over time and want to show to world

Expand

Summary

  • These are all creations that I either made out of boredom or for some personal project that just was not important enough to have its own spot on my GitHub - so they live here now
  • Models that can be found in this collection include:
    • Skar VXF12 Subwoofer
    • Plan for dorm room layout
    • 2 dream monitor layout concepts
Collapse

Freight: A Custom CSGO 5v5 Defusal Map

Map That I Built From Scratch for Counter-Strike Global Offensive

Expand

Summary

  • This map takes place on an abandoned ship yard, full of empty freight containers stacked several high, forming large valleys with only two large cranes poking above the looming walls of containers.
  • Both sites for this map are centered around these two cranes which make for interesting site layouts, as well as making navigating to both sites intuitive from nearly anywhere on the map by just looking up.
  • The true uniqueness of this map comes from the abnormally high number of different paths to and from each site.
    • This can easily become unwieldy, making it nearly impossible to predict how the enemy will arrive at the site, thus making defending the sites a nightmare to defend against.
    • To balance this, there is an explicit risk vs reward for each pathway.
  • This project has been inactive on the backburner for about a year, but will be picked back up during spring of '22.
  • Thank you to my pal KJ for all the help with both guiding the artistic vision and tweaking the layout of the map, as well play testing and then helping decide what to revise afterwards.
Collapse

Fully Upgrading My $40 RGB Mechanical Keyboard

Breathed new life into my ol' reliable mechanical keyboard with all new switches, keycaps, and sound-dampening foam.

Expand

Summary

  • Replaced the old and crappy Outemu Red linear switches with Gateron Clear linear switches
    • Removed all the old switches, then desoldered all ~150 hot-swap sockets which were too small for the new switches, and then soldered in all the new Gateron Clear linear switches.
  • Replaced old keycaps with OEM profile blank fog-white keycaps. Stayed with OEM profile so they keys would be the same shape as the old ones.
    • Transfered all of the o-rings from the old keycaps to the new blank fog-white transluscent keycaps to make the new switches even quieter
  • Fully cleaned the plate and case, added sound dampening foam to inside the keyboard, and added dampening tape to the loose and wobbly stabalizers to reduce noise.
  • Had to do 6 pcb trace and throughhole repairs due to damage sustained from desoldering and resoldering since to the pcb is super cheap and this was one of my first proper soldering experiences.
  • Took roughly 25 hours and 300 solders. Worth it! Looks and feels infinitely better.
  • Keycaps used: PBT OEM Fog White Keycaps
  • Switches used: Gateron Clear Linear Switch Plate Mount 35g Actuation Force
Collapse

Handwired One-Handed Gaming Keyboard

Ergonomic one-handed mechanical gaming keyboard with thumb cluster and multi-layer keymapping powered by QMK and an arduino pro micro, all fully handwired

Expand

Summary

  • Keyboard layout is a Dactyl Manuform 5x6
  • 3D printed by yours truly with white PLA
    • Took ~72 hours to print on high detail/resolution settings (0.12mm layer height)
  • Used QMK firmware to create custom firmware
  • Switches Used: Gateron Clear linear mechanical switches
  • Keycaps Used: Transparent DSA profile keycaps
  • Handwired used 1/4" copper tape, 1N4148 diodes, and 20AWG wire, with a different color wire being used to interconnect each column
  • 3D model used was not designed by me. It can be found in GitLabs here: Dactyl Manuform GitLab
Collapse

Tetris Min-Max A.I. & Custom Simulation

Creating a simulation of tetris from scratch to host/run different AI that I developed, and is also playable by a user via keyboard inputs.

Expand

Summary

  • Created an accurate and faithful Tetris simulation using Python and the Tkinter interface that is playable by the user while also easily and seemlessly interfacing with the AI
  • Goal was to create a basic single agent online AI that can clear several levels on average as well as score well before inevitably losing
  • Two different AIs were created, trained, and evaluated to examine if increased complexity in the AI is directly related to improved performance
  • Overall, both AIs functioned relatively well, but were wildly inconsistent - About 1 in 10 trials would result in the AI failing to even score a single point or it would score in the hundreds of thousands, clearing anywhere from levels 9-13
  • In the end, the less complex algorithm was faster with near identical performance
Collapse

Custom Under-Couch Subwoofer Enclosure

Creating a fully custom low-profile dual chamber MDF subwoofer enclosure powered by dual 12" drivers and a car subwoofer amplifier

Expand

Summary

  • Built a fully custom low-profile, dual chamber, sealed subwoofer enclosure designed specifically to fit under the couch in my dorm room
  • Used all car subwoofer components for better customizability, compactness, power, and cost effectiveness than traditional home theatre subwoofers
  • Constructed of one 4'x8' sheet of 3/4" MDF, held together by wood glue and wood screws, with 2x2s in each corner of the champers for reinforcement
  • Speakers are driven by a car mono amplifier that can deliver 400W max @ 2ohms, which is powered by two 15A 12V (300W) DC power supplies which convert the AC current from the wall into 12v DC which is required by car audio components
  • Designed specifically to fit underneath the couch in my dorm, the enclosure measures a mere 7.5" tall, then a humble 9" tall - even with the subwoofers installed
    • Despite the extreme height restriction, each chamber provides the recommended ~1.2 square feet of internal volume per driver
    • Outer dimensions of the enclosure: 36" x 24" x 7.5"
  • Sporting two Skar Audio 12" VD12 DVC shallow mount subwoofers, convservatively rated for 500W RMS a piece
    • They are 2ohm DVC (Dual Voice Coil) subwoofers, so the voice coils are wired in series to give each driver a net resistance of 4ohm
    • Then the two drivers are in turn wired in parallel to create a net 2ohm resistance for the whole circuit, the minimum resistance the amplifier can handle, thus maximizing its power output
  • The two 12" upward firing drivers, located mere inches below the listener seated on the couch create an otherwordly, immersive listening experience. Additionally, the subwoofers move enough air to make the couch vibrate and shake, making movie watching an absolute blast
    • Since the listener is at most a few feet from the subwoofer, almost no volume is required, minimizing the chances of disturbing our neighbors
Collapse

Think Nexus Design Website

Commercial Website Developed From Scratch using HTML, CSS, and JavaScript with jQuery

 Expand 

Summary

  • My first full-fledged website. First commercial website, first fully responsive website, and first public website.
    • Developed from scratch using HTML, CSS, JavaScript, and jQuery.
    • Developed from scratch using HTML, CSS, JavaScript, and jQuery.
      • Developed from scratch using HTML, CSS, JavaScript, and jQuery.
      • Developed from scratch using HTML, CSS, JavaScript, and jQuery.
  • Made website fully responsive using breakpoints for the four different general categories of screen sizes: mobile, split screen, HD desktop, and Full-HD desktop.
  • Published initial site at the end of 2016 and have been slowly upgrading ever since.
  • Released major update, site V2.0, in 2019 giving the website a completely unique mobile site layout, featuring an entirely different taskbar and footer from the desktop site.
Collapse