Juhi Kedia

Harmonize: The Stress-Responsive Water Dispenser 

Simple narrative description-

A wooden stand with sliders on top, and a button in the front. The users can slide the sliders and input how stressed they are, then press the button to dispense water. The temperature of the water dispensed will depend on how stressed the user is, as the device contains both hot and cold water. 

Final Product - 

Detail Photos - 

Working Video - 

IMG_7354.MOV

(Extreme cases i.e. very high and very low stress levels)

IMG_7353.MOV

(Continuous values )

IMG_7355.MOV

(Value ranging in the middle)

Progress Images - 

Initial discussions focused on the form and additional elements that could transform this product into a holistic experience, complemented by sketches to refine the valve mechanism for the water dispenser.  

Quick experimentation with laser-cut holes to fit bearings, exploring the pulley mechanism dynamics. Multiple layers were cut in a pattern to test the movement of bearings and to observe the concept of addition in action.  

Further refinement of the pulley system led to the creation of a looped design. The constrained and systematic movement of two pulleys, set at a fixed distance from each other, enables precise motion.  

Then I started my exploration of electronics. I started mapping the rotary encoder with the peristaltic pumps and understanding the step system to figure out the value needed for correct dispensation. Because of the sensitivity of the rotary encoder I initially faced difficulties as with every iteration I was getting different values. 

Improved on an existing file for the pulleys provided by Professor Zach to create a custom-sized pulley to hold the ball bearings also helped me create a better mechanism for the mechanical function of this project rather than relying on just the bearing screws. 


Experimenting with the tension of the string also led to a lot of learning for me in the field of mechanics. 

Another creation, that I really enjoyed was the progress of fabrication. As with this project, I worked with parts I never did before. Housing these parts inside the device was an interesting approach, rather than leaving them lose in the box. 

After assembling the whole device, I feel labeling the system also helped improve the interaction with the device. As the device didn't have any visual aesthetic, the traditional marking informed the system usage. 

Process Reflection - 

Reflecting on the creation of "Harmonize: The Stress-Responsive Water Dispenser," I find myself immersed in a journey that blended the realms of art, technology, and wellness. This project was a profound learning curve, highlighting both the intricacies of integrating mechanical and digital systems and the nuances of designing for human interaction and emotional well-being.

One of the most challenging aspects of the project was the integration of the mechanical adder system. Achieving precision in stress measurement while maintaining a user-friendly interface required meticulous attention to detail, particularly in the placement of pulleys and the tension of strings. This challenge, however, became a valuable lesson in the importance of precision engineering and user-centric design. It pushed me to refine my skills in mechanical design and to think deeply about how users interact with technology on an intuitive level. The use of peristaltic motors and experimenting with various digital components also expanded my technical repertoire, introducing me to new possibilities and limitations within hardware design.

The process of creating Harmonize also brought to light the delicate balance between functionality and aesthetic appeal. The decision to use mechanical sliders for input and the dispensation of water based on stress levels was not just a technical choice, but also a design decision that greatly influenced the user experience. This element of the project underscored the importance of integrating form and function harmoniously. In retrospect, exploring different design materials or incorporating more visually stimulating elements could have enhanced the product's appeal and user engagement. This hindsight offers a valuable perspective for future projects, emphasizing the impact of aesthetic choices on the functionality and reception of a product.

 Looking forward, I am excited to continue exploring the intersection of technology, and wellness. This project has not only honed my technical skills but also deepened my understanding of how technology can be used to enhance personal well-being. The lessons learned from Harmonize will undoubtedly inform my future work, driving me to create more innovative, user-centered, and emotionally resonant technologies. As I continue on this journey, I am keen to explore new ways to blend aesthetics with functionality, making technology not just a tool but an extension of our emotional and physical experiences.

Code- 

/*

   Project Title: Harmonize: The Stress-Responsive Water Dispenser


   Author: Juhi Kedia


   Description:

   This Arduino sketch is designed for the 'Harmonize: The Stress-Responsive Water Dispenser' project.

   The code primarily facilitates the control of two motors based on the input from a rotary encoder

   and a push button. The encoder measures stress levels, and the motors respond accordingly to dispense

   water at a temperature that corresponds to the measured stress level. The stress levels are mapped to

   motor speeds, where one motor represents hot water and the other cold water. The combination of these

   two motors' speeds determines the final water temperature. The button acts as a trigger to start the

   water dispensing process. Serial communication is used for monitoring the encoder's position and

   debugging purposes.


   Pin Mapping:

   - Motor A Control Pins:

     - mot_A1 -> Pin 6

     - mot_A2 -> Pin 9

   - Motor B Control Pins:

     - mot_B1 -> Pin 10

     - mot_B2 -> Pin 11

   - Button Pin:

     - buttonPin -> Pin 7

   - Encoder Pins:

     - Encoder Signal 1 -> Pin 2

     - Encoder Signal 2 -> Pin 3


   Note:

   This code is part of a larger system that includes mechanical and electrical components

   beyond what is controlled directly by this sketch.

*/



#include <Encoder.h>


// Motor pin definitions

const int mot_A1 = 6;

const int mot_A2 = 9;

const int mot_B1 = 10;

const int mot_B2 = 11;


const int buttonPin = 7;


bool buttonPressed = false;


unsigned long serialTimer;

const unsigned long SERIALDELAY = 500;


// Encoder pin definitions

Encoder myEnc(2, 3);


void setup() {

  // Initialize serial communication

  Serial.begin(9600);

  Serial.println("Motor Control with Encoder:");


  // Initialize motor pins as output

  pinMode(mot_A1, OUTPUT);

  pinMode(mot_A2, OUTPUT);

  pinMode(mot_B1, OUTPUT);

  pinMode(mot_B2, OUTPUT);


  pinMode(buttonPin, INPUT);

}


void loop() {


  buttonPressed = digitalRead(buttonPin);


  // Read the current position of the encoder

  long position = myEnc.read();


  // Print the current position to the Serial Monitor

  // Serial.print("Encoder Position: ");


  if (millis() - serialTimer >= SERIALDELAY) {

    Serial.println(position);

    serialTimer = millis();

  }


  // Map the encoder position (0-25) to motor speed for motor A (0-100)

  int motorSpeedA = map(position, 0, 152, 0, 100);


  // Map the encoder position (0-25) to motor speed for motor B (100-0)

  int motorSpeedB = map(position, 0, 152, 100, 0);


  if (buttonPressed) {

    // Apply the mapped speed to motor A and B

    controlMotorA(motorSpeedA);

    controlMotorB(motorSpeedB);

  } else {

    // Turn off motors when button is not pressed

    controlMotorA(0);

    controlMotorB(0);

  }

  // Add a delay for stability

  //delay(100);

}


void controlMotorA(int speed) {

  // Ensure speed is within 0-100 range

  speed = constrain(speed, 0, 100);


  // Scale speed to PWM range (0-255)

  int pwmValue = map(speed, 0, 100, 0, 255);


  // Control motor A direction and speed

  analogWrite(mot_A1, pwmValue);

  analogWrite(mot_A2, 0);

}


void controlMotorB(int speed) {

  // Ensure speed is within 0-100 range

  speed = constrain(speed, 0, 100);


  // Scale speed to PWM range (0-255)

  int pwmValue = map(speed, 0, 100, 0, 255);


  // Control motor B direction and speed

  analogWrite(mot_B1, 0);

  analogWrite(mot_B2, pwmValue);

}