Jump to content


  • Content Count

  • Joined

  • Last visited

Community Reputation

123 Excellent


About Mr.RC-Cam

  • Rank
    RC-Cam Mentor

Contact Methods

  • Website URL
  • ICQ

Profile Information

  • Location
  • Interests
    R/C, FPV, Embedded Programming, Electronic Design.

Recent Profile Visitors

7,628 profile views
  1. This forum area contains the technical details to the CAN2Cluster (2009 Ford Mustang) Instrument Cluster Project. This is also the official area to discuss the project. Do not email or private message the author for technical help! Join the forum and post your technical questions and project comments here. For build photos please review the blog: Click Here! Important fine print: This is NOT a beginner project. The builder should have previous experience with Arduino hardware and its IDE (or an equivalent compiler tool set). Also required is prior experience with electronic construction techniques. The wiring details are limited to what is provided in the schematics. All electronic parts can be found on eBay and Aliexpress. Project Files: Schematic Drawings: https://github.com/thomastech/CAN2Cluster/tree/master/Schematics MP3 Sound Files: https://github.com/thomastech/CAN2Cluster/tree/master/WaveFiles Arduino Software: https://github.com/thomastech/CAN2Cluster/tree/master/Arduino
  2. Here are the demo videos. PART 1: PART 2: Technical Details are posted here: https://goo.gl/xf6mZ3. Epilogue: Believe it or not, the CAN2Cluster project has been a distraction from the original mission. That is to say, I still haven't replaced the bad dashboard bulb in my car. So pardon me while I get out some tools and get my hands dirty.
  3. It was a productive weekend; The software is done and everything works. Except for that frustrating odometer data error problem I reported last month. It has me stumped. Time to reflect. Six weeks ago I was a wet behind the ears CAN-Bus wanna-bee developer. I still have a lot to learn but now I know something about the inner workings of a modern instrument cluster. And I'm having a blast driving my new faux ride in the office. Zero to sixty in six seconds, all from my office chair. It's no exaggeration to say that this interactive bookcase display will entertain any car obsessed mechanic (and ex-grease monkeys too). Here's some photos of the finished display. I'll post videos soon. So feel free to come back and see it in action.
  4. The Arduino compatible MP3 Audio Player I ordered five weeks ago (from China) is still not here. So I gave up waiting for it and ordered the same item from Amazon. That was on Wednesday and it arrived the next day. So it wasn't long before I was hearing delightful audio from the clever little module. It's the DFPlayer Mini, a 16 pin DIP module that uses micro SD cards. It was soldered onto a small protoboard and complemented with some power filter caps. After a bit of experimentation I found that transformer coupled audio greatly improved the sound quality. So a miniature 600Ω:600Ω audio Xfmr was installed too. It sounds very good with the 2x15 Watt stereo amplifier module driving a pair of 4-inch car speakers. The DFPlayer MP3 Module is mounted on protoboard. There's an Arduino library for it, so incorporating audio capability was painless. Besides adding the software functions, several 16-bit audio files were produced in Audacity that give this bookcase exhibit a bit of character. There's attention getting V8 engine revs and fast driving audio clips. Plus an ambitious car horn for making sure pedestrians get out of the way when I recklessly "drive" around the office. The MP3 player module was the last item I needed to finish all the wiring. I'm happy to report that all the hardware assembly is complete. The bottom view. All modules are wired and working. There's a bit more software to write. But this Mustang cluster is getting close to the finish line.
  5. More parts have arrived. Not everything, but enough to put me back to work for a couple days. The IR Remote was wired to the Arduino and sprinkled with some sweet software. Now I can operate several functions from the handheld controller. As mentioned before, the instrument cluster will be a bookcase exhibit (nerd art); The remote provides another way to turn it on, rev the engine, and do other amusing activities. Besides the Ignition Key, the handheld remote can start the imaginary motor and animate the cluster gauges. The animations are table based and have 10Hz updates. So a one minute "drive" uses a table with 600 data sets. The advantage of this method is that adding new animations doesn't require rewriting code. Only the table data (gauge values stored in an array) needs to be updated. The IR Remote Receiver's PCB was removed from the sensor and replaced with a directly soldered 3-wire cable. This allows the sensor to fit at the top of the Ignition Switch / Message Center console. So the 3D printed Switch Housing was updated with a window opening for the IR sensor. Revised housing and modified IR Sensor (extended from PCB). Dashboard rear view, Ignition / Message Center Switch with preliminary wiring. Some Arduino compatible Relay and a MOSFET modules are used for programmable Power Control. Instrument Cluster and Amplifier power uses a 2-Channel relay module. The MOSFET controls the light intensity in the Message Center's push button switches. The two modules are mounted on a DiY 3D printed chassis.
  6. The ignition key switch is here. A DiY 3D printed plastic housing combines it with some nice looking push-switches for upgrading the Message Center Switch console. All the new switches are ready for the 3D printed ABS plastic housing. The housing needs sanding/paint before it's mounted on the dashboard.
  7. I don't know of anyone that has connected the Rodeo to a Smart Port R/C Rx, but that shouldn't stop you from trying. My OSD hack information shows how to access the FC's UART2: https://www.rc-cam.com/forum/index.php?/topic/4101-diy-walkera-rodeo-150-minimosd-installation/&do=findComment&comment=28599 Then you would use the CleanFlight Configuration app to configure the FC to enable the Smart Port function on UART2.
  8. Despite all the good news, there's one nagging issue. The instrument cluster has a periodic warning beep and "ODOMETER DATA ERROR" message in the Message Center Display. And instead of mileage it displays "Error mi Error" (bad odometer and trip meter data). ODOMETER DATA ERROR appears every 10 minutes. Odometer and Trip Meter show Error instead of mileage. Google provides some useful information. The Instrument Cluster has EEProm storage for the odometer data. The mileage should appear on power-up but I only see the odometer error. I wondered if it needed something from the CAN-Bus so I spent several futile hours in CAN-Bus purgatory trying to find a solution. No luck, despite threats and begging. But more digging with Google leads to some bad news. The cluster has a secrete self-test feature (button press sequence) and it detects the culprit: DTC A143 error. That's an Odometer NVM Memory Failure. The error is caused by a corrupted EEProm chip or a circuitry problem related to reading the data. I disassembled the cluster and inspected the PCB. Everything looks clean and wholesome. I did not see an EEProm Chip so I suspect the odometer data is stored inside the main microcontroller. Fixing this problem will probably involve a miracle or a deal with the devil.
  9. The CAN-Bus modules showed up in the daily mail. They were quickly wired to the Arduino MEGA 2560 R3. All three boards are mounted on a DiY 3D printed plastic chassis. Their arrival was perfect timing: It was a rainy weekend so I stayed inside and wrote Arduino software that helped me find for the missing ArbIDs. The coding effort was a success. Here's the ArbIDs to the newly discovered MS CAN-Bus (MS-CAN) items: 0x10A: Headlight Control & Backlight Intensity. 0x383: Turn Signal Indicators. 0x3B3: Warning Beeper. 0x3B8: High Beam Indicator. 0x3C1: Parking Brake Indicator, Low Brake Fluid Warning. Having all the ArbIDs was my E-ticket to building an interactive Instrument Cluster control program. Now I can enter short commands and instantly control any gauge or indicator light. For example, to set the Tachometer's RPM to 2500 I simply type TR,2500 into a serial terminal window running on my PC. The serial monitor available in the Arduino IDE is convenient, but any serial terminal program can be used. Here's a short video that shows the test program in action. As you can see, my wild pony has been tamed. Now it's time to start mounting the hardware in the oak base and write the animation code for the project's bookcase display. But some important parts (ignition key switch, Arduino MP3 player, IR Remote, etc.) are on a slow boat from the Far East. I need these things to finish the project. It seems waiting for parts is a right of passage for every one of my projects.
  10. There will be a pair of 4-inch car speakers under the instrument cluster. An Arduino MP3 player with 30W audio power amp will fill the room with the lovely sounds of a revving V8. Yes, it's become obvious that my sanity level doesn't have all four wheels on the ground. The speaker kit includes nice looking grills. But they need enclosures too. No problem, I'll DiY my own. At times like this it's nice to have a 3D printer for making custom plastic parts. I use 123D Design; It's an Autodesk CAD program that has sadly gone extinct (but I'm still a fan). DiY 3D printed speaker enclosure. There will be two speakers for the V8 motor. The 3D printed ABS plastic parts need sanding, priming, and painting. The final color will be satin black. {A bit later, after eating some dust and inhaling my quota of paint fumes ... } The rattle can painted parts look fantastic. A lot of sanding and filler primer has upgraded the rough 3D printed surfaces to a near factory made appearance. The plywood dashboard also looks good in satin black. All the fabricated parts for the display stand are ready for assembly. But none of that matters at the moment. What I really need is to get busy writing the Arduino code to control the CAN-Bus hardware that is coming from the Far East. Patience, young grasshopper.
  11. Rather than sit idle waiting for the Arduino CAN-Bus shields to arrive, I shifted over to woodworking tools. The instrument cluster will be a functioning bookcase display piece. It'll have a hollow oak base to hide the electronic parts. The instrument cluster will get a plywood "dashboard" that will either be wrapped in vinyl carbon fiber film or painted black. Just getting started. Oak base frame and plywood dashboard bezel. Oak base is assembled (test fit). 1/2" threaded rod risers with 3D printed brackets. Vintage '66 Mustang emblem badges will be installed on the base. Wood finish is Medium Oak Oil Stain and Polyurethane. There's plenty of room inside for the electronic goodies. The base is finished and looks nice. I put it aside for now since there's some painting to do on the 3D printed plastic parts. BTW, the late 1960's through 1970's was an era of faux wood grain car trim. I owned a '73 Ranchero that was factory wrapped in that stuff. The cluster's oak base is a playful tribute to Detroit's past attempts at wood grain fakery.
  12. After two late night sessions there has been more progress. The ArbIDs to the Fuel and Oil gauges have been identified. Plus those that control the door status and tire pressure monitor. I should mention that these functions are not accessible from the HS CAN-Bus. Instead, they use the companion MS CAN-Bus for communication. Unfortunately none of the online posted Ford or Mazda CAN-Bus hacker information helped find them. It was a painful exercise of manual keyboard entry and patiently watching the cluster's reaction (if any). There's over 2000 possible ArbIDs and their data payloads have some bit field dependencies that enable/disable other functions. The proverbial Needle in a Haystack. The Fuel gauge was particularly fussy to identify since the control data has weird split scaling and a unexpected control field. To make things more cruel, it would secretly go dormant for 35 seconds on some written data values. I pulled out a lot of hair while deciphering the magic data that it wanted. But I won the battle and can now fill up the tank. The Oil Pressure gauge is interesting too. It's an idiot light in the disguise of a linear display. A single bit controls it, so there's only one active position. This makes sense since the engine's oil pressure sensor is just a brainless on/off switch. Here's the ArbIDs to the newly discovered MS CAN-Bus (MS-CAN) items: 0x3A5: Tire Pressure Monitor (TPM) 0x3B1: Door Status 0x400: Fuel Gauge 0x445: Oil Pressure idiot Gauge Without a real Ford Mustang's data to sniff, my technique was brute force. I used the Microchip CAN-Bus analyzer and manually entered experimental ArbIDs and 8 byte data payloads. The data fields would be populated with test bytes (0x00, 0xFF, 0xAA, or 0x55). Then I would watch the cluster for several seconds to see if anything changed. This went on for about 15 hours, with occasional bathroom breaks. Below is a screenshot of the Microchip tool's GUI. The four ArbIDs have been configured for 1/2 tank of gas, valid oil pressure, all doors closed, and good tire pressure. There's a handful of remaining ArbID's to find. Such as: Dashboard Backlight Intensity Turn Signals (Indicator) Handbrake (Indicator) Parking Brake On warning (message center) Fuel Level Low warning (message center) DTE Data ODO Data Error (message center) Brake Fluid Level Low warning (message center) Check Charging System (message center) I'm a bit worn out from the tedious ArbID mining. Going forward I think it's best to wait for the Arduino CAN-Bus module to arrive. I can use it with some custom code that will assist me with the search for the remaining ArbID's. But the board is coming from China and I don't expect to see it for a couple weeks. In the meantime I'll build a nice looking stand for the Mustang instrument cluster. Woodworking tools won't get me greasy, so I'm good.
  13. After several hours of experimental CAN-Bus data injection I have identified a few more ArbIDs. Besides rpm and speed, I can now actuate the temperature gauge. Several indicator lights are under my control too, as follows: Overdrive Off (orange), Overheat (red), Check Engine (orange), Charge System Fault (red), Powertrain Fault (orange), Cruise Control Enabled (green), Security Enabled (red). These items are handled by two HS CAN-Bus ArbIDs (0x201 & 0x420). As follows: ArbID 0x201, with 8 byte payload The packet takes the form: [RR, rr, 00, 00, SS, ss, 00, 00] Where RRrr is the tachometer rpm and SSss is the Speed mph. The following formulas are used: rpm = 0.25 * (RRrr) - 24 Speed (mph) = 0.0065 * (SSss) - 67 Byte 0 & 1 = Tachometer rpm. See formula above. Byte 2 & 3 = Unknown. Set to zero. Byte 4 & 5 = Speed. See formula above. Byte 6 & 7 = Unknown. Set to zero. ArbID 0x420, with 8 byte payload Byte 0, Temperature Gauge: 0x55 = LOWEST Temp, 0 line 0x7F = Middle Temp 0xA0 = High Temp (top mark) 0xA1 = Max Temp (red line) with Red warning symbol (Below Tach) Byte 1, Unknown. Byte 2, Unknown. Byte 3, Unknown. Byte 4, Indicators and Temp Gauge Override: Bit 0, Unknown. Bit 1, Unknown. Bit 2, 1 = Orange O/D OFF Indicator (Below Tachometer). Bit 3, 1 = Orange O/D OFF Indicator Blinking (Bit D2 must be zero). Bit 4, 1 = Force Max Temperature (red-line gauge), no warning indicator. Bit 5, 1 = Force Max Temperature (red-line gauge), no warning indicator. Bit 6, 1 = Orange Check Engine (Below Tach). Bit 7, 1 = Orange Check Engine Blinking (Bit D6 must be zero). Byte 5, Indicators: Bit 0, Unknown. Bit 1, Unknown. Bit 2, Unknown. Bit 3, 1= Red Charge System Fault Indicator (Below Tach) Bit 4, Unknown. Bit 5, Unknown. Bit 6, Unknown. Bit 7, 1= Orange Power Train Fault Indicator (Near Tach's minimum mark). Power cycle reset! Byte 6, Indicators: Bit 0, Unknown. Bit 1, Unknown. Bit 2, Unknown. Bit 3, 1= Green Cruise Control Indicator (below Temp Gauge) Bit 4, 1= Red Security Indicator, (Below Tach). Bit 5 must be zero. Bit 5, 1= Flashing Security Indicator (Below Tach). Bit 4 must be zero. Bit 6, Unknown. Bit 7, Unknown. Byte 7, Unknown. I haven't been able to find the magic bits for the fuel and oil pressure gauges. Or for an assortment of indicators such as the hand brake, turn signals, and fluid levels. To control them I suspect I'll need a second CAN-Bus interface connected to the cluster's MS CAN-bus port. But I haven't given up on finding a way to do it through the HS CAN-Bus.
  14. It's been a good day. CAN-Bus is working and I can control the tachometer and speedometer. There's something satisfying about driving 80mph while sitting at my desk. And I have photos to prove I'm exceeding the office speed limit. 80 mph @ 4400 rpm. Oops, left the parking brake on. Despite some detours the project is moving along nicely. But there's a long ways to go. It's time to shift into overdrive and find out how to control everything else in the dashboard cluster. After I conquer all those mystery bits I can get to building what I have in mind. This Mustang cluster is going to become a working bookcase display with a key start ignition.
  15. The Mustang Instrument Cluster has arrived. It came from a wrecked car (eBay based recycler). There's some scuff marks but overall it looks good. Every part from a wrecking yard has a story. The cluster was tagged with the VIN and a online search provides a wealth of information. It was a 2009 Mustang 4.0L V6 coupe with 60K miles that had gotten sandwiched in a roadway skirmish. If by chance you were the owner of this pony when it took its last breath then please accept my condolences. And I hope everyone involved in the accident is OK. The 2009 Instrument cluster came from a pretty pony that has been put out to pasture. One of the reasons this particular cluster was chosen was because the seller's photos showed it included the harness connector plug (chopped off, with several inches of wire). I even email them before the purchase and they confirmed the connector would be included. I'm happy with the condition of the cluster I received, but the connector is missing. /* More head banging followed by silent screams. */ Without the connector plug I'm at a disadvantage. Besides the obvious reasons for wanting a factory made plug, the colored wires on it would have helped me determine the pin numbering (connector orientation). It's best to roll with the punches, so after a few minutes with an ohmmeter I have what I need. Connector orientation was determined by identifying the ground pins and matching them to a wiring list found online. Rear panel photo: Connector Pin numbering (plug orientation). Some clip-on jumper wires and a variable power supply provides good news. The cluster powers up and the six gauges successfully perform their needle calibration dance. Its voltmeter gauge is centered with the supply voltage set to 12.0V, but the other gauges are zero (as expected). All the indicators light up and backlighting is working too. The warning buzzer chirps as well. The donor organ is alive. There's a pair of wires (Pins 6 & 7) that need a 3-button Message Center switch. The switch is expensive so it's DiY time. A couple hours of experimentation determines that the switch is a resistor ladder (voltage divider) for the cluster's analog input on pin 6. The resistor values are as follows: Info: 100 Ohms Setup: 1.5K Ohms Reset: 470 Ohms Default: 100K Ohms DiY Message Center Switch, 3D Printed Bezel Green = Info, Black = Setup, Red = Reset The DiY Message Center switch is wired to the cluster and working great. I have to admit I'm not thrilled by the push-buttons; I'll swap them out with higher quality switches later on. The CAN-Bus is the next item to test. But rather than stuff more jumper wires on the naked connector I've decided to step back and solve the missing plug dilemma. Instead of complaining to the seller about the forgotten plug I decided to build my own. The cluster's connector is a 26-Pin (2 x 13) 2.54mm header. I have a female header that is 40-Pins and a close encounter with a sharp saw turns it into a suitable doppleganger. A test fit determines that the plug is difficult to install/remove in the cluster's deep opening. So I designed a 3D printed housing shell to make it an easier effort. The housing is keyed to prevent backwards plug installation. {A few hours later} All wires are soldered and safely potted in the 3D printed housing with hot melt adhesive. The DiY Cluster plug is complete. Instrument Cluster's Power/Signal plug is a 26-pin header modified to fit. See text. There's two cables terminated to the plug. One has twisted pairs for the CAN-Bus (HS CAN and MS CAN), plus some miscellaneous signals. The other has power and all the remaining signals. I won't use all the wired signals, but just in case they're all accessible. It's time to connect the Microchip CAN-Bus analyzer.