A telemetry system could be used to monitor the progress of your electric vehicle and provide feedback to the team & driver about how efficiently/fast it is being driven. As part of a telemetry system lateral, longitudinal, and vertical acceleration could be monitored using a cheap ADXL345 mems accelerometer
Bill of Materials for my engineering proof of concept (Prices as at May 2015)
- Netduino Plus 2 USD59.95 NZD108.25 (could use a Netduino 2 USD32.95 NZD59.63)
- Grove Base Shield V2 USD8.90
- Grove 3 Axis Accelerometer +-16G USD9.90
- 3 x Grove Led Bar USD3.90
- 4 x Grove 5CM cables USD1.90
The sample code reads the acceleration data from the ADXL345 using a driver originally created by Love Electronics. It then displays the magnitude of the scaled acceleration on 3 x LED Bars using code written by Famoury Toure
OutputPort Xcin = new OutputPort(Pins.GPIO_PIN_D0, false); OutputPort Xdin = new OutputPort(Pins.GPIO_PIN_D1, false); OutputPort Ycin = new OutputPort(Pins.GPIO_PIN_D3, false); OutputPort Ydin = new OutputPort(Pins.GPIO_PIN_D4, false); OutputPort Zcin = new OutputPort(Pins.GPIO_PIN_D5, false); OutputPort Zdin = new OutputPort(Pins.GPIO_PIN_D6, false); GroveLedBarGraph Xbar = new GroveLedBarGraph(Xcin, Xdin); GroveLedBarGraph Ybar = new GroveLedBarGraph(Ycin, Ydin); GroveLedBarGraph Zbar = new GroveLedBarGraph(Zcin, Zdin); using (OutputPort i2cPort = new OutputPort(Pins.GPIO_PIN_SDA, true)) { i2cPort.Write(false); } ADXL345 accel = new ADXL345(0x53); accel.EnsureConnected(); accel.Range = 2; accel.FullResolution = true; accel.EnableMeasurements(); accel.SetDataRate(0x0F); while (true) { accel.ReadAllAxis(); uint xValue = (uint)(((accel.ScaledXAxisG / 1.0 ) + 1.0) * 5.0) ; uint xbar = 1; xbar = xbar << (int)xValue; Xbar.setLED(xbar); uint yValue = (uint)(((accel.ScaledYAxisG / 1.0) + 1.0) * 5.0); uint ybar = 1; ybar = ybar << (int)yValue; Ybar.setLED(ybar); uint zValue = (uint)((-(accel.ScaledZAxisG / 1.0) + 2.0) * 5.0); uint zbar = 1; zbar = zbar << (int)zValue; Zbar.setLED(zbar); Thread.Sleep(20); } }