HackerBoxes 0013: Autosport

AUTOSPORT: This month, HackerBox Hackers are exploring automotive electronics. This Instructable contains information for working with HackerBoxes #0013. If you would like to receive a box like this right to your mailbox each month, now is the time to subscribe at HackerBoxes.com and join the revolution!

Topics and Learning Objectives for this HackerBox:

  • Adapting the NodeMCU for Arduino
  • Assembling a 2WD Car Kit
  • Wiring a NodeMCU to control a 2WD Car Kit
  • Controlling a NodeMCU over WiFi using Blynk
  • Using Sensors for Autonomous Navigation
  • Working with Automotive On-board Diagnostics (OBD)

HackerBoxes is the monthly subscription box service for DIY electronics and computer technology. We are hobbyists, makers, and experimenters. Hack the Planet!

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: HackerBoxes 0013: Box Contents

  • HackerBoxes #0013 Collectable Reference Card
  • 2WD Car Chassis Kit
  • NodeMCU WiFi Processor Module
  • Motor Shield for NodeMCU
  • Jumper Block for Motor Shield
  • Battery Box (4 x AA)
  • HC-SR04 Ultrasonic Ranging Sensor
  • TCRT5000 IR Reflectivity Sensors
  • DuPont female-female jumpers 10cm
  • Two Red Laser Modules
  • Mini-ELM327 on-board diagnostics (OBD)
  • Exclusive HackerBoxes Racing Decal

Some other things that will be helpful:

  • Four AA Batteries
  • Double-Sided Foam Tape or Velcro Strips
  • microUSB Cable
  • Smart Phone or Tablet
  • Computer with Arduino IDE

Most importantly, you will need a sense of adventure, DIY spirit, and hacker curiosity. Hardcore hobbyist electronics isn't always easy, but when you persist and enjoy the adventure, a great deal of satisfaction may be derived from persevering and getting your projects working. Just take each step slowly, mind the details, and don't hesitate to ask for help.

Step 2: Automotive Electronics and Self Driving Cars

Automotive electronics are any electronic systems used in road vehicles. These include carputers, telematics, in-car entertainment systems, and so forth. Automotive electronics originated from the need to control engines. The first were used to control engine functions and were referred to as engine control units (ECU). As electronic controls began to be used for more automotive applications, the acronym ECU took on the more general meaning of "electronic control unit", and then specific ECUs were developed. Now, ECUs are modular. Two types include engine control modules (ECM) or transmission control modules (TCM). A modern car may have up to 100 ECUs.

Radio-controlled cars (R/C cars) are cars or trucks that can be controlled from a distance using a specialized transmitter or remote. The term "R/C" has been used to mean both "remote controlled" and "radio controlled", but common use of "R/C" today usually refers to vehicles controlled by a radio-frequency link.

An autonomous car (driverless car, self-driving car, robotic car) is a vehicle that is capable of sensing its environment and navigating without human input. Autonomous cars can detect surroundings using a variety of techniques such as radar, lidar, GPS, odometry, and computer vision. Advanced control systems interpret sensory information to identify appropriate navigation paths, as well as obstacles and relevant signage. Autonomous cars have control systems that are capable of analyzing sensory data to distinguish between different cars on the road, which is very useful in planning a path to the desired destination.

Step 3: Arduino for NodeMCU

NodeMCU is an open source IoT platform. It includes firmware which runs on the ESP8266 Wi-Fi SoC from Espressif Systems and hardware based on the ESP-12 module.

The Arduino IDE can now be easily extended to support programing NodeMCU modules as though they were any other Arduino development platform.

To start, make sure you have the Arduino IDE installed (www.arduino.cc) as well as drivers for the appropriate Serial-USB chip on the NodeMCU module you are using. Currently most NodeMCU modules include the CH340 Serial-USB chip. The manufacturer of the CH340 chips (WCH.cn) has drivers available for all popular operating systems. Check out the Google translation page for their site.

Run the Ardino IDE, go into preferences,and locate the field for entering "Additional Board Manager URLs"

Paste in this URL:


To install the Board Manager for ESP8266.

After install, close the IDE and then start it back up.

Now connect the NodeMCU module to your computer using a microUSB cable (as used by most mobile phones and tablets).

Select the board type within the Arduino IDE as NodeMCU 1.0

We always like to load and test the blink demo on a new Arduino board just to get some confidence that everything is working correctly. The NodeMCU is no exception, but you have to change the LED pin from pin13 to pin16 before compiling and uploading. Make sure this quick test works correctly before moving on to anything more complicated with the Arduino NodeMCU.

Here is an instructable that goes over the setup process for Arduino NodeMCU with some different application examples. It is a bit astray from the objective here, but it may be helpful to look at for another point of view if you get stuck.

Step 4: 2WD Car Chassis Kit

2WD Car Chassis Kit contents:

  • Aluminum Chassis (colors vary)
  • Two FM90 DC Motors
  • Two Wheels with Rubber Tires
  • Freewheel Caster
  • Assembly Hardware
  • Mounting Hardware

The FM90 DC Motors look like micro servos because they are built in same plastic housing as common micro servos, such as the FS90, FS90R, or SG92R. However, the FM90 is not a servo. The FM90 is a DC motor with a plastic gear-train.

The FM90 motor's speed is controlled by pulse width modulating (PWM) the power leads. Direction is controlled by swapping the power polarity as with any brushed DC motor. The FM90 can run on 4-6 Volts DC. While small, it does draw enough current that it should not be driven directly from a microcontroller pin. A motor driver or H-bridge should be used.

FM90 DC Motor Specs:

  • Dimensions: 32.3mm x 12.3mm x 29.9mm / 1.3" x 0.49" x 1.2"
  • Spline Count: 21
  • Weight: 8.4g
  • No load speed: 110RPM (4.8v) / 130RPM (6v)
  • Running Current (at no load): 100mA (4.8v) / 120mA (6v)
  • Peak Stall Torque (4.8v): 1.3 kg/cm / 18.09 oz/in
  • Peak Stall Torque (6v): 1.5 kg/cm / 20.86 oz/in
  • Stall Current: 550mA (4.8v) / 650mA (6v)

Step 5: Car Chassis: Mechanical Assembly

The Car Chassis can be easily assembled according to this diagram.

Note that there are two small bags of hardware. One includes Mounting Hardware with six brass 5mm-M3 standoffs along with matching screws and nuts. This mounting hardware may be useful in later steps of mounting controllers, sensors, and other items to the chassis.

For this step, we will use the Assembly Hardware which includes:

  • Four thin M2x8 bolts and small matching nuts for affixing the motors
  • Four thicker M3x10 bolts and larger matching nuts for affixing the caster wheel
  • Two PB2.0x8 screws with coarse threads for affixing the wheels to the motors

Note that the FM90 motors are oriented such that the wire leads extend from the rear of the assembled chassis.

Step 6: Car Chassis: Add Power Pack and Controller

The ESP-12E motor shield board supports directly plugging the NodeMCU module. The motor shield includes an L293DD push-pull motor driver chip (datasheet). The motor wire leads should be wired to the A+/A- and B+/B- screw terminals on the motor shield (after removing the connectors). The battery leads should be wired to the battery input screw terminals.

If one of the wheels turns in the wrong direction, the wires to the corresponding motor can be swapped at the screw terminals, or the direction bit can be inverted in the code (next step).

There is a plastic power button on the motor shield to activate the battery input supply. The jumper block can be used to route power to the NodeMCU from the motor shield. Without the jumper block installed, the NodeMCU can power itself from the USB cable. With the jumper block installed (as shown), the battery power supplies the motors and is also driven to the NodeMCU module.

The motor shield and the battery pack can mounted to the chassis by lining up the screw holes with available openings in the aluminum chassis. However, we find it easier to just affix them to the chassis using double-sided foam tape or adhesive velcro strips.

Step 7: Car Chassis: Programming and Wi-Fi Control

Blynk is a Platform with iOS and Android apps to control Arduino, Raspberry Pi, and other hardware over the Internet. It's a digital dashboard where you can build a graphic interface for your project by simply dragging and dropping widgets. It's really simple to set everything up and you'll start tinkering right away. Blynk will get you online and ready for the Internet Of Your Things.

The HBcar.ino Arduino script included here shows how to interface four buttons (forward, reverse, right, and left) on a Blynk project to control the motors on the 2WD car chassis.

Prior to compiling, three strings need to be changed in the program:

  • Wi-Fi SSID (for your Wi-Fi access point)
  • Wi-Fi Password (for your Wi-Fi access point)
  • Blynk Authorization Token (from your Blynk project)

Note from the example code that L293DD chip on the motor shield is wired up as follows:

  • GPIO pin 5 for motor A speed
  • GPIO pin 0 for motor A direction
  • GPIO pin 4 for motor B speed
  • GPIO pin 2 for motor B direction

Step 8: Sensors for Autonomous Navigation: Ultrasonic Range Finder

The HC-SR04 ultrasonic range finder (datasheet) can provide measurements from about 2cm to 400cm with an accuracy up to 3mm. The HC-SR04 module includes an ultrasonic transmitter, a receiver and a control circuit.

After attaching four female-female jumpers to the pins of the HC-SR04, wrapping some tape around the connectors can help to both insulate the connections from shorting to the aluminum chassis and also provide a pliable mass to wedge into the slot at the front of the chassis as shown.

In this example, the four pins on the HC-SR04 can be wired to the motor shield:

  • VCC (on HC-SR04) to VIN (on motor shield)
  • Trigger (on HC-SR04) to D6 (on motor shield)
  • Echo (on HC-SR04) to D7 (on motor shield)
  • GND (on HC-SR04) to GND (on motor shield)

VIN will supply about 6VDC to the HC-SR04, which only needs 5V. However, that seems to work fine. The other available power rail (3.3V) is sometimes adequate to power the HC-SR04 module (certainly give it a try), but sometimes it is not enough voltage.

Once this is wired up, try out the example code NodeMCUping.ino to test operation of the HC-SR04. The distance from the sensor to any object is printed on the serial monitor (9600 board) in centimeters. Get our ruler and test the accuracy. Impressive isn't it?

Now that you have this hint, try something like this for a collision-avoiding, autonomous vehicle:

  1. forward until distance < 10cm
  2. halt
  3. reverse a small distance (optional)
  4. turn a random angle (time)
  5. loop to step 1

For some general background information, here is a tutorial video full of details for using the HC-SR04 module.

Step 9: Sensors for Autonomous Navigation: Infrared (IR) Reflectivity

The IR Reflective Sensor module utilizes a TCRT5000 (datasheet) to detect color and distance. The module emits IR light and then detects if it receives a reflection. Thanks to its ability to sense if a surface is white or black, this sensor is often used in line following robots and auto data logging on utility meters.

The measuring distance range is from 1mm to 8mm, and the central point is about 2.5mm. There is also an on-board potentiometer to adjust the sensitivity. The IR diode will emit IR light continuously when the module is connected to power. When the emitted infrared light is not been reflected, the triode will be in the off state causing the digital (D0) output to indicate a logic LOW.

Step 10: Laser Beams

These common 5mW 5V laser modules can be used to add red laser beams to pretty much anything that has 5V power available.

Note that these modules can be easily damaged, so HackerBox #0013 includes a couple to provide a back-up. Take care with your laser modules!

Step 11: Automotive On-board Diagnostics (OBD)

On-board diagnostics (OBD) is an automotive term referring to a vehicle's self-diagnostic and reporting capability. OBD systems give the vehicle owner or repair technician access to the status of the various vehicle subsystems. The amount of diagnostic information available via OBD has varied widely since its introduction in the early 1980s versions of on-board vehicle computers. Early versions of OBD would simply illuminate a malfunction indicator light if a problem was detected but would not provide any information as to the nature of the problem. Modern OBD implementations use a standardized digital communications port to provide real-time data in addition to a standardized series of diagnostic trouble codes, or DTCs, which allow one to rapidly identify and remedy malfunctions within the vehicle.

OBD-II is an improvement in both capability and standardization. The OBD-II standard specifies the type of diagnostic connector and its pinout, the electrical signalling protocols available, and the messaging format. It also provides a candidate list of vehicle parameters to monitor along with how to encode the data for each. There is a pin in the connector that provides power for the scan tool from the vehicle battery, which eliminates the need to connect a scan tool to a power source separately. OBD-II Diagnostic Trouble Codes are 4-digit, preceded by a letter: P for engine and transmission (powertrain), B for body, C for chassis, and U for network. Manufacturers may also add custom data parameters to their specific OBD-II implementation, including real-time data requests as well as trouble codes.

The ELM327 is a programmed microcontroller for interfacing to the on-board diagnostics (OBD) interface found in most modern cars. The ELM327 command protocol is one of the most popular PC-to-OBD interface standards and is also implemented by other vendors. The original ELM327 is implemented on the PIC18F2480 microcontroller from Microchip Technology. The ELM327 abstracts the low-level protocol and presents a simple interface that can be called via a UART, typically by a hand-held diagnostic tool or a computer program connected by USB, RS-232, Bluetooth or Wi-Fi. The function of such software may include supplementary vehicle instrumentation, reporting of error codes, and clearing error codes.

While Torque is probably the most well known, there are many applications that can be used with the ELM327.

Step 12: Hack the Planet

Thank you for sharing our adventure into automotive electronics. If you have enjoyed this Instrucable and would like to have a box of electronics projects like this delivered right to your mailbox each month, please join us by SUBSCRIBING HERE.

Reach out and share your success in the comments below and/or on the HackerBoxes Facebook page. Certainly let us know if you have any questions or need some help with anything. Thank you for being part of HackerBoxes. Please keep your suggestions and feedback coming. HackerBoxes are YOUR boxes. Let's make something great!

13 People Made This Project!


  • Indoor Lighting Contest

    Indoor Lighting Contest
  • Make It Fly Challenge

    Make It Fly Challenge
  • Growing Beyond Earth Maker Contest

    Growing Beyond Earth Maker Contest

95 Discussions


2 years ago

Has anybody got the ELM327 working? The posted link to application is for IOS/Android (and I dont see how we can use this on IOS because at least from my reading, ios devices dont support serial over bluetooth)... so are we stuck android only? I've successfully paired the unit to my macboook pro but neither app I tried could connect to it here either. I've tried EOBD Facile and OBD Auto Doctor

6 replies

Reply 2 years ago

I got it working with an Android. (I know that doesn't particularly 'help' with you asking about iOS, but sometimes confirmation someone got it working is enough to keep you going.)

I did however disconnected quickly after shutting the car of--- and it set off the security system so my Jeep spent 5 minutes honking and flashing in teh driveway. ;-)


Reply 2 years ago

Which app did you use to talk to the ELM327? I couldn't seem to get it to communicate with my android.


Reply 2 years ago

As I recall, I used "Torque (Lite)", the free version. I also have the "ELM327 ODB Terminal" installed, but I did not use that as I recall.
I initially wasn't able to see the module but after a bit (and maybe an unplug or two fiddling with it) I was able to see it when I rescanned for pair-able devices. The device name I have is simply "ODBII".


Reply 2 years ago

Same here. Does not work with iPhone 7. Paired with MacBook Pro but did not connect with EOBD Facile application. I'd be interested to know if anyone has gotten this little device to work with any iOS or OS X system.


Reply 2 years ago

Here is an interesting post that I came across that seems to explain what's going on https://www.lifewire.com/elm327-iphone-adapter-doesnt-work-534643


Reply 2 years ago

No luck getting the EML327 working on an iPhone either. From what I have read only iOS devices that run pre iOS 5 can use serial over bluetooth so I think we are out of luck for the iPhone/iPad department.


2 years ago

I have done steps 1 through 8. So far I have a 100% success rate at nothing working. I get error codes on the HBcar.ino. I get absolutely nothing on NodeMCUping.ino. Apparently I'm stupid enough to build computer networks, make WANs work & cannot get this to work. What the hell am I doing wrong? Oh & apparently I cannot get a frigging bluetooth device to work. Because while I figured out that the ELM had to be paired within the first 10 seconds of getting power, I can't get any app to recognize it. Someone please help me resolve this insanity because right now I'll have better results if I were to stick everything in the microwave for 20 minutes. & Yes, I've cancelled my subscription. I can't get box #1 to work, why bother accumulating any more.


2 years ago

So what can we do with that laser?
The laser looks cool but there are only 2 connections (+/-). I discovered some laser modules with 3 pins. Is this one only for some laser decoration?

Great Box so far. Ah and on Arch Linux no driver needs to be installed and flashing the Node works fine.

4 replies

Reply 2 years ago

Perhaps the lasers could be used with the IR detectors? Do lasers like this emit IR as well - perhaps when the IR detectors are close enough to an obstacle they the laser light will bounce back with sufficient intensity to read?


Reply 2 years ago

How? I ran it from an Arduino UNO, now I'll integrate into this one. Have a look at https://surak.wordpress.com/2017/01/07/running-a-5v-5mw-650nm-laser-from-arduino/


2 years ago

I cant get the arduino.idu to list NodeMCU.

Point of reference, I'm pretty new to all of this.

6 replies

Reply 2 years ago

ok, my computer won't recognize the NodeMCU to upload hbcar.ino.

Any siggestions?


Reply 2 years ago

Assuming you are on Windows - do you have the correct COM port selected in Arduino IDE?


Reply 2 years ago

win 10 surface Pro. There was only one COM Port listed. The nodeMCU lit up when i plugged it into the computer.


Reply 2 years ago

yes, I had trouble getting the right board to begin with. Here's my current issue.