Investigation I - Chilly Toaster

Made by jhli2

Looking to make some toast in the morning? It’s a bit cold out and your new toaster is gonna need to get warmed up before you get your toast. Once it feels warmed up, only then will it make your toast. It’ll shiver until it gets heated up. Its colors will show which state it’s in. Hopefully it’s not too cold that morning.

Created: February 17th, 2023

0

Intention

 My initial goal with the Chilly Toaster was to create an understanding of how we are expected to interface with our appliances, and what happens when those understandings change. I decided to question this by creating a toaster that needs to be heated up in order to work, a confusing concept when a toaster is a device that we expect to heat up things on its own. The intention is to give the toaster a sense of what it means to be cold or warm, much like humans, but also some machines (i.e. cars need to be heated up in the winter). The intention was that the toaster would not function unless it was satisfied with how warm it feels. In addition to having the toaster express itself through the LED strip, I wanted the toaster to be able to have some agency over whether or not it will actually work. For the LED, I wanted this to be an indicator to the user of how the toaster “felt”. The colors and animations on the LEDs would reflect this.   

0

Context

One of my initial ideas came from the thinking that cars in the winter need to have their engines run for a period of time in order to warm up before driving. I wanted to extend this idea to my toaster, but instead of having it be for mechanical purposes, it is more related to how the toaster “feels”.

Another inspiration for my line of thinking with this project was Simone Rebaudengo’s Addicted Products project, which questioned our relationship with objects and our ownership of them. While not directly related to my thinking with the toaster, I found the notion of giving an object agency to just leave to be very interesting. I took it as inspiration for Chilly Toaster, to think about giving the toaster some agency in the same way.

The project that explored in my think piece, Trainable Measures, also inspired some of my thinking for the Chilly Toaster. In Trainable Measures, kitchen helpers were given the ability to understand a human’s sense of a “pinch” of an ingredient. I tried to incorporate this into Chilly Toaster as well, thinking about giving the toaster a human’s sense of “chilly”. 

0

Prototype/Outcome

My prototype initially began with the Arduino and its temperature sensor, a NeoPixel LED strip, and a toaster. Later on, I added a servo motor in order to physically illustrate the idea that the toaster would not work.

The final prototype has a LED attached to the bottom rim of the toaster, with a servo attached to the front edge. The servo has a popsicle stick attached to it, and the default position of the stick is underneath the tab of the toaster that needs to be pulled down in order to toast. When the toaster feels that it has been sufficiently heated up, the servo will rotate out, allowing the user to use the toaster. The LEDs blink blue when the toaster is “shivering”, but when the toaster is warmed up, the LEDs will turn green, and then hold red for 5 seconds unless the temperature is kept.

Bill of Materials:

1 Toaster

1 Nano 33 BLE Sense

1 Breadboard

3 Male-Male Jumper Wires

1 30 Count NeoPixel LED Strip

1 Servo

1 Popsicle Stick

Tape

0
#include <Servo.h>

#include <Adafruit_NeoPixel.h>

//provides information about the LED strip
#define PIXEL_PIN D11
#define PIXEL_COUNT 30
#define PIXEL_TYPE NEO_GRB + NEO_KHZ800


Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

//sets all of the colors used
uint32_t red = strip.Color(255, 0, 0);
uint32_t blue = strip.Color(0, 0, 255);
uint32_t white = strip.Color(255, 255, 255);
uint32_t green = strip.Color(0, 255, 0);
uint32_t orange = strip.Color(255, 165, 0);

int condition = 0;

Servo servo;
int servoPin(D10);

bool updatePosition = true;

#include <Arduino_LPS22HB.h>

//sets the current temperature as a global variable to be compared later on, set as 0 for now
float temperature = 32;
float newTemperature = 0;

void setup() {
  strip.begin();
  strip.show();//intialize all pixels to off
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(LEDR, OUTPUT);
  pinMode(LEDB, OUTPUT);
  pinMode(LEDG, OUTPUT);
  //above sets up the led to be the output
  while (!Serial);
  digitalWrite(LEDR, HIGH);
  digitalWrite(LEDB, HIGH);
  digitalWrite(LEDG, HIGH);

  servo.attach(D10);

  if (!BARO.begin()) {
    Serial.println("Failed to initialize pressure sensor!");
    while (1);
  }
  //BARO.begin();
  //temperature = BARO.readTemperature();

}
void loop() {
  //set the servo to the blocked/default position
  newTemperature = BARO.readTemperature();
  // read the sensor value
  float pressure = BARO.readPressure();
  // if condition is already met, just keep LEDs as green
  if (condition == 1) {
    strip.fill(orange, 0, 29);
    strip.show();
    delay(5000);
    condition = 0;
  }
  if (condition == 0) {
    //flicker the light until the condition is met
    //float tempDiff = 0;
    //tempDiff = newTemperature - 32;
    if (BARO.readTemperature() - 23.5 < 2){
      servo.write(0);
      delay(1000);
      strip.fill(blue, 0, 29);
      strip.show();
      strip.setBrightness(200);
      strip.show();
      delay(random(25,100));
      strip.setBrightness(50);
      strip.show();
      delay(random(25,100));
      newTemperature = BARO.readTemperature();
      //tempDiff = BARO.readTemperature() - 32;
      Serial.println(newTemperature);
      //Serial.println(tempDiff);
    }
    //if the temperature difference is met, the color will change and the servo will open
    if (BARO.readTemperature() - 23.5 > 2){
        strip.fill(green, 0, 29);
        strip.show();
        servo.write(150);
        delay(2500);
        condition = 1;
    }
  }

  // print the sensor value
  //Serial.print("Pressure = ");
  //Serial.print(pressure);
  //Serial.println(" kPa");

    //else if(BARO.readTemperature() < temperature){
    //  strip.fill(blue, 0, 29);
    //  strip.show();
  //}

  // print the sensor value
  Serial.print("Temperature = ");
  Serial.print(newTemperature);
  Serial.println(" C");
  Serial.print(newTemperature - temperature);
  Serial.print(condition);

  // print an empty line
  Serial.println();
  //temperature = BARO.readTemperature();
  // wait 1 second to print again
  delay(250);
}
Click to Expand
0

Process

As someone that is fairly unfamiliar with coding in general, as well as physical computing, this project at the start was rather intimidating. However I think that the formatting of the 2 weeks made it much easier to understand each of the pieces one by one and better understand how they would come together in my prototype.

My first process log was simply just beginning to link the output of the temperature sensor to the LED on the Arduino board (although this was unsuccessful). In the second project log, I was able to have the onboard LED change color based on whether the newly recorded temperature was greater or less than the previous temperature. For the third project log, I shifted away from the sensor and focused on linking the Arduino to having an output through the LED. I used a script to make the Arduino randomly flip colors. The fourth project log was a combination of the code from the second and third logs. I was able to get the Arduino to change the LED based on whether the temperature sensed increased or decreased. 

0

Open Questions and Next Steps

One of the major unresolved issues with this iteration was how can the toaster be more random in finding a “satisfied” temperature. For the presented prototype, the temperature base was set based on reading taken from the setting in that moment. Ideally, the toaster will be able to sense this on its own based on the context.

Another comment that came up during the demo was integrating the temperature sensor more seamlessly into the toaster. One idea that was brought up was what if the user was able to “hug” the toaster by placing both hands around it? Moving forwards, it would be interesting to explore what it means to heat up something with a hug. Could the toaster have a variety of emotions that different gestures could solve? What are human emotions associated with a hug that a toaster could feel?

Some smaller comments regarded the aesthetics of how you physically signal that the toaster will not work (better than a taped on servo with a popsicle stick), as well as the “shivering” animation being smoother. 

0

Reflection

I think that as a whole, I am really glad that I was able to have a functioning demo. My coding and computing background made me feel a bit nervous going into this project, but I think the overall process felt a lot less stressful than I had initially expected it to be. From a purely technical standpoint, I would say that this project was a success for me for just being able to learn enough about Arduino to code this project.

I think that while the execution had opportunities for improvement, the reception to the idea of the project was in line with what I was hoping for. I think that adding more human-like features such as a googly eyes or a beanie on the toaster would have helped to improve the reception to the toaster, but also build on the understanding of the “human” emotions that the toaster feels. I also feel that the engagement with the toaster was a bit lacking. The interaction between the user and the toaster can go by rather fast, but having a longer sequence with the LED might have helped to suggest how the toaster is feeling as the temperature is changing. 

x
Share this Project


About

Looking to make some toast in the morning? It’s a bit cold out and your new toaster is gonna need to get warmed up before you get your toast. Once it feels warmed up, only then will it make your toast. It’ll shiver until it gets heated up. Its colors will show which state it’s in. Hopefully it’s not too cold that morning.