RaceChronoDiyBleDevice/README.md

108 lines
4.1 KiB
Markdown
Raw Normal View History

2020-08-21 10:07:24 -07:00
# RaceChronoDiyBleDevice
2020-08-21 10:20:07 -07:00
DIY BLE device for RaceChrono, currently supports reading data from the CAN bus.
There are some optimizations in the code that are specific to the FT86 platform
cars (Subaru BRZ, Toyota 86, Scion FR-S), but it should be straightforward to
tweak the code for other cars.
## Supported Hardware
* Adafruit Feather nRF52832
* Adafruit ItsyBitsy nRF52840 Express
* 16 MHz MCP2515 breakout boards (probably MCP25625 as well)
## Prerequisites
You will need to install two libraries for Arduino:
```sh
cd ~/Documents/Arduino/libraries/ # ~/Arduino/libraries on Mac OS
git clone https://github.com/timurrrr/arduino-CAN CAN
git clone https://github.com/timurrrr/arduino-RaceChrono arduino-RaceChrono
```
It's important that you don't use the arduino-CAN library available in the
Arduino IDE built-in library manager, as it has multiple bugs, and many
operations are implemented in an ineffective way. My pull requests to address
those have not been reviewed at the time of writing.
2020-08-21 10:36:39 -07:00
## Assembling
Recommended parts list:
* [Adafruit ItsyBitsy nRF52840 Express](https://www.adafruit.com/product/4481)
* [MCP2515 boards](https://www.amazon.com/gp/product/B07J9KZ4L4/) (2+ pcs recommended so you can test without a car)
* [16 MHz quarz oscillators](https://www.amazon.com/gp/product/B00NQ82OM0/) (in case your MCPs have 8 MHz quartzes)
* [Jumper](https://www.sparkfun.com/products/9044) (in case your MCP comes without it, like mine)
* [Mini Breadboard](https://www.sparkfun.com/products/12047)
* [Jumper wires](https://www.sparkfun.com/products/124)
* [JST SM connectors](https://www.amazon.com/gp/product/B07QG2TN1X/)
* Crimping tool for JST connectors
* ~22 AWG wires
First, solder the male headers to your microcontroller board.
You'll need G, USB, SCK, MO, MI and 7.
It's also recommended to solder 9, R and 3V for future improvements and
mechanical stability on the breadboard.
Soldering male headers is a lot easier if you first insert them into a
breadboard.
Put the jumpers on the breadboard this way to allow for neat hidden
connections:
![Breadboard with jumpers](images/board_with_jumpers.jpg)
Then, put the microcontroller board on the breadboard:
![Adafruit ItsyBitsy nRF52840 Express on the breadboard](images/nRF_on_board.jpg)
Un-solder the header from the MCP board and solder a new header on the other
side of the board to make it more breadboard-friendly.
Replace the 8 MHz quartzes on your MCPs with 16 MHz quartzes, if needed.
Install the jumper that connects the 120 Ohm terminal resistor.
Optionally, un-solder the screw terminal and solder a twisted pair of wires to
the board, and finish with a nice JST SM connector:
![MCP2515 board with mods](images/mcp_mods_closeup.jpg)
Finally, put the MCP on the breadboard.
![Assembled view](images/overall.jpg)
Check connections:
MCP pin | Microcontroller pin
------- | ------------------
VCC | USB
GND | G
CS | 7
SO | MI
SI | MO
SCK | SCK
INT | Currently unused, may use 9 in the future
Optionally, put everything into a nice enclosure.
2020-08-27 22:47:22 -07:00
## Tweaking to work with your car
This particular example is optimized to work with FT86 cars (Subaru BRZ,
Toyota 86, Scion FR-S). You can search for "BRZ" in the source code to see where
the customizations were made, and tweak to work better with your car.
If you do have an FT86 car, you might want to read [the info](can_db/ft86.md) on
messages that these cars are known to send over their CAN network.
It might be nice to make these customizations programmable via a mobile app and
store the preferences in the flash storage of the nRF52840, but currently this
has not been implemented to keep the code minimalistic and easier to read.
2020-08-21 10:36:39 -07:00
## Testing
2020-08-27 22:29:25 -07:00
You don't need to always be in the car to test changes.
Instead, you can build another device (possibly using a cheaper board, such as
Arduino Uno), and use the
[FakeSubaruBRZ example](https://github.com/timurrrr/arduino-CAN/tree/master/examples/FakeSubaruBRZ)
from my fork of the `arduino-CAN` library, and connect the two boards into a
2020-08-27 22:47:22 -07:00
small CAN network. Note that you don't need to use a jumper to connect the
120 Ohm resistor on the second board in a CAN network (right?).