I do quite a bit of public speaking, and one of things you never really know when you’re up in front of an audience is: “Do they like what I’m saying?” There are all kinds of experiments going on where students can hold wireless devices and anonymously send their “feelings” about lectures to a professor – this is very similar, but more public. What if I could put a device in front of the room, so everybody could see what the general audience feeling is and alter my speech based on the views?
My “day job” is to create an infrastructure for our various business units to be able to perform an analysis of social media content, looking for threads of conversation that may affect some of their business decisions. One of the metrics that most people talk about right away is the general “feeling” of people (sentiment) around a given topic. While its interesting to see that 70% of population view a topic as “positive”, I thought a more visual representation of that sentiment would be interesting to create – a “Thumbs up” or “Thumbs down” view of a topic.
Since Twitter is a real time conversation and there are readily available tools to analyze a twitter stream and produce a result relatively instantaneously I thought it might be interesting to mount a “thumb” on an axle and spin it up for more positive tweets (and down for the more negative ones). Thus, “Thing” was born.
So one of the first tasks I had to deal with was how to make the arm spin. It was easy enough to find a posable hand – but I had to make it spin. Turns out a simple servo works really well. There isn’t too much friction on the arm shaft, so spinning the arm was pretty easy. I simply attached a rubber “O” ring around the arm and around the shaft of the servo and BINGO – spinning arm. One issue that came up was that the “O” ring would slip and the arm positive/negative would get out of sync. In hindsight, a “notched” track would be much better since it could more easily grip the arm. As a poor man’s solution, I wrapped double sided tape around the arm so the surface was a bit more “tacky” and the “O” ring was able to grip the arm a bit better.
Another issue is that the servo only moves from 0 to 180 degrees. That works for an “up” / “down” motion, but a full 360 degrees might make for a better visual of the sentiment.
Today, I watch twitter in real time and send a sentiment score to an Arduino to determine how many degrees positive or negative to spin the arm. There’s still some work to do to “serialize” the results (some get dropped in the time it takes to rotate the arm, depending on how active the topic is). As a result, the next rev of this needs to include some queueing of results so they are all captured.
The first pass at this project simply counted the number of tweets that were made about a topic – the more tweets, the more positive (thumbs up) it would spin. That had some complications with having to “age out” sentiment (so if there was no activity around a topic, the thumb would start to point down, if activity picked up, the thumb would start to spin upwards. As time passes, if conversation goes quiet, the thumb slowly moves to “thumbs down” over time. I think the realtime sentiment gives a better visualization in the end.
In the end this project probably took about 2-3 hours to put together. The hardest part is measuring the holes in the braces that hold up the arm to be sure they were drilled at the same height (hey, if that’s the hardest part of this project, it MUST be a breeze). If you’re not familiar with Arduino’s the Wi-Fi could be a little challenging – but it’s not bad. If you look at my blog, I used an ESP8266 as a Wi-Fi device for the Arduino – using a shield may make your life a little easier and help with the queueing in the future (since all of the network and processing of the tweets will be in one compute node).