start button in Honda CRX

How to Install a Start Button

Here’s the best low-cost way to put a fully functional engine start button in your car! Absolutely no key needed to start your car! Just press the button and go!

You may have seen others put engine start buttons in their cars, but they still had to use a key! It’s like, “really, guys? You’re adding a step to starting your car“! You definitely don’t want to be like those idiots. You, you’re much smarter than those hook-it-straight-to-the-starter guys. You know there’s gotta be a better way… and there is!

Things you will need / may need:

  • Arduino UNO
  • 2 10K resistors
  • proto board
  • 8 channel relay module
  • 22-18 gauge wire
  • 14-12 gauge wire
  • wire crimps
  • wire stripper/crimper
  • engine start button of your choice

Step 1: The Code

The reason this engine start button works so well is because it’s attached to a tiny computer – the Atmel ATMega328. That’s the main part of the Arduino. The Arduino makes this micro controller easy to program and easy to use.

This code that I wrote makes the micro controller “listen” to the start button. It counts how many times the button is pressed, and depending on that number, it will do one of, or a combination of these things: turn accessories on, turn the ignition on, activate the starter motor, or turn everything off. If you want, you can even add your own custom functions.

If you are new to the Arduino, I suggest you look at some Arduino tutorials for beginners. There are many of them around the web. Programming for the Arduino is probably easier than you think!

Once you’re a little familiar with programming the Arduino, check out my [sloppy] code below. You may need to modify it to suit your particular application. Note: This code is still set for 4 relays, using the same relay for IG1 and IG2A. This is not recommended! I will add an updated version of the code at a later time. UPDATE: Code now supports the 5 relay setup.

// (C) 2014 Scott Hubble. NOT FOR COMMERCIAL USE.
//Push button ignition switch for automobiles.
//Made for 1988-2000 Honda Civic/CRX, but may be adapted to other vehicles.
//By Scott Hubble. Original version started 2114 Aug. 11.
//Ver. 6 started 2014 Aug. 15. Completed 2014 Aug. 15 @ 23:10 -7 UTC.
//UPDATE: 2014 Aug. 16 - Added LED output for button illumination.
//UPDATE: 2014 OCT. 2 - Changed for standalone Atmega.
int b1 = 3; //Start button.
int b2 = 2; //Clutch interlock switch.
int acc = 9; //Accessory output.
int ign = 8; //Ignition output.
int st = 7; //Starter output.
int ledPin = 12; //LED for button illumination.
int accLed = 11; //ACC indicator.
int onLed = 13; //ON indicator.

long unsigned time = 0; // Timer.
long unsigned time2 = 0; //2nd timer.
int ledFlash = 0;
int ledFlash2 = 0;
int ledOn = 0;
int b1Stat = 0; //Was the primary switch pressed?
int b2Stat = 0; // Secondary switch pressed?
int did = 0;
int did2 = 0;
int did3 = 0;
int on = 0;
int on2 = 0;

void setup()
{
  pinMode(b1, INPUT);
  pinMode(b2, INPUT);
  pinMode(acc, OUTPUT);
  pinMode(ign, OUTPUT);
  pinMode(st, OUTPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(accLed, OUTPUT);
  pinMode(onLed, OUTPUT);
  time = millis();
  time2 = millis();
  digitalWrite(acc, HIGH);
  digitalWrite(ign, HIGH);
  digitalWrite(st, HIGH);
  digitalWrite(accLed, HIGH);
  digitalWrite(onLed, HIGH);
  digitalWrite(ledPin, HIGH);
}

void loop()
{
  // -------------------------Read the bottons:-----------
  if(digitalRead(b1) == HIGH && b1Stat == 0){
    b1Stat++;
    on++;
    delay(90);
  }
  if(digitalRead(b1) == LOW && b1Stat == 1){
    b1Stat--;
    on--;
    delay(90);
  }
  
  
  if(digitalRead(b2) == HIGH && b2Stat == 0){
    b2Stat++;
    on2++;
    delay(90);
  }
  if(digitalRead(b2) == LOW && b2Stat == 1){
    b2Stat--;
    on2--;
    delay(90);
  }
  //--------------------Operation:---------------------------
  if(on == 1 && on2 == 1 && did == 0){ // Start engine, IGN on.
    digitalWrite(acc, HIGH);
    digitalWrite(ign, LOW); //Write LOW to activate relay.
    digitalWrite(st, LOW);
    did = 1;
    did2 = 0;
    did3 = 1;
    ledOn = 1;
  }
  
  if(on == 0 && did == 1){ //Starter off.
    digitalWrite(st, HIGH);
    digitalWrite(onLed, LOW);
    did = 2;
  }
  
  if(did == 2 && on == 0){ //ACC on after engine start.
    digitalWrite(acc, LOW);
    digitalWrite(accLed, HIGH);
    did = 3;
  }
  
  if(did == 3 && on == 1){ //Turn everything off.
    digitalWrite(ign, HIGH);
    digitalWrite(acc, HIGH);
    digitalWrite(onLed, HIGH);
    digitalWrite(accLed, HIGH);
    did = 4;
    ledOn = 0;
    time2 = 0;
  }
  
  if(did == 4 && on == 0){
    did = 0;
    did2 = 0;
    did3 = 0;
  }
  //-----------------NON STARTER OPERATION--------------------
  
  if(on == 1 && did2 == 0 && did3 == 0){ //Push for ACC
    digitalWrite(acc, LOW);
    digitalWrite(accLed, LOW);
    did2 = 1;
    ledOn = 1;
  }
  
  if(on == 0 && did2 == 1 && did3 == 0){
    did2 = 2;
  }
  
  if(did2 == 2 && on == 1 && on2 == 0){ //IGN without start
    digitalWrite(ign, LOW);
    digitalWrite(onLed, LOW);
    digitalWrite(accLed, HIGH);
    did2 = 3;
  }
  
  if(on == 0 && did2 == 3 && did3 == 0){
  did2 = 4;
  }
  
  if(did2 == 4 && on == 1 && on2 == 0){ //ALL SYSTEMS OFF.
    digitalWrite(ign, HIGH);
    digitalWrite(acc, HIGH);
    digitalWrite(accLed, HIGH);
    digitalWrite(onLed, HIGH);
    did2 = 5;
    ledOn = 0;
    time2 = 0;
  }
  
  if(did2 == 5 && on == 0){
    did2 = 0;
  }
  //-----------------LED OUTPUT/BUTTON FLASH/illum.-------------------
  if(ledOn == 1 && time2 == 0){
  digitalWrite(ledPin, LOW);
  time2 = 1;
  }else if(millis() - time > 5000 && ledOn == 0 && b2Stat == 0){
    digitalWrite(ledPin, LOW);
    time = millis();
    ledFlash = 1;
  }
  if(millis() - time > 100 && ledFlash == 1 && ledOn == 0 && b2Stat == 0){
    digitalWrite(ledPin, HIGH);
    time = millis();
    ledFlash = 0;
  }
  if(b2Stat == 1 && b1Stat == 0 && ledOn == 0){
    digitalWrite(ledPin, LOW);
    delay(50);
    digitalWrite(ledPin, HIGH);
    delay(60);
  }
}

 

Step 2: The Button

Almost any button will work as the engine start button. However, some buttons will have extra features such as mode indicators. This might make the button more cool, but could be more difficult to wire up. You could also just stop by Radio Shack and pick up a regular button. Nothing special is needed. Just find something you can mount in your car.

You can buy cheap engine start buttons online for about $20(USD). This is a good, easy choice. I, as well as many others, prefer to get OEM buttons. This is the more expensive option. You can buy new from a OEM dealership, or find a used one. Both tend to be more expensive, but if your lucky you can find a good price on a used one. See more on how I installed my engine start button here.

Step 3: Relay Module

4 channel relay module
4 channel relay module

Ideally we would use 30 AMP relays, however, it’s trickier to find 30 AMP relays that can be controlled with 5 volts. That’s why I using a 10 AMP relay module. You should used at least 5 relays. I’m using 4 without a problem yet, but it could cause a problem down the road.

8 channel relay module
8 channel relay module

I would suggest a 8 channel relay module. This is the one I purchased, but never implemented. You can find them on Amazon, SparkFun , Adafruit, etc.

I am currently looking for a way to implement 30 amp relays.

Step 4: Power Supply

We need a way to power the Arduino and the relays in the car. You cannot connect it straight to the car’s battery! The car’s electrical system is 12 volts. The Arduino uses 3.3 to 5 volts. We need to step the 12 volts from the car down to 5 volts for the Arduino and relay module.

In my case, I modified a USB car charger. This is probably the easiest way. USB chargers are cheap, which makes it a good choice. You can also make your own power supply, which I cover here.

Step 5: Wiring

Arduino, relay module, and proto-board
So many wires!

Now it’s time for the fun part! We have to run a lot of wires to make this one button work. Let’s start by wiring the buttons.This circuit uses a pulldown resistor for each button. that will ensure that we won’t have any ‘phantom’ button presses. For a clean and compact install, I recommend making a circuit board.

Again, please note: this setup is only using 4 relays. I highly recommend that you use 5 relays! I will update this diagram at a later time.

Arduino wiring diagram
Arduino wiring diagram

That was probably the trickiest part of the entire mod. If you understand the Arduino wiring, the rest will be a piece of cake!

91 CRX Ignition wire colors
91 CRX Ignition wire colors

Behind the dash fuse cover you will find 2 connectors. These 2 connectors run to the ignition switch, and will be where you connect the relays. The best way to do this is with a donor ignition switch harness. The harness makes things a lot easier, and you won’t have to ruin your original harness. If you ever want to go back to the keyed ignition switch, you can just plug the original harness back in.

CRX ignition switch harness
CRX ignition switch harness

With the donor harness, cut the wires off of the ignition switch. Strip the wires on that end and crimp them to the wires that will go to the relays. You should use 14-12 gauge wire for this.  Crimp the wires from the ACC and IG2B relays to the BAT-A(WHY/BLK) wire. The BAT-B(WHT) wire goes to the IG1, IG2A, and ST relays. You must crimp those 3 wires from those 3 relays to the BAT-B wire.

CRX ignition relay wiring
CRX ignition relay wiring

The engine start button from the ’10-’12 Mazda 3 is actually a pretty good button. I like how it indicates “ON” and “ACC”. I think it’s one of the better start buttons out there. I understand if you want to keep it OG with an original Honda S2000 start button, but if you happen to use the same Mazda 3 start button as I’m using, here are the pins for that to make things easier for you:

Mazda 3 start button pins
Mazda 3 start button pins

I had to test each pin to figure out what they were. I hope this helps someone else out.

Start button circuit board
The finished circuit board that I made for the engine start button

You can download PDFs of my circuit board if you’d like to use my design. Note that you will need to use the same hardware with this design.
All layers in ZIP file | Single copper etch PDF | Single mask PDF

If you use Fritzing to design circuit boards, you can download the FZZ file here.

I’m new to this tutorial thing, and I know I may not be the best at thoroughly explaining things, so leave a comment below if you need some help or have a question about something.