[WIP] NFC car starter by MrStein
-
Hi,
I finished the biggest part of the eagle board.
(miss the isolate and maybe some 1n400x diode in additionnal protection for the relays )The dimensions of the relay are not good but I wait the relay (from China (~ 20days :/ )) and be sure of the relais size before start a prototype.
Anyone know how to bypass the anti boot other than moving the antenna system? With emulating the code for the calculator?
-
Hi @MrStein , could you private message me in the chat box? It's the icon top right, or the glowing box bottom right. Ta. :-)
-
@MrStein Where in England? I will come to visit and bring you a car to hack on. You know my email address so just email me an address and the car you'd like :)
-
the board, normaly ready for the integration in a car :
(components from John, electronical help by Lokki & Duncan )
TOP:BOTTOM:
(latching relay is in the bottom side after a eagle design problem, but I think i'll work fine. )schematics:
http://i39.servimg.com/u/f39/13/54/23/66/v210.png -
So much prettier than mine, @MrStein, that's awesome. ;-)
-
Okay so the problem we hit in implementation is the BMW has a hall sensor for the push button, this makes life somewhat difficult.
We're investigating the possibility of interfacing with a third party remote starter module and also ways to replicate the hall sensor signal.
The source code is written for V2 and I sent through to @MrStein
Also note I just spoke to a BMW remote start expert and the car I chose is one of the hardest ones to interface with because of the way they implemented the electronics. Any other car up to a 7 series would be fine..
I have such bad luck.. Will trade in this 7 series and get a different car to hack on...
*grumbles.
-
Ouch. The focus would perhaps have been easier... Still, if you can make it work on the beemer you can do it on anything.
-
UP! Some news about the project !
First I have some electronical test from my 407 peugeot:
The current from the contact in the neiman is about 9.5mA, the stater contact is at 17mA. So a 3A relay will work fine.I start a new version with a ATMEGA328 and a 16MHz crystal. You also have a BLUETOOTH 4.0 connector for a further version.
The board:
The circuit with a 3d printed box
(miss the atmega healder & a led)
(letters are bad)I give all the schématics / 3D drawing after some tests :)
-
After some test, a new proper version (10 pcb for 10$):
I solder all when I have more time .
-
Excellent work @MrStein - I think one thing we should be doing is holding a few of these pre-made in stock so people can purchase them through store.nfcring.com
-
As you want john, I add some modification to the second board (capacitor value en package) so I would like to test them before give all the files.
After it's an open source project so use them as you want :) -
Fun with the starter, useless but for science of course !
But with that test, I know that my car need 500ms delay between the contact & the starter. and more than 800ms after that to launch the engine.
-
Here are the files of new optimised version, click on "téléchargement gratuit" :)
http://www.partage-facile.com/E8RQRYP85C/atmega_v3_nfc_starter.zip.htmlA new 3d printed box will follow, in open source too :D
-
This looks fantastic. I'm curious, @MrStein, ou wrote "The keys are currently in this version to avoid problems related to the anti-starter. It will be neutralized (bypassed) later on." in the first video. Did you insert the keys in the "On" state in your car before scanning your ring? Great project!
-
Now, I use a deported antenna to connect to the neiman (were you put the key) the immo chip.
this is not the best solution but it s difficule to emulate the immo signal so it's the easiest ;)
I had make some "how to" for connection between the neiman & the board, and how to supply. For now they are on my youtube (mrstein) but in french..
I will make another video for bypass the immo ;)maybe if I have the time I will make a instructable for all (making the board, connection, bypass), but as you can read, my english is not realy good for translate a full text ^^"
-
That's very cool. English would be great for everyone, but I can read French just as well. Keep it up! Can't wait for your next update ;) Lâche pas la patate!!!
-
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)
http://fr.sourcepod.com/pwdatf37-45351
/* 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); delay(200); digitalWrite(LED, LOW); delay(200); } } //*******************fonction buzzer void fct_BUZZ(int pulse){ for(int i=0; i<pulse; i++){ digitalWrite(buzzer, HIGH); delay(200); digitalWrite(buzzer, LOW); delay(200); } } //*******************fonction contact void fct_contact(){ fct_FLASH(1); digitalWrite(RelaisContact_OFF, HIGH); delay(500); digitalWrite(RelaisContact_OFF, LOW); etatContact = true; } //*******************fonction starter void fct_starter(){ fct_FLASH(2); digitalWrite(RelaisStarter, HIGH); delay(tempsStarter); digitalWrite(RelaisStarter, LOW); } //*******************fonction STOP, interrupt sur BRAKE void fct_STOP(){ delay(1000); if(!digitalRead(BRAKE)){ fct_BUZZ(2); digitalWrite(RelaisContact_OFF, HIGH); delay(500); digitalWrite(RelaisContact_OFF, LOW); Serial.println("STOP"); etatBRAKE = true; etatContact = false; while(!digitalRead(BRAKE)){delay(500);} 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); return(Received); } else return(0); } //*******************fonction MODE sleep void fct_DODO(){ delay(1000); fct_BUZZ(1); Serial.println("ARDUINO entre en mode sleep"); attachInterrupt(1,REVEIL, LOW); delay(100); set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sleep_mode(); Serial.println("ARDUINO reveil"); fct_STOP(); } //*******************fonction reveil void REVEIL(void){ detachInterrupt(1); } void setup(void) { pinMode(buzzer,OUTPUT); pinMode(RelaisStarter,OUTPUT); pinMode(RelaisContact_ON,OUTPUT); pinMode(RelaisContact_OFF,OUTPUT); pinMode(LED,OUTPUT); digitalWrite(LED, LOW); digitalWrite(buzzer, LOW); pinMode(BRAKE,INPUT); delay(100); //if(!digitalRead(BRAKE))fct_STOP(); // en cas de reset forcé, securite Serial.begin(115200); Serial.println("start"); nfc.begin(); uint32_t versiondata = nfc.getFirmwareVersion(); if (! versiondata) { Serial.println("erreur pn532"); while (1); // halt } nfc.setPassiveActivationRetries(0xFF); nfc.SAMConfig(); Serial.println("CAR STARTER V1.0"); } void loop(void) { String Received; while(etatContact == false){ Serial.println("attente lecture pour contact"); Received=fct_lecture(); if ((Received == CLEF1 || Received == CLEF2)){ Serial.println("Clef valide, contact"); fct_contact(); delay(interRelais); } } while(etatBRAKE == false){ Serial.println("attente lecture pour starter"); if(digitalRead(BRAKE)) etatBRAKE = true; Serial.println(digitalRead(BRAKE)); Received=fct_lecture(); if ((Received == CLEF1 || Received == CLEF2) ){ Serial.println("Clef valide, starter"); fct_starter(); } } delay(100); if(etatBRAKE == true){ fct_DODO(); } }
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.
-
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 ;)