Starter system for car

I currently have a DIY starter button installed in my car and that works as it should. You press and hold it and when the engine starts you release it, like you would using the key. What I am trying to achieve is a system where you press the button once, it will crank the engine and it will automatically stop cranking when the engine has started. To try and do this I will use an arduino. I need to figure out a way for the arduino to measure the rpm of the engine so it knows when its started or some other way of detecting when the engine has started. If anyone had any ideas it would be much appreciated.

You might try activating the starter for the number of seconds it usually takes to "catch" and then check if it's running. If not, try again.

I think that's what I'm doing when I start my car... I don't hold the key in start position 'till I'm sure it's running. With older cars, you'd wait 'till you hear it "fire", but you wouldn't wait 'till it's actually running. And with older cars, you had to give it some gas. With modern cars, the engine computer and fuel injection system usually take care of the fuel for starting.

A few ideas:

  1. Measure the pressure in the exhaust manifold.

  2. Use the rev counter output from the ECU.

  3. Measure the rpm with a hall effect sensor mounted next to the flywheel gear teeth.

  4. Measure the battery voltage.

I'm sure there are many more, possibly better, possibilities.


There was a topic some time ago that discussed a similar application - starting a generator when there's a power outage. You might want to try search for that for ideas.

When you start the engine, there’ll be a massive current consumption from the starter motor. Once the engine has started, there’ll be a moment when you still have your finger on the start button, voltage is still being supplied to the motor but there’ll be a change in the voltage drop across the terminals because there’ll no longer be such a big load. Perhaps tell the arduino to look for the change in potential difference across the motor in order to confirm a successful start.

Or use a linear hall sensor on the starter lead, that ought to provide a reasonable indication
of current directly. A sharp drop/reversal in current would indicate the motor has caught
and the solenoid can be powered off.

You'll need something like a 15+A capable relay to operate the starter solenoid I'd have thought,
a smaller relay to drive the big one...

Thanks to all for their good suggestions. I feel like accurately measuring the rpm seems like the proper way to go. Now to way to do that on my car would be either from the crank shaft positioning sensor or a trigger wire on the coil pack. The wire for the crank sensor should 'tick' every revolution and the coil wire twice per revolution since its a wasted spark system. Either way both signals will be proportional to rpm. Which ever one I choose to use I will need to measure the frequency right? Not the width of the pulse? Im guessing you cant plug that signal straight into the arduino. The voltage will need to be dropped from 12 to 5 right?

how about reading the can-bus data on obd-II port?

yes thats probably the best way but all I know about the obd2 port is its complicated and I have no idea how to do it

yes thats probably the best way but all I know about the obd2 port is its complicated and I have no idea how to do it

I think it is going to be more complicated than that regardless.

If you have used a push button start car, pushing the button will turn on accessory power. you must depress brake pedal while pushing the start button for the engine to start.

Perhaps you could sense the increase in commutation frequency of the starter moter as the bendix disengages

I feel like accurately measuring the rpm seems like the proper way to go

I am inclined to disagree. The speed the motor will run. will depend on all sorts of things like the temperature and the oil viscosity and the choke and whether all cylinders are firing.

You want to stop driving the starter motor as soon as possible, detecting the current is likely to be better for this than the rpm.

I'd also suggest reading a bit about the mechanical aspects of the starting system, if you are not already familiar with it.

What I am now looking at is buying an obd2 kit for arduino , and you just use code from a libary to access all engine parameters. My only concern is will it be fast enough to stop my engine in time?
Another suggestion that you have said is detecting the current across the starter, so when the bendix desengages the current will increase and use that spike in current to tell the arduino that the engine has started.
I'm trying to think about how they would do it in modern cars with an automated starter system, I'm guessing the detect the rpm to know when the engine has started.

When the bendix disengages current will fall, voltage and speed will increase.

Mearuring current or voltage in the harsh environment of an engine can be difficult.

I suggested frequency as a couple of back to back diodes makes a simple clipper/protection circuit.

Whatever method some protection and interface circuitry will be required.

I have a relay that is triggered by setting a pin on the arduino to high, the relay then triggers power to the starter solenoid and that all works. I have ordered a obd2 kit so that should be able to read the rpm so I should be good to go.

A general arduino question that someone might know the answer to. Say I have pin 11 set to high, when I plug out my arduino and plug it back in pin 11 will go high for a second , then go low while the bootloader does its thing, then go high again as it should. It would seem that when I plug it back in, its continuing where it left off for a second before it resets? It just important as I cant have pins going high when they shouldn't as I could damage the starter/flywheel if things get triggered when they shouldn't.

Thoughts on that: you may want to use external pullup resistor to make the behavior consistent through the reset. It may be the pin is not going high-low-high, it may be going float-then-high. And you may consider uploading the sketch using ISP and just don't have a bootloader at all, don't really need one.