Noodlebot
Hello world! In this technological era where everything is
automated, why haven’t we automate our cooking systems? Most of us still cooks food the conventional wave either using a stove or other methods. But what if this process is done by a robot? We could save time and energy required to cook, we won’t need to focus on cooking since it will be done by a robot. Repetitive task such as boiling and waiting could be done accurately, therefore this project is created.
Introducing NoodleBot, a simple cooking robot which is able to boil and serve noodles according to the user’s preference. It’s based on the robotic arm concept but with preset movements and menu so users only need to interact with it through push buttons. It’s a 4-axis robotic arm with a strainer attached to it, with preset movements calibrated to the designated cooking station.
NoodleBot is quite a straight-forward project, let’s take a look at how things work.
Created by:
- Albert Wijaya / 2201746814
- Wilson Liviandy / 2201733282
Electrical Components
Below are the electrical components we used:
- Arduino Uno R3 1x
- Motor Servo Tower Pro Mg996 2x
- Motor Servo Tower Pro Mg996 (metal gear) 2x
- Motor Servo Tower Pro Sg90 1x
- Power Adaptor 7v - 3.43A 1x
- DS18B20 Temperature Sensor1x
- 2 Push button
- 4700-ohm resistor for temperature sensor
- 1000-ohm resistor for push button 2x
- LCD 16x2 I2C module
- HC-SR04 Ultrasonic sensor
Since it’s a 4-axis robotic arm, we Uses 4 servos to control our NoodleBot’s movement. Since the overall torque required to lift the whole system including the noodles is quite big, we uses MG996R Metal Gear Servo. Metal gears are prefered in this project because plastic gears won’t be strong enough to hold the weight.
--Attention! before buying the metal gear servo, please pay attention to the product description! --
We used 16x2 LCD + I2C Module as the interaction media between the user and NoodleBot. We will then provide several menus and display during every process done by the robot.
DS18B20 Temperature Sensor is used as a requirement variable for the NoodleBot to initiate cooking. NoodleBot will only begin cooking when the temperature of the water reaches a certain threshold value which is defined later in the code.
SG90S Micro Servo and HC-SR04 Ultrasonic Sensor are used to build the noodle storage system. The ultrasonic sensor will detect the amount of noodles left in the container and the micro servo will opens and closes a latch allowing a noodle to fall out. If the ultrasonic sensor doesn’t detect any noodle in the container, the process will be halted until there’s a noodle in it.
Other Supplies
Below are the additional supplies to construct every parts:
- Jumper Wires
- Glue Gun
- Infraboard
- Scissors
- Cutter
- Steel colender / strainer
- Working Station
- Breadboard
- Screwdriver
- Bowl / plate
To create the limbs of NoodleBot,
we uses infraboards instead of cardboxes. The dimension of the limbs are approximately 20x4 cm, with other adjustments depending on the axis required. The base can be created to your preference, but make sure that the weight distribution is balanced for NoodleBot to move around.
However, it is preferred to use more rigid materials such as plywood or 3D-prints. We had some difficulty during NoodleBot’s movement since infraboards are a bit flexible.
FlowChart and Block Diagram
Listed above is the blockdiagram and flowchart of NoodleBot, it gives out a brief explanation of how the system works.
Wiring
To create NoodleBot, we requires quite some amount of jumper
cables so make sure you’re stocked up. Make sure to attach each Arduino Pins to it’s rightful destination, be careful of shorting your board and components.
Our power management are divided into 3 parts, including 3.3V, 5V and 7V.
- 3.3V is used to power SG90 Micro Servo, since it requires a 3V voltage input.
- 5V is used to power DS18B20, HC-SR04, 16x2 LCD + I2C Module and 2 push buttons
- 7V is used to power MG996R Metal Gear Servo and the Arduino UNO R3 board itself
When using Servos, it is often required to prepare an external power source to power it up. Since the maximum output of Arduino’s voltage pin is 5V – 0.8A, using servos which requires higher rating will damage the board. To do this we just have to short the power source of the servo to the Vin pin of the Arduino, and make sure to connect the ground too.
Make sure to use the 1000-ohm resistor for the push button, not using a resistor will allow the full voltage of the source to enter the Arduino pin, this will also damage the Arduino. The 4700-ohm is used to keep the temperature line in high state when it is not in use, make sure to short the ground and data pin of the sensor with this resistor.
Programming
Download Arduino IDE software to write and upload the code
to the board.
NoodleBot contains 8 major states in it’s operation, those states are listed below as:
1st state = startup(), Noodlebot is on standby mode and give us instructions to start the noodlebot 2nd state = selection(), Noodlebot give us option for how long will the noodle be boiled. 3rd state = stock(), Noodlebot will look up to the stock whether there are noodle left or not. 4th state = temperature(), Noodlebot will wait for the water reach the exact temperature. 5th state = processing(), Noodlebot process our noodle to be cooked. 6th state = cooking(), Noodlebot cook noodle, and show us the countdown until it's ready. 7th state = serving(), Noodlebot process the cooked noodle and serve it in the bowl 8th state = bonappetit(), Noodlebot will be reset to the 1st state
To navigate between the states, we will use the push-button
to trigger it. Everytime the button is pressed the program will move up a state, much like a next button when presenting a power point. The other button is used to change the value of duration required to cook the noodle, however it doesn’t do anything when it’s outside of the duration selection state.
On each state, we will print a certain output on the LCD screen. This allows interaction between user and NoodleBot. Make sure to clear the LCD everytime you changes display. We also uses Timer1 from the Arduino to countdown the cooking duration, the codes used can be seen in the setup for 1Hz trigger. The countdown is also displayed later in the cooking process,
We created a function to replace the code used to move the servo (Servo.write), instead we uses a for loop to move the servo bit by bit to the designated degree. This is done due to the momentum of the servo’s movement, where if we use Servo.write it will move to the designated degree as fast as it can. However with the for loop, we could move it slowly depends on the speed we gave it. This code can be seen on the void “move” and “back”.
Make sure to download and include the libraries used, notice that we uses ServoTimer2.h library instead of Servo.h. This is due to collisions of Timer1 between Serial and Servo, we requires Serial to monitor the state of the board so we uses Timer2 to control the servos.
Downloads
Conclusion
This project has been a lot of and a whole new challenge for us. We tried through trial and errors to put a lot of features to the system. Features such as cooking timer countdown, temperature and ultrasonic sensors, button and state interactions through LCD. But it’s still far from perfect, tons of improvement can be done to the project.
First, it would be wise to use more rigid materials. Infraboard are lightweight but is rather flexible compared to plywood and 3D-prints, this has caused us some troubles especially during the weight lifting process. It will be better to use other materials but make sure to pay attention to the weight, since the servos has it’s own maximum torque.
Second, If we have the privilege to use the PCB. We could tidy the wire so it won't look a mess as it is in the previous picture. This will also prevent wires hanging loose or even disconnecting during movements. Overall it will make the board look a whole lot better.
The process was tough but it was worth it, we learned a lot more on creating the project through failure. We hope that this project could intrigue you to create awesome projects or even further improve the NoodleBot. Be creative and have fun!