In this project, we’ll design an omnidirectional, moving pick-and-place robot. First, let’s cover how the robot is built.
The robot’s build
As shown in Figure 1, the robot consists of two sections:
- An omnidirectional moving platform
- A robotic arm
The omnidirectional platform
The robot is built using one circular wooden plate, three dc gear motors, and three omnidirectional wheels.
The wooden plate is 8-mm thick and 500 mm in diameter. The three dc gear motors are of 12V and 300 rpm. They’re fixed at the bottom side of wooden plate using clamps at a specific angle as shown. All three motors are fixed at an angle of 120o from one another.
The omnidirectional wheels are attached to the dc motor shaft directly, using the given screw in the motor shaft.
The robotic arm
- The arm is built using 3D printed parts and six dc servo motors. These motors give it six degrees of freedom (DoF).
- The base servo motor full rotates the arm clockwise or anticlockwise from 0o to 160o.
- The lower servo is used to move the lower arm up and down in 50o movements.
- The upper servo is used to move the upper arm up and down in 50o movement.
- The wrist roll servo is used to rotate the grip wrist clockwise or anticlockwise, as ±60o on either side of the center position.
- The wrist yaw servo moves the grip wrist up and down from 0 o to 90o.
- The grip servo is used to open or close the grip to ??
Block diagram
The robot system is made of two sections:
1. Remote control section: used to remotely control all of the robot’s movements
2. Robot control section: used to actuate the three dc motors and six servo motors. It also controls the robot’s motion basd on the commands from the remote control.
The remote control section

Figure 2. The block diagram of the omnidirectional PnP robot, using Arduino NANO and the HC12 module.
The primary building blocks of the remote control include Arduino NANO board, the joystick, pushbuttons, the HC12 RF trans-receiver module, and an LED.
Arduino NANO: The remote control’s MCU responsible for the complete operation of this section.
- It reads analog outputs generated from the joystick
- It reads digital inputs from buttons
- It serially transmits different codes using the RF trans-receiver module
- It indicated that code is being transmitted via the LED
Joystick: The two-axis joystick has two potentiometers internally and is moved in either direction (up-down and left-right).
Note: the resistance value varies. This will generate variable analog output voltages, Vx and Vy. These two voltages are given as input to Arduino NANO’s internal ADC. The joystick controls the motion of the omnidirectional base (platform), which moves in all directions as per the joystick.
Pushbuttons: These give digital input (logic 0) to Arduino, control the robotic arm’s movement, and control the six servo motors. Two buttons are required for each servo motor, for a total of 12 buttons.
HC12 module: This is an RF trans-receiver module that works on the 434 MHz frequency. It receives code (data) serially from Arduino and transmits it.
LED: This light blinks every time that code is transmitted.
The robot control section
The main building blocks of the robot’s control section include Arduino, Bluetooth, the HC12 module, the motor driver, and the dc and servo motors.
Arduino NANO: Similar to the remote-control section, Arduino is also used as an MCU in this control section and is responsible for its full operation.
- It receives transmitted code from the Bluetooth or HC12 modules
- It moves the robot in the required direction by controlling the three dc motors
- It controls the robotic arm’s movement by generating PWM signals to control the six servo motors
Bluetooth module: It receives transmitted code from a smartphone’s Bluetooth and sends it to Arduino for further action.
HC12 module: It receives transmitted code from the remote control’s HC12 module and sends it to Arduino.
Motor driver module: It provides the dc motors with the required voltage and current. The motor drive receives input from Arduino and drives the three dc motors based on the robot’s desired movements.
Dc motors: The three dc motors provide omnidirectional movement to the robot (via the wheels).
Servo motors: The six dc servo motors provide the robotic arm with six different movement options (6 DoF), allowing it to “pick-and-place” objects.
Circuit diagram for the remote control
The remote control circuit consists of Arduino NANO, the HC12 module, a joystick, pushbuttons, an LED, and a battery.
There are 12 pushbuttons connected to Arduino’s digital pins D0 – D11. Each button’s other terminal is connected to the ground.
- The HC12 module has four connecting pins: (1) Vcc (2) Gnd (3) Tx, and (4) Rx.
- The Vcc pin is connected to Arduino’s 5V output pin and the Gnd pin is connected to the circuit ground. The Tx and Rx pins are connected to Arduino’s A2 (16) and A3 (17) pins, respectively.
- The joystick has four connecting pins: (1) Vcc (2) Gnd (3) Vx, and (4) Vy.
- The Vcc pin is connected to Arduino’s 5V output pin and the Gnd pin is connected to the circuit ground. The Vx and Vy pins are connected to Arduino’s A0 and A1 pins, respectively.
- The LED is connected to digital pin D13.
The robot’s control circuit:
- The HC05 module has four connecting pins: (1) Vcc (2) Gnd (3) Tx, and (4) Rx.
- The Vcc pin is connected to Arduino’s 5V output pin and the Gnd pin is connected to the circuit ground. The Tx and Rx pins are connected to Arduino’s A2 (16) and A3 (17) pins, respectively.
- The HC12 module has four connecting pins: (1) Vcc (2) Gnd (3) Tx, and (4) Rx.
- The Vcc pin is connected to Arduino’s 5V output pin and the Gnd pin is connected to the circuit ground. The Tx and Rx pins are connected to Arduino’s A4 (18) and A5 (19) pins, respectively.
- The dc motors A, B, and C are connected to digital output pins through the motor driver modules. The digital pins are provided as input to the motor driver modules and its output are connected to motors.
- The digital pins D2 and D4 drive motor A. The pins D7 and D8 drive motor B. The pins D12 and D13 drive motor C.
- The six servo motors are driven by six of Arduino’s analog (PWM) outputs. The servo motor signal input pins are connected to the analog ouput pins based on the table below.
The remote control’s circuit operation
The only function of the remote control is to transmit a specific code when any of the 12 buttons is pressed or the joystick is moved. When a button is pressed, the Arduino pin connects to the ground. The pin receives logic ‘0’ as an input, so Arduino detects that the button was pressed. Arduino then transmits one particular character as the code for each button pressed (see the table below).
Next, Arduino sends this code serially to the HC12 module, which transmits it using the 434 MHz carrier frequency.
When the joystick moves from left to right, its one-pot resistance value varies. The change in resistance varies the Vx voltage of the joystick from 0 to 5 V. Arduino reads this analog voltage on pin A0 and converts it into a digital value between 0 to 1023. When this value is above 700 or below 300, it will transmit the code.
Similarly, when the joystick is moved up and down, its pot resistance value varies, which varies the joystick’s Vy voltage from 0 to 5 V. Arduino reads this analog voltage on pin A1 and converts it into a digital value between 0 to 1023. When this value is above 700 or below 300, it will transmit the code.
For any omnidirectional movement, the joystick is moved diagonally, “left-right-up-n-down.” Arduino will transmit four more codes for each of the four directional movements below.
The remote control transmits 12 + 8 = 20 different codes, including 12 codes for the robotic arm’s movement and eight codes for the omnidirectional platform movement.
The robot’s control circuit operation
This circuit receives the code from the remote control or a smartphone via Bluetooth. It controls the movement of the omnidirectional platform and the robotic arm. It also controls the direction of the three dc motors and the angle of the six servo motors, based on the desired movement for the robot.
The three dc motors move the robot forward and backward in eight different directions. The angles of the six servo motors are increased or decreased to achieve the full 6 DoF.
The HC12 module receives transmitted code from the remote control and sends it serially to Arduino. The code can be transmitted from a smartphone via Bluetooth, controlled through an Android app. The code is received by the HC05 module and sent serially to Arduino. The transmitted code is the same, regardless of whether it is sent from the remote control or a smartphone.
Arduino receives up to 20 different codes, such as W, A, D, X, Q, E, Z, C, P, O, I, U (provided in the above tables). When it receives the codes W, A, D, X, Q, E, Z, and C, (from the joystick), it moves the omnidirectional platform. When it receives the codes P, O, I, etc. (from the pushbuttons), it moves the robotic arm.
When code from the joystick is received to move the platform, Arduino will rotate the three dc motors forward and backward, according to the code from the omnidirectional platform.
When code is received from the pushbuttons, Arduino generates six PWM signals to control the angles of the six servo motors to move the robotic arm.
To control the robot’s movement by using smartphone, you must have an Android app that sends codes via Bluetooth. The android app work as remote control. The operation of the remote control and robot’s control circuit works because of the below software program, which must be uploaded to both Arduino NANO boards.
Software program
The programs for the remote control and robot’s control are developed using the Arduino IDE software. It’s written in Arduino C/C++ language.
Remote control program
This program performs the following tasks:
- Reads digital inputs from 12 buttons
- Reads two analog input voltages from the joystick
- Serially sends specific character as a code to the HC12 module when any button is pressed or the joystick is moved
- Blinks the LED when code is transmitted
It uses Arduino’s inbuilt “SoftwareSerial” library to communicate with the HC12 module. Here is the program code.
The code
Robot control program:
It performs following tasks
- It receives data (code) from either HC12 or HC05 module serially
- It reads and compares the received code.
- It will rotate 3 DC motors clockwise and anticlockwise to give omnidirectional movement to platform.
- It will generate 6 PWM signals to control angles of 6 servos.
It uses inbuilt “SoftwareSerial” and “Servo” libraries of Arduino to serially communicate with HC12 and control servo motors. Here is the program code.
The video
You may also like:
Filed Under: Arduino Projects, Electronic Projects, Featured Contributions, Video
Questions related to this article?
👉Ask and discuss on EDAboard.com and Electro-Tech-Online.com forums.
Tell Us What You Think!!
You must be logged in to post a comment.