Project Summary
The goal of this project was to create an interactive space featuring some of the benefits and ideas for how to use five different essential oils—lavender, grapefruit, rosemary, peppermint, and eucalyptus. There is little room on the packaging itself, and the font sizes are very small, so this was an effort to create a useful resource for consumers considering purchasing essential oils. I created watercolor illustrations for each oil on the display. I then used the watercolors as inspiration for the label design and the interactive space. The image was projected onto the frame once a user picked up one essential oil, showcasing the benefits and ideas for how to use that particular oil. The photocells read a higher light value once the essential oils were picked up, which triggered the projection to change. This was done using an Arduino and Processing. The code is below.
Background/Initial Idea
I originally wanted to use a Muse headset and diffuse essential oils depending on the readings from the headset. With some research, I quickly figured out this may have major kinks. The other issue was that I wanted to create something useful and visually pleasing. I went with the interactive product display instead.
Tools used to complete this project
1. Arduino
2. Photocells
3. Projector
4. Laptop
5. Processing
6. Illustrator
7. Photoshop
8. InDesign
Code
Arduino:
int cell0, cell1, cell2, cell3, cell4;
void setup() {
// We’ll send debugging information via the Serial monitor
Serial.begin(9600);
}
void loop() {
// read all the values, save the result in their own variables
cell0 = analogRead(0);
cell1 = analogRead(1);
cell2 = analogRead(2);
cell3 = analogRead(3);
cell4 = analogRead(4);
// print the line over serial so processing can read it
Serial.print(cell0);
Serial.print(“,”);
Serial.print(cell1);
Serial.print(“,”);
Serial.print(cell2);
Serial.print(“,”);
Serial.print(cell3);
Serial.print(“,”);
Serial.println(cell4); // this one has to be a println so the line ends
delay(100);
}
Processing:
import processing.serial.*;
int lf = 10; // Linefeed in ASCII
String myString = null;
Serial myPort; // The serial port
int big;
float r;
PImage img;
PImage grapefruit;
PImage rosemary;
PImage mint;
PImage lavender;
PImage eucalyptus;
void setup() {
fullScreen();
// List all the available serial ports
printArray(Serial.list());
// Open the port you are using at the rate you want:
myPort = new Serial(this, Serial.list()[1], 9600);
myPort.clear();
// Throw out the first reading, in case we started reading
// in the middle of a string from the sender.
myString = myPort.readStringUntil(lf);
myString = null;
big=0;
r=0;
img = loadImage(“img.jpg”);
grapefruit = loadImage(“grapefruit.jpg”);
rosemary = loadImage(“rosemary.jpg”);
mint = loadImage(“mint.jpg”);
lavender = loadImage(“lavender.jpg”);
eucalyptus = loadImage(“eucalyptus.jpg”);
}
void draw() {
while (myPort.available () > 0) {
myString = myPort.readStringUntil(lf);
if (myString != null) {
println(myString);
String s = trim(myString);
if (s != ” “) {
try {
String[] values=s.split(“,”);
int zero = Integer.parseInt(values[0]);
println(“zero : ” + zero);
int one = Integer.parseInt(values[1]);
println(“one : ” + one);
int two = Integer.parseInt(values[2]);
println(“two : ” + two);
int three = Integer.parseInt(values[3]);
println(“three : ” + three);
int four = Integer.parseInt(values[4]);
println(“four : ” + four);
image(img, 0, 0);
if (zero>100) {
image(grapefruit, 0, 0);
}
if (one>100) {
image(rosemary, 0, 0);
}
if (two>100) {
image(mint, 0, 0);
}
if (three>100) {
image(eucalyptus, 0, 0);
}
if (four>100) {
image(lavender, 0, 0);
}
}
catch (Exception e) {
}
}
}
}
}