Skip to content

Hardware

This folder contains all hardware documentation for the gas monitor sensor units.

hardware/
├── bom/            # Bills of materials (CSV) — one per sensor variant
├── schematics/     # Wiring schematics
└── 3d-print/       # 3D print files and print settings

Sensor Variants

There are two hardware variants. They share the same ESP32-S3 base platform and differ only in the addition of the O₂ sensor and a modified enclosure lid.

CO₂-only

The standard variant. Measures CO₂ concentration using the SenseAir K30 NDIR sensor. Suitable for the majority of growth chamber applications.

CO₂ + O₂

Adds a DFRobot SEN0322 electrochemical oxygen sensor to the I²C bus. The O₂ sensor shares the same I²C bus as the touchscreen controller (both run at 3.3V logic but the SEN0322 requires a 5V VCC supply). The enclosure lid has an additional port for the O₂ sensor body.

Key Design Decisions

Level shifter for K30: The SenseAir K30 operates at 5V UART logic. The ESP32-S3 GPIO is 3.3V. A Pololu 4-channel bidirectional level shifter is used between them. The LV reference must be connected to the ESP32's 3.3V rail and the HV reference to the USB 5V (VBUS) rail.

O₂ sensor power: The SEN0322 operates at 3.3-5.5V VCC with 3.3V-compatible I²C logic. It may be powered from VBUS (5V), or the 3.3V regulator. The I²C SDA/SCL lines connect directly to the ESP32 GPIO without a level shifter.

SD card interface: The ESP32-S3 uses 4-bit SDMMC mode for SD card access, which is significantly faster than SPI mode. The pin assignments are fixed by the SDMMC peripheral and cannot be remapped.

Power budget: At peak load the system draws approximately 500–600 mA: - K30 CO₂ sensor: ~200 mA - ESP32-S3 + display: ~300 mA
- SEN0322 O₂ sensor: <10 mA - Other: <20 mA

A quality USB-C supply rated at ≥2A is recommended. Cheap supplies cause intermittent brown-outs that can corrupt SD card writes.

I²C Bus

The I²C bus (SDA GPIO42, SCL GPIO41) is shared between:

  • AXS5106L touch controller (address 0x63)
  • SEN0322 O₂ sensor (address 0x73, set by dial switch position 3) — CO₂+O₂ variant only

There are no address conflicts between these devices.