Monday, November 24, 2014
Balsa Bridge
Since I'm not a trained structural engineer, I thought it prudent to do some testing. Based on various designs on a truss simulator (http://ivanmarkov.com/truss-simulator.html), I decided upon my overall design.
Since there's no kill like overkill, I also added in a bit of 'secret sauce' - Titebond-3 ultimate wood glue in a precision applicator bottle, hot glue on the bottom of the supports to provide friction, Pitsco Lumberjack cutter for precisely angled cuts, and the basic cardboard covered with parchment paper and straight pins to assist with the gluing process.
While the bridge only ended up holding about 30 pounds, it still put on a decent showing of ~600x it's own mass - and there were quite a few good explosions. For your viewing pleasure, the destruction reel.
Monday, October 13, 2014
Raspberry Pi Conference Room Schedule Display
Monday, September 29, 2014
Nerf Escalations
Thursday, September 25, 2014
DMX Lighting Control Application - And Then Some!
I've always had a love for stage technologies - pro sound, stage lighting, all that good stuff. Once I got a real job, I was able to start getting some of my own equipment to use on the side - soundboards, speakers, and stage lights. The next logical step (well, to me anyway) was to use those stage lights in my apartment instead of normal things like lamps. They're all RGB LED fixtures (that is, each contains red, green, and blue LEDs in an array) positioned on the floor pointing up at the wall, so they give off a nice indirect, diffused glow. The lights are all controlled via DMX (standard stage lighting control), so logically, I needed to make an application that would control them using a USB to DMX interface.
I started off with a very modular setup from the outset. I set up a database that allowed for configured Light Types (each fixture has a specific way it needs to be controlled, as certain number of DMX channels it requires, etc), Lights (the actual devices, with their associated Type), Groups of lights, and Scenes (conglomerations of groups and their lighting state, like bright red). I made a super-simple Windows Forms application to be able to configure all those settings in a tabular format. Now that I had information about all the lights and their current state when various things happened, I was able to build a 'universe' of information about what value every DMX channel needed to be configured for in the current setup. Using a USB > DMX interface with an API that plays nicely with C# (http://www.amazon.com/Velleman-VM116-Usb-Controlled-Interface/dp/B001IRMFUW, using K8062D.dll), I was able to commune with the lights to my heart's content.
Except the heart wanted more. The nest step was to make the application web-accessable so that I could set the lights from my phone. Obviously. So, I updated the application to host a REST endpoint that allowed it to load requested scenes. I then created a simple PHP web page that connected to the database, retrieved a list of all configured scenes, and then displayed them on the screen as big buttons that, when clicked, triggered a call to the application's service endpoint to enact the change. Simple, and highly effective - my lights were now mobile-friendly! And I saw that it was good.
And yet, there was something missing. Sure, it was nice being able to take out my phone and set the lights, but shouldn't they be able to do that themselves? I added a new tab to my rapidly growing application for Schedule items. These had information about what Scene should be triggered, at what time, and on what days. Once set up, my lights turned on a bright white in the morning when I was supposed to be awake (during the week, that is), green when I should start heading out, red when I really-no-kidding-for-realzies need to leave, then turn off when I sure as heck should be out of the house. They then turn back on a nice bright white just before I get home in the evening, a soothing blue when I need to start heading to bed, and turn off when I should be falling asleep. And thus, the lights gained a speck of artificial sentience, and my heart was happy for a time.
But alas, one cannot stem the torrent of need from the heart. Yet another use case presented itself that seemed to be a wonderful fit for my little application. One of my good friends was getting married, and he asked if I could provide sound and lights for the reception. Never one to go into something halfway, I added to grant the application the ability to function as fully automated DJ. I added a new tab to the interface for Songs. Each song had an associated lead-in and end buffer (to trim out introductions and fade-outs to keep the party jammin'), as well as it's own scene (yep, I made a scene for each song). These are mostly empty because I cleaned the lists out for everyday use.
Once started, the application cross-fades through each song in the list (using WMPLib.WindowsMediaPlayer objects), fades the lights from one scene to the next, and in general takes care of itself. It also allowed for skipping and re-ordering songs (which, for those of you who have never played the role of music selection master, happens. A. Lot.) There were a couple minor glitches like songs repeating, but in general, it worked out quite nicely, and allowed me to enjoy the reception as well.
What's next for Moody? Who knows - the heart is a fickle organ; you can never quite tell what it's going to pine after next.
Sunday, May 9, 2010
Grid Mark II
Monday, February 15, 2010
8-Switch Panel
Saturday, January 30, 2010
LED Grid
This project is something that I have been working on for the past 3 years, and was finally able to finish a couple months ago. I got the inspiration for this project from a swimming pool jumbotron that had groups of 4 LEDs that combined en masse to create a giant screen. I figured that if I could control 8 channels from the parallel port, I should be able to figure out something to control more channels to make a rudimentary screen with 3-color LEDs. I started on this project with the application that was to control the grid. At this point, I had no idea how i would get the data to the screen itself or run that, but to start I needed something worth putting up. I started with some very basic designs that wiped a bar any number of pixels wide up, down, left right, diagonally etc around the screen to learn the logic. Then I combined them to make more designs with multiple colors and patterns. After the designs, i made an alphabet and created a marquise that was user-settable, and images that could move across the grid. While working on the computer, I had a process running that emulated the box by outputting HTML representing each light to a file and showing that page in a control in the UI that refreshed several times each second. Additionally, I found a control that someone had made that gave the overall sound output level of the computer (http://www.codeproject.com/KB/directx/volumemeter.aspx?df=100&forumid=328840&exp=0&select=1956575). I created an algorithm based on that to figure out what the beat of the song was, and them made an option to have the pattern change color with the beat.
After I had the software portion pretty well started I began work on the grid itself. I had read a good bit about how LCDs were made and how to control 12 LEDs x 12 LEDs x 4 leads = 576 channels, and was aware that I had to multiplex the display. Multiplexing consists of activating one row at a time and cycling through them extremely fast, taking advantage of the human eye's persistence of vision to make it appear solid. Because of this, I could take the number from 576 to 48. soldering so many LEDs, however, could have very easily gotten to be an absolute mess of wires, so I did what you can see below in the pictures, which I think is rather pretty. The RGB lines go across, and the anode lines go vertically, and they all go to a block connector that has a ribbon cable connecting it to the breadboard with the electronics, allowing it to be worked on much more easily. The LEDs are mounted in a piece of plexiglass every inch, in holes that I drilled, then hot-glued in. This was ultimately mounted into a box with a frosted piece of plexi in front of it, which gives them much better dispersion and makes it look like solid light instead of many small points.
The circuitry was the reason that the project took 3 years to complete. Since there was no way that I was going to be able to control 48 channels with a parallel port, I found a microchip that could control 24 LEDs (or channels as I used it) by feeding it a signal with a clock, then latching it in and grounding the pins that were given a high signal to complete the circuit to attached LEDs (http://www.allegromicro.com/en/Products/Part_Numbers/6276/). Stringing three of these together gave me the 48 channels that I needed, so that was a step in the right direction. Since 12 of the channels needed to be power supply rather than ground, I added an array of 12 PNP transistors that gave me the functionality I needed for that.
All this was completed my sophomore year as well, but this was the point at which I got stuck. In order to feed the LED controlling chips data to multiplex the array at all, I had to have something with the capability of sending out the required signals, and then would be able to interpret a signal from the computer with what it is supposed to display. At that time, the only thing that I and anyone I talked to could come up with to serve that purpose was a microcontroller. I had absolutely zero experience working with anything like a microcontroller, however, so after many hours trying to work that out, I shelved the project.
A few months ago, I was talking to a friend about his senior design project for Electrical Engineering, and he mentioned a chip that was a USB controller and gave 8 pins of control at high speed to a breadboard and had a C# plugin allowing it to be used with almost no effort (http://www.ftdichip.com/Products/EvaluationKits/UM232R.htm). Immediately, I recognized that this could eliminate the need for a microcontroller and allow me to finish the project; I ordered one the next day. The time from when I received the device to when it started working on the actual grid was only a few hours, which I think is pretty awesome - most of the code I wrote with very little testing and the circuits I designed with no history of circuit design or way to test them worked perfectly. It took a few tweaks on the code and device, but it is now working great. The only functionality that is not working is the volume level control; for some reason it is not registering any sound, and I did not design the control so I can't really debug it very well. I built a basic container for it with the frosted screen and all, and eventually may put it into the top of a bar. This works in a manner very similar to how the 8-switch panel sends out data; it converts Booleans to a number which is sent out to the USB/pins controller and is outputted giving the proper pins signal.















