I have mounted the shield onto the arduino. At first I wasn't getting anything from the system but then I disconnected the reset pin header and things are transmitting better now.
I still can't get any info from the car though. I haven't found a good program that would allow me to interpret can signals. Please help. How are you able to see the RPM's? Do I have my setup wrong? I have a passat btw. I have found a lot of info about the CAN network in the car I just can't access it! I believe you will have to access the canbus from somewhere other than the obd connector.
I access my comfort bus from behind the radio in my VW. This site uses Akismet to reduce spam. Learn how your comment data is processed. By using our website and services, you expressly agree to the placement of our performance, functionality and advertising cookies. Learn more. Report comment. Leave a Reply Cancel reply. Search Search for:. It can produce a live graph of each channel on the same graph or on separate smaller graphs.
The tool allowed data to be exported or viewed live. SerialPlot allows trends and behaviours to be viewed easily and relative changes in data can be spotted and interpreted. Whilst working on the raw information , Serial Monitor and SerialPlot can be a bottleneck for locating useful CAN frames as each frame has to be picked one by one from the listing due to it not being supported.
This is where another tool became very useful. Once you have the process of retrieving data and processing it using the aforementioned processes, you may wish to try using SuperSniffer. The supplied code for reading messages on the CAN bus network is already configured to work with SuperSniffer. It requires data to be fed into it in a specific format which was an easy task to complete as the data was already being outputted from the Arduino in a CSV format, the only change necessary was the addition of chevron brackets at the start and finish of the frame.
SuperSniffer operates in a similar manner to Wireshark; it displays a live feed of data with a number of coulombs which give statistics about the data, the important coulombs being the CAN frame, message count, change count and ASCII. The CAN frame contains the relevant CAN data, the message counter, counts how many times the same frame has been refreshed, the change count counts how many times the same frame has been changed, and the ASCII Coulombe converts the frame to ASCII which allows one to detect if the frame contains text visually.
The software also features the ability to auto-hide frames that do not change for a specified amount of time and reveal them back into view should they change. If the network you are intercepting data from is connected to a removable module, the approach to interpreting the data can be drastically different as recorded data can be played into the hardware or custom commands could be injected without risk of damaging the vehicle.
Instead of targeting frames one by one, activating systems in the vehicle and observing each frame, a new approach can be taken whereby the communications between the vehicle and module are recorded whilst every conceivable system relevant to the module is activated, then, because the module in the vehicle is removable, the data can be played back into the module whilst it is powered on a desk rather than in the vehicle and the behaviors observed.
Coupled with the record and playback methods, brute force data injection can also be used. The method of feeding in frames one by one starting at ID 0 and fluctuating each channel from 0 to allows for the documenting of behaviours the module supports but the vehicle may not and behaviours that may not have been possible to activate manually such as engine or airbag faults.
Whereas with a module being removable, It may be cheap to obtain, easy to access and replace and will not cause immediate danger if damaged or operated out of designed parameters. Now that you have produced some data from interpreting CAN bus frames, it is time to test if your interpretations are correct by producing code with conditional statements that detect if the expected values occur. When producing a conditional statement for detecting the state of indicators, we need a way to determine if the channel contains the value A number of solutions are possible such as converting the decimal value into binary and parsing the string of 1s and 0s.
Take the bitwise operator and place it between a decimal value and the test value, if the result of the operation is the test value, then you know the decimal value contains the test value. It is currently configured to check channel 4 for the value of the frame with ID Whilst testing the cluster in the vehicle and during playback of recorded data, it was a simple process to identify which frames represented RPM, Speed and several other indicators, however, some frames proved to be a much bigger challenge to locate to obtain the desired information.
These included the oil temperature, fuel level, coolant temperature and several images displayed on the clusters display.
This is because the data changes are slow or change rarely. During the process of data injection to try find the missing frames, it was observed that even when frames known to move the dials were fed in, nothing happened.
The reason behind this was difficult to find and also happened to be the solution to the previously mentioned problem of slow or rarely changing data. In order to find the reason behind the behaviour, the recorded data had frames removed one by one whilst being played into the cluster; the intention was only to have the frames specific to moving the RPM and speed dials. During the process, it was discovered that In order to move the dials you need to feed an enable frame with ID and specific channel values into the cluster every few seconds or the dials will lock back in position zero.
You can then send the frames for speed, RPM and fuel level to have the dials move. Incidentally, it was observed that the frame that enabled the dials also happens to contain the channel for oil temperature, engines status, the mileage counter and the indicator lights thus solving the missing values problem.
Now that the reverse engineering part of the project is understood and documentation on the vehicle's network is produced, it is time to build an interface to use this data. The images with a slider shows a simple Java program. This program works in conjunction with an Arduino to display a slider on the screen which is controlled by a dial connected to the Arduino.
Building a graphical interface, depending on the method chosen, is likely to be one of the most difficult but rewarding methods for displaying the interpreted information. Almost complete freedom is afforded in the design, and the result is easy to duplicate. The problem with this type of interface is its limitations, should you wish to build an interface to be fixed in a vehicle, you would need a computer such as a Raspberry Pi to drive the display and run the software interface, this means the user would have to wait for boot up and security risks may need to be factored in if the device is running critical safety systems.
There are several avenues for building an interface to display information retrieved from the CAN network; some are simple and easy to implement such as using LEDs or 7 segment displays, others are far more complex using embedded computers, as mentioned in the previous section. The solution used as an example in this tutorial is a compromise between the simple and complex options discussed. The data will be processed using logical operations as discussed in section 5.
Most displays that exist for the Arduino UNO are expensive in large display sizes, processor intensive; requiring the Arduino to draw the display or pin hogs; using up most IO on the Arduino. It supports a very basic programming language and a very capable graphical programming interface called Nextion editor that runs on a PC. You can design your GUI in the Nextion editor with simple drag and drop operations and control the icons and gauges with commands using its custom programming language.
For projects that heavily utilise an Arduino, a display such as the Nextion is an excellent option; it provides a lot of flexibility in designing your interface without the difficulty of programming it. For very simple projects that utilise an Arduino, the generic LCD display may be better suited due to its low price.
However, time constraints need to be factored in as programming the interface for these displays can be difficult and slow going. The displays have their programming transferred via micro SD card, as such when designing an enclosure for the displays, ensure the placement of the screens in the design allows for easy access to the SD card slot to program them.
Whilst designing an interface, you may go through several iterations of an idea to produce a clean result. However, the displays are capable of operating similar to a video by showing lots of images successively to simulate smooth motion. The problem is, manually moving the needle and capturing its image for each position would take hours of work, however, there is a much simpler solution, the needle design and background image can be imported into video editing software where the needle image is rotated to produce a video of the needle moving from minimum to maximum position, the video can then exported as hundreds of frames.
Alexander Richardson, a freelance graphic designer, volunteered to assist after seeing the prototype interface, in creating the GUI based on the design requirements and limitations identified. Several design iterations gave the result shown in the images for this step. Below are links to various suppliers on Amazon for the electronics used in this tutorial, these are UK affiliate links to Amazon and as such if outside the UK, when you have selected one of these links, change the.
This section contains links to resources that can educate you on the physics and concepts behind electronic circuitry. The demo2 code allows you to send and receive CAN bus messages. It is only slightly different from the previous code because it has additional lines, but the previous lines to read messages remain. In order to streamline the process of sending custom messages to devices so that you can change the values with the program running rather than by reuploading new values, this code will allow you to control the value of each channel with the joystick.
This code is a variation on the demo code used to read values from a network; it has been modified to only check if channel 4 of frame 54 contains the value You should change the values in the function called dataInterpreter to represent frames you have identified and interpreted. Each id function is called in dataInterpreter, if it matches the expected ID, the corresponding function for that it is called, the function checks if the channel sent to it is the one expected and then checks if the content of that channel contains the desired value.
The file entitled slider. This tutorial will explain how to download and install Java, create a simple Java program and run it. Where the tutorial gives you example code, simply replace the example code with this code.
You will then need to program an Arduino to output a number though serial print statements; the Arduino serial needs to be running at a baud of , when you run the Java program and connect it to the Arduino, the slider will move to represent the value, the Arduino is outputting.
Walz, E. OBD Solutions. What is OBD? Arduino Reference. Vector Solution for CAN. Good day, first of all excellent project and work. Will it be possible to advise on what I can try differently?
Question 1 year ago. Hello, everybody. I hope you doing good. I've got an issue with this text from section 3. Thank you all, for the help. Going to take a shot on this, just ordered the hardware! Do i understand it right that not all the signals can be collected at the OBD diagnose plug? What I want to do is to understand that I want to copy the data from the entire meter unit and put it back into the replacement meter.
Tip 2 years ago. What the heck are you on about I don't know what your game is, but your comment is irrelevant! Well lessee here My "be nice" and "constructive comment" is for you to keep your post up and encourage the curiosity to learn and explore the world around us. Reply 3 years ago.
Hi, Link worked but this is not relevant to the type of changes you suggest in this instructable. Only refer to power, dimensions, pollution, or change of type of the vehicle family to company car for example.
You can disregard this warning from the other user, it's BS. By the way, I am french as well as my answer isn't due to a lack of understanding of that text. Regards, Laurent. I wanted to point out to the author: You mention "coloumbs" several times Based on the context it should be "columns". The specific instance is where you talk about the values in a CSV file, which are columns of data separated by commas.
Ah sorry! When I pointed it out, I spelled it wrong. I put Coloumb and in your text it's Coulomb. Anyway it's at the end of section 1.
0コメント