Go Down

Topic: Comfort turn signal controller for cars with Arduino Nano v3.0 (Read 3599 times) previous topic - next topic


Aug 14, 2014, 02:02 pm Last Edit: Aug 14, 2014, 03:51 pm by mikanb Reason: 1
Hello everyone,

In case you have older car like me (Audi A6 2002) and your ECU doesn't support this feature, then this project can be useful to make your drive even more comfort.
This controller has two inputs and two outputs. Inputs are turn signal handle positions (left/right) and the outputs are 12V signals which are connected to exiting blink relay in the car for a corresponding turn signals. Additionally, you have to supply the board from the car battery, lowered to 5V with the 7805 or similar voltage regulator.
Principle is quite simple, if you shortly activate turn signal handle, the controller will activate corresponding output for a predefined amount of time. During this time, existing car blinking relay will get a 12V to a corresponding input and blink. If you hold it in left or right position more than approx. 0.4s, it will switch to normal mode and stay in that mode (keep the output HIGH) until you put the handle again in neutral (zero) position.
One more feature that this controller has is when you, for example, activate left turn signal in comfort mode, and you want to cancel it before it blinks 3 (or so, selected in software) times, you can cancel it by moving handle to right position for a very short period of time.
Sketch is using Timer1 interrupt so the included library will be needed to be able to compile and download to Arduino.
It should work for most cars since turn signal handle switch is the simple 3-way switch.
Happy building!


Nice idea. I think I will add this capability to the Arduino-based dashboard I am working on for my 22 year old GMC truck.

Did you think about adding an alarm for when you forget to turn the signal OFF for too long a time?  My wife usually provides that automatic system for me, but when I'm driving alone it does not work.

The Nano (Example:) usually comes with pins to plug into a breadboard or protoboard. How did you mount your Nano? How did you power it??

I would think about plugging it into a protoboard like  THIS: so there was a place for the 12V protection or regulator circuit.

DISCLAIMER: Mentioned stuff from my own shop...
Regards, Terry King terry@yourduino.com  - Check great prices, devices and Arduino-related boards at http://YourDuino.com
HOW-TO: http://ArduinoInfo.Info


Good point Terry, this feature can be useful especially if you like to listen to music out loud (like myself) and thus unable to hear relay clicking...and in your case, when driving alone without automatic reminder!  :)

Ok, I updated the software with this feature by generating sound signal if handle is in the either right or left position longer than predefined time. It will generate short beep after "alarm time" elapses, make pause for few seconds, beep again and so on until you put handle back in zero position.

You can adjust "alarm time" by changing the value for the "reminder" variable in the sketch. I set it initially to 3000 which is 30 seconds but you can put any other integer value.

Speaking about the project make, I soldered one 32 pin DIP socket (has to be ordinary since you can not plug the Nano into professional chip cradle) to protoboard and plug the Nano into the socket (yes, the socket is a 2 pin smaller than the Arduino Nano pinout but i didn't use D12 and D13 anyway). This way you won't have to make any modifications on the Arduino board.
12V signals from the handle are connected to Arduino through two CNY17 opto isolators due to a voltage leveling. Power supply is stabilized to 5V by 78L05 and taken from the nearest + and - points.
Since outputs has to provide 12V towards the blink relay, I did it through the two bipolar transistors (for left and right turn signals). You can also use relays if you have enough space on the board.

Don't forget to put the fuse on the board for the power supply, so in case of short circuit, it can protect car/electronics.

I hope this will help you if you decide to build this project.

Thanks for the idea, I already updated mine...  :)


I've been going to build one with Pro Mini.

Prototyping first with Uno (a CN clone) revealed some problems with "convenient mode" - after time being expired it didn't turn off the turn signal.

While debugging, the very Serial.print()'s seem to solve the problem. Hence it rang the bell that the problem was somewhere in proper interrupts and shared access handling.

Putting counter variable access into noInterrupts/interrupts functional brackets resolved it.
You can find improved code attached (NB: I'm using inverted command signals with INPUT_PULLUP mode).

As for my make - no need for opto-isolators since my Audi Cabrio turn lever is an isolated 3-way switch connected to GND,IN6,IN7. Output is driven by directly connected 2xIPS521 replacing the factory switch.



Another update, now with DRL dimming control via PWM.

When turn signal is activated the DRL on respective side (ctrlDRLLeft or ctrlDRLRight) is dimmed to DRL_BRIGHTNESS_DIMMED value.

When cmdDRLDim input gets HIGH (from voltage divider connected to position lights or low beam) it dims both DRLs, too.

DRLs are at full brightness (DRL_BRIGHTNESS_FULL) when no turn or dim signal is detected.
Not the highest possible brightness (255) in my case, because my DRLs are too bright, overheat and do not like excess voltage when engine is running.


Go Up