Skip to the content
PCBKitNew board
4 layers93.3 × 40.7 mmGarage133, the printed circuit board in 3D

A DIY device for garage door automation

Size
93.3 × 40.7 mm
Copper layers
4
Thickness
1.6 mm
Parts
60
Nets
70
Pads
231
Tracks, vias
476, 112
Pours
3
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
26 Sep 2024
Updated
23 Oct 2026

Overview

Garage133 is an open-source printed circuit board by chl33, from the chl33/Garage133 repository on GitHub, published under the MIT licence. It is a 4-layer board of 93.3 × 40.7 mm with 60 parts on 70 nets, routed with 476 tracks and 112 vias.

It is built around the ESP32-S3-WROOM-1-N8, SHTC3 and AMS1117-3.3, with the B5817WS-TP, MMBT4403 and SS14 among its other parts. Its parts include 10 resistors, 3 ICs, 3 transistors, 2 diodes and 2 switches. It belongs with the home automation and IoT boards and the ESP32 boards of this library.

Main components

7

README

README.md

Garage133

Garage133 is a DIY garage door automation and monitoring system based on the ESP32 / ESP32-S3. It provides the capability to remotely control up to two garage doors, monitor their state (open/closed), detect vehicle presence using a multi-sonar sensor array, measure environmental conditions (temperature/humidity), and detect motion within the garage.

The system integrates seamlessly with Home Assistant via MQTT Discovery and provides a modern, responsive Svelte-based Web Interface for real-time monitoring and configuration.

Garage133

What's New in v2.1.0

  • Board v3.1 PCB & Enclosure Updates: Updated KiCAD design for board v3.1, refined BOM, and enhanced 3D-printed enclosure with labeled connectors, improved USB-C port clearance, and better thermal isolation for the SHTC3 sensor.
  • Standardized on ESP32-S3 (Board v3.x): Retired support and pin definitions for legacy Classic ESP32 (Board v1/v2).
  • Sonar Watchdog & Stability: Added sonar ping timeout handling to prevent missed echoes from triggering the ESP32 hardware watchdog.
  • HMM Visualization & Retraining Tools: Added an SVG state diagram visualization tool (analysis/hmm_to_svg.py) and streamlined characterization workflow in analysis/retrain.py.
  • Published Library Dependencies: Switched dependency management to published packages (chl33/og3@^0.7.0, chl33/og3x-oled@^0.6.1, chl33/og3x-shtc3@^0.6.0).

What's New in v2.0.0

  • Quad-Sonar Array (Dual Sonars per Bay): Upgraded from single to dual HC-SR04 ultrasonic sensors per garage door (4 sonars total), providing substantially more robust vehicle detection and door state estimation.
  • Hardware Board v3.0 (ESP32-S3 Support): Added support for the v3.0 PCB powered by the ESP32-S3, featuring updated pin routings, 8MB flash support, and refreshed 3D solder stencil fixtures.
  • Home Assistant Probability Sensors: Added real-time HMM state probabilities (probOpen, probCar, probEmpty) to Home Assistant via MQTT Discovery.
  • Hardened Web UI Build Pipeline: Pinned svelteesp32 to v3.2.5 and upgraded GitHub Actions workflows to Node 22 for reliable, deterministic builds.

Features

  • Dual Door Control: Independent control for two garage doors using relays.
  • Quad-Sonar HMM State Estimation: Uses Hidden Markov Models (HMM) and a 4-sonar sensor array to robustly classify states:
    • Open (Door is rolled up).
    • Closed with Car (Door is down, vehicle present in bay).
    • Closed (Empty) (Door is down, bay is empty).
  • Modern Web Dashboard: A responsive Svelte Single Page Application (SPA) to:
    • Monitor real-time sensor data and door status.
    • Trigger door relays remotely.
    • Visualize HMM detection probabilities in real time.
    • Manually correct and label states to refine detection.
    • Upload and reload HMM JSON models dynamically.
  • Environmental Monitoring: SHTC3 sensor for Temperature and Humidity.
  • Motion & Light Detection: PIR sensor for motion and analog light sensor for garage illumination levels.
  • Home Assistant MQTT Discovery: Automatic entity discovery for covers, binary sensors, environmental gauges, and state probability metrics.
  • OLED Display: Shows live status, IP address, and sensor readings locally.
  • OTA Updates: Reliable Over-The-Air firmware updates using expanded flash partitions.

Web interface

Hardware

Garage133 is designed for the Board v3.1 / v3.0 (ESP32-S3). Earlier Board v1/v2 (Classic ESP32) revisions have been retired.

Pinout Configuration

ComponentBoard v3.1 / v3.0 (ESP32-S3)Description
Relay (Left)GPIO 10Left Garage Door Relay Command
Relay (Right)GPIO 11Right Garage Door Relay Command
Sonar 1 Trig / Echo (Left)GPIO 1 / GPIO 5Primary Left Ultrasonic Sensor
Sonar 2 Trig / Echo (Left)GPIO 3 / GPIO 7Secondary Left Ultrasonic Sensor
Sonar 1 Trig / Echo (Right)GPIO 2 / GPIO 6Primary Right Ultrasonic Sensor
Sonar 2 Trig / Echo (Right)GPIO 4 / GPIO 15Secondary Right Ultrasonic Sensor
PIR SensorGPIO 12PIR Motion Detection
Light SensorGPIO 12Analog Light Level
I2C SDA / SCLGPIO 8 / GPIO 9SHTC3 Sensor & OLED Display

Note: Pin definitions are configured in src/main.cpp [blocked].

Fabrication

This repository includes files for fabricating the custom PCB and 3D printed case:

  • KiCAD: Circuit board schematics and layouts are located in the KiCAD/ directory.
  • 3D Parts: OpenSCAD and STL files for the enclosure, sensor mounts, and solder stencil fixtures are in the scad/ directory.

Garage133 board Sonar sensor

Sonar sensor mount design is also published on Printables.

Getting Started

Prerequisites

Installation & Build

  1. Clone the repository:

    bash
    git clone https://github.com/chl33/Garage133.git
    cd Garage133
  2. Build the Web Interface: Generate the C++ header containing the compiled Svelte SPA:

    bash
    ./build-svelte.sh
  3. Configuration: Copy the example configuration files and customize your settings:

    bash
    cp secrets.ini.example secrets.ini
    cp local.ini.example local.ini

    Note: WiFi and MQTT credentials can also be configured via the captive portal on first boot (when connected to the garage133 AP) or through the web dashboard settings page.

  4. Build and Flash: Connect your board via USB for the initial flash:

    • USB Flash (ESP32-S3):
      bash
      pio run -e usb_s3 --target upload
    • OTA Updates (once configured on WiFi):
      bash
      pio run -e wifi_s3 --target upload

Usage

Web Interface

Navigate to the device's IP address in your web browser:

  • Overview: Real-time status of both garage doors, ultrasonic distances, and environmental readings.
  • Door Details: View live HMM probability charts, manually label states to gather training data, or upload new JSON models.
  • Settings: Configure WiFi, MQTT broker, and initiate device restarts.

Home Assistant Integration

The device automatically publishes Home Assistant MQTT Discovery topics:

  • Covers: left_door, right_door (Open/Close control & state feedback)
  • Sensors: temperature, humidity, light, prob_open, prob_car, prob_empty
  • Binary Sensors: car (vehicle presence per bay), door, motion

HMM Analysis Toolkit

The analysis/ directory contains Python tools to train and evaluate multi-sonar classification models:

  • Download historical telemetry logs from Home Assistant or InfluxDB.
  • Train 4-sonar HMM transition and emission models using the Viterbi algorithm.
  • Evaluate accuracy and export optimized JSON models to upload directly via the web UI.

Blog Post

For background and detailed design notes on this project, check out the Garage133 Blog Post.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Parts

60
QtyValueFootprintReferences
91kResistor_SMD:R_0603_1608MetricRl1, Rl2, Rl3, Rl4, Rl5, RTRL1, RTRL2, RTRL3, RTRL4
62.2kResistor_SMD:R_0603_1608MetricR2l1, R2l2, R2l3, R2l4, Rf1, Rf2
5Conn_01x04_PinConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ_SNR1, J_SNR2, J_SNR3, J_SNR4, JPIR1
410kResistor_SMD:R_0603_1608MetricRu1, Ru2, Ru3, Ru4
43.3kResistor_SMD:R_0603_1608MetricR3l1, R3l2, R3l3, R3l4
3100nFCapacitor_SMD:C_0603_1608MetricCa1, Ca2, Ca3
210uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderCb1, Cb2
25.1kResistor_SMD:R_0603_1608MetricR_cc1, R_cc2
2B5817WS-TPDiode_SMD:D_SOD-323D1, D2
2Conn_01x02Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJbut1, Jbut2
2MMBT4403Package_TO_SOT_SMD:SOT-23Q3, Q4
2SANYOU_SRD_Form_CRelay_THT:Relay_SPDT_SANYOU_SRD_Series_Form_CK1, K2
2SW_PushButton_Switch_SMD:SW_SPST_FSMSMSW_EN1, SW_PRG1
10.5ADiode_SMD:D_0805_2012MetricF1
147uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderCc1
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U2
1BLULED_SMD:LED_0603_1608MetricD_R2
1Conn_01x04_SocketConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJOLED1
1ESP32-S3-WROOM-1RF_Module:ESP32-S3-WROOM-1U1
1REDLED_SMD:LED_0603_1608MetricD_R1
1SHTC3Sensor_Humidity:Sensirion_DFN-4-1EP_2x2mm_P1mm_EP0.7x1.6mmU3
1SS14Diode_SMD:D_SMADUSB1
1UMH3NPackage_TO_SOT_SMD:SOT-363_SC-70-6Q2
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1
1YLWLED_SMD:LED_0603_1608MetricD_R3

The 57 most common of 60 parts.

Questions

How big is the Garage133 PCB?

It measures 93.3 × 40.7 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Garage133 use?

60 parts, built around the ESP32-S3-WROOM-1-N8, SHTC3, AMS1117-3.3 and B5817WS-TP. 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 Garage133 KiCad files?

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

Can I use the Garage133 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).

Similar boards

  • 4 layers59.6 × 48.3 mmPlant1337, the printed circuit board in 3D

    Plant1337

    chl33/Plant133

    Firmware, circuit design, and 3D-printable components for an automated plant-watering system.

    61 parts6MIT
  • 2 layers150 × 100 mmSmartCube, the printed circuit board in 3D

    SmartCube

    kokhaie/Smart-Refrigerator-Demo

    The KiCad-generated BOM is mirrored into the documentation site under docs/ so it can be published through GitHub Pages.

    91 parts
  • 2 layers93 × 61 mmATMega328-LoRa Sol ADIO, the printed circuit board in 3D

    ATMega328-LoRa Sol ADIO

    winnieXY/ATMega328-LoRa-Sol-ADIO

    General Purpose ATMega328P Solar PCB

    50 parts
  • 2 layers93 × 61 mmESP32-LoRa ADIO, the printed circuit board in 3D

    ESP32-LoRa ADIO

    winnieXY/ESP32-LoRa-ADIO

    General purpose ESP32 PCB

    30 parts
  • 4 layers50 × 80 mmHermes, the printed circuit board in 3D

    Hermes

    1337bowen/Strife

    75 partsMIT
  • 2 layers100 × 100 mmFront IO Panel, the printed circuit board in 3D

    Front IO Panel

    twfth9/Kenwood-Handset-Switch-PCB

    229 partsGPL-3.0
  • 4 layers30 × 42 mmDongle, the printed circuit board in 3D

    Dongle

    mornepousse/KeSp_dongle

    Recepteur USB 2.4 GHz du clavier Niphargus et de la souris Conchodytes — ESP32-S3 / ESP32-P4, nRF24L01+, format M.2 Key B

    43 parts1
  • 4 layers49.5 × 39.4 mmLoRa133, the printed circuit board in 3D

    LoRa133

    chl33/LoRa133

    A base station for LoRa-based satellite sensor devices.

    22 parts1MIT