Noodlebot

by albertwijaya180100 in Circuits > Arduino

461 Views, 2 Favorites, 0 Comments

Noodlebot

20210107_153546.jpg
NoodleBot Simulation Video

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

servo.jpg
lcd.jpg
sg90.jpg
DS18b20.jpg
hc-sr04-ultrasonic-sensor-module-500x500.jpg

Below are the electrical components we used:

  1. Arduino Uno R3 1x
  2. Motor Servo Tower Pro Mg996 2x
  3. Motor Servo Tower Pro Mg996 (metal gear) 2x
  4. Motor Servo Tower Pro Sg90 1x
  5. Power Adaptor 7v - 3.43A 1x
  6. DS18B20 Temperature Sensor1x
  7. 2 Push button
  8. 4700-ohm resistor for temperature sensor
  9. 1000-ohm resistor for push button 2x
  10. LCD 16x2 I2C module
  11. 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:

  1. Jumper Wires
  2. Glue Gun
  3. Infraboard
  4. Scissors
  5. Cutter
  6. Steel colender / strainer
  7. Working Station
  8. Breadboard
  9. Screwdriver
  10. 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

Block Diagram.png
Flow Chart.png
Engineer Schematic.png

Listed above is the blockdiagram and flowchart of NoodleBot, it gives out a brief explanation of how the system works.

Wiring

Hobby Diagram.jpg
1.PNG
Capture.PNG

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.

  1. 3.3V is used to power SG90 Micro Servo, since it requires a 3V voltage input.
  2. 5V is used to power DS18B20, HC-SR04, 16x2 LCD + I2C Module and 2 push buttons
  3. 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

20201209_183037.jpg

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!