This page presents a gallery and short description of some of the projects I’ve done, arranged in mostly chronological order. If you’d like more detail on any of them, please contact me.
I have always liked the 1970s flip clocks, so when I find one at a thrift store, I usually buy it. I ripped out the split-flap mechanism from one of these clocks, connected it to an old floppy disk drive stepper motor, hooked that up to a microcontroller, connected it to my computer, and made this video.
I have started making my own ‘smart alarm clock’ using this to display the time, along with an AC light dimmer to emulate sunrise, a WWVB receiver for time sync, mp3 player for backup alarm, sensors to detect if I’m actually awake, and a wireless accelerometer for actigraphy. I’ve finished prototyping some pieces of this project (the display, the sunrise alarm, the contact sensor to detect if I’m still in bed, and the microcontroller), and am still researching/designing the remaining circuits before I start laying out a PCB (Skills: circuit design, soldering, embedded C).
This project started as my senior design project, that I worked on along with Cory Merkel. After that was complete, a few friends and I continued to work on it, eventually replacing the gun Cory and I built with an airsoft gun that was less painful when it hit you and lighter. I do not have any videos of the final version of the project, but I do have a couple of the original compressed air gun that Cory and I built.
The final project detected, tracked, and fired at moving targets with very satisfactory results (C, GTK+, OpenCV).
I reverse engineered a Java applet that controls RIT’s public-facing webcams, wrote a cronjob script to adjust the camera frame location, capture the frame, and produce a timelapse video. One such video is shown in the Youtube clip below.
Unfortunately, the servo motors in the camera aren’t as precise as I’d like. To fix that, I could have tried image stabilization post-processing or some snazzy computer vision control loop to perfectly adjust the servo motors. But, that was all a bit beyond the scope of this project’s half hour development cycle (Skills: reverse engineering, shell scripting).
Over the summer of 2010, a few friends of mine became interested in trying out blacksmithing. Using a few fire bricks, some lump charcoal, and modified hairdryers for blowers, we successfully made a set of tongs out of stock steel.
Some day I hope to either use or build a proper forge.
Using a Netgear router and a stereo boom box, installed Linux on the router, connected USB sound card, wired to the boom box, and configured system to automatically connect to available open wireless networks and play streaming music over the internet. (Perl, Bash, C++). More Details... (Skills: embedded scripting, GNU/Linux, soldering)
My friend, Bryan Goldstein, and I made a computer-controlled system to take a picture with a camera and draw it on an Etch-A-Sketch. Most of my effort went into interfacing the etch-a-sketch with the stepper motors and computer. I wish I had taken more pictures and video of this project, since it was pretty cool to see. We entered the project into ImagineRIT and were featured on the local news as one of the “cool things to see” at the event. You can watch the 7 second clip that made it to broadcast.
For my Digital System Design class we were given the option of implementing our own independent project. I chose to make a clone of the Matel electronic Simon memory game on a Spartan-II FPGA development board. I used VHDL and Xilinx ISE on a Digilent Basys development board. I learned a lot as a result of this project and had a lot of fun doing it (Skills: VHDL).
Implemented a median filter and histogram algorithm on a FPGA Spartan 2 Development Board. The FPGA connected to a PC via parallel cable. The PC sends a PGM image file to the FPGA. The FPGA stores the image on an external ram chip. Then, the PC sends a command to start processing the image. The FPGA processes the image, writing the result back to memory. The PC program then requests the image from the FPGA and displays the processed image on the PC monitor (Skills: VHDL).
The point of the project was to implement a complete automatic data acquisition system. Specifically, it monitors and reports a human’s heart rate. The system works using an opto-isolator that emits IR light through an LED that is then picked up by a photo transistor. So, for the heart rate sensor, a human finger rests on top of the opto-isolator that produces a varying voltage as a result of the blood flow through the finger. The signal is then passed through an amplifier and low pass filter to condition it for the microcontroller. The signal was connected to the ATD of an HCS12 microcontroller programmed to calculate the heart rate and display it to a PC monitor via serial connection. More Details... (Skills: circuit design, embedded C)
Led a team of three of my classmates in developing an education game intended to teach first through fifth graders how to spell (Skills: Java).
Implemented an abstracted puzzle solver in C++ using a depth first search algorithm. Implemented three games that used the solver to determine moves for the AI (Skills: C++).
Over the summer of 2008, I drove across the country (CA to NY and back). On my way back, I thought it’d be cool to take a bunch of pictures to show my family/friends. I also wanted them to know my location as I progressed. Since I was going to be driving half the time and sleeping the other half, I wanted all of this to be done automatically. Using my camera, my laptop, and my phone, I implemented a pretty hackish Perl script to accomplish this. The script, running on my laptop, would send commands to the camera via USB every 10 minutes to take a picture, grab the location from the phone’s GPS to geotag the image, and upload the picture to my website via my phone (tethered to the laptop). It worked fairly well, except the camera’s implementation of the USB-PC control interface was spotty at best. I used CHDK on the camera and gphoto2 on the laptop to take pictures. I never fully debugged what the problem was, but every so often the camera would freeze and I’d have to disconnect and power cycle it. That proved to be quite a pain, so I ended up taking the pictures myself (programmatically using CHDK) and using the laptop to upload them manually. I also used twitter and my phone’s built in GPS to update my location every hour. Next time I go on a road trip, I’ll try this again. But, with modern smartphones, I’d imagine it will be much, much easier and 100% automated (Skills: Perl, CHDK scripting).
Late 2006 into early 2007, Twitter was becoming very popular among my friends. So, I decided to display CSH member tweets on our Infosys BetaBrite LED marquee display. I wrote a script to check the most recent CSH member tweets and display them. This was surprisingly easy to do, but also a bit useless once the novelty of seeing your tweets appear on the screen wore off (Skills: Perl, internet service APIs).
There’s plenty of other projects that I’ve done. Some of them are on my github, others on my blog, and I’m sure a few are sitting, forgotten, in my closet.