

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
2SN65HVD230D
SOIC-8-40℃~+85℃ 1 17mA 1Mbps 370uA 3V~3.6V CAN Transceiver Low-power mode、Wake-up function、ESD protection、Thermal shutdown protection、Bus fault protection、Hot-swap protection SOIC-8 CAN Transceivers ROHSTexas InstrumentsCAN TransceiversIRLZ44N
TO-22055V 47A N-Channel HEXFET® Power MOSFETInfineon TechnologiesUncategorised
README
README.mdSmartCruiseControl
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
01xxand22xxcommand 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 distance0x200- speed0x208- brake intensity and extra speed data0x210- accelerator pedal position0x308- engine RPM0x408- fuel level0x416- battery voltage0x423- door status0x608- refrigerant temperature and fuel rate
- Cruise control state machine with:
STATE_OFFSTATE_ACTIVESTATE_OVERRIDE
- ELM327 interface over
Serialwith basicAT,01, and22command 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, andCANCEL. - 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.pngand 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| Qty | Value | Footprint | References |
|---|---|---|---|
| 5 | 100k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R5, R6, R9, R10, R11 |
| 4 | 2N3904 | Package_TO_SOT_THT:TO-92_Inline | Q1, Q2, Q3, Q4 |
| 4 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad_Via | H1, H2, H3, H4 |
| 3 | 1k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R4, R7, R8 |
| 2 | 100uF | Capacitor_THT:CP_Radial_D5.0mm_P2.00mm | C3, C4 |
| 2 | GND | TestPoint:TestPoint_THTPad_2.0x2.0mm_Drill1.0mm | TP1, TP14 |
| 1 | 100nF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C2 |
| 1 | 10k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R2 |
| 1 | 1N4003 | Diode_THT:D_DO-41_SOD81_P10.16mm_Horizontal | D1 |
| 1 | 1uF | Capacitor_THT:CP_Radial_D5.0mm_P2.00mm | C1 |
| 1 | 220 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R3 |
| 1 | 3.3V | TestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mm | TP9 |
| 1 | 5.1k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1 |
| 1 | 5V | TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mm | TP7 |
| 1 | Accelerator pedal | Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | J4 |
| 1 | BRAKE_PEDAL | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP2 |
| 1 | Brake+clutch | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J5 |
| 1 | Buttons + led | Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical | J3 |
| 1 | CAN bus | Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | J2 |
| 1 | CAN_H | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP5 |
| 1 | CAN_L | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP3 |
| 1 | CLUTCH_PEDAL | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP6 |
| 1 | ECU_APPS1 | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP10 |
| 1 | ECU_APPS2 | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP11 |
| 1 | ESP32DevKitv1 | MCE_Modules:ESP32DevKitv1 | U2 |
| 1 | GENERATED_APPS1 | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP13 |
| 1 | GENERATED_APPS2 | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP12 |
| 1 | HK19F-DC 5V-SHG | Relay_THT:Relay_DPDT_Omron_G6A | K1 |
| 1 | IRLZ44N | Package_TO_SOT_THT:TO-220-3_Vertical | Q5 |
| 1 | PEDAL_APPS1 | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP4 |
| 1 | PEDAL_APPS2 | TestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mm | TP8 |
| 1 | SN65HVD230 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U1 |
| 1 | USB 5V | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J1 |
Similar boards
- 2 layers170.3 × 151.7 mm

- 2 layers90 × 48.9 mm

- 4 layers106 × 98 mm

Motion control
menloresearch/asimov-1
v1 of Asimov, an open-source humanoid robot
76 parts1.4kCERN-OHL-S-2.0 - 2 layers40.5 × 58 mm

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 mm

- 4 layers85 × 85 mm

- 2 layers120 × 80 mm

Rx72t 100 pga usb
hirakuni45/RX
Renesas RX Microcontroller, C++ framework, Library, Sample
113 parts86BSD-3-Clause - 2 layers43 × 43 mm

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).