Introduction: Interfacing Brushless DC Motor (BLDC) With Arduino

Picture of Interfacing Brushless DC Motor (BLDC) With Arduino

This is a tutorial about how to interface and run a Brushless DC motor using Arduino. If you have any questions or comments please reply in comments or mail to rautmithil[at]gmail[dot]com. You can also get in touch with me @mithilraut on twitter.

To know more about me:

Step 1: List of Components

Picture of List of Components
  1. Arduino UNO
  2. BLDC outrunner motor (Any other outrunner motor will work fine)
  3. Electronic Speed Controller (Choose according to the current rating of the motor)
  4. LiPo Battery (to power the motor)
  5. Male-Male Jumper cable * 3
  6. USB 2.0 cable type A/B (To upload the program and power the Arduino).

Note: Make sure you check the connectors of battery, ESC and Motors. In this case we have 3.5mm male bullet connectors on the Motor. So I soldered 3.5mm female bullet connectors on the output of ESC. The Battery had a 4.0mm Male Female connector. Hence I soldered appropriate female male connectors on the input side of ESC.

Step 2: Connections

Picture of Connections

Connect the motor to the output of ESC. Here, the polarity doesn't matter. If you switch any 2 of the 3 wires, the motor will rotate in opposite direction.

Connect the '+' & '-' of battery to the Red(+) and Black(-) wires of ESC respectively.

From the 3pin servo cable coming out of the ESC, connect the Brown cable to the 'GND' pin on Arduino. Connect the Yellow cable to any digital pin. In our case its digital pin 12.

Step 3: Programming Arduino UNO

Picture of Programming Arduino UNO

If you are new to Arduino then you can download, install and setup the Arduino from here.

Connect the Arduino to the PC. Open Arduino IDE and write this code. Under 'Tools' select

Board: Arduino/Genuino UNO

Port: COM15 (Select appropriate COM port. To find out the COM port open device manager and look for Arduino UNO under 'Ports')

Click Upload button on the upper left corner.

#include <Servo.h>
Servo esc_signal;

void setup()
  esc_signal.attach(12);  //Specify here the pin number on which the signal pin of ESC is connected.
  esc_signal.write(30);   //ESC arm command. ESCs won't start unless input speed is less during initialization.
  delay(3000);            //ESC initialization delay.

void loop()
esc_signal.write(55);	  //Vary this between 40-130 to change the speed of motor. Higher value, higher speed.

Step 4: Note

The correct way to run the motors is to

1. Connect the battery to the ESC to power up the ESC.

2. Power the Arduino.

If you do the other way round, the Arduino will run the arm sequence and the ESC will miss those commands since it isn't powered up. In this case press the reset button on the Arduino.


Engr_abubakhar (author)2017-11-19

i want to interface BLDC with an FS-T6 transceiver, i have


2: audino uno

3,receiver +battery. i didnt get any codeing, can you help me?

MithilR (author)Engr_abubakhar2017-11-19

If you have a receiver like that and are plannign to integrate it with the transmitter, then you don't need arduino to run it. You can run it with the switch on the transmitter. You'll still will need ESCs for each BLDC motor.

Engr_abubakhar (author)MithilR2017-11-20

actually i m working on a quad copter. In order to more forward step by step i need to interface all brush less dc motors to my FS-T6 transceiver using audino.that needs a code. i have already interfaced simply without audint now i need to choose audino. Plus i am trying to use wireless laser charging kit to charge in flight. It use a 30C battery. Do you sell or can help me buying.?

need sincere advice.

MithilR (author)Engr_abubakhar2017-12-09

I dont' sell but based on your location, you can order from a local dealer or international shippers like or

proscratcher10 (author)2017-12-09

It is not working for me. I am using a 1000kv A2212/13t motor, a 30A esc and an 11.1v lipo battery. When I run the program, the motor just twitches. Do you have any idea what I'm doing wrong

MithilR (author)proscratcher102017-12-09

Make sure your wires and connectors are soldered correct and have connectivity between them. One of the reason for twiching is when once phase of the motor is not activated in sync.

nag darling (author)2017-11-28

am using 1100kv motor with input power 12V/10Amps and ESC 12v 30Amps .. when i give value 80 its taking more power to rotate.. and not initialising properly.. and above 90 if i write in code its taking more than 10Amps.. can u suggest me how can i make it to raotate gradually evrytime when i wrote different speeds..thanks in advance....

MithilR (author)nag darling2017-11-29

try increasing the speed gradually from 55 to 80 with a delay of 100-300
milliseconds between each increase. this way the motor should
accelerate to your desired speed although it may take some time.

MýşțřøM (author)2017-11-18


I have 2 question :

1) Can I use a 30 amp ESC ??

2) Do I have to use Lipo battery or I can use any battery ??

Thanks in advace

MithilR (author)MýşțřøM2017-11-18

1. Yes.
2. You generally use LiPo battery with BLDC motor because they consume current at a very high discharge rate. They can be susbstituted with LiFe or NiCd although not in all situations.

RicardoR84 (author)2017-10-19

I've tried different codes, and this is the most complete i've seen, im fairly new to brushless motors, and i tried several ways to get them to work, but all i get is the motor to beep endlessly and no function whatsoever,any advice for this?

MithilR (author)RicardoR842017-10-19

My first guess is there is an ESC calibration issue. Try to connect a different motor to the same ESC. If it still beeps, its more likely a calibration issue. You can search online how to calibrate your ESC.

KarlH61 (author)2017-08-04

Arduino has only ground and signal wire connected from ESC BEC in diagram. Is Arduino being powered by the signal wire? Or is the power to the Arduino not in the diagram? (As far as I know the BEC power wire is 5v so that could power Ard.)

MithilR (author)KarlH612017-09-11

Yes, I am powering Arduino with a source not in the diagram but you can do it with the ECS's 5V power as well.

SIDHANTH KRISHNA. (author)2017-09-10

Hey! Great work....I have a couple of questions

1. Why only digital Pin 12, why not PWM pins?

2. Can we run 2 bldc's with an arduino Mega 2560 considering its clock rate and other factors?

Thanks in advance :)

Hey Sidhanth

You can use other digital pins as well. Refer this documentation for more detail.


KarlH61 (author)2017-08-03

Am running a brushless turbine as part of a Porsche 911 AC system. All the sketches I've looked at to arm and then run the turbine at a prescribed speed have been far more complicated. The simplicity of this is beautiful. Am looking forward to get Arduino and test run sketch. Thanks for posting this Mithil.

gokul25 (author)2017-05-26

Sir I did the same connections bt my motor is not rotating .help me

user8206 (author)gokul252017-08-03

try changing the speed of the motor. mine did not work for 55. it worked when I changed it to 85.

in the loop


Saransh_mahima (author)gokul252017-06-11

Maybe my post will help you... Take a look

user8206 (author)2017-08-03

works great. thanks so much!

Garvit Pandya (author)2017-03-07

Can we vary the speed of the motor with arduino itself? Or we need to add any component to do so?

MithilR (author)Garvit Pandya2017-03-07

You can vary the speed by the changing the value in this command.


Vary this value between 40-130 to change the speed of motor from minimum to maximum.

No extra hardware required except the ones mentioned in this instructable.

Garvit Pandya (author)MithilR2017-03-15

Umm.... I have another question.

In what you have done, you have not connected the laptop or computer for operation. In this condition, I will need to connect and disconnect, edit program and load and do all the connection and operate the motor. Right?

How to do it the either way?

I want to keep the arduino connected to my computer and then change the coding that is motor speed variation at my requirement.

Like, once I operate it at 40 and then I want to operate it at 100, I want to do this change in the program with all the connections as it is, just by resetting the arduino and uploading the program and operate.

Garvit Pandya (author)MithilR2017-03-07

Ok. That is pretty good. Now the other question bumped into my mind this morning. Can we connect LiPo battery directly to Arduino? Because I have heard from many people that we can only connect our laptop or computer with Arduino to provide power supply. Guide me in that case too.

MithilR (author)Garvit Pandya2017-03-07

The board can be supplied with external power from the DC power jack (7 - 12V). If the lipo battery has voltage between 7-12V you can connect it to the DC power jack on Arduino Uno or similar boards. DC power jack is the black cylinder on board with a pin in it.

Garvit Pandya (author)MithilR2017-03-07

Ok. I understood. So, If I want to do the copy of what you have done, I can connect battery using ESC, so it won't affect the Arduino board. Correct? And, it seems, if I want to control or vary the speed of the motor, I may need something like potentiometer. So, it can vary as per the requirement physically.

One more thing. We can also connect Receiver here with the board and then use the Remote control and vary the speed of the motor. That will be sort of similar to what we do when we fly a quadcopter using some other flight controller board. What is your opinion?

MithilR (author)Garvit Pandya2017-03-09

Yes to the first paragraph of concerns/questions.

If you have a receiver, then you don't need the Arduino. You can connect the ESC with the receiver instead of Arduino and use the Remote Control (a.k.a Transmitter) to control the speed.

Garvit Pandya (author)2017-03-07

Good job. Got the program too. Thank you!

yogesh645 (author)2017-02-04

My project is based on controlling the quadcopter with the help of mindwave mobile. Can you tell me how to control servomotors with mindwave mobile?

MithilR (author)yogesh6452017-02-06

Look into interfacing the mindwave with an Arduino. From there its the same as mentioned in the tutorial.

fly_with_me (author)2017-01-07

Hey, great tutorial! I was wondering, if i wanted to connect two motors, would i ground them both to the same gnd slot on the arduino? and connect the yellow wire to another number, say 11?

MithilR (author)fly_with_me2017-01-19

Yes. That will work.

LP700-4 (author)2016-08-10

My ESC has a black, red and white wires witch ones should I connect where on the UNO?

MithilR (author)LP700-42016-12-25

By color convention in electrical systems, black goes to GND, red goes to +Vcc or 5V in our case, and white would be the signal cable.

Dylan91 (author)2016-06-30

Nice work:) with the same procedure can i control a 4 BLDC? So can i build an arduino based quadrocopte? Someone said to me the arduino not "fast enough" for it.

MithilR (author)Dylan912016-07-01

You can control 4 BLDC motors. But the clock rate of arduino is less so even if you make one it won't be stable. I would recommend you go for a different controller with a faster clock rate.

Dylan91 (author)MithilR2016-07-02

Thank you for your fast response:)

Williamdapotato (author)2016-06-20

Hi there, Id like to know what you use to control it?

MithilR (author)Williamdapotato2016-06-21

In this circuit, it will rotate at a constant speed.It rotates at the speed given in the command esc_signal.write(55);

If you want to control it, you can connect a potential variable on the analog pins and map the value between 40-130 to change the speed.

AbhishekD77 (author)2016-06-19

Does the brushless motor EDC work with the same PWM signals as the servos ( 50 Hz with 1 to 2 milliseconds duty cycle ) ?

MithilR (author)AbhishekD772016-06-19

Yes, both servo motor and brushless motor driver (ESC) follow the same protocol.

ambardeep made it! (author)2016-06-04

I havent finished my project yet, but this made things soooo much easier. Thanks a ton! Now, I just have to finish the remaining 2 parts of my electric skateboard. Cheers!

ahmet_024102 (author)2016-06-03

great project

About This Instructable




Bio: A grad student at Boston University, I graduated with Computer Engineering degree and my area of interest is Robotics. I also have a heavy inclination ... More »
More by MithilR:Extendable handheld gimbal for GoPro/SJ4000/Xiaomi Yi/iLookInterfacing Brushless DC Motor (BLDC) with ArduinoHow to build a Quadcoptor. (NTM 28-30S 800kV 300W and Arducopter APM 2.6 & 6H GPS 3DR Radio and FlySky TH9X)
Add instructable to: