NicholasYoung.info
Home Skills and Experience Projects Hobbies Resume
This Website
Making a personal website has been at the back of my mind for a while tempting me to try it, and now I've finally gotten around to making one! I have no prior experience creating a website outside of a couple small experiments with HTML and Javascript, so it was fairly intimidating at first. There were various frameworks I considered to help build my website, but the challenge of making it completely from scratch in pure HTML, CSS, and Javascript was too exciting to pass up. I am also hosting the site myself on a spare raspberry pi using nginx and cloudflare's tunnel service to avoid exposing ports on my home network to the internet. It has been a fantastic learning experience, not just about how to create a website, but about how the internet as a whole works. You can see the full source code for the website on my Github:
https://github.com/Nicholas-Young/NicholasYoung.info
GEOFF
While this was a project done for school alongside two of my friends, I still consider it the most fun and interesting project I was ever a part of. GEOFF (GEsture Operated Fake Firearm) is a modified Nerf turret attached to a mobile chassis, all controlled by two custom made sensor gloves. The left hand controlled the driving by making a fist and tilting your hand, while the right hand controlled aiming and shooting the turret. The aiming could either be done manually by tilting the right hand or setting it to automatically follow a trained target, and the firing was done by making a trigger pull gesture. The tilt control was achieved by using accelerometers and IMUs, and this data was fed to a microcontroller using I2C serial communication. The gesture recognition was done using flex sensors on each finger which changed resistance as they bent. They could then be used as voltage dividers, and the resulting voltage fed into an ADC and sent to a microcontroller. To control the wheel and turret motors, pulse width modulation was used to be able to run them at different speeds as desired. We used a Pixycam to allow for automatic aiming, which is a small sensor which could recognize colors and output the locations of these colors. All three parts of the device were connected over UART serial communication to an XBee radio module so that they could communicate wirelessly with each other.
BrainStorm
This was the other major embedded systems project I worked on while studying at the University of Michigan. I worked alongside 4 classmates to design, build, and program an electroencephalogram (EEG) which could be comfortably worn like earbuds. An EEG is a device which records the minute fluctuations in electric signals in the brain, which can be used to determine information about the user's brain activity. Our device collected this data via electrodes, whose signals were sent to an analog digital converter to be turned into a signal which could be more easily processed. The output of this ADC was sent to a low-power microprocessor running the FreeRTOS operating system, which then sent it to a bluetooth chip. The data sent to the bluetooth chip was wrapped in a command telling the bluetooth chip to send it as raw serial data, to be received by a host computer for processing. To connect everything, we designed a printed cirtcuit board and had it manufactured for us, which we then soldered all of the chips and other required electrical components on to. All of this was powered by a rechargable lithium-polymer battery, and everything was housed in a custom made, 3D printed casing. After all the components were brought together, we were able to successfully demonstrate the device collecting data on activity in the brain and sending it to a host computer to plot this data. A simple demonstration we came up with was having the user relax such that their brain waves fell in the alpha wave range of about 8 to 13 Hz, then having them blink or clench their jaw which caused the brain activity to increase and fall into the beta wave range of 13 to 30 Hz.
LZW Compressor (C++)
As the size of video game downloads continue to grow, I have often found myself stuck with little to no space left on any of the drives in my desktop. One such case gave birth to the idea of simply compressing any files I rarely use in order to save space at the cost of taking longer to open these files. I could have easily used an existing and well respected program such as 7zip to do this, but when the idea of writing my own program to do this came to mind I knew I had to try it. Realistically I would never actually use the program to compress and decompress my files, but I knew it would be a fun challenge to make such a program anyways. I did some research on different types of compression, and decided on trying to implement compression based on the Lempel–Ziv–Welch (LZW) method. I eventually managed to get it working, and while it wasn't the most efficient algorithm ever created, it worked! Most files are unsurprisingly already very well optimized, but when running it on uncompressed text files it can oftentimes achieve a ten to twenty percent reduction in file size. In an ideal scenario (a long file of the same character repeated many times) the result can even exceed a 90% reduction in file size, but this is unrealistic for "real" data. You can view the source code on my Github page here:
https://github.com/Nicholas-Young/compressor
Car Finder (Python)
At the beginning of March of 2022 I was finally looking to buy my first car, but unfortunately due to supply chain issues caused by the covid-19 pandemic there was an extremely low supply of cars. After many calls ended with being told the car I wanted was already reserved by someone, I finally decided that manually searching online every day was simply too slow. And what's faster than a human at this kind of task? A computer! So I got to work writing a python script that would check the websites of nearby dealerships for new vehicles for me at the start of every hour. At the same time I was interested in creating a Discord bot to learn about how those worked, so I combined the two ideas into one project by having the discord bot message me with any vehicles matching the make and model I was interested in. And amazingly, I had a new vehicle reserved for me about 48 hours later! You can view the source code on my Github page here:
https://github.com/Nicholas-Young/CarFinder