Tableau Poll 2018: How it’s Made

For the fourth year running, the Tableau Poll makes its showing at Tableau Conference 2018. What makes it so fun? Is it the satisfying button push, the animated rainbow swirl, or maybe the two-tone xylophone “DING” sound effect? Or maybe the real-time updating bar chart that animates immediately after your push?

Hi, I’m Joel, a web developer at Tableau. I love making interactive things with lights, sound (and hopefully motors, soon). Combining my love of data and hobby electronics, I created the Tableau Poll and released the first version at Tableau Conference — TC15—in Las Vegas at the MGM Grand.

In this blog post, I’ll describe in detail what makes the poll tick.

It’s All About the Button

People love to press buttons. I chose the jumbo dome push-buttons available at online retailers (like Adafruit). The stock buttons come with a single, non-programmable LED, which is okay, meh. Could be better. So I decided to add programmable RGB LEDs inside—as many as I could fit. I found a 24-pixel ring on Adafruit and decided to give it a go. The overall effect is great!

Button Components

There’s a few things that go into each button of Tableau Poll, in this iteration: the Arduino compatible micro-controller with radio transmitter (to make it wireless), a 24-pixel LED ring, a lithium ion battery, and the “massive arcade button with LED — 100mm” that I modified to work with the light ring.

Another part that I ended up needing was a bi-directional logic level shifter that converts the 3.3V output to a slightly higher voltage, in my case around 3.7V to get the Neopixel ring to actually illuminate properly. I had some sitting around in my parts bin, but you can easily find those, e.g. the TXB0104.

Button Assembly

I don’t have the schematics but the wiring is pretty simple.

The Feather (Arduino) has an input (with pullup resistor) for the button switch and a data output pin (connected to the logic level shifter, passed on to the Neopixel ring). There are also wires connecting to 3.3V (for the logic level shifter), GND (to the other leg of the button switch, the logic level shifter, and the Neopixel ring’s GND), and BAT (to the logic level shifter, and the Neopixel ring’s PWR).

The logic level shifter has four connections: Arduino 3.3V, Battery 3.7V, Data (from Arduino), Data (to Neopixel ring).

Everything wired up with the battery plugged in
5 buttons ready to go!
24 programmable RGB LEDs fit inside each button., pulsing to the sine-wave beat of 90 beats per minute.

Fitting the Button on a 4" Aluminum Pipe

This year we used 4" aluminum pipes which make for a pretty decent fit. I ended up adding some hot glue around the plastic collar of the button to get a nice friction fit. As you can see from the sketch below, the ID/OD (inner and outer diameters) are matched up about as well as you could hope for with off the shelf products, and the aluminum pipe is quite sturdy.

The buttons almost cover the entire pipe. Good enough.

Wireless vs. Wired

One major change this year was using wireless transmitters inside each button instead of a central Arduino micro-controller with a bunch of wires. Wireless was fairly easy to get installed once I arrived at the venue, and it will probably be easy to reuse these in impromptu installations (e.g. conference room voting in plastic cups).

However, going wireless wasn’t perfect. It requires batteries, and batteries have limited capacity! They can last about 13 hours on the 2000mAh capacity battery, which is awesome, but means it needs to be recharged every evening.

Making the Buttons Interactive

Similar to previous years, we used the same web application that I wrote from scratch. Unfortunately, it’s not open source, but, it’s not too difficult to roll your own implementation. If you do, send me a link!

The gist of the poll is: detect the keypress from the buttons (I used the built-in keyboard emulator capability of the Feather), capture that data into a database of some kind (we use Firebase), and display the data in a fun, interactive chart! We use HTML+CSS to style everything on the application, and every 15 seconds, we display a new question.

Results of the Poll

Check out the 2018 Tableau Poll results on Tableau Public.

Questions/Comments?

Let me know what you think! Thinking about building your own poll? Several of you asked me how it works, so I was inspired to share some behind the scenes photos of how I built the buttons. Hope you found this interesting.