Week 9 Sunrise Project

Concept:

The idea for this project came from something I’ve always found fascinating: the transition from night to day, especially the way streetlights turn off as the new day begins and the sun begins to rise.
I’ve always been captivated by the natural beauty of a sunrise, how the sky gradually shifts colors as the day begins.  The goal was to create something interactive where turning off a “streetlight” (represented by a blue LED) would trigger a sunrise sequence using an RGB LED. I used a photoresistor that detects the change in light when the streetlight is turned off, this then turns on the RGB light sequence.

Demonstration:

Code:

const int blue_led_pin = 9;         // Blue light (streetlight)
const int switch_pin = 2;           // Switch pin
const int photo_resistor_pin = A0;  // Photoresistor pin
const int red_pin = 3;              // Red pin of RGB 
const int green_pin = 5;            // Green pin of RGB 
const int blue_pin = 6;             // Blue pin of RGB

// Variables
bool streetlight_on = true;         // bool to track if the stretlight is on
bool sunrise_started = false;       // bool to track is the sunrise sequence has started

void setup() {
  // Initialize pins
  pinMode(blue_led_pin, OUTPUT);
  pinMode(switch_pin, INPUT);

  pinMode(red_pin, OUTPUT);
  pinMode(green_pin, OUTPUT);
  pinMode(blue_pin, OUTPUT);

  // streetlight starts off as on
  digitalWrite(blue_led_pin, HIGH);
}

void loop() {
  // Check if the switch is pressed
  if (digitalRead(switch_pin) == HIGH && streetlight_on) {
    digitalWrite(blue_led_pin, LOW);   // Turn off streetlight
    streetlight_on = false;            // change the bool to reflect the streetlight being off
  }

  // Read light level from photoresistor
  int light_level = analogRead(photo_resistor_pin);

  // If light level drops below threshold, start sunrise sequence, can be if the blue light turns off or if the light is manually blocked
  if ( !sunrise_started && light_level < 500) { 
    sunrise_effect();
    sunrise_started = true;            // bool confirms that sunrise has started
  }
}

void sunrise_effect() {
  // Gradually change colors like a sunrise
  for (int i = 0; i <= 255; i++) {
    analogWrite(red_pin, i);           // Increase red brightness first
    delay(30);                         // Adjust delay for smooth transition

    if (i > 100) {
      analogWrite(green_pin, i - 100); // Add green for yellow/orange colors
    }

    if (i > 200) {
      analogWrite(blue_pin, i - 200);   // Add blue for full white at to show noon
    }

    delay(30);
  }
}

Schematics:

Workings:

The blue led is shone directly into a photoresistor. When the switch is used to turn it off, the photoresistor reading goes down which triggers the sunrise sequence on the rgb led. It is demonstrated that the photoresistor triggers the sequence and not the button press as even when the photoresistor is covered with a finger with the blue led on, the reading goes down and the sunrise sequence is initiated.

Future Considerations:

I had tremendous fun working on this project especially learning how the rgb led works. In the future I’d like to add more leds which trigger different sequences in the rgb led or perhaps a sound aspect to it as well where a loud sound triggers the sequence.

Week 9: Reading Response

Both of this week’s readings explore the common creative challenges and themes in Design and Interactive Media.

Physical Computing’s Greatest Hits (and Misses)

The reading was nostalgic for me as it recounted several projects which I used to do in my school days for exploring the world of electronics. However, these projects are the starting point for many electronic-based fields and have withstood the test of time like Interactive Gloves, LED based projects, Video Mirrors, and so on. The author emphasizes on the fact that these projects are building blocks for other interactive projects and many famous digital works of art are variations of these seemingly simple projects. However, despite their simplicity, by changing one factor or adding another component, the entire project becomes something new. Thus, these ideas might not seem “original”, but can be interpreted in an entirely different manner it takes inspiration from.

What strikes me most in this reading is the challenge of achieving a balance between visual appeal and meaningful interaction. For example, video mirrors are essentially screens that mimic the viewer’s movements and they are captivating to look at, but limited in what they offer interactively. The author raises an important point here: while these types of projects are beautiful, they don’t necessarily provide much depth in interaction. I agree with him because I have experienced the same with my Midterm Project- it was beautiful, but offered limited interaction. I was wound up in the making the project work that I did not think of the project from a user’s perspective.

Another theme that emerges is the idea of adaptability. The author encourages creators to see these “tried – and – true” themes not as stale, but as playgrounds for innovation. This idea of keeping traditional themes fresh is something that really resonates with me. How do we, as creators, continue to reinvent these classics in a way that speaks to new audiences? That is a question which I believe everyone would answer in their own way. For me, I use some basic physics principles with electronics to bring my own twist into my projects.

Making Interactive Art: Set the Stage, Shut Up and Listen

This reading really brings a fresh perspective on an artist’s role. The author challenges creators to move away from interpreting their work or instructing audiences on what to think. Instead, he sees interactive art as a conversation that begins with the artist but is completed by his audience. This concept reminds me of theater, where the director sets the scene but leaves it to the actors to interpret their roles (to allow some freedom in exploring that character). In this case, it’s the audience that gets to step into the role of interpreter, finding their own meaning in the art.

One of the most intriguing aspects of this reading is the emphasis on “letting go of control.” For many artists, this can be challenging because we are often taught that art is an act of personal expression, a statement that’s “ours.” But interactive art, according to the author, flips that on its head – it’s no longer just our statement; it’s a shared experience. The author argues that our job is to give subtle hints, to design a space that encourages discovery, and then to get out of the way. This idea resonates with me because it’s about trusting the audience to bring their own insights and emotions to the work. This encourages me to use subtle hints rather than hard-coded instructions to engage the audience with my work.

 

Assignment: GripSense

Concept:

GripSense  is designed to empower recovery and build strength through simple, intuitive grip exercises. Inspired by the resilience required in rehabilitation, it is designed with individuals in mind who are recovering from hand injuries, surgeries, or conditions like arthritis that can limit hand mobility and grip strength. The idea is to create a device that not only helps measure improvement over time but also motivates users to engage in strength exercises by giving real-time feedback and adapting to different levels of force.

Work Procedure:

A squishy ball, embedded with Force Sensor, connected to 5V and Analog Pin A0 on the Arduino through a 1kΩ resistor to ground. This creates a voltage divider, enabling the Arduino to detect varying pressure levels. For feedback, two LEDs are connected: a Light Touch LED on Pin 8 with a 310Ω resistor for gentle squeezes, and a Strong Force LED on Pin 10 with a 310Ω resistorfor firmer grips. Each LED lights up based on the detected force level, providing immediate, intuitive feedback on grip strength.

The Arduino reads these values and provides real-time feedback through LEDs:

  • Light Touch LED (Blue): Lights up for a gentle squeeze ensuring the sensor is working.
  • Strong Force LED (Yellow): Lights up for a firmer, stronger grip.

Code:

const int forceSensorPin = A0;  // Pin connected to the force sensor
const int lightTouchLED = 8;    // Pin for the first LED (light touch)
const int strongForceLED = 10;  // Pin for the second LED (strong force)

int forceValue = 0;             // Variable to store the sensor reading
int lightTouchThreshold = 60;   // Threshold for light touch
int strongForceThreshold = 300; // Threshold for strong force

void setup() {
  Serial.begin(9600);               // Initialize serial communication at 9600 bps
  pinMode(lightTouchLED, OUTPUT);   // Set LED pins as outputs
  pinMode(strongForceLED, OUTPUT);
}

void loop() {
  // Read the analog value from the force sensor
  forceValue = analogRead(forceSensorPin);

  // Print the value to the Serial Monitor
  Serial.print("Force Sensor Value: ");
  Serial.println(forceValue);

  // Check for strong force first to ensure it takes priority over light touch
  if (forceValue >= strongForceThreshold) {
    digitalWrite(lightTouchLED, LOW);    // Turn off the first LED
    digitalWrite(strongForceLED, HIGH);  // Turn on the second LED
  }
  // Check for light touch
  else if (forceValue >= lightTouchThreshold && forceValue < strongForceThreshold) {
    digitalWrite(lightTouchLED, HIGH);   // Turn on the first LED
    digitalWrite(strongForceLED, LOW);   // Ensure the second LED is off
  }
  // No touch detected
  else {
    digitalWrite(lightTouchLED, LOW);    // Turn off both LEDs
    digitalWrite(strongForceLED, LOW);
  }

  delay(100);  // Small delay for stability
}

Schematic Diagram:

Schematic Diagram
Figure: Schematic Diagram of GripSense

 

 

 

 

 

 

 

Media:

 

 

Reflection and Future Improvements:

In the future, I plan to enhance GripSense with several key upgrades:

  1. Secure Sensor Integration: I’ll embed the force sensor inside the squish ball or design a custom 3D-printed casing to hold both the ball and sensor. This will make the setup more professional, durable, and comfortable for users.
  2. Add OLED Display for Instant Feedback: I want to incorporate an OLED screen that will show live grip strength data, allowing users to see their strength level and progress instantly with each squeeze.
  3. Implement Multi-Level LED Indicators: To make feedback more visual, I’ll add a series of LEDs that light up at different levels of grip strength. For example, green will represent light grip, yellow for medium, and red for strong, giving users an intuitive, color-coded response.
  4. Data Logging for Progress Tracking: I aim to add an SD card module to log grip strength data over time, stored in a CSV format. This feature will enable users to track their improvement and analyze their progress with tangible data.
  5. Enable Bluetooth or Wi-Fi Connectivity: I plan to incorporate wireless connectivity so that users can view their grip data on a smartphone app. This will allow them to track progress visually with graphs, set goals, and receive real-time feedback, making the recovery journey more engaging and motivating.

These upgrades will help make GripSense a comprehensive, interactive tool that supports and inspires users through their rehabilitation process.

Reading Reflection: Week 09

Reading Tigoe’s blog post, “Physical Computing’s Greatest Hits (and Misses),” I feel both inspired and challenged by the themes he describes. Physical computing, as he explains, is filled with opportunities for creativity and reinvention. Some themes—like theremin-like instruments or LED displays—show up in physical computing classes over and over again, but Tigoe reminds us that even if something’s been done a hundred times before, there’s always room to put your own spin on it. This resonates with me, especially when I catch myself thinking, “Is this idea too overdone?” It’s encouraging to realize that originality can come from how we interpret and reimagine these classic projects.

Then there’s the question, How can I make my work intuitive and open-ended at the same time? It’s tricky to strike the balance between guiding users and letting them explore freely. For example, in my “soccer bot” project, I wanted the bot to recognize and interact with a soccer ball by “kicking” it. But the challenge wasn’t just in the technical aspects of recognizing the ball and calibrating the bot’s stability; it was about making the interaction feel intuitive and natural, like something anyone could understand right away. I realized that if the bot’s movements felt intentional and even a little lifelike, users could engage with it without needing instructions, adding an unexpected layer of playfulness to the project.

Another question Tigoe’s post brings up is, Can technology actually communicate emotions or sensations? This is something he addresses when he talks about projects like “remote hugs” and “meditation helpers.” I agree with him—replicating emotions or calm states is complex, maybe even impossible in some cases. But I wonder if there are ways technology could enhance or evoke those states instead of replicating them. Maybe it’s not about simulating emotion but creating something that encourages users to bring their own feelings into the experience. This could be a reminder that emotional connections in interactive art come from the users, not just from the tech or design itself.

Second Reading:

The idea that interactive art should leave room for the audience to interpret, experience, and even shape it is powerful—and surprisingly challenging. As artists, we’re often conditioned to pour ourselves into our work as a complete expression of what we want to say. But interactive art pushes us to let go of that control, to see ourselves less as “sole authors” and more as facilitators of an experience that isn’t ours alone.

One thing that really resonates with me is Tigoe’s assertion that our role, especially in interactive art, is not to dictate meaning or guide the viewer’s every move, but to create a space where people can explore. I think this goes against the grain of traditional art, where the artist’s interpretation and intent are often front and center. For me, that’s what’s exciting about interactive art: it’s unpredictable. You’re creating an experience without fully knowing where it will go, and you have to be okay with that ambiguity. There’s something freeing about stepping back and letting the audience complete the work in their way, with their own reactions, ideas, and personal connections.

In my own projects, I’ve noticed that the most memorable moments come not from following my own scripts but from watching how others interpret and transform what I’ve made. I remember one piece where I built a simple interactive environment with lights and motion sensors to respond to presence and movement. I’d imagined that people would move slowly through the space, savoring the changing light patterns. Instead, they ran, laughed, and turned it into an almost game-like experience. It wasn’t what I envisioned, but it was better in many ways—more alive, more spontaneous. This unpredictability is what Tigoe captures when he says to “listen” to the reactions and responses. Observing others engage with your work like this gives you insights you couldn’t have planned for, and it makes the artwork feel truly collaborative.

Week 9: Day & Night Simulator

Video Link to final project: https://youtu.be/lS588oI_GPU

Concept

For this assignment, my concept was to simulate a day and night state using 2 LEDs and a photosensor. The digital sensor would be the switch, while the photosensor would be the analog sensor. One light should turn on while the other is off during each state. I was also inspired by this week’s readings, which discussed the idea of not being afraid to draw inspiration from what other artists have created. The articles by Tigoe helped me gather inspiration from various sources on the internet, such as our GitHub page. From there, I was able to develop this day and night simulation prototype.

Design and Execution

The following schematic represents the foundation on which I built this day and night simulator:

Schematic for day and night simulation

After drawing the schematic, I carefully assembled the entire circuit to represent the desired effect. The following code is the loop which allowed the entire idea come to life:

void loop() {
  int lightLevel = analogRead(photoPin); // Read photosensor value
  bool isDay = lightLevel > lightThreshold; // Determine if it's daytime
  Serial.println(lightLevel); // Print light level for debugging

  // Read switch positions
  bool switch1 = !digitalRead(switchPin1); // True if position 1 is active
  bool switch2 = !digitalRead(switchPin2); // True if position 2 is active

  if (switch1) {
    // Position 1: Both LEDs off
    digitalWrite(dayLed, LOW);
    analogWrite(nightLed, 0);
  } else if (switch2) {
    // Position 2: Daytime/Nighttime mode based on light sensor
    if (isDay) {
      // Daytime behavior
      digitalWrite(dayLed, HIGH); // Daytime LED on
      analogWrite(nightLed, 0);   // Nighttime LED off
    } else {
      // Nighttime behavior
      digitalWrite(dayLed, LOW);       // Daytime LED off
      analogWrite(nightLed, lightLevel / 4); // Nighttime LED brightness based on light level
    }
  }

  delay(100); // Small delay to smooth transitions
}

Finally, the project works, and here is a link that demonstrates the final outcome: https://youtu.be/lS588oI_GPU

Final Thoughts and Reflection:

This project allowed me to utilize previous knowledge and to learn and apply new concepts. I believe a great way to improve this project would be to have multiple lights that would react differently for day and night states. The challenge behind this would be wire management, and I believe there is a solution to this problem that I’m still yet to encounter. I am, however, curious about how this could manifest. This exercise is pivotal to my knowledge basket, as it will all contribute to my final project. That’s all for now!

Week 9: Reading responses.

Reflection on “Physical Computing’s Greatest Hits and Misses”

This reading covers both the successes and failures in the field of physical computing. It shows that the best projects are designed to be simple and easy for people to use, while projects that try to be overly complex or focus too much on technology alone often fail. The reading highlights that successful projects blend new technology with a strong focus on what users actually need and find helpful. Reading this, I realized how important it is to keep users in mind when designing, focusing on how they will interact with the system rather than just on the technology itself. When I work on my own projects, this idea of user-centered design can help me make choices that make my designs feel more useful and intuitive. This reflection reminds me to aim for a balance between innovation and usability, focusing on what will make the design easy and enjoyable to use.

 

Reflection on “Making Interactive Art: Set the Stage, Then Shut Up and Listen”

This reading talks about how artists can create interactive art by giving the audience space to explore and interpret the work on their own. Instead of controlling every aspect of the experience, the artist should set up a framework and then let the audience interact with it however they want. This approach lets people bring their own ideas and feelings into the art, creating a more personal connection. I find this approach inspiring because it gives people the freedom to experience the art in their own way, rather than the artist guiding them to a specific idea or feeling. In my own work, I usually try to direct how users should interact, but this reading has me thinking about how allowing more freedom can create a deeper, more meaningful experience. By stepping back and letting users take control, I can create projects that are more engaging and leave room for different interpretations.

Week 9: Reading Responses

Physical Computing’s Greatest Hits (and misses)

This Reading Physical Computing’s Greatest Hits (and Misses) has highlighted the common mistake of overlooking ideas or themes as I try to come up with designs. I am often worried about originality, feeling like I should avoid “overdone” ideas. This article, however, emphasises that these recurring themes—like interactive gloves, theremin-like instruments, or video mirrors—actually provide a solid foundation to explore new perspectives and bring a personal twist to well-loved concepts.

looking back, I think this is true as I have experienced myself that while many things are already done, starting from where others ended is always a good idea. Moving forward, I’m inspired to take into account the idea of  revisiting works of others and seek inspiration from various areas to come up with themes and adding my perspectives and twists for expressive and  engaging projects.

Making Interactive Art: Set the Stage, Then Shut Up and Listen

This reading emphasised to me the difference between traditional and interactive art. While traditional art expresses a clear message,  interactive art invites the audience to create their own meaning. I agree with the fact that to make interactions more meaningful, artist should set up a designs that encourages people to explore and interpret freely.

Going forward, I’ll focus on designing in a way that lets people discover things on their own. I’ll use hints and cues instead of instructions, removing anything unnecessary. My goal being to create experiences that spark curiosity, allowing each person to interact and interpret in their own way.

 

Week 9 – Assignment

Concept:

For this assignment, I decided to create a gender reveal project. I used a red LED and a button to represent “girl,” and a blue LED and button to represent “boy.”

Implementation:

When the red button is pressed, the red LED (representing “girl”) lights up. Similarly, when the blue button is pressed, the blue LED (representing “boy”) turns on.

int yellowLED = 13; // yellow LED
int blueLED = 9;    //  blue LED
int yellowButton = A0; // yellow button 
int blueButton = A2;   // blue button 
void setup() {  
  pinMode(yellowLED, OUTPUT);    
  pinMode(blueLED, OUTPUT);        
  pinMode(yellowButton, INPUT_PULLUP); 
  pinMode(blueButton, INPUT_PULLUP);   
}

void loop() {
  int switchPositionYellow = digitalRead(yellowButton);  
  int switchPositionBlue = digitalRead(blueButton);     

  // Check if both buttons are pressed at the same time
  if (switchPositionYellow == LOW && switchPositionBlue == LOW) {
    digitalWrite(yellowLED, LOW);  
    digitalWrite(blueLED, LOW);     
    delay(500);               

    digitalWrite(yellowLED, HIGH);  
    delay(500);
    digitalWrite(yellowLED, LOW);

    digitalWrite(blueLED, HIGH);    
    delay(500);
    digitalWrite(blueLED, LOW);
  }
  
  // If only the yellow button is pressed
  else if (switchPositionYellow == LOW) { 
    digitalWrite(yellowLED, HIGH);   // Turn ON yellow LED
    digitalWrite(blueLED, LOW);      // Turn OFF blue LED
  }

  // If only the blue button is pressed
  else if (switchPositionBlue == LOW) { 
    digitalWrite(yellowLED, LOW);    // Turn OFF yellow LED
    digitalWrite(blueLED, HIGH);     // Turn ON blue LED
  }

  // If neither button is pressed
  else {
    digitalWrite(yellowLED, LOW);    // Turn OFF both
    digitalWrite(blueLED, LOW);
  }
}

IMG_8148

Week 9: Digital and Analog LED Control

Concept

This week, I created a simple switch to control the lights of LEDs both digitally and in an analog way. For the digital control, I used basic switches, and for the analog control, I used a potentiometer. The potentiometer detects and measures the voltage based on how much the knob or slider is turned.

Schematic Diagram

Schematic diagram

 

Code
// Pin definitions for the RGB LED
const int redPin = 6;
const int greenPin = 5;
const int bluePin = 3;

// Analog input pins for potentiometers
const int redControl = A1;
const int greenControl = A2;
const int blueControl = A3;

void setup() {
  // Set RGB LED pins as outputs
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

  // Initialize serial communication for debugging
  Serial.begin(9600);
}

void loop() {
  // Read values from potentiometers (0-1023 range)
  int redValue = analogRead(redControl);
  int greenValue = analogRead(greenControl);
  int blueValue = analogRead(blueControl);

  // Map potentiometer values to PWM range (0-255)
  int redBrightness = map(redValue, 0, 1023, 0, 255);
  int greenBrightness = map(greenValue, 0, 1023, 0, 255);
  int blueBrightness = map(blueValue, 0, 1023, 0, 255);

  // Set the brightness of each color channel
  analogWrite(redPin, redBrightness);
  analogWrite(greenPin, greenBrightness);
  analogWrite(bluePin, blueBrightness);

  // Print the brightness values to the Serial Monitor
  Serial.print("Red:   ");
  Serial.print(redBrightness);
  Serial.print("\tGreen:   ");
  Serial.print(greenBrightness);
  Serial.print("\tBlue:   ");
  Serial.println(blueBrightness);
  
  // Short delay to make output more readable
  delay(100);
}

Video Demonstration of my design can be seen below:

Reflection for future works

I am proud of the progress I made in designing and implementing the analog and digital switch controls for the LEDs. This simple project has greatly enhanced my understanding of how these systems work. I look forward to taking on more challenging tasks, particularly those that involve further manipulation of analog signals.

Week 9 – Reading Response

Physical Computing’s Greatest Hits (and misses)

In Physical Computing’s Greatest Hits (and Misses), the author discusses recurring themes in physical computing projects, noting that while some ideas are popular for their simplicity and aesthetic appeal, others provide deeper interactive potential. These themes offer valuable learning opportunities and room for original interpretation, encouraging students not to shy away from them despite their repeated use. The author reviews various common projects, including musical instruments, interactive gloves, video mirrors, and mechanical pixels, each presenting unique interaction possibilities.

One example that stood out to me was the drum gloves. This project is intriguing because it uses a familiar gesture—tapping—to create music, leveraging a natural human rhythm. The gloves transform finger movements into drum sounds, adding a playful and structured interaction that feels intuitive. By applying sensors to each fingertip, this project highlights how everyday gestures can be amplified through physical computing, making it accessible and engaging. The concept demonstrates how physical computing can make technology feel natural, bridging the gap between digital and physical interaction.

Making Interactive Art: Set the Stage, Then Shut Up and Listen

In Making Interactive Art: Set the Stage, Then Shut Up and Listen, Tom Igoe argues that interactive art should let participants interpret and engage on their own terms, without over-explanation from the artist. By giving only minimal cues, artists create an environment for discovery, allowing users to shape their own experiences. I agree with Igoe; interactive media should be intuitive and self-explanatory, engaging participants in a personal way. This approach aligns with our midterm project presentations, where we were encouraged to figure out each other’s games independently before hearing the creator’s explanation, fostering genuine exploration and interaction.