Introduction: 2 Arduino Powered RC Plane

Picture of 2 Arduino Powered RC Plane

Hi, Welcome to my instructable on building an RC plane, fully from scratch, with Arduino.

I have wanted to build an RC plane for a while, and received the parts for building for. The transmitter and receivers, however, can be extremely expensive, I also wanted to add additional functionality after the plane is built. I decided to use arduino for the Tx/Rx system, but I had never programmed or had one before.

This instructable focuses mainly on the arduino and electronic part of the build, but the plane is scratch built from Depron Foam, the plane is the Blu Baby, plans are here, it is reltively easy to build, and only took me a few hours.

Step 1: Parts and Tools

Picture of Parts and Tools
  1. RC plane (prebuilt or scratch built) - if you have all the electronics then you are good to go
  2. Arduino Nano - For the transmitter
  3. Arduino Pro Mini - Receiver
  4. 2 Xbee module - I did not use Xbee, I used these (XRF), which are cheaper alternatives, with 500m+ range, operating on the 433-900MHz band. These breakout boards are also very cheap, (go for active as they have 3.3v regulation on the power and data lines) and you can use a serial connector to program the XRFs.
  5. USB to TTL UART connector - Used to program the Pro Mini as well as the Xbees or XRFs
  6. Perf or strip board
  7. Jumper cables
  8. LiPo battery connectors (deans)
  9. Male and Female header connectors (0.1")
  10. RC Electronics/parts (if you don't have them)
    1. Speed controller (ESC, make sure it is suitable for the motor (brushed/brushless))
    2. Motor (probably go brushless)
    3. Servos
    4. Pushrods (for the servos, can be made from bicycle spokes)
    5. Servo horns (I used balsa, cut and drilled)
    6. LiPo Battery (I used 2S, 1300Mah)

Tools

  1. Soldering Iron
  2. Various Pliers
  3. Stanley Knife
  4. Wire Strippers

Step 2: Arduino Rx

Picture of Arduino Rx

This is the receiver part. On the ESC there will be 3 thin wires coming out, usually coloured red, white and black. Red and black are +5v and GND, these will power the arduino.

I made a circuit board, mounting my Arduino Pro Mini and then making 5v and GND rails from the ESC, this is the red and black wire from the 3 thin wires coming from the ESC. The other wire is signal, in my code, this need to connect to pin 9. The other servos, elev, rudder, and the ailerons are connected to pin 8, 10, 11 and 12 respectively. The XRF is connected from Tx to Rx and Rx to TX, power is connected to 5v and GND.

The code is here https://github.com/Streuli273/Arduino-XBee-Remote-Control

Step 3: Arduino Tx

Picture of Arduino Tx

I purchased an old, 35MHz transmiiter with no cystals and no receiver from eBay for £16. I then opened it up and removed the old Transmitter board. I then wired the potentiometer for each control to 5V and GND, the last connection; the middle one, was connected to it's analogue pin on the arduino. If you want to incorporate more potenetiometers than 8 then you will have to use a bigger arduino or a multiplexer chip, which can get confusing.

The battery was connected to the VCC pin on the Arduino, 5V for the pots and XRF.

The code is here https://github.com/Streuli273/Arduino-XBee-Remote-Control

Step 4: Test, Then Fly!

Picture of Test, Then Fly!

I connected everything together and powered up the transmitter, then receiver. It worked!

Make sure the throttle is set to 0 and no prop is in when you are testing. You can test with a wired connection by connecting each arduino's Tx to Rx on the other, bypassing the XRF/Xbee. Test with just a servo first for example, then move onto more. Also, MAKE SURE YOU XRF/XBEE MODULES ARE NOT TOO CLOSE, this happened to me and it took me a very long time to realise, they cannot connect if they are too close.

You may have to calibrate your ESC to your values from the pot, refer to you instructions for that. The code is attached here, it has some commented code and other parts from testing, but the code does work, or copy and paste from the other pages.

If you face issues, check all the code and connections to the arduino, make sure the pins are correct. Try and modify the code just to test one servo first, then add more. The servo library works the same for servos as for ESCs.

In my first flight I got maybe 2 seconds of flight before I crashed, the tail snapped off... It was my first time ever flying a plane and it was very windy. My elevator was also inverted by accident and my rudder pushrod fell off!

Good Luck!

Step 5:

Comments

Manu Pardo (author)2017-10-08

Hi. Its possible change the xrf ciseco modules for nrf24l01? (obviusly the code requires a modification).

sorry for my bad english. greetings from Chile

Archit B (author)2016-08-09

Hi can I modify this code for use with nrf because I am not getting xrf anywhere and its a cheaper alternative too .Just telling that I have an Arduino Uno and buying pro mini for this plane THANKS In ADVANCE

Archit B (author)Archit B2016-08-09

Sorry typo error I meant can u modify it for nrf

uweltin (author)2016-06-29

Does the battery voltage matter? I got a 7.4 volt lipo for the plane

uweltin (author)2016-04-11

Also, where are the analogue pins on the arduino?

willster273 (author)uweltin2016-04-11

The analog pins are labelled A0 to A7

uweltin (author)2016-04-11

Hey, I'm having trouble understanding step 3. Am I supposed to connect the potentiometers to the 5v and ground pins on the xrf or the arduino? Also, how do I tell which is positive and negative on the potentiometer itself? Thanks

willster273 (author)uweltin2016-04-11

The middle pin of the potentiometer is connected to the arduino analog pins, and each outer pin is connected to ground on 1 side and 5v on the other, the polarity does not matter. The potentiometers are connected to the arduino, not the XRF.

DarthS (author)2016-02-04

Can you please explain me

1) What does this sentence mean "throttletrimval = analogRead(4);" ?

2) Where does the trim pot (for each joystick pot) connect to, is it pins 0,1,2, and 3 are for the joystick and the rest of the pins i.e. 4,5,6 and 7 are for the trim pots?

3) Lastly- what does it mean when the servos jerk to the degree slowly but run fine when both Arduinos are connected directly as in their Tx and Rx are connected by 2 wires?

willster273 (author)DarthS2016-02-05

1. That makes the arduino read the analog voltage from analog pin 4 and will be a value from 0 to 1023, depending on the voltage.

2. Corret: Analog pins 0,1,2,3 are for throttle, elevator, rudder and aileron. Analog pins 4,5,6,7 are for the trims pots for each control.

3. This probably means the wireless connection is weak or bad. You either do not have enough power to the xbee's, have interference, or have them connected incorrectly. Try moving them apart a metre or so and make sure the servos are being powered sufficiently.

DarthS (author)willster2732016-02-14

Thanks for the reply! I saw that 1) An arduino nano can also work for the remote ( it has 8 analogue pins).
2) I've tried this out, that if you attach the center pin of the trim pot (where the variable voltage comes from) to one of the outer most pins of the joystick and power it up, then if you turn the trim pot it adjusts the whole resistance value the joystick which then adjusts the servos pretty acurate.
3) I searched on the net and found that some people say to put a capacitor in between the '+' and '-' so as to filter out any fluctuation of power going to the servos.

DarthS (author)DarthS2016-02-04

The Arduino program you gave is meant for Arduino mega board.

willster273 (author)DarthS2016-02-05

This is a limitation with the AtMega328. The arduino leonardo or micro also has enough analog pins to work

TvdB2 (author)2015-08-28

Which motor, servo's and battery did you use? Can you maybe send a link?

willster273 (author)TvdB22015-12-30

Unfortunately the shop I bought the parts from is no longer, check out hobbyking.com or go to a local model shop for recommendations, There is usually parts recommendations on the information of the plane you want to build anyway, if scratchbuilding.

WidiQdiw (author)2015-06-09

Can i use nrf24l for data transmission, if so are there changes needed in the code? Thanks

willster273 (author)WidiQdiw2015-12-30

nrf24l uses a different protocol, not serial. The code will have to be modified to make it work

sammichael25 (author)2015-12-29

what fight controller did you use or was the arduino acting as both flight controller and reciever

willster273 (author)sammichael252015-12-30

The arduino was both. See the code here https://github.com/Streuli273/Arduino-XBee-Remote-Control

EleCtROniX GeNiuS (author)2015-12-12

will the arduino drive the 4 servos without a shield ??

It should do, as the voltage is not supplied by the arduino, only the signal is. The servos are plugged in to the ESC's BEC.

nitemovz (author)2015-02-16

On the Arduino Pro Mini did you use the 5V or the 3.3V version? Both are available on Sparkfun.com and I want to make sure I am getting the right one.

willster273 (author)nitemovz2015-02-17

I used the 5v version as this can be powered straight from the ESC with no conversion needed. It also plays nicer with the servos IIRC.

rickharris (author)2014-02-05

www.flitetest.com

About This Instructable

57,066views

111favorites

License:

More by willster273:2 Arduino Powered RC plane2.5" HDD Clock
Add instructable to: