[WIP] NFC car starter by MrStein

  • The code, with sleep mode and interrupt. Work fine with the board (you have to plug a 10Kohms resistor 0603 cms between the +5v and int1, it will be rectifed with another version)


     Code par MrSTEIN (mrstein(at)hotmail.fr)
     v1.0/ 01/10/2014
     compatible avec NFC starter V3.0
     configuration harware:
     interruptBRAKE 3
     BRAKE 4
     buzzer 5
     RelaisStarter 6
     RelaisContact_OFF 7  
     RelaisContact_ON 8
     LED 13    
     informations hardware:
     1flash: CONTACT
     2flash: STARTER
     1buzz: SLEEP
     2buzz: STOP
      #include <Wire.h>
      #include <PN532_I2C.h>
      #include <PN532.h>
      #include <avr/sleep.h>
      #include <avr/power.h>
    //definition des clefs  
    String CLEF1 = "xxxxxxxxxxxxx";
    String CLEF2 = "xxxxxxxxxxxxx";
    #define interRelais 500 // temps entre contact et starter
    #define tempsStarter 500 // temps starter ON 
    //definition des sorties, valable pour la v3  
    #define interruptBRAKE 3
    #define BRAKE 4
    #define buzzer 5
    #define RelaisStarter 6
    #define RelaisContact_OFF 7  
    #define RelaisContact_ON 8 
    #define LED 13  
    PN532_I2C pn532i2c(Wire);
    PN532 nfc(pn532i2c);
    boolean etatContact = false;
    boolean etatBRAKE = false;
    //*******************fonction buzzer
    void fct_FLASH(int pulse){
      for(int i=0; i<pulse; i++){
      digitalWrite(LED, HIGH);
      digitalWrite(LED, LOW);
    //*******************fonction buzzer
    void fct_BUZZ(int pulse){
      for(int i=0; i<pulse; i++){
      digitalWrite(buzzer, HIGH);
      digitalWrite(buzzer, LOW);
    //*******************fonction contact
    void fct_contact(){
    digitalWrite(RelaisContact_OFF, HIGH);
    digitalWrite(RelaisContact_OFF, LOW);  
    etatContact = true;
    //*******************fonction starter
    void fct_starter(){
    digitalWrite(RelaisStarter, HIGH);
    digitalWrite(RelaisStarter, LOW);
    //*******************fonction STOP, interrupt sur BRAKE
    void fct_STOP(){
    digitalWrite(RelaisContact_OFF, HIGH);
    digitalWrite(RelaisContact_OFF, LOW); 
    etatBRAKE = true;
    etatContact = false;
    etatBRAKE = false;
    Serial.println("FREIN OFF");
    else fct_DODO();
    //*******************fonction lecture de tag
    String fct_lecture(){
      String Received;
      boolean success;
      uint8_t IdReceived[] = { 0, 0, 0, 0, 0, 0, 0 }; 
      uint8_t Id_Length; 
    if (success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &IdReceived[0],&Id_Length)){
    for (uint8_t i=0; i < Id_Length; i++)
     Received += String(IdReceived[i], HEX); 
    //*******************fonction MODE sleep
    void fct_DODO(){
     Serial.println("ARDUINO entre en mode sleep");
    attachInterrupt(1,REVEIL, LOW);
    Serial.println("ARDUINO reveil");
    //*******************fonction reveil
    void REVEIL(void){
    void setup(void) {
      digitalWrite(LED, LOW);
      digitalWrite(buzzer, LOW);
    //if(!digitalRead(BRAKE))fct_STOP(); // en cas de reset forcé, securite
      uint32_t versiondata = nfc.getFirmwareVersion(); 
      if (! versiondata) {
        Serial.println("erreur pn532");  
        while (1); // halt
    Serial.println("CAR STARTER V1.0");  
    void loop(void) {
    String Received;
    while(etatContact == false){
    Serial.println("attente lecture pour contact"); 
    if ((Received == CLEF1 || Received == CLEF2)){  
    Serial.println("Clef valide, contact");  
    while(etatBRAKE == false){
    Serial.println("attente lecture pour starter");   
    if(digitalRead(BRAKE)) etatBRAKE = true;
    if ((Received == CLEF1 || Received == CLEF2) ){ 
    Serial.println("Clef valide, starter");
    if(etatBRAKE == true){

    A video of the plugging in the car will come, maybe if I have some translation help I could make an instrutable.

    edit: sorry, not a lot of comment (and in french), but I think it's not too difficult to understand.

  • Community Helper

    post your text on some collab tool in french and if I have some spare time I'll try to help you to translate it.

  • Hey @MrStein this looks great! If I was still tech savvy like in high school I would love to do a home build! Seeing how I'm only a little tech savvy now, what's the odds of being able to buy one of these? I just got my hands on my NFC ring thanks @NFC-Ring-Team can't wait to integrate this into my day to day!

  • You can make one with the eagle files if you know how solder the components (I will make a bill of material soon) ;)
    Maybe I can give you a blank prototype board, but you still need to buy the components ;)

  • here is the board finished:

    Black jumper is for simulate the brake
    blue&brown are supply
    brown, blue & yellow/green are contact & starter.
    I also make some videos for show how plug this device & how supply, bypass the immo,... (in french)
    Part1: neiman connection
    Part2: supply
    Part3: bypass immo
    Part4: the board explication & conception

    Next video will be the brake connexion & global connection

  • Hi, any Update on this Project yet?

    how do you unlock the doors of your car? did i missed this here anywhere?

    i'm planning to implant an nfc tag in my hand... and really would like to unlock/start my car (Citroen) with the nfc tag too! :)


  • Hi steve !
    Maybe a NFC ring is better than make an implant ;) A lot of implant are in 125khz, so my board cannot work at this frequency (it's 13.56Mhz-> NFC)
    For the door I don't make any board but it's easy to make with the same board than the NFC starter one.

    The starter project is finished for me, I need to make the last tutorial video (in french) and after that make a instructable.


  • Community Helper

    I've got to agree with Pierre at the moment on implants - cool idea, but too difficult to upgrade and I don't think the tech is mature enough yet.

  • Hi,

    there are 13.56MHz implants also

  • Community Helper

    Yes, they're available. Personally I don't think the technology is advanced far enough to warrant having a permanent implant.

  • Well, I think nfc implant tag are only suitable for the animals identification..Not for the human.. But it's my opinion..

    For the price, I have the same tag but in 125khz, I paid less than 1$ for one. I think this one is really expensive.

  • @MrStein sorry for the very late reply. I would completely love a blank but being from the United states it wouldn't be very beneficial to send one. I would still love to buy one from the nfc store since they do have that in the US now. Maybe putting to together a kit for a build your own would be a good idea. With the added door unlock part that another person had mentioned. Just a thought.

    This could be easier to make instructions for assembling for that then translating a complete build from scratch.

    Would wiring into an old turn key be easier then a button start?

  • Any News on this Topic? Is There a buyable Kit or at least a pcb available?

  • Here are the files :

    Don't forget it's not a plug an play solution and you will need to make some operation for finish your NFC starter ;)

  • @MrStein I was wondering if the keyduimo can be powered off an "always powered" line iin my car and be low powered enough to not drain the battery?

  • Hey Logan,
    It's a good question, I currently make a tutorial for the doors opener and use a push button to start/stop the KeyDuino.
    For the NFC starter, I use the temporary light (that allow 30s of supply to scan the ring/tag).

    I don't know how long you can use a battery if you use like 150mA, but I think it's a bad idea to "always powered" something in your car ;)

    How, just for your information, if you have any question/ rem related to keyduino; please sen them on the keyduino forum, so me and my friend can answer to your question :)

  • @MrStein Excuse me, but where is the schema version 4? Links do not work.

  • It works, you have to click on "téléchargement gratuit (vitesse NORMALE)" then wite the captcha and click on "télécharger ce fichier".
    There are only the layout and not the schematics but I can upload both if you want.

  • @MrStein Je reçus une lettre , je vous remercie! Bien que pas entièrement compris dans le projet. Comment fonctionne l'appareil vérifie que le moteur démarre ?

  • For now, the motor start with a defined time, there are no check if it's really launch or not.
    If you want, you can connect a optocoupler on the pin n°3 of the header "EXT" and connect the optocoupler to the ODB2 pin 7 ;)