Probably one of the crazier designs I got to put together on a very tight timeline was a multi-sensory, hands-free interactive kiosk that utilized a mix of motion graphics, directional audio, mid-air haptics, gesture detection and scent dispersal. The haptics piece might peak your interest, but suffice it to say that it was difficult to implement and kinda underwhelming. Also, I didn’t build it myself so I’m not going to blog about it here. Instead, I want to focus on what turned to be a pretty simple and really interesting piece: the release of a custom scent, cued to match screen content.

The idea was to have the scent hit midway through the experience when the scented item appeared on the screen. The experience revolved around a liquid skin care product with a unique aroma. You could hear it trickling, see it moving on the screen, “feel” it on the haptic array and smell it too. It turns out that electronic scent dispersal is a pretty huge market. There were lots of products that could disperse tiny droplets of scented oil to small or large spaces. Many were programmable with timers, intensity levels, multiple scents, but none supported triggers either using software or DMX. A lot were also really large and designed to hook in to an HVAC to perfume an entire space, but we wanted something more personal. I landed on this guy that’s designed to sit on a shelf and hit a small area. We determined the optimal placement was below the visitor’s nose with the nozzle pointed up. We hid it in the pedestal that was housing the haptics and used a short length of hose to point it up and set the intensity to max. The idea being that it will trigger on cue, blast scent for about 20 seconds then cut out. Just enough time to be clearly smelled without lingering for the next user. The scent oil is extremely fine and won’t interfere with electronics and will settle to the ground pretty quickly after hanging in the air briefly without leaving any residue.

The triggering mechanism had to be external. The device is set and turned on, but we used the main application to trigger an AC relay to turn power on and off programmatically. This turned out to be pretty straightforward with a few more off-the-shelf components. This IoT power relay looks like a normal power strip with a little two-pin terminal block on the side. The relay has 4 standard AC outlets. One is always on, one is “normally on” and two are “normally off”. A simple signal to the terminal port from an Arduino flips power from “normally on” to “normally off” which is where the scent disperser was plugged in. I’m just using a basic Arduino Uno with a jumper from pin 13 to the + of the terminal block and ground to negative and the board just velcroed to the relay. Then plug the USB from the board into a USB on the PC driving the experience. The Arduino code below is dead simple and just take a serial write of “1” to activate the diffuse and “0” to shut it back off.

int incomingByte = 0;   // for incoming serial data

void setup() {
        pinMode(LED_BUILTIN, OUTPUT);
        Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte =;

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
                if (incomingByte == 49) { // got a 1
                    digitalWrite(LED_BUILTIN, HIGH);
                } else if (incomingByte == 48) { // got a 0
                    digitalWrite(LED_BUILTIN, LOW);

The controlling app (in this case a Unity/C# app) just writes the 1 or 0 to the appropriate serial port and voila. Scent on cue. The relay itself isn’t instantaneous because the little solenoid or whatever is in there needs a second to react. And it also takes a few seconds for the scent to reach enough saturation to hit you, so we gave it a 5 second headstart.

It was a pretty interesting thing to build and turned out to be pretty simple in the end despite no one on the team having any idea if it was even possible.