I like my Renault Megane III. I find it elegant, stylish, silent, powerful. However, it had a small, but important to me, missing feature, which was the One-touch mode for signaling directions changes, as described in the manual:
Basically, when you want to quickly signal to the other traffic fellows a slight direction change maneuver, like changing a lane or so, you can shortly action the direction change stalk and forget about it. Renault introduced this feature on newer Megane III models but I've used a lot this feature on my previous car so I wanted to have it here as well. One solution would had been to completely retrofit the Body Control Module (BCM), which, among others, is responsible also for direction signal lights (blinks), with a newer one which has this very feature but the idea of using Arduino for signaling my old BCM to continue flashing in case the stalk returns to its neutral position "too soon", to design and play with PCBs, to learn new and exciting things and the perspective of sharing it with the community, paid-off.
The whole project's idea is to sense the turn switches (operated by the turn stalk), the direction light bulbs blinks and to drive the BCM so that it will continue to blink for three more times when the stalk is shortly activated.
There is access needed to BCM, which is placed under steering wheel, for sensing light-bulbs blinking and driving BCM and access to the turn stalk PCB, for sensing the turn switched activation/deactivation.
For the One-touch module powering a buck convertor was used, connected to the 12 V from behind the cigarette lighter and with an output of 5V as requested by Arduino. For access, some plastic covers had to be removed; please see the service manual.
I guess the hack will work also for other Renault car models, from the same generation as Megane III, but careful research has to be performed.
Obviously, if you're trying to replicate, you're on your own with no warranty that it will work on your car too.
For the One-touch module:
- One PC for Arduino software. I've used Linux with Netbeans for software development but if no code changes are needed then Arduino IDE or plain command line avrdude tool should suffice to upload the firmware on the Arduino board
- USB cable and, depending on the used Arduino board board, a FTDI usb to ttl serial converter
- electronics specific tools, such as lead soldering iron, lead wire with flux, blank cooper boards, ferric chloride for etching cooper etc. All these can be skipped if the PCBs creation will be outsourced to the many professional services available
- a small plastic box to host and protect the PCB while in service
For the car installation:
- the tools required by the service manual for removing different plastic covers, among which including torx and normal screwdrivers, plastic trim removal tools set etc.
- isolated wires, for linking the needed existing wires and One-touch module
- lead soldering iron and lead wire with flux
- electrical isolation tape
- plastic cables ties.
The BCM drives the direction light bulbs through the brown connector, pins 10 and 11, as in the picture:
When the light bulbs are on, the 12V (or so) signal can be picked from pins 10 and 11, depending on the turn direction, and 0V otherwise.
Three derivation wires, fed to the One-touch module were soldered on the indicated wires; the left and right blink signals and GND:
The turn stalk drives the BCM through a diodes matrix which, for direction, three pins from the 40 pins grey BCM connector are responsible for:
When pin 39 connects through a diode to pin 37 the BCM is continuously blinking the right directional light bulbs, as long as the pins are connected (i.e. right turn switch is closed). In the same manner, when the pin 40 connects through a diode to pin 37 the BCM is continuously blinking the left directional light bulbs as long as the pins are connected (i.e. left turn switch is closed).
Same here, derivation wires were soldered and fed to the One-touch module driving pins:
Unfortunately, when a turn switch closes for a direction the BCM raises the opposite pin voltage to the same level making impossible to tell which direction was activated by just monitoring the BCM pins. That is why the One-touch module needs to get the turn switches signals before they enters to the diodes matrix, right from the PCB next to the direction stalk, underneath the steering wheel; be aware, it can be pretty difficult to reach it. There, a 12V (or so) signal indicates a turn switch was closed (the stalk was turned) in one direction and 0V indicates the stalk is in the neutral position or turned in the opposite direction.
To reach the PCB with the turn switches, the steering column plastic cover, between the dashboard and steering wheel, needs to be removed (see the service manual) which will expose a white plastic box, surrounding the steering column. Remove all the screws from behind, the connected wires and gently remove the PCBs (there are two) linked through a set of wires. Pay attention on the sliding switches from the box. They might fall, in which case they must be reinserted in the exact same position:
The PCB of interest looks like:
For a greater mechanical strength, the derivation wires, to be fed to the One-touch module, were soldered from the wires between the two PCBs:
The one touch module is based on Arduino Pro Mini, although an Atmega Attiny85 would have had suffice, since only six pins are used. It's sensing the 12V (or so) signals using a set of voltage divisor and a set of 0.1 uF capacitors for switches hardware de-bouncing, which along with the resistors near the ground form a set of low-pass RC filters. Since the BCM needs to be driven through diodes and without interfering with its signals levels, two optocouplers were used. Another option would had been two relays but since the driving current is extremlly small (aprox. 20 uA) optocouplers were a better option. They are smaller, noiseless, more reliable, since they don't have any moving parts, and provide a faster switching response.
Before PCB design and during code development a series of tests were conducted using the Arduino Pro Mini, a breadboard and a set of switches (to simulate the BCM's signals) and electronic components which were placed on the PCB afterwards:
As can be seen, the things became messy but for testing purposes it was serving well.
The schematic and PCB where designed using the marvelous open source KiCad software (good job KiCad Developers Team, CERN and the rest of the sponsors). It's my first on using an EDA software and it was relatively easy and fun to learn and work with. There is a lot of documentation and tutorials on the internet.
If you spot any design flaws, please bear with me, it was my first PCB design. You can come with improvement suggestions or you can improve it by yourselves; the full KiCad project is open-sourced.
The schematic is pretty straightforward:
- in the center there is the Arduino Pro Mini. Only pins D2, D4, D6, D8, D10 and D12 were used. They were chosen as to have an evenly spreading, extra mechanical strength and to allow an easier manual soldering
- on the left side there are the voltage divisors along with the RC low-pass filters and a set of diodes so there will be no interfering with the car's input signals
- on the right side there are the two optocouplers, driven by Arduino through two 220 Ohm resistors and which close the diode circuit as requested by BCM and described earlier
- for communicating with the outside world a normal DB9 connectors (as the ones used for serial ports from the old time desktops) was used. The pins are also described in the schematic.
Due to lack of experience there were multiple PCB refining processes so that it would fit within one small plastic box I wanted to use and, since I wanted it home made, the electronic components had to be easily soldered, implying generous pads surfaces and tracks clearings. In the end the PCB design looks like:
One of the KiCad nice feature is that you can foresee how your module will look in the real worlds by using 3D renderings:
Since I wanted only one PCB I've opted for a completely home made one; it was more fun and allowed me to learn more than to chose one of the professional PCB manufacturers. The press & peel method (was my first time) was used to imprint the PCB design and with good results:
Now, with everything in place, all wires were gathered and soldered to the DB9 connector and the module was inserted in place, near BCM:
Since everything is a hack in the end, an emergency switch was added. In case of problems the module can be shut-off and the factory functionality restored. The switch can be easily accessed, if needed, through the fuses access door, underneath the dashboard:
I felt the procedures were too intrusive for the car. In the end nine wires had to be soldered (seven for signals, one GND and one Vcc), the turn stalk PCB operations are very delicate and lots of plastic parts had to be dismantled and mounted again. But, all these were negligible in front of a successful project and with the hope it will be useful for others as well.