Project tutorial


Adventure is Out There!

  • 1 comment
  • 11 respects

Components and supplies

Ard yun
Arduino Yun
The microcontroller for Russell. The Yun is able to send POST requests, whose response is the RGB values used to draw a badge.
Adafruit Ultimate GPS Breakout Chip
This chip gives us the GPS coordinates that we send via POST request.
Adafruit Powerboost 500 Basic
This regulates power from a LiPo battery to power the GPS, NeoMatrix, and the Arduino.
Adafruit NeoPixel NeoMatrix 8x8
This is the board we use to display badges.
Vibrating Mini Motor Disc
This is used to add haptic feedback upon receiving a new badge.
LiPo Battery
a 2100 maH battery powers Russell.

About this project


Complete with an explorer sash and an accompanying iOS app, Russell is the ultimate adventure buddy. First, the explorer draws a personal “badge.” The explorer’s daily path becomes an adventure-filled journey full of collectable badges from both places and people — landmarks and fellow explorers wearing Russell. When an explorer is close to a participating place or person, Russell lights up and displays the place or person's badge. The new badge is also added to the explorer's collection within the app. At the end of the day, you can re-live the adventure with the app, tracing the path you took and the badges you collected on a map.

Russell in action

Video: Jon & Russell

Describing Russell's motivation and user interaction, our video is a heartwarming tale of a Berkeley student named Jon, who is bored and unengaged in his life. All this changes when he meets Russell. He puts on the explorer sash and his daily routine is transformed into the ultimate adventure... 


The 2009 Pixar film "Up" brought us Russell, a wildly eccentric, somewhat annoying, but always loveable character. Russell is a junior wilderness explorer hoping to be promoted to senior wilderness explorer. However, he is missing the “help the elderly badge”. At first, he just wanted to satisfy the badge’s requirements by helping his neighbor Mr. Fredrickson, but he ends up befriending the old man and having the experience of a lifetime.

Russell and the story told in "Up" teach us an important lesson. Too often, we move through our day in autopilot. We mindlessly check off tasks on our mental to-do list, unengaged with the people and places around us, quickly forgetting who we saw or what we did. We are just trying to “earn our badges” without really paying attention to the experience that goes into it. Life is about exploring the everyday, being present in what might seem monotonous. There is so much to discover on our daily journey! We created a device that makes every day an adventure to remember.


Our wearable went through many different stages during the ideation phase. The process began with compiling a list of items you can wear and then looking into particular themes and interactions:

Wearable Items:

  • belt

  • hair extensions

  • hat

  • piercing

  • face mask

  • eye-patch

  • cape

  • sock

  • anklet

  • heels

  • scarf

  • tie

Wearable Control Factors:

  • mood control

  • pregnancy

  • morning sickness

  • isolation

  • shared experience

  • social interaction (happy/awkward)

  • safety

  • care for elderly

  • care for plants

We mixed and matched different possibilities, and came up with a bunch of different ideas inspired by the combinations. 

We initially chose a scarf with the idea that in cold weather people are often covered up and closed inside warm clothing. We brainstormed how to display information on a scarf and promote interaction with fellow city walkers. When we found the 8x8 LED matrix, we began discussing the concept of “badges” and collecting other user’s information in the form of a badge. We then discussed how both people and places should have collectible badges, as stationary and moving beacons. The badge idea motivated our concept shift to a wearable for general exploration instead of to only promote stranger interaction. We then decided an explorer sash was more appropriate than the scarf.

Target User:

Throughout our ideation process, our team was drawn to a device that was meant to be worn by an urban walker — someone exploring a city. Our target user for Russell is an everyday urban explorer. The device would be ideal for someone who has lived in a place for a while, but has fell into a monotonous routine. Russell would bring new excitement into their everyday journey. Russell would also be great for someone new to a place as it would provide a playful introduction to the new city. We could see Russell being used as a tourist device or even by students during freshman orientation.

In-Depth Overview: 

Russell consists of an explorer sash and an accompanying iOS app. The user first creates a personal “badge” — an 8x8 matrix with ten color options — on the IOS app. The user can animate the badge by clicking the animate button and drawing a second frame onto their badge. The user can also add an optional personal message — any bits of information he or she wants to share with fellow users (see screencast below). Now, the adventure begins! The user wears the explorer sash, which is made of khaki-colored fabric doubled into a tube with a hidden pocket to hold the electronics. It has an opening with the 8x8 LED screen embedded below a frosted piece of clear acrylic as a diffuser.

The user's everyday, monotonous path transforms into an adventure-filled journey full of collectable badges from both places and people — landmarks and fellow explorers. When an explorer is nearby one of these special places, the LED screen flashes in white light and then displays the landmark’s badge. The badge is then added to the collection on the Russell app and the location at which it was collected is recorded on the map. Encountering someone else exploring with Russell allows you to collect their personal badge, unlock their message, and also recall where they were encountered. At any point in the day, the user can relive the adventure so far with the app, tracing the path they took and the badges they collected on the map (see screencast).

Initial mock up


The server serves three main functionalities: collecting data, interacting with the sash, and interacting with iPhone app.

Data Collection

The server maintains the database of users and stationary places. For each user, the server store series of GPS locations the user has sent, the user’s personalized message, and the user’s badge. Similarly, the server stores the same data for stationary places, but one stationary place has only one location. It also maintains a list of recent users, users who update their GPS locations in the last five minutes. This list is used for determining which users are closed to which users.

Sash Interaction

The Arduino on the sash constantly reports the server its location. When the server receives a HTTP request with a GPS location, it updates the user’s location data and checks if the user is nearby stationary places or other users. If the user is close to some places and some other users that the user has not encountered before, the server will send the badges of those places and users as responses. If the user is not close to anything, the server will respond with the badge of the last place or user she encountered. In the response, we include a flag indicating if the badge is old or new. If it is a new badge, upon receiving the badge data, the Arduino will activate the vibration to notify the user that she is receiving a new badge.

Phone Interaction

Upon receiving a map request from Russell iPhone app of a particular user, the server sends back a map with the user’s route and the badges at the locations they were collected. The users can also update their personalized messages and their own badges that stored on the server using the iPhone app.

Sash-Server Interaction

Setting Up Server

The server is built using Flask. In the current setting, this server will serve on port 5001. Make sure that your computer on which you run the server has a static IP address.

First, install flask and uwsgi. On linux, type

pip install flask

apt-get install uwsgi

Download server code.

git clone

Create 'static' directory inside 'russell-server' directory. The badges will be saved in 'static' directory in .png format.

cd russell-server

mkdir static

Currently, there are only three stationary places in Berkeley, CA (i.e. Caffe Strada, Campanile, and UC Berkeley Invention Lab) in our database for our demo. To include more stationary places, edit 'db/statationry.csv' file. The file is in the following format.


1001;Caffe Strada;37.869154;-122.254792;<sequence of 8x8x3x2 numbers>

'id' is an integer. A badge is represented by 8x8x3x2 = 384 integers separated by ','. The first 8x8x3 numbers represent the first 8 x 8 pixel frame of an animating badge. The second 8x8x3 numbers represent the second frame. Each triplet of numbers represent R, G, and B colors of an pixel.

To run the server in production mode using four threads, type

uwsgi --ini uwsgi.ini

IOS App:

We also built a companion iOS app that works along side Russell. This companion app currently does 3 tasks:

Screencast of mobile app walk through

1. Create your own badge.

Users are able to draw their own unique badge using selected colors as shown in the UI above. This allows people to express their personality and how they want to identify themselves to other Russell users. Additionally, we also enabled animations. Users are able to send two different frames where Russell will repeatedly switch back and forth to show an animated badge!

Underneath, by drawing on the 8x8 canvas, we send a 64 * 3 (for RGB) comma delineated string of numbers to the server. The server then associates this string with that particular user. To animate, we simply send two frames at once, and the arduino switches between these two 192 length comma delineated string.

2. Set your status.

Users can set their own customized status. "I'm studying for EE20!" "I love adventures!"

Underneath, we simply send the msg associated with this user id to the server.

3. A roadmap of the places you've been and the badges you've collected

This is a google maps generated from the server that shows the path this user has taken and each badge he or she has collected.

In the future, we would love to add the ability to show a history of all badges collected like a Pokedex. Also maybe allow for communications between Russell users that came across each other!


Arduino Program:


The Arduino Yun communicates with the server via POST requests, sending the wearer's user id, latitude, and longitude to the server. The server's response is a string of 387 integers, comma-delimited. This string is parsed and dictates the badge Russell shows.

Sending POST Requests:

To send the POST requests, The Arduino first waits for a NMEA sentence from the GPS chip. It then parses the sentence into a usable latitude and longitude, which is then sent to the Yun side along with the user ID. On the Yun side, a python script creates a POST request using PyCurl and sends this information to the server. The request returns the 387-integer response that gets passed along to the Arduino side for parsing.

Displaying badges:

Once the string response is parsed into an array, we use the first 3 numbers for flags, and the rest for RGB values. The 384 numbers represent the two badges sent to us. We simply alternate showing the two badges to create an animation. Static badges are still displayed in the same manner, only the two badges translate to the same picture.

New Badge Interaction:

As stated above, the first three integers are flags to signal information about the badge -- we use the first integer to check if the sent badge is a new one or not. The other two integers are included to offer expansion into different states. If it is new, Russell will vibrate and the screen will flash twice before displaying the badge. If it is not, Russell simply displays the badge with no distinguishable difference from before. The server contains the logic to determine is the badge is new or not -- Russell is memoryless.

In the future, some of the different states we wanted to explore was a "person/place only" option, or a "already seen but encountered for the first time today" option. The 3-bit flags would allow us to implement these states. 


Here is a brief presentation of Russell.



When critiquing our project and discussing where it might take us next, we asked the following questions:

Does Russell...

  • encourage the user to be actively engaged and in the moment?
  • promote meaningful interfacing with people and places?
  • preserve memories of one’s daily life?
  • allow users to interact with the device in an intuitive way?

With the answers to these questions in mind, we came up with several possible extensions for Russell to further fulfill the original goals for this project.

Social Media Component

To encourage stranger interaction, we could find a way to integrate the personal message into a way for users to interact on the app. We could also use Facebook integration to pin you if you passed someone you know or with whom you have many mutual friends.

Memory Maker

Option to add and store a photo or text when a badge is collected. Instead of just passively collecting the badge, users can take a picture or add some text to the badge as a way to further memorialize that moment. This information would be available on the map and further encourage the preservation and creation of more meaningful and rich memories.

Multiple Badge Display

Multiple LED screens could be embedded into the sash. To extend the explorer badge metaphor, multiple LED screens on the sash would alll more than one badge could be displayed at once. We discussed the possibility of allowing the user to choose which of the collected badges to be displayed at any given time

Badge Pokedex

One issue that continually came up was how to save the badges from day to day. The badge pokedex would allow users to record how many of the same badges they collected so far. For example, if a user passes the campanile every day and has worn the explorer badge for a week so far, they would have seven campanile badges in their log. The user would be able to track where they commonly pass and who they frequently encounter.

Crowdsourced Badge

To encourage more social interaction, we could allow users to "build onto" a badge when they encounter it. They could add animation or change the existing badge. This might be problematic with commonly encountered landmarks but perhaps we could add specific secret locations that are just for crowdsourced badges. Each time a user encounters the location, they have the opportunity to change the badge, which the subsequent user would be able to see and collect.   



Team members

Anna Carey
  • 3 projects
  • 1 follower
Emily To
  • 3 projects
Profile square
Jon Lai
  • 3 projects
Rick Ling
  • 2 projects

Published on

May 12, 2015

Members who respect this project

DefaultDefaultDefaultDefaultDefaultDefault12804838 977761582298192 2413374391461584639 nPhoto

and 3 others

See similar projects
you might like

Similar projects you might like

Hertzian Armor

Project tutorial by Team wearables2020

  • 17 respects

RR Spaceship Bridge

Project in progress by Team RossumRumblers

  • 13 respects

Lytograph - smart wifi display

Project showcase by ceberocks

  • 17 respects

Upgrading a BadgerStick

Project tutorial by Georgitzikis Vasilis (tzikis)

  • 1 comment
  • 6 respects

A DIY Smart Insole to Check Your Pressure Distribution

Project tutorial by Juliette van der Pas

  • 51 respects

Arduino101 / tinyTILE BLE: Match-Making Sunglasses

Project tutorial by Kitty Yeung

  • 45 respects
Add projectSign up / Login