Mecanum Wheel Robot - Bluetooth Controlled




About: I'm an enthusiast of robotics :)

Since I can remember I always wanted to build a mecanum wheel robot. The mecanum wheel robotic platforms available on the market were a little too expensive for me so I decided to build my robot from scratch.

Like no other robot meacanum wheel robot can move across without any difficulty. This feature makes it unique and allows for easy maneuvering in tight spaces without the need to rotate in place.

Well, it's time to get down to work!

Parts needed in this project:

  1. Arduino Mega 2560 x1
  2. TB6612FNG Dual Motor Driver Carrier x2
  3. HC-06 bluetooth module or similar x1
  4. Breadboard (min size) x1
  5. Li-Po batteries: 7.4V 2200 mAh and 11.1V 2800 mAh x1
  6. SKYRC iMAX B6 Mini battery charger x1
  7. DC motor 12V x4
  8. Mecanum wheel x4
  9. Jumpers and cables
  10. Nuts and bolts
  11. Chassis made of plastic

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Building Robot Chassis

The first thing to do was to cut a piece of plastic plate (153x260 mm). In the next step I screwed the dc motors placed in a metal tube to the plastic base. Instead of 2 metal tubes you can also use 4 metal holders for dc motors. The last step in robot chassis construction was fitting the wheels.

Step 2: Fitting the Mecanum Wheels

Mecanum wheels should be fitted in the correct way. A correct configuration requires each of four mecanum wheels is set in the way as shown in above picture. The rotation axis of each wheel's top roller should cross the center of the robot chassis (point C).

Step 3: Connection of Electronic Parts

The brain of the system is Arduino Mega 2560. As a motor driver I used two TB6612FNG dual motor driver carriers. This motor controller has sufficient range of acceptable input voltages (4.5V to 13.5V) and continuous output current (1A per channel). Robot is controlled via bluetooth using Android application. In this project I used a popular inexpensive bluetooth module HC-06. The electronic system is equipped with two power sources. One for supplying the DC motors (LiPo battery 11.1V, 1300 mAh) and the other to supply Arduino and bluetooth module (LiPo battery 7.4V, 1800 mAh).

All connections of electronic modules are the following:

  1. Bluetooth (e.g HC-06)-> Arduino Mega 2560
    • TXD - RX1 (19)
    • RXD - TX1 (18)
    • VCC - 5V
    • GND - GND
  2. TB6612FNG Dual Motor Driver -> Arduino Mega 2560
    • RightFrontMotor_PWMA - 2
    • LeftFrontMotor_PWMB - 3
    • RightRearMotor_PWMA - 4
    • LeftRearMotor_PWMB - 5
    • RightFrontMotor_AIN1 - 22
    • RightFrontMotor_AIN2 - 23
    • LeftFrontMotor_BIN1 - 24
    • LeftFrontMotor_BIN2 - 25
    • RightRearMotor_AIN1 - 26
    • RightRearMotor_AIN2 - 27
    • LeftRearMotor_BIN1 - 28
    • LeftRearMotor_BIN2 - 29
    • STBY - Vcc
    • VMOT - motor voltage (4.5 to 13.5 V) - 11.1V from LiPo battery
    • Vcc - logic voltage (2.7 to 5.5) - 5V from Arduino
    • GND - GND
  3. TB6612FNG Dual Motor Driver -> DC Motors
    • MotorDriver1_A01 - RightFrontMotor
    • MotorDriver1_A02 - RightFrontMotor
    • MotorDriver1_B01 - LeftFrontMotor
    • MotorDriver1_B02 - LeftFrontMotor
    • MotorDriver2_A01 - RightRearMotor
    • MotorDriver2_A02 - RightRearMotor
    • MotorDriver2_B01 - LeftRearMotor
    • MotorDriver2_B02 - LeftRearMotor

Step 4: Arduino Mega Code

The full code for this project is available at GitHub: link

The Arduino program checks in the main loop - "void loop()" whether the new command (character) has been sent from Android app via bluetooth. If there is any incoming character from bluetooth serial the program starts execution of "void processInput() " function. Then from this function depending on the character a specific direction control function is called (e.g. for "r" character function "void moveRight(int mspeed)" is called). From a given direction control function each motor is set to the desired speed and direction of rotation by function "void motorControl" so that the robot move in the desired direction.

You can also use my other code example for Arduino Mega 2560 that allows you to control a mecanum wheel robot using voice commands: link. Additionally you will need to download BT Voice Control for Arduino app from Google Play.

Step 5: Control of the Mecanum Wheel Robot

Every mecanum wheel has free rollers, which make a 45 degree angle with the wheel's axis. This wheel design allows robot to move in any direction as shown in above figure. The blue and green arrows show the direction of the friction forces acting on each mecanum wheel. By moving all four wheels in the same direction we can get forward or backward movement. Controlling the two wheels on one diagonal in the same direction and other two wheels in the opposite direction we get sideways movement as shown in the second figure (move right).

You can download my Android app that allows you to control mecanum wheel robot from Google Play: link

How to use the Android app:

  • tap menu button or 3 vertical dots (depending on the version of your Android)
  • select the tab "Connect a device"
  • tap on the "HC-06" tab and after a while you should see the message "Connected to HC-06"
  • after connecting, you can control your robot
  • if you don't see your bluetooth device HC-06 tap "Scan for devices" button
  • on the first use pair your bluetooth devices by entering the default code "1234"

If you would like to see my other projects related to robotics please visit:

Robotics Contest

Participated in the
Robotics Contest

Tech Contest

Participated in the
Tech Contest

2 People Made This Project!


  • Made with Math Contest

    Made with Math Contest
  • Multi-Discipline Contest

    Multi-Discipline Contest
  • Robotics Contest

    Robotics Contest

46 Discussions


Question 4 months ago on Step 3

Hi, the link for the Android app is no longer valid. Is there a new one?


Question 6 months ago on Step 5

Hi, I am doing a project with mecanum wheels and have followed your instructions. But could not find your app in playstore. Would you be able to send the app that you use for this project? Thanks in advance.


Question 1 year ago

Hey, I bought the exact dual motor drivers you used in the images and videos. However, they keep frying. I have tried other dual motor drivers, and they fry too. Could I be using motors that draw too much current, or should I use resistors in the circuitry? Anyway, thanks for the cool project idea!


1 year ago

Hey, I bought the exact dual motor drivers you used in the images and videos. However, they keep frying. I have tried other dual motor drivers, and they fry too. Could I be using motors that draw too much current, or should I use resistors in the circuitry? Anyway, thanks for the cool project idea!


2 years ago


Any chance we could use Uno instead of Mega 2560 as micro controller?


2 years ago

Hi, how did you create the Android App? I would like to add some custom buttons. Thanks in advance!


2 years ago

hello, how do I run the code on the arduino? please help


2 years ago

how i control by robo by my android blue tooth???

do i need any extra app???


3 years ago

Hi, I appreciate these tutorial. I tried to connect my smartphone to bluetooth module but there is an error. They said 'read failed, socket might closed or timeout, read ret: -1'. I think I did all the things correctly. How can I connect bluetooth? My phone is galaxys4, android 5 version. Thx for reading

2 replies

Reply 3 years ago

Hi, tap bluetooth icon (on your phone):

1 Do you see your bluetooth device HC05/06 on the list? If yes tap again on it's name and pair with your phone (type default PIN for your bluetooth module e.g. 1234)

2 If you still can not connect please check settings of your HC05/06 module - especially the baud rate (It should be set to 9600)

3 Make sure that your bluetooth module HC05/06 is compatible with 5V (some modules require 3.3V)

Check out these instructions If you don't know how to do it:


Reply 3 years ago

Thank you So much!!! I Finally solved problem!! Have a great day!!


3 years ago

Hello, I lloved this project and built it up.But, with vex motors.

It is not working with this code. I searched and found they need frq by 127 instead of 255. I switched the values but still not working.

Is there any way you can help?

1 reply

Reply 3 years ago

setting mspeed=255 means that the motor speed (and voltage) is maximal. By changing this value you change PWM and motor voltage and its speed (e.g. if you set mspeed=127 you will get about two times less output voltage and motor speed). Please make sure that you use two wire DC motors, this example does not work with servos!


3 years ago

hi, what are those wires that come from the center hole of the metal tube ? 4 of them are the alimentation for the motors but what are the other wires ? Thanks for the project,it's very interesting :)

2 replies

Reply 3 years ago

Hi, these are the connectors from encoders - not used in this project


3 years ago

Thanks again i did all the connections but the bluetooth module isn't getting connected to the robot control app

1 reply

3 years ago


i wanted to ask whether the 5v and the VCC in the circuit are the same.

also how to connect the multiple gnd and vcc to arduino?

can i use the 2 lines in top part of breadboard to connect gnd and vcc, and can i use the 2 gnd in power section of arduino together?