Final Project Documentation
Concept:
“Olive Tree Stories” is an interactive storytelling project inspired by the deep cultural roots of olive tree’s in Palestinian heritage. I wanted my project to be meaningful and leave a strong impact on the user, so i drew inspiration from my own culture. The installation uses a plastic olive tree with three symbolic leaves. Each leaf has a hidden touch sensor made of aluminum foil and sponge, which activates when pressed gently on a red mark. When the leaf is pressed, the corresponding olive lights up on the tree, and a short audio (poem or song) starts playing, followed by a visual enlargement of a related image on screen. I was looking for the overall experience to evoke the act of picking an olive and hearing a story passed down through generations. My main goal for this project is to preserve memory and heritage through touch, sound, and visuals.
Interaction Design:
– The user interacts with the leaves of an olive tree.
– Each leaf has a red marking –> made using two layers of aluminum separated by sponge.
– When red marking is pressed:
– A green olive lights up on the tree (via LED).
– One of two audio stories tied to that olive is randomly selected and begins playing.
– A corresponding visual (image) on screen zooms in smoothly.
– After the story ends:
– The screen returns to its main menu.
– The olive light turns off.
I wanted this natural interaction design to draw people in gently, as they literally touch a memory through the leaves of the olive tree.
Link to process photos + Link to extra designs made
Arduino Code:
The Arduino reads input from 3 capacitive touch pins and lights up corresponding LEDs. It also sends a serial message (“1”, “2”, or “3”) to indicate which olive was touched.
#include <Adafruit_NeoPixel.h> const int touchPin = 6; const int touchLedPin = 3; const int touchPin2 = 10; const int touchLedPin2 = 11; const int touchPin3 = 7; const int touchLedPin3 = 12; const int trigPin = 8; const int echoPin = 9; #define STRIP_PIN 5 #define NUMPIXELS 50 Adafruit_NeoPixel strip(NUMPIXELS, STRIP_PIN, NEO_GRB + NEO_KHZ800); void setup() { pinMode(touchPin, INPUT_PULLUP); pinMode(touchLedPin, OUTPUT); pinMode(touchPin2, INPUT_PULLUP); pinMode(touchLedPin2, OUTPUT); pinMode(touchPin3, INPUT_PULLUP); pinMode(touchLedPin3, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); strip.begin(); strip.show(); Serial.begin(9600); } void loop() { int touchState = digitalRead(touchPin); digitalWrite(touchLedPin, touchState == LOW ? HIGH : LOW); if (touchState == LOW) { Serial.println("1"); delay(300); } int touchState2 = digitalRead(touchPin2); digitalWrite(touchLedPin2, touchState2 == LOW ? HIGH : LOW); if (touchState2 == LOW) { Serial.println("2"); delay(300); } int touchState3 = digitalRead(touchPin3); digitalWrite(touchLedPin3, touchState3 == LOW ? HIGH : LOW); if (touchState3 == LOW) { Serial.println("3"); delay(300); } digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH, 30000); int distance = (duration == 0) ? 999 : duration * 0.034 / 2; if (distance < 100) { for (int i = 0; i < NUMPIXELS; i++) { strip.setPixelColor(i, strip.Color(60, 90, 30)); } } else { for (int i = 0; i < NUMPIXELS; i++) { strip.setPixelColor(i, 0); } } strip.show(); delay(50); }
p5.js Code:
– Loads 6 images and 5 audio files
– Maps each box to one audio
– Randomizes which box is triggered per olive
– Communicates with Arduino using Web Serial
– Displays interactive visuals with zoom animation and audio syncing
Arduino – p5.js Communication:
– Serial connection via Web Serial API
– Arduino sends “1”, “2”, or “3” when a sensor is triggered
– p5.js receives the value, randomly selects one of two mapped boxes, and plays audio/image
– Serial connection is opened through a “Connect to Arduino” button
Highlights / Proud Moments:
I was very proud of my use of leaves as soft sensors because I believe it adds a layer of tactile beauty while blending the installation with poetic significance. i also liked my use of the red markings on each leaf as they serve as subtle visual guide, naturally blending into the overall aesthetic of the tree while inviting interaction. When a user presses on a marked leaf, the seamless synchronisation between light and audio brings the experience to life, creating an emotionally resonant response. I knew that my goal was met when a lot of users commented and told me that they really appreciated the meaningful aspect of my project. Overall, I think that my project connects technology and tradition and turns a symbolic object into a responsive storytelling medium.
Challenges/Future Improvements:
One of the main challenges I faced was my initial idea to make the olives themselves the touchpoint that triggered the audio. I struggled to add a reliable sensor inside the small and spherical shape of the olives. However, to overcome this, I problem-solved by shifting the interaction to the leaves, which offered more surface area and flexibility. Also, I learned the importance of saving your code very often and debugging. Looking ahead, future improvements could include integrating haptic feedback into the olives, adding more stories with replay options, and even including narration subtitles for accessibility. Overall, I am extremely proud of how my project turned out and the responses it got from many users.