I stumbled into the design world kind of by accident back in March or April. A flyer mysteriously showed up in my mailbox advertising a seminar on presenting data by Edward Tufte, to be held in April in Boston. It turned out that I had a schedule conflict and couldn’t make the seminar, but it got me thinking about how much I like to play with the visualization of data, and about graphic design. I did what I always do when I discover a new interest; I did a Google search, and subscribed to a bunch of blogs.
Over the next few months, I saw lots of projects that interested me, and started to get a better idea of what “data visualization” meant, as a discipline. The moment when “this is cool” turned into “I want to do that” came when I found the Fathom website. Their combination of story, design, and data analysis sparked a level of interest that I haven’t felt in quite a long time. I had to know more.
So, I emailed and asked for a meeting. (Yes, I was that crazy.)
And they said yes!
I met for about an hour with one of the designers at Fathom. (Whose name I will withhold because I don’t know if he’d want it shared here.) He suggested several things that I might do to move my career toward their kind of work, and one of them was to learn Processing.
Processing, if you are not already acquainted, is a programming language designed for non-programmers, and is intended to be particularly useful to designers and artists. It is also very, very cool in what it can do.
However, I am not a computer programmer. I’ve programmed before, in several languages, and it’s just never stuck. Hunting down random variable errors is not something that makes my heart go pitter-pat. I suppose that this makes me the target audience, but mostly the idea of programming for work just made me question my sanity.
I played with some tutorials. I poked at writing some code. But there was nothing drawing me into studying Processing in a way that would actually get me any useful level of skill.
So, I invented a new project.
My husband Branden is an electrical engineer, and does electronics as a hobby. We like to work on projects together, and this seemed like a good opportunity for collaboration. I would handle the code side of things, he would build the electronics, and together maybe we could come up with something cool.
At the beginning, that was pretty much the entire shape of the idea: “Do something cool.”
Of course, you have to have a little more definition than that before you can roll up your sleeves and get to work. So, a couple of weeks ago I spent some time looking through the Processing examples library, to figure out what was possible. Links to some of my favorite examples are pasted below:
Of the projects that I looked at, I was most drawn to ones that involved light, interactivity, and sound. Generative drawing programs were also really appealing to me.
With that slightly tighter focus, I went back and talked to Branden again. Could we do something with LEDs, and maybe interactive touch? That seemed like a relatively feasible place to start. So, we started brainstorming there.
I came up with a couple of ideas for things that I could probably do, based on my current knowledge of Processing, and quite a few that would be a real stretch for me programming-wise. We settled on an LED grid to start with, with some as-yet-unidentified touch sensing capacity. (Multi-touch would be nice, please.) Branden whipped up a prototype LED board with a single LED and an Arduino processor, and I learned how to write to the serial port and set up an Arduino to receive information. This got me to the point where I could turn on a little blue light. (This is very exciting.)
After a bit more playing, I could also turn it off again. (Equally important.)
Since then, we’ve split our efforts a bit. Branden is working on figuring out costs for all the electronics and choosing the best method for touch sensing. I am trying to figure out what on earth I’m doing in Processing. Somehow, I have a feeling that he’ll be done a lot sooner than I will.
I pretty quickly managed to set up a grid of rectangles, fill them with random colors, and draw them to the screen.
That was great, but it was also a long and utterly inefficient way of programming. So, last weekend I dove deeper into the nitty gritty of data structure and learned about writing arrays, defining objects, and object-oriented programming. (Still working on that last one.)
Now, I can stuff a whole bunch of rectangles in an array, and then write them to the screen all at once. (Believe me, this is an improvement.) I still can’t do anything fancy once I’ve gotten them there, but I’m working on that. One step at a time.
Yesterday, Branden presented me with a slightly fancier LED prototype. Now I have 8 lights to turn on, and they can be different colors, depending on the data that I send. Yesterday afternoon was spent trying to figure out how to take a parameter that defines an object out of an array, turn it into a string without also including its address, and send it over serial to the Arduino. If that sounds obtuse and not particularly fun to you, well…know that it feels that way to me, too.
In the end, though, we did end up with a blinky light. In fact, we had a whole string of them. That was fun.
Sorry you can’t really see the individual LEDs here. They are all different colors, which you can sort of see reflected off of the surface of the table, but they are also blindingly bright. There’s a piece of printer paper taped over the top of them as an eye guard, but even that wasn’t enough to let the camera distinguish colors. Note to self: figure out how to turn the LED brightness down!
Sadly, the blinky lights still appear to blink in a mostly random way, which isn’t quite what we wanted. (We were hoping for control, not anarchy.) So, that still needs some work. But, we are inching our way toward a blinky LED display, once I figure out how to write the data in a way that those finicky little LEDs will accept.
We’re also about halfway done defining a protocol to turn images made in Processing into code for the LEDs. Once that’s sorted out (and when I figure out what kind of data to send), I will have all the power.
Check back in a year or so…we might be getting close by then. =)
1 thought on “LED Grid: To learn a programming language”