07 Jun

Show Me The Code


At this point, we have a working version of the Solar Sunflower: An Arduino equipped with a WiFi shield sends sensor data to a server. Some of you might be wondering where the code is. The short answer is that it’s at our GitHub repository (more on this shortly). There you can find the Arduino code (a screenshot of it is posted above), the Ruby code for the server, and documentation and revision history. We’ll definitely be discussing the project’s technical issues in this blog, but it isn’t meant to be a documentation of our code. The code is going to change many times over the course of this project, and it isn’t always interesting or productive to list every little change here. Go to GitHub.

If you’re not familiar with GitHub, here’s what we wrote in the FAQ section:

GitHub is a website that hosts files for tech development projects. It’s kind of like Google docs for programmers. GitHub allows multiple people to work on code separately, then merge the changes back into one file.  Groups of files (for a certain project, for example) are collected in one location called a repository.

26 Apr

Philly Tech Week 2013

20130425_inq_gelles25-bImage: Philadelphia Inquirer

That’s my co-worker, PWD engineer Chris Bergerson, at the Switch Philly event this week. He got his picture in the newspaper because he happened to be standing near the sunflower at some point. Nice job, Chris. (But for real, thanks to Chris and Tommy Thompson for helping out.) This photo shows the head of the sunflower a little bit better—the Arduino and battery pack are inside a waterproof plastic snap case, with a hole drilled in the back for the sensor wires. We didn’t put a covering over the electronics, because we wanted them to be visible for now. (It also makes it easier to access.)

Chris Nies, Kevin Clough, Jason Blanchard and I did a five-minute presentation and complete demo of the Solar Sunflower. We put the sunflower in a bucket of soil, poured some water into the bucket, and watched (apprehensively—soil moisture is not the most dynamic thing in the world) as the website updated data values in real time. A total success, and we took second place in the competition. Congratulations to the winning team (Temple MESA), a group of students who devised a tutoring application. Here’s some more coverage on Technically Philly.

Here we are at Switch Philly, with the sunflower doing a total eclipse of Tommy’s head.


25 Feb

TechCamp Philadelphia

techcampheaderWhat just happened? This weekend, the sensor project idea got picked up at a hackathon, gained a whole team of technologists, and is on its way to wirelessly transmitting data to a website with a fully functional database. My first hackathon was a blur of activity, and that’s probably an apt working definition of a hackathon. But for accuracy’s sake, here’s the background on this weekend’s event:

TechCamp is a U.S. State Department program that connects technologists (I don’t like this word, btw) to people who are trying to solve social problems. Many of the previous TechCamps took place in cities in developing countries, and as far as I’m aware this is the first domestic event. It’s a sign of the times: Co-sponsored by the School District of Philadelphia and Technically Philly, this hackathon focuses on our city’s public schools and finding ways to use technology to improve education and administration. The two-day hackathon—the part where programmers and software developers work on a project, such as a mobile app for students—was only one element of TechCamp, but it was the part that enabled the Solar Sunflower project to grow some legs.

In democratic fashion, the hackathon at Drexel University’s URBN Center began with people contributing project ideas to a whiteboard; groups formed based on interest and requisite skill sets. (Special thanks to Paul Fugazzotto, from PWD public affairs, for attending the first day and helping to generate interest for the sunflower.) I was lucky to get hooked up with three really talented programmers: Christopher Nies, a Python developer; and Kevin Clough and Jason Blanchard, both of whom do development with Ruby on Rails (more on that shortly). Here’s some of our team working in the foreground this weekend:


After I explained the project and gave some background information, Chris, Kevin and Jason had a plan of attack in place within minutes: We’re going to send JSON packets containing sensor data over wifi from the Arduino to a Ruby on Rails application running on Heroku. You got that, right?

Let’s try that again. The Arduino is going to hook up to a wireless network. In our case, it would be the school’s network (special thanks to School District of Philadelphia IT personnel—Melanie Harris, Phil Ichinaga, Sam Garst—for their support of the project). It’s going to send sensor values in a data structure called JSON, which stands for JavaScript Object Notation. JSON is kind of like the envelope that holds a letter: It is code that encloses the data in a simple, lightweight wrapper that is human-readable and easy to work with. Inside the JSON code you might specify the location of the sensor (site name), an ID for each sensor (soil sensor 1, soil sensor 2, etc.), the actual data value, maybe even a timestamp. The server is then configured to receive the data so it knows what to expect from the packet.

Now the most difficult part (for me, at least): Ruby on Rails. Ruby is a programming language, like Python or PHP or C++. Rails, on the other hand, requires a little more explanation. It is a web application framework that runs on Ruby. Oh right, a “web application framework.” I’m sure the finer points of Rails will reveal themselves in time, but for now I’m satisfied to know that it provides a way to build websites quickly, using less code than other approaches. (Full disclosure: Although I do consider myself a novice at programming, I have experience with HTML, CSS and other website-related things.)

Heroku is a cloud hosting platform. It’s a place to put a website. It’s free, up to a certain point of usage. This makes it a smart choice for projects under development.

Most of the progress made during the hackathon involved getting the server and website set up, programming the Arduino to talk to the server, and wiring up the sensors. Throughout, we had many people—educators, scientists, students—stop by our table to learn about the project. While I mainly preached the gospel about green infrastructure and stormwater management to our many visitors, Kevin, Chris and Jason did the heavy lifting on the tech side. Here’s a shot of our setup:

TechCamp desk

In the photo above, we have three soil moisture sensors wired to a breadboard (a plug-in board that lets you connect circuits without soldering wires) and connected to a Bluetooth shield. We ended up not using Bluetooth to transmit data; to the right of the breadboard is an Arduino and Ethernet shield that provides a better way to connect to the web. (Connecting via wifi is on the to-do list; we just wanted to test our connections to the server and Heroku site.)

Even though I arrived with a duffel bag full of electronics—Arduinos, sensors, breadboards, cables—at one point I had to steal away to Radio Shack to buy the Ethernet shield for the Arduino. It cost around $20. Now, I’ve become a semi-regular customer at various local Radio Shacks since embarking on this project, and I’ve never underestimated the base-level weirdness of the Shack’s clientele. But this time was special: A lady, perhaps thinking I worked at the store, asked me which digital converter box would scramble signals from her TV … because the people from the TV were accessing her brain and stealing her thoughts.

But I digress. Our team wasn’t able to do a live demo of the sensors transmitting data to the web, but we gave a solid closing-night presentation in front of a great audience of educators and the tech community. Best of all, the team resolved to keep working on the project, and we’ll get together at Code For Philly meetups in the future. More than anything, I was astonished at the level of interest and support for this project and hope to keep the momentum going.