Thursday 26 November 2020

Finally Driving and a CAN reading Arduino

 Here is a short and sweet video of the BMW taking off in first gear. I may have held the brake down a bit too long...

 

Now that i have got the car running and driving we can begin to build up the code and test the Arduino reading from the CAN and driving the dash. While I wrote the code to run the dash initially, integrating the CAN reading function was just way above my programming level, so I got the help of a friend  to help me finish it off. 

He has been working on prototypes for a while and has uploaded the final code to GitHub here: https://github.com/Damo-Chasey/16x2-LCD-fuel-gauge-and-BMW-Dash_controller

 


Tuesday 24 November 2020

Arduino dash control

To get started with the arduino dash control I first controlled the dash using the Arduino with set values rather than values read from the CAN bus of the imiev.
This video here shows the startup sweep I made the tacho do, unfortunately there isnt a quick enough response from the temp and fuel gauges to do this to them too.

 
Here is the code I made to run the Tacho gauge, unfortunately I wasn't able the get the MPG gauge working at all and struggled to get the fuel gauge to be consistent so i wont be using them and instead will be using an LCD screen later on to display the data. The code to run the Temp gauge is in there its just not currently being used.
 
#include <Tone.h>  // "Tone by Brett Hagman" in Library Manager


//const byte E36TachPin =      2;  // Tone
//const byte E36MPGPin =       9;  // PWM  (Not valid PWM pin for Arduino UNO!)
//const byte E36FuelGagePin =  5;  // PWM
//const byte E36TempGagePin =  6;  // PWM



void setup()
{

  pinMode(5, OUTPUT); //Fuel
  pinMode(6, OUTPUT); //Temp
  pinMode(9, OUTPUT); //MPG
 
  //#####FUEL#####
   analogWrite(5, 165); //sets fuel to Full
    // 0=EMPTY, 10=E, 55=15L, 95=30L, 125=45L, 165=FULL
 
  //#####TEMP##### 
  analogWrite(6, 50); //sets temp to middle pos
   // 6=HOTFlashing 10=HighesTemp 15=HOTLightOn, 50=MID, 100=COLD
    // Use 10 - 100 for temp range, set 6 as a value for flashing HOT
 
  //#####TACH#####
    Tone E36TachTone;
    E36TachTone.begin(2);
    E36TachTone.play(31);
  //35=1k, 129=4k, 222=7k
  //28.5 31 31.53
  
  
  //RPM sweep
    for(int t=31; t<222; t++){
      E36TachTone.play(t);
      delay(2);
    }
    delay(500);
    for(int t=222; t>31; t--){
      E36TachTone.play(t);
      delay(2);
    }
    E36TachTone.play(31);
 
 
 
  //#####MPG#####
   // Tone E36MPGTone;
   // E36MPGTone.begin(9);
    //E36MPGTone.play(0);

}

void loop() {
  //#####TACH LOOP#####
    Tone E36TachTone;
 
  int RPM = 500;  //input RPM read from CAN here IF car is in ready state else stop RPM gauge
  int RPMt;
 
  RPMt = RPM/30.5;
 
  if (RPMt < 31){ //stops rpm gauge signal going below 31 Hz for idle(causes issues)
    RPMt = 31;
    }
 
  E36TachTone.play(RPMt);
 
 
 
  //#####MPG, TEMP, FUEL LOOP##### 
  //Tone E36MPGTone;
 
  //E36MPGTone.play(00);
      // analogWrite(5, 165); //Fuel
 
    //analogWrite(6, 50); //Temp
   
    //analogWrite(9, 0); //MPG

}





Monday 2 November 2020

Installing the drivetrain and getting ready for a test drive

After getting the motor coupler machined and installed its now time to put everything together to test if it will drive!

 

Here's the motor coupler before it was machined and after. Now it has the I-MiEV spline pressed into it and has two grub screws stopping it from spinning in the coupler.

 

Connecting up the AC slow charging with cables more than capable of handling the maximum 32A current allowed by the on-board charger.


Prepping and Painting the fabricated brackets.

I filed down all rough/sharp edges on the brackets and wiped them down with acetone to prep for painting. I painted the brackets with a matte black rust preventing paint.

Before installing all the brackets and drive-train you can get a really good look at the conduits running to the rear of the car. They're nothing special, just a mix of solid and flexible conduit held on with a mix of pvc and metal brackets


Installing the drive-train, brackets , and components.

First off the transmission, motor, and coupler are bolted in.

Then the battery and motor supports are installed.

After that the 12v vacuum and power steering pump are installed above the motor, although they arent that visible due to all the cables and my great camera work.


The Motor Controller and On-board Charger/DC-DC with the coolant tank bolted to it are next to go in.

Then the bottom level of batteries are bolted to the bracket and connected together. The AC charging cables have also been connected to the OBC.

Finally the top layer of batteries, the HV cables, contactors, then some coolant and we are ready for a test charge and drive!