Pretty much bang on a year ago was a pretty hectic time for me. I had lots going on, travelling for work, planning a secret wedding and hacking together something that could track 40 or so people around an indoor space.

Lubi and Truna from QUT run a 48 hour game making challenge. This challenge is held out on the QUT Kelvin Grove campus, with amateur and professional game developers from the Brisbane area descending on the campus to build an original computer game from scratch in only 48 hours.

In the past they had set up webcams for live streams of common areas like the kitchen and main development halls. But last year they had also wanted to track the movements of challenge participants as they moved around during the competition. The catch? We only had a month to implement it.

Lubi and Truna had heard about the work Luke Atherton and I had been doing with the Microsoft Kinect and thought that maybe we could adapt it to track people moving around in the development halls… Unfortunately that approach wasn’t going to work. The Kinect has an effective range of about 4x4 metres while, the indoor spaces were about ten to twenty times larger than that. We needed another approach, one that didn’t require everyone carrying custom tracking equipment.

It was about this time, I started brain storming with Luke. And a whole bunch of concepts started to clump together. It was going to be possible, it would be an awfully tight schedule but with a bit of luck we might be able to pull it off.

Everyone carries mobile phones these days, most of them are ‘smart’ and can run apps, but we didn’t want to make people install stuff on their phones. Nope. Smart or dumb, everyones phone has bluetooth, and we wouldn’t need to install anything on the phones we were tracking if we used bluetooth.

Bluetooth only has an effective range of 5 to 10 metres. So we decided to build an adhoc bluetooth cellular network and use that to track the bluetooth signal of peoples phones as they moved around the place.

A diagram showing the main components of the tracking system

We used cheap android handsets as the ‘towers’ for the network and placed ten of them around the venue. Our tower handsets ran a small android app to scan the cell for people carrying their own bluetooth equipped phones. The problem of course is that security on bluetooth is fairly tight these days, and very rarely is a device discoverable. So each of the towers needed a list of mac addresses for the bluetooth devices that are currently hiding around the venue.

So Luke put together an awesome registration application that he wrote in .net. When someone signed up, they simply put their phone on discoverable briefly and Luke’s registration app scooped up the mac address and pushed it up to a tracking server I had written in Ruby on Rails.

The central tracking server now had a list of all the device addresses we wanted to track around the venue. The tower application pulled this list down and would start dialling the addresses. “Yo 02264BBC4E3A are you here?" The bluetooth device didn’t need to be discoverable, just switched on. If the tower found the device it push a tracking message back to the central tracking server “02264BBC4E3A just arrived at Tower A." if a device that was in the cell disappears, then the node would tell the central tracking server “02264BBC4E3A just departed at Tower A."

A photo of a smart phone duct taped to a wall.

One of the bluetooth towers, photo by Lubi Thomas.

The central tracking server would collect all these arrival and departure breadcrumbs, timestamp and piece them together into a tracking history for each of the people.

It was a hectic build that I really enjoyed. We ran into a couple of problems with our tower application needing to be restarted every hour or so. But we still built up a pretty impressive tracking history for 40 or so people and hacked together the whole system in our spare time over a month. It would have been great if we had a bit more time to spend on this one, we have heaps of ideas on other performance improvements and visualisations for the front end.

You can find source code online for:


You can join the conversation on Twitter or Instagram

Become a Patreon to get early and behind-the-scenes access along with email notifications for each new post.