Bluetooth remote controllable (Lego) cars

How it started

It started with the idea to make a technical proof of concept combining the Physical Web and WebBluetooth.
The Physical Web is an effort by Google to allow interacting with “things” without fiddling around with installing apps or setting anything up. The basic idea behind that is that the “thing” broadcasts a web URL for the client to interact with it. You can read more about it here: https://google.github.io/physical-web/WebBluetooth is a JavaScript API currently in the works by a community team. This API allows websites (or WebApps) to interact with BLE devices using the GATT profile. Google has done a reference implementation currently working on Android 6, Chrome OS and Linux in combination with Chrome. (https://developers.google.com/web/updates/2015/07/interact-with-ble-devices-on-the-web)
Combining these two technologies allows a “thing” to be controllable by a client (e.g. an Android device) without any app installation and without the thing having to be connected to the internet. The presence of the “thing” will result in a notification in Android and tapping on it opens the WebApp in Chrome allowing to control the thing.
A first test was switching a LED controlled by a Raspberry Pi on and off using a website. But that wasn’t “cool” enough and no real challenge so we decided to make a Lego technic car remote controllable and do the same thing with it.
This is how this project came to life and now we want to share what we have done so that other technology enthusiasts can use this work to build their own stuff.

The models

The first step is to get the Lego Technic model ready. We used the following models:42035 (Dumper)
This model is relatively cheap and small and given the load area there is plenty of room for the electronics and the battery pack.
We replaced the Lego motor simulation with a Lego M motor using the power transmission the other way around. We also added a Lego differential to have a perfect power transmission to the wheels.
We removed the mechanics to move the load area and made the load area fixed to have space for the servo.42041 (Race truck)
The race truck is very easy to modify. By setting the semitrailer coupling a bit higher a Lego technic L motor perfectly fits underneath it. The servo can be put next to the steering axis. The Electronics all fit into the driver’s cab and the battery pack (a 14500/AA one) fits perfectly between the driver’s cab and the heat protection shield.42039 Model B (Race Jeep)
This model is the most heavily modified one we have. The Main problem is that the model is so heavy that a single L motor didn’t have enough power to move it forward (in fact he was but the acceleration has been very bad). So we had to put two L motors to the engine compartment. The power transmission to the back axis hasn’t been made for that amount of power so that the gears jumped and had to be strengthened,
The two features of this model (movable front lights and trunk) were modified to be driven by two separate motors without the need for a manual switch.

Electronics

The final version of the electronics is a separation of the control part (the part that gets connected via Bluetooth and contains the car specific logic) and the hardware driving part (the part generating the electrical signals to drive the motors, the servo and the LEDs).Mainboard
The Mainboard has been designed to be car independent. All the car specific parameters are controlled by the control board so that every Lego car uses the same mainboard containing the same software.
We used the same 470 Ohm resistor for every LED that gets plugged into the mainboard. We did this to be color-independent. If you are sure what colors you use for what LED you can solder the appropriate resistor for 5V and the chosen color to the Mainboard.
For more detail: Bluetooth remote controllable (Lego) cars