Fall 2019: Final Project
Yiting and I planned to partner up for the PComp Final project. Since we both come from very strong cultural roots, we decided to embed that into our project. We both were talking about food and soon realized how our culture’s food was modified here in America. We both wanted to make everyone aware of the traditional ways and methods to cook Indian and Chinese cuisines.
While our idea is still rough and subjected to change, we decided to have an interactive piece wherein users can add various non-edible objects into a bowl and see on the screen what ingredients these objects represent. These ingredients would be the true ingredients used in our traditional cuisines to help understand what goes into making our meals.
Yiting and I modified and summarized our concept as a physical interactive platform that allows you to learn traditional Chinese/ Indian cuisine through visual representation.
The physical interactive platform includes a big mixing bowl in the center with five ingredients bowls around, a spoon with an accelerator attached, and two buttons. Users are prompted to push the “START” button to initiate the act of mixing ingredients. They have to reach inside the bowl to trigger the motion sensor which will be displayed on the visual representation. When the action is finished, the bottom of the bowl will light up to show that the bowl is selected. This will be easy to troubleshoot in the future as well. The ingredients that do not belong to these traditional recipes, will be notified to the user through red LED inside and a screen ERROR notification. Users only have 1 minute to guess the right ingredients/recipe. In the end, when the “PRINT” button is pressed on the platform, the recipe will be printed.
Visually, the ingredient from corresponding bowl will be shown on the screen for the users to know the ingredients they are picking for a certain recipe. When they move their hand from the ingredient bowl to the mixing bowl, the accelerator on the spoon will display the movement on the screen. When the timer is up, the screen will display “GAME OVER” and “Please collect your recipe”. The recipe cards will be given out by a slot machine at the prompt of a push button “PRINT”.
To restart the game, press the START button.
We mapped out a rough timeline to work on our project:
November 4th – 10th
Create a paper prototype
Experiment with five motion sensors to map out the distance – physical wiring
Buy big bowl
3D print files (https://grabcad.com/library/card-dispenser-2) OR NOT
First version of the mechanics for sliding cards (link)
Motion sensor with Arduino Schematics and tutorials (link)
November 11th – 17th
Experiment with UI + Recipe cards
Connect UI to motion sensor (serial communication)
Experiment with accelerometer
November 18th – 24th
Buy Acrylic sheet – cover
Buy LED stripe for the box + LED ring
Fabrication
Slot machine fabrication (DC Motor)
Enclosure
November 25th – December 1st
De-bug
Putting the circuit and fabrication together
User-testing
December 2nd – December 9th
De-bug and Polish
Documentation + User testing
Design end of things:
Yiting and I then went material shopping to Canal plastics and the Container Store to buy the small and big bowls. We bought a pipe of 3.5” diameter and decided to make four small bowls of 2.5” tall each and cut the lid off the big bowl that we bought from the Container store. I cut the small bowls using the band saw of 2.5” height.
I coded a simple sketch on p5js to then help our classmates user-test the initial flow and visual of the game.
Meantime Yiting coded the ultrasonic sensors to test a certain distance and provide an output. While Yiting coded for the sensors, I shortlisted the various ingredients for the recipes. I chose the Indian Biryani and Yiting picked Chinese Pepper with Pork. I coded individual layers on p5js for the dishes (eg, spice layers, protein layer etc). On the visual side of the code, I coded the individual layers of ingredients required for our cuisines, while Yiting coded the movement of the ingredients from the small bowls to the big bowl. On combining the code, we managed to have a user test for people to click on the ingredients they liked on the sketch which would then fill the big bowl. On observing the way people used our half cut bowls, we noticed that people picked up the small bowls to drop the ingredients, some of them were concerned about the cards from the slotting machine but at the same time wanted to have their own recipe and the traditional recipe.
Yiting then 3D printed a knob for our encoder which turned out to be a little too small. And so a few weeks into the project, I 3D printed the encoder knob twice to get the right size that looked visually holistic with our project.
On noticing the size of the laser cutter which is 12 by 24 inches, we changed the measurements to the size of the machine in order to laser cut parts for the bowls and encoder to stick through from. And so we divided the acrylic sheet into one rectangle of 12×22” for all the bowls and another rectangle of 5×22” for button, encoder and bar code.
Code end of things:
Yiting was a lot of help on the serial communication side of the code. I managed to code ingredients into layers for both the cuisines and along with the help of Yiting and a few office hours, we combined the code of my layers, with Yiting’s serial communicated, plus the various game interfaces.
I also managed to code the initial trigger of the push button on the Arduino IDE, after which Yiting combined the trigger command into the serial communication sketch.
Our final code on p5js along with serial communication of the button (to start the game), the encoder (to pick between layers), and the picking of ingredients itself looked like this.
We ran into a couple of complications regarding the code the Bowl object and the images of the ingredients on these objects set as an array. Each of these images of the ingredients had a corresponding name to help us collect the chosen ingredient into the user ingredient array.
Another problem I ran with the code was the conditional statements to figure out the percentage of how close the recipe was to the traditional recipe at the end of the game for our users to have a score. My first instinct was to take the sum of the right ingredients, divide it by the sum of the sum of the total ingredients and then multiply into 100. Unfortunately, we realized that the sum could not be calculated since the ingredients were stored in an array of names and not individual objects.
iting first made a box out of plywood using wood glue, however, this made the box pretty flimsy and easily bending. We then bought many L brackets and drilled them into our box to make it a whole lot sturdier, which could carry the weight of both the acrylic sheets.
Projection end of it:
Throughout the process of working on this project, Yiting and I made a lot of decisions in regards to using the projector. One of the weeks with Jake’s help, I tightened the projector on the ceiling rod.
However, after my office hours with one of the residents I was told to use Syphon (for the html link of the p5) and Madmapper as our software for the projection mapping. After a lot of understanding how Mapmapper works, we managed some projection onto our box, however ran into a few problems. The translucent acrylic sheet that we used for our box did not allow the projection to be sharp and clear which made it very hard for people to read prompts. The projector was lagging behind after the sensors already tested and showed the ingredients in the big bowls after a few seconds had already passed. And for some reason, our projector was projecting weird tints of green and pink, making it hard for the user to see and identify the images immediately.
Here is a video to explain the problems with the projection.
https://drive.google.com/file/d/1P6zeuFFFHONG0UfOzXaiiATI9Wc-Qohp/view?usp=sharing
In the end we decided to go ahead with a monitor instead of a projector to make it less confusing for our users and have the flow of the game more effortless.
After all the working, our final project looked something like this: