Project tutorial
Emonion: A Cathartic Onion-Cutting Experience

Emonion: A Cathartic Onion-Cutting Experience

A working prototype of a cutting board that plays your own sad song for when you cut an onion

  • 210 views
  • 0 comments
  • 1 respect

Components and supplies

A000066 iso both
Arduino UNO & Genuino UNO
×1
Tactile switches
×2
LCD display
×1
LCD display
×1

About this project

Team members

Lee Hamstra

Haley Rowland

Anna Carey

Tessira Crawford

Phoebe Lin

Project Description

In response to the task of developing a new kitchen object, our group wanted to create an experience that was slightly unconventional, yet still relatable to anyone using the kitchen. Onions are a common ingredient in thousands of recipes, and all cooks, home cooks and professional chefs alike, have probably experienced the sting from its fumes and the inevitable tears that follow. Our team focused on this crying experience and the "emOnion" cutting board was born. When using the emOnion, users select their preloaded sad song on the attached LCD screen and when the cutting board detects pressure from the act of cutting an onion, their sad song will play. If the user stops cutting, the music will stop as well. There is even a tissue compartment to dry your tears. This musical accompaniment is designed to foster a therapeutic and potentially, stimulating setting, even when the task at hand is something as uninteresting as cutting up a vegetable. For all cooks looking to enhance the onion-cutting experience, we present to you... the emOnion!

Observational Documentation

During our brainstorm phase, our group did some field research in the kitchen. Some of the notes we generated were:

- kitchen is where much of the socializing happens

- majority of time often spent with some kitchen tool (pan, cutting board, spatula)

- counter gets dirty really fast

Afterwards, we decided to set our focus on improving an existing kitchen tool and we chose the cutting board. We discovered that the cutting board had two flaws: (1) cutting vegetables and fruit is a tedious and boring task (2) it becomes a mess when the cut food goes all over the place

Design Process

We decided to create a cutting board with the shape of an onion to emphasize to users that the board is specifically designed for cutting onions, even though users could use the board for cutting other vegetables. Some of the key aspects we designed for solved the following concerns:

- how to not get the electronics wet

- easy maintenance

- aesthetic appearance

To kill the first two birds with one stone, we created a multilayer board with the topmost layer made of acrylic and the bottom two layers made of birchwood. The acrylic layer is detaches from the board and is easy to clean, so after the user finishes cutting, the acrylic can be taken out and cleaned. This minimizes the likelihood of the electronics compartment of coming into contact with water. The acrylic layer also helps prevent the onion engraving on the wooden layer below from getting dirty. Lastly, one of our biggest design challenges was fitting the arduino and wiring into the electronics compartment. While experimenting, we found that having two breadboards led to the enclosure being absurdly large relative to the rest of the cutting board. It thus evolved from a clunky, rectangular mold to a sleek, rounded shape that maximized space, and we managed to fit the electronics all on one breadboard. We also opted for an open-back design as opposed to a closed-back for additional space. The acrylic piece that joins the two 3D printed parts is located right where the LEDs light up when the buttons are pressed or when music is playing. Overall, the shape of electronic enclosure affords easy transport and fits all of the necessary components.

Video

Instructable and Illustrator files

Arduino code
Untitled file

Warning: Embedding code files within the project story has been deprecated. To edit this file or add more files, go to the "Software" tab. To remove this file from the story, click on it to trigger the context menu, then click the trash can button (this won't delete it from the "Software" tab).

// transistor controlled audio

#include <LiquidCrystal.h> // include LCD library

LiquidCrystal lcd (7,6,5,4,3,2); // initialize LCD object on relevant pins

const int PLAY=9;    // transistor controlling PLAY on pin 9
const int NEXT=10;    // transistor controlling NEXT on pin 8
const int PREV=8;   // transistor controlling PREVIOUS on pin 10

const int NEXTBUT=11; // NEXT button on pin 11
const int PREVBUT=12; // PREVIOUS button 2 on pin 12
const int PLAYPOT=0; // Play pressure sensor on analog pin 0

boolean last_NEXTBUT = LOW;    // booleans for debounce function
boolean current_NEXTBUT = LOW;
boolean last_PREVBUT = LOW;
boolean current_PREVBUT = LOW;

int user = 1;

boolean playing = false;

void setup()
{
  pinMode(PLAY, OUTPUT);
  pinMode(NEXT, OUTPUT);
  pinMode(PREV, OUTPUT);
  
  pinMode(NEXTBUT, INPUT);
  pinMode(PREVBUT, INPUT);
  
  lcd.begin(16, 2);
  lcd.print("    emOnion");
  delay(2000);
  lcd.clear();
  display_username(user);
  delay(1000);


}


void loop()
{


  if(analogRead(PLAYPOT) > 120)
  {
    if (playing == false){
    digitalWrite(PLAY, HIGH);
    delay(100);
    digitalWrite(PLAY, LOW);
    delay(200);
    playing = !playing;
    }
    
    
  }
  
  current_NEXTBUT = debounce(NEXTBUT, last_NEXTBUT);
  if(last_NEXTBUT == LOW && current_NEXTBUT == HIGH)
  {
    if (playing == true)
    {
      playing = !playing;
    }
    
    user = user++;
    if(user > 3){
      user = user - 3;
    }
    
    lcd.clear();
    display_username(user);
    
    if(playing == true)
    {
      digitalWrite(NEXT, HIGH);
      delay(100);
      digitalWrite(NEXT, LOW);
 
      digitalWrite(PLAY, HIGH);
      delay(200);
      digitalWrite(PLAY, LOW);
    }
    else
    {
      digitalWrite(NEXT, HIGH);
      delay(100);
      digitalWrite(NEXT, LOW);
      
      digitalWrite(PLAY, HIGH);
      delay(200);
      digitalWrite(PLAY, LOW);
    }

  }
  
  current_PREVBUT = debounce(PREVBUT, last_PREVBUT);
  if(last_PREVBUT == LOW && current_PREVBUT == HIGH)
  {
    
     if (playing == true)
    {
      playing = !playing;
    }
    
    user = user--;
    if(user < 1){
      user = 3;
    }
    
    lcd.clear();
    display_username(user);
    
    if(playing == true)
    {
      digitalWrite(PREV, HIGH);
      delay(100);
      digitalWrite(PREV, LOW);
    
      digitalWrite(PLAY, HIGH);
      delay(200);
      digitalWrite(PLAY, LOW);
    }
    else
    {
      digitalWrite(PREV, HIGH);
      delay(100);
      digitalWrite(PREV, LOW);
      
      //digitalWrite(PLAY, HIGH);
      //delay(200);
      //digitalWrite(PLAY, LOW);
    }
  }


}

// debounce function
//boolean switchPin;
boolean debounce(boolean switchPin, boolean last)
{
  boolean current = digitalRead(switchPin);
  if (last != current)
  {
    delay(15);
    current = digitalRead(switchPin);
  }
}


void display_username(int i)
{
  if (i==1){
    lcd.print("Onioner:");
    lcd.setCursor(0,1);
    lcd.print("Lee");
  }
  else if (i==2){
    lcd.print("Onioner:");
    lcd.setCursor(0,1);
    lcd.print("Tessira");
  }
  else if (i==3){
    lcd.print("Onioner:");
    lcd.setCursor(0,1);
    lcd.print("Chris");
  }
}
STL files

Code

emOnion_code.txtPlain text
Arduino code
// transistor controlled audio

#include <LiquidCrystal.h> // include LCD library

LiquidCrystal lcd (7,6,5,4,3,2); // initialize LCD object on relevant pins

const int PLAY=9;    // transistor controlling PLAY on pin 9
const int NEXT=10;    // transistor controlling NEXT on pin 8
const int PREV=8;   // transistor controlling PREVIOUS on pin 10

const int NEXTBUT=11; // NEXT button on pin 11
const int PREVBUT=12; // PREVIOUS button 2 on pin 12
const int PLAYPOT=0; // Play pressure sensor on analog pin 0

boolean last_NEXTBUT = LOW;    // booleans for debounce function
boolean current_NEXTBUT = LOW;
boolean last_PREVBUT = LOW;
boolean current_PREVBUT = LOW;

int user = 1;

boolean playing = false;

void setup()
{
  pinMode(PLAY, OUTPUT);
  pinMode(NEXT, OUTPUT);
  pinMode(PREV, OUTPUT);
  
  pinMode(NEXTBUT, INPUT);
  pinMode(PREVBUT, INPUT);
  
  lcd.begin(16, 2);
  lcd.print("    emOnion");
  delay(2000);
  lcd.clear();
  display_username(user);
  delay(1000);


}


void loop()
{


  if(analogRead(PLAYPOT) > 120)
  {
    if (playing == false){
    digitalWrite(PLAY, HIGH);
    delay(100);
    digitalWrite(PLAY, LOW);
    delay(200);
    playing = !playing;
    }
    
    
  }
  
  current_NEXTBUT = debounce(NEXTBUT, last_NEXTBUT);
  if(last_NEXTBUT == LOW && current_NEXTBUT == HIGH)
  {
    if (playing == true)
    {
      playing = !playing;
    }
    
    user = user++;
    if(user > 3){
      user = user - 3;
    }
    
    lcd.clear();
    display_username(user);
    
    if(playing == true)
    {
      digitalWrite(NEXT, HIGH);
      delay(100);
      digitalWrite(NEXT, LOW);
 
      digitalWrite(PLAY, HIGH);
      delay(200);
      digitalWrite(PLAY, LOW);
    }
    else
    {
      digitalWrite(NEXT, HIGH);
      delay(100);
      digitalWrite(NEXT, LOW);
      
      digitalWrite(PLAY, HIGH);
      delay(200);
      digitalWrite(PLAY, LOW);
    }

  }
  
  current_PREVBUT = debounce(PREVBUT, last_PREVBUT);
  if(last_PREVBUT == LOW && current_PREVBUT == HIGH)
  {
    
     if (playing == true)
    {
      playing = !playing;
    }
    
    user = user--;
    if(user < 1){
      user = 3;
    }
    
    lcd.clear();
    display_username(user);
    
    if(playing == true)
    {
      digitalWrite(PREV, HIGH);
      delay(100);
      digitalWrite(PREV, LOW);
    
      digitalWrite(PLAY, HIGH);
      delay(200);
      digitalWrite(PLAY, LOW);
    }
    else
    {
      digitalWrite(PREV, HIGH);
      delay(100);
      digitalWrite(PREV, LOW);
      
      //digitalWrite(PLAY, HIGH);
      //delay(200);
      //digitalWrite(PLAY, LOW);
    }
  }


}

// debounce function
//boolean switchPin;
boolean debounce(boolean switchPin, boolean last)
{
  boolean current = digitalRead(switchPin);
  if (last != current)
  {
    delay(15);
    current = digitalRead(switchPin);
  }
}


void display_username(int i)
{
  if (i==1){
    lcd.print("Onioner:");
    lcd.setCursor(0,1);
    lcd.print("Lee");
  }
  else if (i==2){
    lcd.print("Onioner:");
    lcd.setCursor(0,1);
    lcd.print("Tessira");
  }
  else if (i==3){
    lcd.print("Onioner:");
    lcd.setCursor(0,1);
    lcd.print("Chris");
  }
}

Custom parts and enclosures

H1-1.stl
STL files
H2-2.stl

Comments

Similar projects you might like

Telegram Bot with ESP8266

Project tutorial by Shebin Jose Jacob

  • 41,706 views
  • 44 comments
  • 77 respects

2Wheelz

Project tutorial by 5 developers

  • 4,349 views
  • 10 comments
  • 1 respect

Arduino-Based Pressure Cooker Whistle Indicator

Project tutorial by sourav344

  • 2,151 views
  • 3 comments
  • 8 respects

feeld

Project tutorial by 5 developers

  • 1,775 views
  • 1 comment
  • 14 respects

Home Automation Using Raspberry Pi 2 And Windows 10 IoT

Project tutorial by Anurag S. Vasanwala

  • 326,749 views
  • 101 comments
  • 786 respects
Add projectSign up / Login