EFI Arduino Lawn Mower Conversion

This is my first project with an Arduino board, I am Hooked :slight_smile:
Well, I got tired of messing with the carb every season. So I walked over to my Oldsmobile Van and poped a fuel injector out of the fuel rail along with the wires.
Drill and tap the intake of the lawn mower and installed the GM Injector. Now the carb is a thottle body.

I used a ULN2003 IC Chip to drive the injector, and a pot to change the pulse width. The mower started on the first try and after 3 code adjustments it would idle smoothly using 5ms injector pulses with 20ms between each pulse. I tied a pot to the govner to monitor throttle position. When the govner moves addind air, the adruino responds by increasing the pulse width keeping the fuel mixture correct.

It has never ran better then this... even when it was new..LOL
The LCD displays real time data for the injector and govner, and will alow for easy trouble shooting (if needed) in the future. The operator panel has a fine tune fuel trim to adjust the mixture on the fly.

The other hose that is now pluged is my failed attempt to use a MAP sensor.. Overall the mower runs great through out the entire throttle range and responds to load conditions correctly. I have not figured out if it will be more or less efficient on fuel. If I had to guess I don't think I will notice any change. In a day or two I should have the control box mounted on the mower, so I can take it out on a complete test (Cut the grass).

-- Joe

You are my new hero. How are you "tuning" the amount of fuel? I'm almost surprised to see that you didn't add a narrow band 02 sensor in there!

To start the mower I set the pulse width to 5ms with the pot on my control panel. Thats the amount needed for idle condition. When I want to mow or engage the mower deck I turn the pulse width up to 11 or 12ms and raise the throtle lever to full throtle this opens my throtle body(old carb) about 10%. From here the govner and the code below handle everything else. If the engine goes under load the govner kicks in and opens the throtle body turning the pot connected to the govner, so if the govner pot reads 980 I subtract that from 1000 and add it to the value of my fuel trim pot, now we have 1000-980+11 = 31ms injector pulse. Then the engine RPM's recover and the govner pulls back to 1000.
I really need to do a youtube video of this cutting the lawn.
Best of all ----> Next year my mower will start up and run :slight_smile:
I will be putting togather a schematic soon..

void loop()

Govval = analogRead(Govpin);
Govval = map(Govval, 0, 1023, 1,1000);

val = analogRead(potpin);
val = map(val, 0, 1023, 0, 20);
digitalWrite(InjectorPin, HIGH); // set the injector on
delay( 1000 - Govval + val); // on pulse width
digitalWrite(InjectorPin, LOW); // set the injector off
delay(25-val); // off width

if( UpdatePause > 8 )
UpdatePause = 0;
I will be putting togather a schematic soon..


What fuel pressure does the injector need to work (a bit or zillions) and how did you do this?

Edit : I can see the pump in the photo but what pressure is it :slight_smile:

The pump is a Mr. Gasket 7 psi. Before installing the injector I played with the pulse width by watching the spray patern on a piece of paper. My findings were that lots of small squirts are much better then longer ones, 2ms pulses are hardly visable and 100ms pulses are like pulling the trigger on a windex bottle.


Nice job...

More important though...how does the Oldsmobile run without its injector.? or is this a multi injector model.

It could be handy if you were able to identify the injector model for others to copy as it seems this one is a low pressure one.

Good luck with the grass.



That injector looks like it's off of a system that has a 35-40psi fuel rail (common Bosh licensed technology) but as you don't need that kind of fuel flow, would be nice to know it will run off 7psi. Can you confirm that please as it opens the field up as to the variety of used injectors that are available.

I have this rototiller I just got finished getting to start, I truly hate carburettors and have since I first started working on them 20+ years ago!

Yes, That is correct. It is a 1994 Olds 3800 40+ psi injector I would think, At the kitchen table I connected a hose to the injector and with water in it and my lung presure I was able to make a nice jet of water come out when I pulsed the injector. After that I was concerned that my 7psi pump might be too much, but it worked out just fine.
The key is lots of small pulses, not long ones.

-- Joe


I have been wanting to do this but problem has always been that I would need to add a battery to my lawnmower to run the auxillaries. Therefore it would need an alternator etc etc...

Excellent :slight_smile:

Well, This project is working 100%. The control panel is mounted, wires are all cleaned up and encased. Today I mowed the lawn/weeds with my fuel injected mower. It has never ran better or had the power that it has now. The seat out of my old van welded on makes for a smooth ride.

I also added (3) switches on the control panel, Arduino Power ON/OFF, Fuel Pump ON/OFF and Injector ON/Off

---Yeee Haw

I found a problem today with my setup, the injector gets way to hot after about 15min of use, causing the fuel to boil in the injector. I had to enlarge the brass fitting that the injector was press fit into, making the injector have plenty of play, then using high temp RTV silicon to glue in the injector back in place. Now that I'm not getting direct heat tranfser (metal to metal) it seems to be fine again.

Very cool use of an arduino. I might just try this one day on a mower engine I have laying about.

One question that comes up is, how do you (or the arduino) know when to fire the injector? I could see potentially using a hall effect sensor to pick up the magnets on the flywheel, but I'm curious to how you are timing things.

nice project!

I think you need a return line to keep the fuel from boiling. I haven't seen the exact circuit but I think there is a check valve in the fuel pumps of cars or just after the fuel pump. There is a pressure regulator somewhere and a return line.

Maybe the pressure regulator controls the return flow as well.

It would be extra cool if you could do an O2 sensor on the exhaust and control it closed loop.

One question that comes up is, how do you (or the arduino) know when to fire the injector? I could see potentially using a hall effect sensor to pick up the magnets on the flywheel, but I'm curious to how you are timing things.

You only need to know when to fire if you're going for some sort of sequential setup or a setup that only fires when the intake valve is open. Otherwise it doesn't matter, as long as the fuel makes it into the manifold it's good. That's how bank and batch fire used to run and is how modern sequential runs under heavy load.

As for O2 feedback, that adds A LOT of code. I'm using an arduino for my Yamaha 535 EFI project(fuel only, spark comes later) and it will have feedback so I'll let you see the code then. Also requires a table that you can write back to, interrupts from the crank so you don't go too long modifying tables and miss fuel injection cycles, and a map sensor so you can take load vs rpm and find your injection rates in the table... should be an interesting project. :slight_smile: