Dual channel PID regulator. Each channel is (compile time) configurable to read out a sensor and control an output (on/off or H-Bridge). It could for example be used for:
- Temperature and/or Humidity control (Incubator or Grow box)
- Reflow Oven (either use one channel or two 'zones')
Currently used for controlling both temperature and humidity but should be versatile enough to control any two things from different sensors. The general design goals are:
- Least work hardware: Use existing, easily buyable parts like M5Stack.
- Two channel PID with
- Lock detection
- Linear forward term with offset and slope
- Derivative-on-measurement
- Intergral windup prevention
- On-Device editable PID settings
- Input filter
- D-term filter
- Planned: Take-back-half
- Fixed output setting to measure step response
- Lock-detection
- Alarms
- Expert-Mode: Hide Setup and PID settings on normal usage (press A+B+C for 2 seconds to open configuration)
- Two H-Bridge outputs able to control most things from heaters, peltiers, valves etc (temporarily removed)
- Two single pin positive drive outputs capable of:
- SlowPWM (<1Hz) and FastPWM (>1 Hz up to kHz) outputs
- Easy to add sensors as inputs or other output methods (implemented in classes and run-time configurable)
- Multiple sensors: Temperature, Humidity, CO2, more to come
- Adjustable time intervals per channel (100ms - minutes)
- run-time configurable: Input sensor and output drive configurable through GUI, no recomile for your combination
- Error graphs
- Remote logging (csv, mqtt or other)
- SerialPlot filterable data
- Yaapt is planned
- MQtt
Start with M5Stack Cushion, mandatory lab equipment
- M5Stack AC Power Base or
- M5Stack Din rail + LDO backplane (26mm) or
- M5Stack Din rail + LDO backplane (15mm)
- Power Supply
- SHT31-D breakout board
- M5 Kmeter Isolation Unit with Thermocouple Temperature Sensor (MAX31855)
- SprintIR CO2 sensors
- MCP9600 Thermocouple Amplifier
- MAX31856 Precision Thermocouple to Digital Converter
- (planned) M5 NCIR Non-Contact Infrared Thermometer Sensor Unit (MLX90614) (v1)
- DS18B20 1-Wire thermometer variants
- M5 Temperature Humidity Air Pressure Sensor (SHT40+BMP280)
- M5 ENV III Unit with Temperature Humidity Air Pressure Sensor (SHT30+QMP6988)
- M5 CO2 Unit with Temperature and humidity Sensor (SCD40)
- M5 CO2L Unit with Temperature and Humidity Sensor (SCD41)
- TIP132 solution (see /Pictures), Simple On/Off regulator
- Mini 3A Relay Unit
- M5 2-Channel SPST Relay Unit
- M5 4-Relay Unit
- M5 DAC 2 I2C Unit (GP8413), 0..5V/10V
- (Planned) M5 H-bridge Unit v1.1
- Single-phase DC SSR Unit (RS485)
- M5 Solid State Relay Unit
- M5 Single-phase AC SSR Unit
- RTC Module
- (Planned) WT32 SC01 3.2" TFT Touch Screen module
- Core2 with touch interface
- I2C HUB 1-to-6 Expansion Unit (External for TwoWireDevice)
- 4Ch Lego Motor module
- 3Ch Stepmotor module
- Base+4x Lego Motor Module
- Fan for motor module
- M5 Tube/Air Pressure Unit
- M5 Voltmeter Unit (ADS1115)
- PID Library: lib-FPID
- TwoWireDevice: I2C Device library wrapper: lib-TwoWireDevice
- Various TwoWireSensor Libraries
- Soogh: LVGL Layer: lib-soogh
- Uses LVGL (8.3)
- Uses LovyanGFX
- Tools library lib-tools
Originally this design was based upon https://github.com/sciunto-org/humidity_regulator, an arduino sketch for an Ardiuno Uno. But since I've replaced even the PID loop library, I don't think there is anything left of that design. But the idea came from them so credit where credit is due ;)
The user interface is build with the Light Weight Versatile Graphics library: LVGL The screen library is written by lovyan03, LovyanGFX