Quadcopter with MultiWii running on Arduino Uno

Last week I posted an article on how to connect all the parts you need for a quadcopter. I used my KK2.0 flight board for a while. Last month I bought an MultiWii and MegaPirate AIO board and I use it now on my quadcopter. But today I wanted to test if I can use my Arduino Uno with a Chinese GY-86 IMU for my quadcopter-build. All you need are the essential quadcopter parts and: Arduino Uno, IMU (with MS5611, HMC5883L and MPU6050 sensors) and some cables. You can also use Arduino Nano or Arduino MEGA board, as well an IMU with only an MPU6050.

Arduino UnoGY-86 IMU

All you need to do: connect all the quadcopter parts as previously described without the flight board (you want to use the Arduino as flight board). Remove the propellers from the motors for safety reasons. Connect the receiver (RX) and IMU to the following pins on your Arduino Uno:

IMG_8134_RX_IMUIMG_8134_ESC

You also need to connect the tiny cables from your ESCs to the Arduino Uno. The cable from ESC Nr. 1 will provide the Arduino board with power. So you need to connect not only the signal cable (yellow) but also Ground (brown) and Positive (red).

IMG_8125IMG_8126

Once you have done all these connections you need to install the MultiWii firmware on your Arduino Uno. To do this download the latest MultiWii firmware.

Unzip the file and open the MultiWii.ino file from the MultiWii folder. As stated in the MultiWii manual you need to define some lines in the config.h tab in your Arduino software. Then upload the sketch on your Arduino Uno (this must be connected to the USB port of your PC and not to the battery of your quadcopter).

Start the MultiWiiConf.exe from the MultiWiiConf folder. Select the right COM port, click connect and then start . If everything is connected right, you should see a graphic of your quadcopter moving, when you move your quadcopter. If you want to change some of the numbers, do this: move the mouse cursor over the number you want to change, click and slide. Once you have done this, disconnect from the USB port, turn on your transmitter, connect the battery and do some test without the propellers to check if all motors spin in the right way. That’s it!

If you need more information visit the official MultiWii website. You can find additional information, on how to install MultiWii on other Arduino boards. Have a fun with your copter and if you liked my article, feel free to share it :).

Update 09.06.2015: Although it is great fun using an 8bit Arduino with MultiWii as a flight controller, there are better and cheaper 32bit flight controllers using the MultiWii firmware too. The two big competitors for now are Naze32 and CC3D.

Leave a comment ?

53 Comments.

  1. Hi, this article is really helpful. I just wanna ask one issue, was there any problem while using multiwii with Arduino Uno. I connected as the above configuration but its not working. Why you did not use INT of IMU. I think that should be used but can we skip INT of IMU?
    Please help asap.

  2. Hi, there were no issues using Multiwii and Arduino Uno. You dont need to connect the INT of the IMU, just the pins as described above in the article. What exact is not working?

  3. Hi, thanks for quick reply. Actually, I set everything as said, but now my motor is not moving. Do not know the exact reason. Multiwii code is uploaded successfully in arduino Uno board without any error still the same prob. If you have any idea that would be great. I also found that, we are no where defining which board we will use in multiwii code, like we are not defining that we will be using Arduino Uno anywhere. Is that necessary to define Uno board? If not, then which board will be assumed by default? I have very less time to complete this project, hoping for wonderful response.

  4. I did not described the code part in detail, but you need to define at least that you are using the GY-86 IMU. It is a bit simple answer, but do you arm your multicopter in order to start the motors?

  5. Hey sgeorgiev ,

    I am using exactly same setup , but there is a gyro issue , I dont know if you faced it, I start the coptor and wait for it to caliberate the gyro , after that when I try it it is offset in roll even when it is stationary , I can see that because only right hand side motors come on , and are more powerful . when I connect to GUI , I can confirm that it is offset in roll , dont know how to zero the gyro. Please letmme know if you faced same issue

  6. No, I didn’t have this issue and I don’t have any suggestions… But if you see this in the GUI, then it is definitely not a problem with ESC, motor or propeller. If resetting and calibrating doesn’t help, it could be a damaged gyro. Hope this helps you a bit. Good luck!

  7. arduino quadcopter | 阿喵就像家 - pingback on October 7, 2014 at 18:12
  8. Hello, thank you for the article it is awesome. I have a question, I am building a quatcopter as well and i come across a problem. I can not figure out what is pitch, yaw, roll, or throttle. are they coming from receivers? which pins? i bough a 6 channels transmitter from hobbyking but all i see is channel numbers. anything would help! thank you

  9. Hi Albert. Pitch, Roll and Yaw are the 3 Axes, when it comes to flying objects (Here is a link with more info on wikipedia: http://en.wikipedia.org/wiki/Aircraft_principal_axes ). On the transmitter these are sometimes shown as: Elevator/Ele, Aileron/Ail and Rudder/Rud. To connect these right to the arduino you need also to know which pins from your HobbyKing receiver are for these channels. There should be information in the manual or online. Example: If your Throttle channel of the receiver is Pin3, then you should connect this one to the Digital Pin 2 (D2) on the Arduino Uno. Hope this helps you a bit 😉

  10. Sir..based on your explanation..i”ll also want to build it with uno and gy87,instead of gy86 for sensor, slightly different with yours.i add define gy87 board in config.h and gy87 define in def.h with baro sensor change to BMP085 . Bmp085 and 180 are programmatically identic.
    Do you think itwill work ok?
    Thanks

    • Hi, Budi. It should be ok, as you explained it. By defining this in the code, the flight controller should use the sensors properly.

      • I am experimenting with BMP180 for different project and my ibservations are that it is very noisy. I am waiting for my ms5611 to arrive so I can compare it but accordin to the data available online ms5611 is much less noisier.

        • Hi Stan, I have done only some small projects for arduino, thats all. As far as I know, that MS5611 is way better than the Bosh sensor. That is why, most of the flight controllers on the market use the MS5611 and not BMP180 anymore.

  11. Hi can you answer, what pins are the yaw, pitch, roll, throttle, aux 1 and aux 2 in the Arduino uno? Thanks

    • Hi Jose, you can see the pins on pic3:

      D2 – Throtthle
      D4 – Roll
      D5 – Pitch
      D6 – Yaw

      For Aux1 and Aux2 I dont know, as I didnt test these.

      • José Luis Aguilar

        thanks a lot for that :), can you send me the blueprints of your quad? again thanks frome mexico

        • If you mean the blueprints of the SG Adventure Quad, I should disappoint you. But I will consider sharing the blueprint s of the quadframe used for this Arduino tutorial in the next weeks. Regards

  12. Hi. Sorry for the questions but if I want to change the sofware arduino inputs of pins, how do I do? and the definitions of some lines that you said in your explanation, you can tell me what are those lines have to change in software arduino? Thanks.

    • I am not sure if it is possible to change the pins. About the lines: when you download MultiWii you should adjust some settings in the “config.h” file. For example: if you have an quadcopter, you should define the copter-type in this config.h. That is what I mean with line in the code.

  13. i need programm to burn in the ardunino uno

  14. By any chance are you from singapore? Just curious.

    Anyway, i’ve tried to setup a quad similar to the one described in your post. I’m using OPTO escs and external BEC to power up the system. But after connecting up the parts, the motors are not moving at all.. Could you please help?

    • No, I’m not from Singapore. If you connected all the parts as it should be, motors not spinning means there is something in the settings of MultiWii which is not ok. Check for safety features that are enabled. Check again if you connected all right, for example signal-wire from flight controller to the ESC.

  15. Hi sgeorgiev,

    Do you have experience with coding for arduino?

    I am talking about filtering the barometric sensor – which method did you use?

    Thanks

    • What do you mean by filtering it? If you are talking about the signal, then you do this with electronic components, like capacitors. I didnt change anything in the MultiWii code itself, but you can check, how it is done or check the ArduCopter code.

      • I was talking about digital filtering in the code not the signal filtering with electronic components. I was hoping that you had experience yourself since I tried everything but not sure which aproach is the correct one. I will check the code from MultiWii.

        Thank you

  16. hello, i was trying the quad + multiwii + uno + futaba 9c, doesnt seems work, the motor is just beeping, like did not receive any data. im using dji 920 kv motor. im not sure the receiver connection, do i use ppm signal or pcm signal? im new guy to rc stuff. thanks!

    • Hi Gary, im not sure about your radio. Check if you connected all as it should be. Are you sure you connected the “yellow” wire from every ESC to the arduino uno?

  17. i have connected as shown in diagram, i able to here the beeps of motor but motor is not running when i pic up the throttle. is there any problem in esc calibration ? i m using the following esc and motor

    http://www.emaxmodel.com/views.asp?hw_id=1300

    http://www.emaxmodel.com/views.asp?hw_id=1240

    • You have to “Arm” the copter first. Throttle down and to the right for a few seconds. Be aware that there should be an option to automatically spin the motors when armed.

  18. how will i know about the option to automatically spin the motors? And what do you mean by “Arm” the copter first? To arm the motors “Throttle down and to the right for a few seconds” is enough ??

    when i run code and connected to battery motor start spinning for a second and stop for second and then spinning again in loop…..

    • In config.h there is an option #define MOTOR_STOP. In order to start the motors spinning you have to ARM the copter. It is a term in this hobby 🙂 This is a safety feature, so when you connect your battery the motors don’t spin automatically. Check in Google How to arm copter and you will find some videos. But yes, with throttle stick down and right is normally enough.

  19. BY #define MOTOR_STOP MOTOR STOP SNIPING BUT HOW TO ARM ??

    AND I HAVE USED GY521 INSTEAD OF GY-86 IMU, IS THAT A PROBLEM ?
    I DEFINED IT IN CONFIG,H

    • It shouldnt be a problem as you have defined it. After you have checked, that your Transmitter is configured and all channels are working: Connect the battery, Throttle-Stick down and right for about 3-4 seconds.

      • still nothing, did the same connection as mentioned above

        defined following

        #define QUADX
        #define MINTHROTTLE 1064 // special ESC (simonk)
        #define MAXTHROTTLE 2000

        #define MINCOMMAND 900

        #define I2C_SPEED 400000L //400kHz fast mode, it works only with some WMP clones

        #define GY_521 // Chinese 6 DOF with MPU6050, LLC

        #define MIDRC 1500

        should i have to define something else??

        i m getting throttle without using arduino board

        please explain how to arm the copter. throttle
        stick down and yaw right is not working

        • Then the problem can be with your transmitter. Check if the channels are configured right and not reversed for example. So right is right, left is left and so on. You can check this only if you have some GUI, where you can see it live by moving the sticks.

  20. channel are configured right. i have checked in WinGUI_2.3pre8(b5). MultiWiiConf.exe is not working in my laptop ‘javaw.exe’ error is occurring. Unable to open MultiWiiConf.exe so i checked in WinGUI_2.3pre8(b5).

  21. thanks it is done. pid is working . i have checked by changing the throttle, roll, pitch and yaw stick. but only two of the motor is rotating. other two is not. speed of two motor is changing as i move the all four stick. any suggestion ??

    i have checked all the connection and every thing is fine…

  22. Douglas Melchiors

    Hei. First, sorry for my english, but i have a problem, and maybem you can help me. Only one motor start in my multiwi, with turnigy 9x.

    • Hi, have you connected all ESCs to the battery and to the motors as described? Are the signal wires from every ESC connected to the right defined pins on the Arduino?

      • Douglas Melchiors

        Yes, everything is checked, the sound of the escs like all correct, but only one motor turn on.

        • Same behavior on full throttle (remove props for safety reasons) ? Do you use Arduino Uno too? If the answer is no, have you checked you connected the ESC signal cables to the pins coresponding to your Arduino board?

          • Douglas Melchiors

            My arduino is based on a diecimila, same ports i mean. I have a turnigy 9x, can be configuration in software?

          • If you can ARM your copter and by increasing throttle, only one motor is spinning, then the turnigy 9x is configured right. It could be a configuration problem of MultiWii, but it is hard to find out, when the copter is not in front of me. Try to change the working ESC with another one and check which motor works then. I cant imagine that all 3 other ESCs are defect, as you said that you hear a beep from every one.

  23. Douglas Melchiors

    Thank you mr sgeorgiev, i rechek all connections, reset my control, and reinstall my firmware. Now the 4 motors starts normally, but i need more courage to fly with my project. rs rs rs

  24. ravindra dwivedi

    hello, i am ravindra dwivedi as you know that and as myselves arduino uno quadcopter and any once for arduino uno
    how much eassy for it use and very cheapy thanks for using ardunio uno because i am very intrestin it arduino uno all product

    • Hello, using the Arduino Uno for projects is cool and make fun, but in 2015 there are cheaper and easier ways to build a quadcopter. Better buy an CC3D, Flip32 or Naze32 board. There is information on my blog about the CC3D and the Naze32 board.

  25. hey there. i am building a quadcopter for autonomous flight. as a result, i am not using any RC transmitter. How should i tweak the multiwii GUI to be able to control by quadcopter?

  26. Hi 🙂 I was able to build it 🙂 Works ok, need some fine adjustments, but overall it flies 🙂

Comment

Trackbacks and Pingbacks: