Lumi Sense - Interactive Light Box
Name: Korn (Jacky) Kijwattanapong
Instructor: Viola He
Class: Interaction Lab
Front
CONTEXT AND SIGNIFICANCE
Lumi Sense project emerged from insights gained in previous projects in my Interaction Lab course, especially an interactive wearable project. This prior experience introduced me to ultrasonic sensors and their potential for user engagement through proximity-based interaction, a concept that became central to Lumi Sense. In creating Lumi Sense, I aimed to design an everyday object—a light box—that went beyond simple functionality by adding interactive elements. What makes Lumi Sense unique is its integration of sound and sensor-based responses, transforming it into a tool that’s both practical and entertaining. Unlike typical light boxes, which effects, Lumi Sense allows users to actively interact with it, adding a layer of engagement that makes it feel alive and responsive. This project is intended for teenagers and office workers, groups that often seek ways to enhance their environments with devices that are both functional and enjoyable. Lumi Sense provides these users with a customizable experience, allowing them to control the lighting and music to suit their mood or setting. Through this project, I aimed to create a product that offers something unique to its audience—an interactive experience that goes beyond aesthetics and function.
Left
Upper
Right
CONCEPTION AND DESIGN
User interaction was a core consideration in designing Lumi Sense. I chose materials and design elements that would be both visually appealing and functional, helping users understand the device’s features intuitively. The light box has a transparent net structure, giving it a modern, clean look that fits well in any setting. This transparency not only adds to its aesthetic but also allows the light to diffuse evenly, enhancing the overall experience. The base of the lamp has two distinct sections: one with a sleek glass finish and another with a disco-inspired print. This design helps users quickly recognize the different modes without needing instructions, reinforcing the project’s goal of user-friendly interaction.
Initially, we planned to use a tapping sensor for interaction, but feedback from early testing revealed it wasn’t intuitive for users. We decided to switch to a shaking sensor, which felt more natural and aligned better with our interactive goals. I considered other sensor types, such as motion or sound-activated options, but found that the ultrasonic and tilt sensors offered the best balance of accuracy and engagement, allowing Lumi Sense to respond instantly to user actions. This choice not only met our functional goals but also made the product more enjoyable and accessible.
Connecting the Ciruit for Ultrasonic Sensor
Planning Draft
Inspiration Design from Senior Project
FABRICATION AND PRODUCTION
The production process for Lumi Sense involved both technical challenges and design refinements. Nathan and I shared responsibilities throughout, but I led the design and circuit work on the breadboard. One of the biggest steps was integrating the core code to ensure the sensors interacted correctly with the light and music outputs. During user testing, we faced initial challenges as users found the tapping sensor unintuitive, which led us to adapt the project by switching to a shaking sensor. This change significantly improved user satisfaction and enhanced the interactive aspect of Lumi Sense.
However, the shift to a shaking sensor introduced additional technical hurdles. We struggled with reading feedback from our code due to a non-standard serial number, and we encountered issues with the tilt sensor and music functions conflicting. To resolve this, we isolated each feature, testing them separately to troubleshoot. Adjusting the x and y thresholds for the tilt sensor was also necessary to prevent the songs from switching too quickly. Despite the frustrations, these challenges taught us the importance of flexibility and detailed debugging, and seeing everything come together was incredibly rewarding. This process not only strengthened our technical skills but also reinforced the importance of creating a smooth, enjoyable user experience.
Ultrasonic Sensor Wiring
Code: RGB and Touch Sensor
Final Circuit and Breadboard
CONCLUSION
The goal of Lumi Sense was to create a product that embodies true interactivity, requiring users to engage actively to experience its full functionality. By allowing users to control both light and music with simple gestures, Lumi Sense aligns well with my understanding of interactive design, creating an engaging, multi-sensory experience. Feedback from users confirmed that the device was both intuitive and enjoyable to use, validating our design choices and overall approach.
With additional time, I would expand Lumi Sense’s features to enhance its versatility. Adding more music options or customizing light colors would further engage users, allowing for an even more personalized experience. Reflecting on the project, I realize how much I’ve learned from balancing functionality and user feedback. The experience reinforced the importance of creating products that are not only technically sound but also resonate with users on a practical and emotional level. Lumi Sense stands as proof that, with the right skills and perseverance, we can bring ideas to life in ways that are meaningful and impactful.
Final Project Demonstration
Mode 1: Calm and Relax
Mode 2: Disco and Dance
DISASSEMBLY
Returning IxLAB Equipments
Putting the card boards in the recycle bin
Disconnect the circuit from the Breadboard and Arduino. Put them back into the Arduino toolkit.
APPENDIX: FINAL PROJECT CODE
#include "DFRobotDFPlayerMini.h"
#include <SoftwareSerial.h>
#include <Wire.h>
// Color pins
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
// Init our vars
int colorRed;
int colorGreen;
int colorBlue;
int triggerPin = 7;
int echoPin = 6;
long distance;
SoftwareSerial softSerial(3, 5); //rx, tx
DFRobotDFPlayerMini myDFPlayer;
void setup() {
// put your setup code here, to run once:
// Setup color pins
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
// Setup distance pins
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(115200);
softSerial.begin(9600);
if (!myDFPlayer.begin(softSerial, /*isACK = */ false, /*doReset = */ false)) { //Use serial to communicate with mp3.
Serial.println("Error starting DFplayer");
}
myDFPlayer.volume(100); //Set volume value. From 0 to 30
myDFPlayer.play(3); //Play the first mp3
}
void loop() {
// put your main code here, to run repeatedly:
// Distance sensing
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
// Read the echo time
long duration = pulseIn(echoPin, HIGH, 17400);
// Calculate the distance
distance = duration / 29 / 2;
// Serial.println(distance);
// Set color based on distance
if (distance >= 2 && distance <= 10) {
colorRed = 0;
colorBlue = 255;
colorGreen = 0;
} else if (distance >= 11 && distance <= 20) {
colorRed = 0;
colorBlue = 0;
colorGreen = 255;
} else if (distance >= 21 && distance <= 30) {
colorRed = 255;
colorBlue = 0;
colorGreen = 0;
} else if (distance >= 31 && distance <= 40) {
colorRed = 255;
colorBlue = 255;
colorGreen = 0;
} else if (distance >= 41 && distance <= 50) {
colorRed = 125;
colorBlue = 125;
colorGreen = 0;
} else {
colorRed = 0;
colorBlue = 0;
colorGreen = 0;
}
// Write to LEDs
analogWrite(redPin, colorRed);
analogWrite(bluePin, colorBlue);
analogWrite(greenPin, colorGreen);
delay(40);
int x = analogRead(A0); // Read X-axis
int y = analogRead(A1); // Read Y-axis
int z = analogRead(A2); // Read Z-axis
if (x < 220) { // If it is tilted
Serial.println("Track 1");
myDFPlayer.play(1); // plays the next track
delay(500); // Delay to avoid multiple triggers
} else if ( x > 300){
Serial.println("Track 2");
myDFPlayer.play(2);
delay(500);
}
Serial.print("x,y,z = ");
Serial.print(x);
Serial.print(", ");
Serial.print(y);
Serial.print(", ");
Serial.print(z);
Serial.println();
}
APPENDIX: MATERIALS
-Arduino Uno
-RGB LED Strip (common anode or common cathode)
-Resistors (220Ω for each RGB color channel)
-Sound Sensor, such as a microphone or analog sound level sensor
-Breadboard
-Jumper Wires
-Power Supply, USB or external
-Push Buttons (optional for mode switching)
-Pull-up or Pull-down Resistors for button inputs (if used)
-Ultrasonic Sensor