Carbureted Engine "Turn Key Start" System

I have a boat that is hard to start. This is not a problem for me, but I would like to make it as easy to start as a car, so other people can use it when I’m not around. Seems like an Arduino could handle this. The engine is a 1990 4.3L V6 Mercruiser- carbureted, electronic ignition.

I have attached a picture of what I think needs to be done. The engine is hard to start because you need to pump the throttle, be aware of the choke position, make sure to prevent flooding, etc. The general concept is to have an Arduino receive various engine sensor inputs, then use stepper motors to move the throttle and choke as required until the engine starts. The only user input should be turning the key. Rigging the throttle to be an Arduino fly-by-wire system rather than mechanical cables may be required. I did a quick search and couldn’t find anything quite like this.

I’m not looking for details, just general red or green lights to go ahead with or cancel this project.

What I would like to know:

Has this been done before?
Is the attached schematic roughly correct?
Is this project within the scope of an Arduino?
Are there shields I should look into for this?
Is there anything I am missing/may not be aware of that can simplify this?

This would be my first Arduino project beyond spinning servos and blinking LED’s. I am a mechanical engineer and am very familiar with engines, but only a little familiar with electronics/programming. This is my first post.

Thanks for the help.

So that it does not need to be downloaded

:roll_eyes: Thanks Vince.

I think the biggest challenge will be converting your human knowledge of how to get the boat to start into the logic needed for a computer program, I reckon when we start an engine there is a huge amount of sub-conscious experience, knowledge and data-processing involved.

I think it would be worthwhile essential to write down the instructions that you would need to give to your least accomplished user so that he (or she) could follow the written advice and get the engine to start every time. If you are not able to do that then I doubt you will be able to build a successful computer program. A computer is several orders of magnitude more stupid than the stupidest person.

I do realize that it might occur to you that, having provided effective written instructions, there is not much point in writing the computer program. :slight_smile:


There certainly is a lot going on with an engine start. The operator is constantly listening for firing, adjusting the throttle, noticing when the engine is bogging, etc.

Getting the Arduino to crank the engine and operate the throttle should be pretty straight forward, but this program will probably take a LONG time to get tuned correctly. I acknowledge that. Teaching an Arduino to do this correctly will be tough, but at least I know it will always listen to what I say :wink:

Teaching people how to start the boat is definitely the cost effective and fast way of accomplishing this, but I also want to do this just for the sake of doing it... as I'm sure is an incentive of many other people doing these kinds of projects. I just don't want to do this project if someone sees something that may be unfeasible. Again, my circuits/programming knowledge is very limited.

Teaching people how to start the boat

Just in case of doubt I was NOT proposing that you write the instructions to teach people (although that could be done) but rather so they could work through the instructions step by step (without trying to understand them or remember them) and, hey presto, the engine is running. In effect, the person would be doing what your Arduino code will need to do (or have I got that back to front ? :slight_smile: )


The best thing would find out why the engine is so hard to start. I am assuming that this is a Chevy 4.3 V6 , because that is what Mercury usually used. That engine when it is right should start every time with about 2 or 3 revolutions.
What it sounds like is that when you hit the starter it is getting a huge voltage drop which is not supplying enough power for the HEI to make a decent spark.
I would also check the plug wires because the 4.3's are hell on plug wires.

I would like to emphasize that I am not looking for the easiest way to start this engine. Throwing PLCs and steppers at an engine is certainly not the best way to get it started for a variety of reasons. I'm simply looking into the feasibility of integrating an Arduino to make it a "push button start". The main reason is for an easy engine start. The other reason is for the sake of me spending time on a project- I'd like to use some of this knowledge to gauge my interest in automatic controls and apply it to future projects.

More than anything, I'm wondering if the block diagram posted above is missing anything glaringly obvious. Is there anything about this train of thought that would be prohibitively time consuming, expensive, or inherently beyond an Arduinos capability for this to work?

In regards to Robin's comment, I would like to design a simple closed loop system that will essentially execute step by step instructions written in C++, rather than English. I COULD write step by steps in English and tape them to the windshield, but that would only address starting the engine. It wouldn't address my desire to design a simple automatic control system.

Detown: Plug wires are new and ignition works great (Merc Thunderbolt IV HEI system). My hard starting is due to a sticky choke as a result of a warped carb air horn. Also has a tendency to flood when warm, which requires a wide open throttle start. Both of these problems are being resolved via a new carb, independent of this Arduino pipe dream I have.

Wow, that was poorly written. Let me clear up the first paragraph in my last post:

I want the engine to start easy every time. I am aware there are much easier ways to accomplish this than by using steppers and arduinos. I would PREFER to use an Arduino based solution, as one of the goals of this project is for me to learn some basic automatic controls.

Apologies for ambiguity and lack of clarity above.

In regards to Robin's comment, I would like to design a simple closed loop system that will essentially execute step by step instructions written in C++, rather than English. I COULD write step by steps in English and tape them to the windshield, but that would only address starting the engine. It wouldn't address my desire to design a simple automatic control system.

Obviously I have not been expressing myself clearly - sorry.

What I have been trying to say is that if you are unable to write the instructions in English then you will not be able to write them in computer code.

Even if nobody but you sees the stuff written in English the first step MUST be to write it all down in English. (Of course I'm assuming English is your mother tongue).

There are countless examples on this Forum of people getting tangled up in code simply because they did not take time to express the requirement clearly before they started.


Thanks for the tip Robin. Writing down fool-proof step-by-step instructions is certainly feasible in this scenario. It absolutely makes sense to write out a bunch of commands and if-then statements in plain language to understand the kinds of things that will be required in a successful sketch. There will obviously be some sensor differences between a user and a PLC.

Human- is the engine firing, is it cold, where do I have the throttle, how long have I been cranking.

Arduino- Engine temp, ambient temp, throttle/choke positions, RPM, oil pressure

It will be necessary to understand how some of these correlate to each other (i.e. how do I recreate the human "is the engine firing" logic onto a PLC using RPM, pressure, etc.)

This will require many hours with a laptop and several dead starter batteries in order to get right.

Horse <> Cart problem.

Fix the engine. Don’t add a robotic band-ade to the problem.

-jim lee

Can anyone please comment directly on this block diagram? Is there anything obvious missing?

Lets pretend the engine works perfectly fine, and all this circuit needs to do is make the engine a push button automatic start.

I have not noticed anything obvious that is missing. But, without wishing to keep flogging the poor horse, it won't be possible to be certain until you have written down the sequence of actions that are needed.

I'm not sure why you need stepper motors for the throttle and choke. I suspect a servo might be a simpler solution. Stepper motors need limit switches so the Arduino can figure out where they are. However I guess a stepper motor when de-powered could stay mechanically connected without affecting the manual operation of the controls. You might need some system to physically disengage the servos.


In gear sensor? Or will it not crank in gear? Emergency Stop kill switch? In all honesty I would spend the time fitting a Megasquirt system - you will still be learning a lot about electronically controlling an engine - you will probably pick up a fair amount of fuel economy at the same time, on a boat that could easily pay for the install costs within a couple of seasons. If you want push start all you should really need is an automatic choke for the carb. Assuming the ignition and carb are set up and functioning correctly in the first place. Unless you have some really savage camshaft profile the engine shouldn't need nursing into life.