NOTE: Respective trademarks lie with their respective owners. No copyrighted intellectual property was used.


With the reopening of theme parks, hand hygiene is now more important than ever.

What it does

HHR is a system to promote hand hygiene through the use of positive reinforcement / gamification, by rewarding guests with points for washing their hands often, and for the full CDC recommended time of 20 seconds. Ideally, these points would then translate into small discounts on merchandise or food, or even priority queuing in the line.

How I built it

Reverse engineered Disney's magicbands / park tickets using NFC / Mifare / NXP TapLinx to scan them.

How it works

A guest goes to the restroom, taps their band in when they start washing their hands, and then taps again when finished. Guests are then encouraged to

Challenges I ran into

I encountered many issues:

The Raspberry Pi kit did not come with instructions for assembly. Figured it out eventually after finding the pinout for wiring the display and guessing how it fits together.

Nordic nRF52 Board only supports passive NFC and cannot generate a radio field to read NFC tags -> Switched to Android NFC

The magicband / park tickets don't use the standard NFC NDEF format, so can't use built-in Android NFC library and need to access MIFARE directly -> switched to NXP TapLinx to talk to the MIFARE chips

Discovered that the magicband and card park tickets use different MIFARE formats, the magicband is DESFire EV1, and card park tickets are MIFARE Ultralight C, and you have to detect which kind and handle accordingly.

Raspberry Pi doesn't support Qt out of the box, and fixing it requires recompiling Qt. Doing so from scratch on a Raspberry Pi takes 46 hours -> Switched to developing for a desktop

Accomplishments that I'm proud of

Integrating the MIFARE in a way that works. I discovered that the data on the band / cards is encrypted, so it's not possible to read the actual data because we don't have the encryption / decryption keys. However, because that encrypted data is still unique, you can use that to tell them apart by UUID.

What I learned

Raspberry Pi

Android BLE Peripheral (I've done central but not peripheral)

MIFARE Ultralight C / DESFireEV1


Relearned C++ after not using it for 5 years

What's next for Hand Hygiene Reinforcement

Fixing the BLE communications so that the identity read from the band gets sent over bluetooth. Points / rewards tracking.

Share this project: