Skip to the content
2 layers80 × 80 mmSmartCruiseControl, the printed circuit board in 3D

SmartCruiseControl

I2000C/SmartCruiseControl

A home made cruise control for Smart forfour 454

Size
80 × 80 mm
Copper layers
2
Thickness
1.6 mm
Parts
47
Nets
49
Pads
160
Tracks, vias
245, 9
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
25 May 2026
Updated
25 Oct 2026

Overview

SmartCruiseControl is an open-source printed circuit board by I2000C, from the I2000C/SmartCruiseControl repository on GitHub, published under the MIT licence. It is a 2-layer board of 80 × 80 mm with 47 parts on 49 nets, routed with 245 tracks and 9 vias.

It is built around the SN65HVD230D and IRLZ44N. Its parts include 11 resistors, 5 transistors, 5 connectors, 4 capacitors and 2 ICs. It belongs with the ESP32 boards of this library.

Main components

2

README

README.md

SmartCruiseControl

SmartCruiseControl is an embedded ESP32 project that implements cruise control using CAN Bus data, with vehicle state monitoring and ELM327 command emulation for the Smart forfour 454 car

Description

The software runs on an ESP32 using the Arduino framework and focuses on:

  • Reading CAN Bus frames from a Smart vehicle.
  • Estimating speed, RPM, distance, fuel level, and other critical vehicle parameters.
  • Cruise control with PID, button-based enable/disable, and throttle override handling.
  • Basic ELM327 emulation for OBD-II 01xx and 22xx command responses.
  • Cruise control status indication using an LED.

Key features

  • CAN Bus listen-only mode (TWAI_MODE_LISTEN_ONLY) at 500 kbps.
  • Support for reading the following key CAN IDs:
    • 0x09E - total distance
    • 0x200 - speed
    • 0x208 - brake intensity and extra speed data
    • 0x210 - accelerator pedal position
    • 0x308 - engine RPM
    • 0x408 - fuel level
    • 0x416 - battery voltage
    • 0x423 - door status
    • 0x608 - refrigerant temperature and fuel rate
  • Cruise control state machine with:
    • STATE_OFF
    • STATE_ACTIVE
    • STATE_OVERRIDE
  • ELM327 interface over Serial with basic AT, 01, and 22 command handling.

Project structure

  • platformio.ini - PlatformIO configuration for ESP32.
  • src/main.cpp - main entry point and FreeRTOS task setup.
  • include/ - constants, state definitions, and shared headers.
  • lib/ - modular libraries:
    • can/ - CAN bus reading and decoding.
    • cruise_control/ - cruise control logic.
    • elm327/ - ELM327 emulation and OBD response handling.
    • fuel_range_estimator/ - fuel range estimation.
    • indicator_led/ - PWM LED status indicator.
    • pid_controller/ - generic PID controller.
    • speed_estimator/ - speed estimation from CAN frames.
    • throttle/ - throttle output and override management.
    • buttons/ - analog button reading and cruise control button detection.
  • doc/ - CAN Bus reverse engineering documentation.
  • test/ - PlatformIO testing notes and setup.

Requirements

See requirements.md file for required software and hardware

How to build

See how-to-build.md file to build software and hardware

Usage

  • The system starts by creating FreeRTOS tasks for CAN reception, CAN processing, and ELM327 emulation.
  • The indicator LED shows cruise control status:
    • off = cruise control disabled
    • full brightness = cruise control active
    • fading = throttle override active
  • Cruise control buttons support SET, RESUME, and CANCEL.
  • Pressing the accelerator while cruise control is active transitions the system to STATE_OVERRIDE.

Notes

  • The project is designed for the Smart Forfour 454 (2006) model, as described at the beginning of doc/CAN bus reverse engineering.md.
  • With the necessary modifications, it could be adapted to other vehicles that use CAN Bus, electronic throttle, and physical brake/clutch switches.
  • The implementation is based on CAN data documented in doc/CAN bus reverse engineering.md.
  • The ESP32 pinout reference image is available at doc/ESP32 pinout.png and is used under Creative Commons BY-NC-ND via www.mischianti.org.

Inspirations

This project was inspired by:

License

See the LICENSE file for the project license terms.

Parts

47
QtyValueFootprintReferences
5100kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR5, R6, R9, R10, R11
42N3904Package_TO_SOT_THT:TO-92_InlineQ1, Q2, Q3, Q4
4MountingHole_PadMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
31kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR4, R7, R8
2100uFCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC3, C4
2GNDTestPoint:TestPoint_THTPad_2.0x2.0mm_Drill1.0mmTP1, TP14
1100nFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC2
110kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR2
11N4003Diode_THT:D_DO-41_SOD81_P10.16mm_HorizontalD1
11uFCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC1
1220Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR3
13.3VTestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mmTP9
15.1kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1
15VTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP7
1Accelerator pedalConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ4
1BRAKE_PEDALTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP2
1Brake+clutchConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ5
1Buttons + ledConnector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ3
1CAN busConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ2
1CAN_HTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP5
1CAN_LTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP3
1CLUTCH_PEDALTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP6
1ECU_APPS1TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP10
1ECU_APPS2TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP11
1ESP32DevKitv1MCE_Modules:ESP32DevKitv1U2
1GENERATED_APPS1TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP13
1GENERATED_APPS2TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP12
1HK19F-DC 5V-SHGRelay_THT:Relay_DPDT_Omron_G6AK1
1IRLZ44NPackage_TO_SOT_THT:TO-220-3_VerticalQ5
1PEDAL_APPS1TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP4
1PEDAL_APPS2TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmTP8
1SN65HVD230Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU1
1USB 5VConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ1

Similar boards

  • 2 layers170.3 × 151.7 mmPcc v0.2, the printed circuit board in 3D

    Pcc v0.2

    Anteater-Electric-Racing/Precharge-Circuit

    95 parts
  • 2 layers90 × 48.9 mmEsp32 octal wled, the printed circuit board in 3D

    Esp32 octal wled

    klaus-liebler/esp32_octal_wled

    79 partsMIT
  • 4 layers106 × 98 mmMotion control, the printed circuit board in 3D

    Motion control

    menloresearch/asimov-1

    v1 of Asimov, an open-source humanoid robot

    76 parts1.4kCERN-OHL-S-2.0
  • 2 layers40.5 × 58 mmInitial v, the printed circuit board in 3D

    Initial v

    tenderlove/initial-v

    It's a BMW shifter converted to a Bluetooth Keyboard that you use with Vim

    30 parts1kApache-2.0
  • 4 layers42 × 42 mmHuvud, the printed circuit board in 3D

    Huvud

    bondus/KlipperToolboard

    A 3D printer tool head controller board

    126 parts373GPL-3.0
  • 4 layers85 × 85 mmEPS, the printed circuit board in 3D

    EPS

    rgw3d/1KCubeSat_Hardware

    Hardware design files for my $1000 CubeSat.

    657 parts158GPL-3.0
  • 2 layers120 × 80 mmRx72t 100 pga usb, the printed circuit board in 3D

    Rx72t 100 pga usb

    hirakuni45/RX

    Renesas RX Microcontroller, C++ framework, Library, Sample

    113 parts86BSD-3-Clause
  • 2 layers43 × 43 mmTurboCAN, the printed circuit board in 3D

    TurboCAN

    henrikssn/TurboCAN

    This is the official repository for the TurboCAN controller board, designed specifically for the Voron AfterBurner toolhead but can also be used on similar toolheads using NEMA17 steppers.

    88 parts82

Questions

How big is the SmartCruiseControl PCB?

It measures 80 × 80 mm and has 2 copper layers, 1.6 mm thick.

What parts does the SmartCruiseControl use?

47 parts, built around the SN65HVD230D and IRLZ44N. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the SmartCruiseControl KiCad files?

From the I2000C/SmartCruiseControl repository on GitHub, at the commit this page was made from: the board is kicad_project/SmartCruiseControl/SmartCruiseControl.kicad_pcb and its schematic kicad_project/SmartCruiseControl/SmartCruiseControl.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the SmartCruiseControl design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).