Introduction: Gesture Controlled Robot Using Arduino

About: IoT projects, DIY projects, Arduino projects, Raspberry pi projects, NodeMCU based projects, Articles, Electronics projects.

Robots are used in many sectors like construction, military, manufacturing, assembling, etc. Robots can be autonomous or semi-autonomous. Autonomous robots do not require any human intervention and can act on their own according to the situation. Semi-autonomous robots work according to instructions given by humans. These semi-autonomous can be controlled by remote, phone, gestures, etc. We previously built few IoT based robots, which can be controlled from the webserver.

In today’s article, we are going to build a gesture-controlled robot using Arduino, MPU6050 Accelerometer, nRF24L01 Transceiver pair, and L293D motor driver module. We will design this robot into two parts. One is the Transmitter, and the other is the Receiver. The transmitter section consists of an Arduino Uno, MPU6050 Accelerometer and Gyroscope, and nRF24L01 while the Receiver section consists of an Arduino Uno, nRF24L01, two DC motors, and an L293D motor driver. The transmitter will act as remote to control the Robot where the robot will move according to the gestures.

Step 1: Components Required

MPU6050 Accelerometer and Gyroscope
The MPU6050 sensor module is a complete 6-axis (3-axis Accelerometer and 3-axis Gyroscope) Micro-Electro-Mechanical System. MPU6050 sensor module also has an on-chip temperature sensor. It has an I2C bus and Auxiliary I2C bus interface to communicate with the microcontrollers and other sensor devices like 3-axis Magnetometer, Pressure sensor, etc. The MPU6050 sensor module is used to measure acceleration, velocity, orientation, displacement, and some other motion-related parameters. This sensor module also has an inbuilt Digital Motion Processor that can perform complex calculations.

NRF24L01 Transceiver Module

nRF24L01 is a single-chip radio transceiver for the worldwide 2.4 - 2.5 GHz ISM band. The transceiver consists of a fully integrated frequency synthesizer, a power amplifier, a crystal oscillator, a demodulator, a modulator, and an Enhanced ShockBurs protocol engine. Output power, frequency channels, and protocol setup are easily programmable through an SPI interface. The operating voltage range of this Transceiver module is 1.9V to 3.6V. It has Built-in Power Down and Standby modes that make it power-saving and easily realizable.

Step 2: Working of Hand Gesture Controlled Robot Using Arduino

To understand the working of this Arduino gesture control car, let us divide this project into two parts. The first part is the transmitter part (remote) in which the MPU6050 Accelerometer sensor continuously sends signals to the receiver (Robot) through Arduino and nRF transmitter.

The second part is the Receiver part (Robot car) in which the nRF receiver receives the transmitted data and sends it to Arduino, which further processes them and move the robot accordingly.

The MPU6050 Accelerometer sensor reads the X Y Z coordinates and sends the coordinates to the Arduino. For this project, we need only X and Y coordinates. Arduino then checks the values of coordinates and sends the data to the nRF Transmitter. The transmitted data is received by the nRF Receiver. The receiver sends the data to the receiver side’s Arduino. Arduino passes the data to the Motor Driver IC and the motor driver turns the motors in the required direction.

Step 3: Circuit Diagram

This Hand Gesture controlled Robot using Arduino hardware is divided into two sections

  1. Transmitter
  2. Receiver

Step 4: Transmitter Circuit for Arduino Gesture Controlled Car

The transmitter section of this project consists of MPU6050 Accelerometer and Gyroscope, nRF24L01Transceiver, and Arduino Uno. The Arduino continuously gets data from the MPU6050 and sends this data to the nRF Transmitter. RF transmitter transmits the data into the environment.

Step 5: Receiver Circuit for Arduino Gesture Controlled Car

The receiver section of this gesture controlled robot consists of Arduino Uno, nRF24L01 Transceiver, 2 DC motors, and a Motor driver module. NRF24L01 receiver receives the data from the transmitter and sends it to Arduino. Then according to received signals, Arduino moves the DC motors.

Step 6: Program Explanation

For Gesture controlled robot using Arduino, the complete code is available here. Below we are explaining the program line by line.

Transmitter Side Program

In this program, Arduino reads the data from MPU6050 and sends it to nRF 24L01 transmitter.

1. Begin the program by adding the required library files. You can download the library files from the given links.





2. Then define the variables for MPU6050 Gyroscope and Accelerometer data. Here only Accelerometer data will be used.

3. Define the Radio pipe addresses for the communication and nRF transmitters CN and CSN pins.

4. Inside the void setup() function, begin the serial monitor. And also initialize the wire and radio communication. radio.setDataRate is used to set the data transmission rate.

5. Read the MPU6050 sensor data. Here we are only using X and Y direction accelerometer data.

6. Finally, transmit the sensor data using the radio.write function.

Receiver Side Program

1. As usual, start the program by including the required library files.

2. Define the Radio pipe addresses for the communication and nRF transmitters CN and CSN pins.

3. Define the left and right DC motor pins.

4. Now check if the radio is available or not. If it is, then read the data.

5. Now compare the received data and drive the motors according to the conditions.

Step 7: Testing the Hand Gesture Controlled Robot Using Arduino

Once the hardware is ready, connect both the transmitter and receiver side Arduinos to your laptop and upload the code. Then move the MPU6050 accelerometer to control the robot Car.

The complete working of the Gesture controlled robot can be found in the video.