Twin engine Plane

I am very new at this, so you will have to bear with me. I want to control the speed of two gas engines (Evolution GX10) with RC servos,

  1. Signal s in
    a. RC Receiver
    b. Engine 1 Hall probe on drive shaft
    c. Engine 2 hall probe on drive shaft
  2. Signal Out
    a. Servo 1 controlling Engine 1
    b. Servo 2 controlling engine 2
  3. Requirements
    a. Engine 1 and 2 speeds to be balanced
    b. Engine speed to be controlled by receiver from radio gear
    c. If one engine cuts out, then other engine goes to idle
    d. Engine start mode
    e. Light weight and reliable.
    Has anyone done this before, and also please don’t be too technical with answers, I’m not an electronics expert.

Have you worked out how to connect the sensors to the engines? What output they have? What programming experience do you have?


No problem, except I don't understand what signals the RC receiver provides, for input to the Arduino. Does it have an servo output (PWM), or what else do you want to use for speed control?

How do you intend to use the hall sensors on the drive shafts (unbalance!)? Eventually I'd use an optical sensor, measuring the revolutions of the air screws, without impact on the mechanical balance. But I'm not a plane expert ;-)

The hall effect sensor and crankshaft magnet is already there for the ignition. A second hall effect sensor installed at or near the ignition sensor shouldn't do anything to the engine balance.

Start your program in stages, by reading the sensor and then operating the servo for engine control. Once you have basic engine control according to sensor reading look at the comparison part with shutdown to idle.

Once the control is done, move to reading the RC input and converting to servo output.

Add a part at a time saving the working version as a separate program that you can go back to when the new part fails.


Thank you, looks like a project I can go forwards with. The Back ground to this project is,

Making a twin engine plane, both engines petrol. The main trouble is, that when one engine fails the other engine pulls the plane out of control. To stop this happening, the second engine needs to go to idle.

There is also a balance issue, that when both engines are running at the same speed, the harmonics sound good, the normal way to make them on song is to de-tune one of the engines to balance the speed. The bad news with this is that one of the engines becomes less reliable.

The engines come with an rpm output, in the form of a single pulse per rev. the magnet is built in by the manufacture and is also used to signal the spark.

My $.02 Go find an electronics expert, not just any one, but someone who has designed and built avionics. I'm retired from 30+ years in this and you have a VERY challenging problem. You need to find someone who can do the math (control laws) for the throttles.

I also suggest you go look for model aircraft forums as the general electronics hobbyist you find here can give you tidbits, but doesn't have the experience you need. Start with the

Go look at Tower Hobbies for model engine controls. Find some tips and go from there.

Good luck

A small piece of code to start you along with the RC portion, this is a quick and dirty way to read pulse train coming from receiver and convert it to an output (without using the Servo library).

    void loop()
  unsigned long rcReadIn = pulseIn(rcInPin, HIGH);

  digitalWrite(engineOneOut, HIGH);
  digitalWrite(engineOneOut, LOW);

  digitalWrite(engineTwoOut, HIGH);
  digitalWrite(engineTwoOut, LOW);


The pulse width (time the pulse is high) of the signal coming in from the receiver will be between 1ms and 2ms dependent on stick position, meaning rcReadIn will be a value of between 1000 and 2000 dependent on throttle position (you can actually get outside of this range with trim, think 750 to 2250).

In this example the Arduino would simply read the pulse width and duplicate it as output on 2 pins (engineOneOut & engineTwoOut) by making the delay after the pins are set high equal to the pulse width of the incoming signal before setting the pins low again. Each of these pins would be connected to the "signal" wire of a servo. From here you would actually want to use a separate delay value for each engine and adjust those delay values based off of RPM. Probably some experimental values for adjustment as you develop your control loop, etc...

The timing specifications of RC stuff for servo control is (High) pulse width of 1ms-2ms with a pulse spacing (Low) of 20ms, meaning that you should take no longer than 20ms to cycle through your loop before you send another pulse out to the servos. In reality servos are pretty tolerant, if your pulse spacing is smaller than 20ms no problem, if it is a little larger still no problem, in one experiment I did just to see how far you could push the pulse spacing before any adverse effects really occurred I was nearing 100ms pulse spacing before there were any effects that were apparent to me (at that point the servo lost strength, as in it basically went idle between pulses and I could turn it slightly before the next pulse came).