When swapping motors, the factory DME is no longer receiving signals. As a result, the cluster panel won’t show rpms, coolant temps, and lights like the oil pressure dummy light and the CEL. The E46 chassis also uses a ton of can bus connections between modules to double check VINs and pass data for other modules to use. Despite having can bus technology, the cluster panel and other modules still use analog/pwm signals for various instruments. For instance, the speedometer is a pwm signal from the ASC/DSC module. With my M3 rear end swap, this sensor no longer communicates with the ASC/DSC system so the cluster doesn’t receive that signal. But also, the can bus signal gets a ASC/DSC not working dummy light command from that module to the cluster.
To maintain most of the lights and VIN checks, I kept my factory DME installed but severed the can bus connection to the DME to the cluster. I don’t use the ASC/DSC system so the arduino uno just sends a signal to the cluster that it’s as ok as it can be.
I still have my “carduino” freematics module that plugs into the factory LS2 GTO PCM via the OBD2 port using an ELM327 chip. The ELM327 is just a generic chip used in most off the shelf OBD2 autozone/advanced auto parts stores to connect to most OBD2 systems. This reads things like coolant temp and RPM that is then fed to the arduino uno to send to the cluster. The carduino also has a GPS module to replace the speed input to the cluster via an analog output as well.
Once things start working, I think the cluster can bus has access to things like brake pressure and steering angle that I can send back to the carduino to log in the SD card. Having 2 arduinos isn’t really necessary but giving the cluster its own unit makes sense. Also it saves me time of mashing together all the components into one unit. The general idea is simple, but the execution has some nuances and isn’t always as straight forward as the diagram suggests.