V8 Timing control-Brainstorming-Need help and suggestions for a new project

So I had an idea to make my arduino control my timing on my 65 Buick. I am installing a Chevy V8 and the timing advance and retard was controlled by a computer.

To solve this problem I could just buy a mechanical timing advance using weights or vacuum. But, thats to easy. I would rather make a project out of it and have some fun.

This is the begining of probably a long project.

So far it is just an idea and I have no specs on how fast and long the spark lasts and how to do this.

For discussion purposses lets say the time between each spark in the cylinders is going to be 1 second. Obviously thats way to long but again just for discussion purposses.

Oh yeah this is for an HEI distributor.

I was thinking of using the magnetic pick up as an input to the arduino. So everytime the arduino gets an input it will send and output to the Coil to send a spark.

But since the arduino is recting to an input this would cause a delay which would retard the timing. So I thouhgt how would I advance the timing and it came to me.

If I delay the output long enough it would overlap into the piston coming up and would in essence be an advance for that piston. Remember I said between two sparks is 1 second so between 2 pistons being top dead center is 1 second.

For example: If I get a signal for a spark when piston 5 is top dead center and delay it .45 of a second it will retard it when the piston is well on its way down.

If I get a signal for a spark when piston 5 is tope dead center and dalay it .95 it will spark on piston 6 on the way up to TDC which is an advance.

I figure when I first crank the car up the arduino should read the first three sparks for a reference to time the spark. Then us that to a advance timing but once it reads the first three continually read the previous spark and continue with advance or retard.

Whats your thoughts?

I'm no car guy, but I would guess that it would be possible to damage the engine if you fire the spark at the wrong moment. Which at worst, might mean that a minor bug in your sketch would require you to purchase a new V8.

(Please post a picture of the 65 Buick for inspiration ;)

Adding an encoder to the shaft so that you the arduino gets a pulse per rotation (reference). This is often extended to an encoder that also gives you the angle (search for rotary encoders) .With the angle of the shaft you get feedback how fast it rotates. After one rotation you could have the Arduino in sync with the motor. The angle information can also be helpfull for the timing of valves etc, not only the spark.

Well the positive side of a blown engine is i get to get a new one. ;)

Joking aside i did think about that. What i thought about doing is advancing my distributor to 12 degrees initial ,incase the arduino dies on me,then the engine will have some sort of timing advance. But i didnt want to think about that so soon. I wanted to see what we can figure out in this discussion. But since its out there now i guess i will have to come up with some fore fail safes.

I will look for a pic of the car. I dont have it on my phone.

I wouldn’t worry about damaging the engine as a result of bad spark timing. You can fire a spark at virtually any point in the cycle. You’ll get backfires and misfires, and if everything is completely out of wack the engine won’t even start and run, but it’s extremely unlikely you’ll cause any actual damage to the engine unless you attempt to run it with bad spark timing for extended periods under load (I’m talking thousands of miles of operation)

It might be easier to think of the Arduino adding delay to the ignition event. The idea would be to set the timing of the pickup to lets say 40 degrees advance which should be more than enough. Then, you use the Arduino to delay the coil charge for "x" milli-seconds depending on the rpm of the engine to reach your desired advance which could be 10 - 30+ degrees depending on the engine and rpm.

Another note, the Vacuum advance is used to adjust the spark timing as related to how much vacuum is in the manifold. You would have to have a sensor to recreate that effect too.


I wouldnt use the vacuum. Either way this dist doesnt have that option.

The idea of advancing the timing and then just delay the timing with the arduino is a good idea. I also thought about that.

That was the fall back option.

Many years ago, I did some design work for Lotus; they were planning a V6 2.8 turbo (I think they were trying to get the DeLorean motor contract.) What we designed was this: a piezo sensor supplied engine vibration data. From that (via a bandpass filter, IIRC) we could detect when the engine was just on the edge of detonation. The wastegate was to be PWMed to keep the boost at the maximum possible without detonation. The motor would therefore always produce as much power as the ambient temperature, pressure and humidity, motor temperature and load, and fuel quality would allow. Unless I’m mistaken, the same mechanism could be used to advance the spark for the most complete burn possible.