iDryer RP2040: menu manual¶
How to read the menu¶
globalmeans one shared value for the whole device.per controllermeans a separate value for each UNIT.toggleitems are shown asON/OFFin UI.- Some
uint8values are rendered as text in UI: LANGUAGE:0=RU,1=ENPORT 1/2/3:EXT/SCR/SCL/LNK(see GLOBAL -> PORT CONFIG)
MENU top level¶
CONTROLLERDRYINGSTORAGEPROFILEPRESETSSCALESSETTINGSGLOBAL
CONTROLLER (global)¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
CONTROLLER |
value | 0..2 |
0 |
Selects active UNIT. All per controller items are edited for this UNIT. On change, value is clamped to units_count-1. |
DRYING (per controller)¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
TEMPERATURE |
value | 30..110 °C, step 1 |
60 |
Target air temperature for drying. |
TIME |
value | 0..600 min, step 1 |
240 |
Drying duration. |
START |
action | - | - | Starts Drying mode for active UNIT. If Temp or Time is 0, fallback values 60 °C and 30 min are used. |
Drying timer logic:
- Countdown does not start at
STARTpress. - Countdown starts when air temperature enters
±1 °Cband around target. - When time expires:
- if
SETTINGS -> STORAGE -> AUTO STORAGE = ON, controller switches to Storage; - if
OFF, controller stops (Idle).
STORAGE (per controller)¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
TEMPERATURE |
value | 35..90 °C, step 1 |
45 |
Base storage temperature (when temperature-priority control is used). |
HUMIDITY |
value | 5..30 %RH, step 1 |
12 |
Target humidity for humidity-priority control. |
BY HUMIDITY |
toggle | ON/OFF |
ON |
ON: humidity priority. OFF: temperature priority. |
START |
action | - | - | Starts Storage mode with current active UNIT settings. |
Storage logic:
- If humidity priority is
ON, heating is toggled by RH hysteresis andMIN HOLD(see SETTINGS -> STORAGE). - If humidity priority is
OFF, storage temperature target is maintained.
PROFILE (per controller)¶
PROFILE START¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
FIRST STAGE |
value | 1..10, step 1 |
1 |
First profile stage to start from. |
PROFILE START |
action | - | - | Starts 10-stage profile for active UNIT. |
STAGES 01..10¶
Each stage has:
TEMPERATURE:30..110 °C, step1RAMP:0..1200 min, step1HOLD:0..1200 min, step1
Default values:
| Stage | Temp, °C | Ramp, min | Hold, min |
|---|---|---|---|
| 01 | 50 | 5 | 1 |
| 02 | 60 | 5 | 1 |
| 03 | 70 | 5 | 1 |
| 04 | 60 | 5 | 1 |
| 05 | 50 | 5 | 1 |
| 06 | 70 | 5 | 1 |
| 07 | 90 | 5 | 1 |
| 08 | 75 | 5 | 1 |
| 09 | 65 | 5 | 1 |
| 10 | 55 | 5 | 1 |
Profile execution logic:
- Every stage has
RAMPphase thenHOLDphase. - In
RAMP, target temperature changes smoothly over time from current to stage target. - Move to next stage only when both are true in
HOLD: - hold duration elapsed;
- temperature reached threshold (about target - 1 °C).
- After final stage, profile ends and controller goes to Idle.
PRESETS (global)¶
Each preset includes:
TEMPERATURETIMESTART(starts Drying on active UNIT with preset values)
Common time range for all presets: 0..600 min, step 5.
| Preset | Temperature range, °C | Temperature default, °C | Time default, min |
|---|---|---|---|
| PLA | 35..55 | 45 | 240 |
| PLA-CF | 35..55 | 45 | 240 |
| PLA-GF | 35..55 | 45 | 240 |
| PETG | 50..70 | 60 | 180 |
| PETG-CF | 55..75 | 65 | 180 |
| PETG-GF | 50..70 | 60 | 180 |
| ABS | 70..90 | 80 | 240 |
| ABS-CF | 80..100 | 90 | 240 |
| ABS-GF | 80..100 | 90 | 240 |
| PA | 80..100 | 90 | 240 |
| PA-CF | 90..110 | 100 | 240 |
| PA-GF | 90..110 | 100 | 240 |
| PC | 90..110 | 100 | 360 |
| PC-CF | 90..110 | 100 | 360 |
| MY1 | 60..80 | 70 | 360 |
| MY2 | 70..90 | 80 | 360 |
| MY3 | 80..100 | 90 | 360 |
SCALES (global)¶
NUMBER OF MODULES¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
NUMBER OF MODULES |
value | 0..4 |
0 |
Number of active HX711 scale modules. On change, setNumSensors() is called. |
TARE¶
| Item | Type | Range | Default |
|---|---|---|---|
SPOOL 1 |
value | 0..2000 g, step 1 |
0 |
SPOOL 2 |
value | 0..2000 g, step 1 |
0 |
SPOOL 3 |
value | 0..2000 g, step 1 |
0 |
SPOOL 4 |
value | 0..2000 g, step 1 |
0 |
CALIBRATION¶
For each spool (1..4):
SET ZERO— zero-point calibrationSET 1000 G— 1000 g calibration point
SETTINGS (per controller)¶
STORAGE¶
Main¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
AUTO STORAGE |
toggle | ON/OFF | ON | After Drying completion, Storage starts automatically. |
AUTO DRY |
toggle | ON/OFF | ON | Under development. |
BY HUMID¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
HYSTERESIS % |
value | 1..10 %, step 1 |
5 |
For RH control: heating ON at RH >= target + hyst; heating OFF at RH <= target; switching is limited by MIN HOLD. |
BY TEMP¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
ABS/%DRY |
toggle | ON/OFF | OFF | OFF = absolute storage temperature (STORAGE -> TEMPERATURE), ON = percentage of last drying temperature (lastDryTemp). |
% OF DRY TEMP |
value | 50..100 %, step 1 |
90 |
Used in %DRY mode. |
COMMON¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
MIN HOLD |
value | 5..600 s, step 5 |
30 |
Minimum time between heating state switches in Storage-by-Humidity mode. |
Important for Storage temperature target:
- Storage target is clamped in code to
45..air_max_temp. - In
%DRYmode,lastDryTempis used (last Drying target).
PID HEATER¶
| Item | Type | Range | Default |
|---|---|---|---|
Kp |
float | 0..1000, step 0.1 |
9.810 |
Ki |
float | 0..1000, step 0.01 |
0.084 |
Kd |
float | 0..1000, step 0.1 |
87.825 |
GAIN |
float | 0.1..50, step 0.01 |
9.810 |
Autopid |
action | - | - |
PID CHAMBER¶
| Item | Type | Range | Default |
|---|---|---|---|
Kp |
float | 0..1000, step 0.1 |
5.873 |
Ki |
float | 0..1000, step 0.01 |
0.18 |
Kd |
float | 0..1000, step 0.1 |
50.402 |
GAIN |
float | 0.1..200, step 0.01 |
5.873 |
Autopid |
action | - | - |
PID logic:
- Coefficients are applied immediately after changes.
GAINis used inside controller as PID gain multiplier.GAINinPID HEATERis the global gain multiplier of the heater PID controller.
How it works:
- it scales the whole control loop response;
- when
GAINis increased, the heater reacts more aggressively and reaches the target faster; - when
GAINis decreased, the response is softer and more stable, but target reach takes longer.
In practice:
- too low
GAIN-> sluggish heating and long time to reach setpoint; - too high
GAIN-> overshoot, oscillations, and possible instability. Autopidruns tuning for active UNIT:PID HEATER: target temperature is about 80% of heaterMAX TEMP;PID CHAMBER: target temperature is taken from currentDRYING -> TEMPERATURE.
HEATING¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
MAX TEMP |
value | 30..150 °C, step 1 |
130 |
Base heater limit. |
MAX AIR TEMP |
value | 30..120 °C, step 1 |
90 |
Base air limit. |
DELTA |
value | 0..45, step 1 |
35 |
Offset used by cascaded control for heater setpoint relative to air target. |
DELTA ABS/% |
toggle | ON/OFF | OFF | OFF=absolute DELTA, ON=percent of current air target. |
DELTA is not an “air temperature increment,” but a heater temperature headroom
relative to the target air temperature.
For example, DELTA = 35 means:
- the controller can keep the heater target temperature about
+35 °Cabove the current air target; - this is needed because air passing through the heater takes only part of the heat, while part of the energy is lost.
Why this happens:
- right after the heater, airflow is hotter, but after just a few centimeters it starts mixing with colder air in the chamber;
- due to that mixing, air temperature quickly becomes lower than the heater surface temperature;
- therefore, to maintain the required air temperature, the heater operates with “headroom”.
Summary:
DELTAsets the energy headroom for cascaded PID;- too small
DELTAcan cause underheating and slow warm-up; - too large
DELTAincreases the risk of filament overheating.
CHECK (heater verification)¶
| Item | Type | Range | Default |
|---|---|---|---|
ERROR LIMIT |
value | 0..500, step 10 |
150 |
TEMP GAIN |
value | 0.1..10.0 °C, step 0.1 |
1.0 |
CHECK WINDOW |
value | 5..120 s, step 1 |
20 |
PWM START % |
value | 10..100 %, step 5 |
30 |
Actual CHECK behavior:
CHECK is part of the safety loop. Its purpose is to confirm that when power is applied
to the heater, the system sees the expected temperature response.
This helps detect failures such as:
- weak or non-working heater;
- poor electrical contact;
- invalid sensor (thermistor) behavior;
- a state where power is applied but heating response is missing.
If heater response does not match expectations, firmware raises
Heater not heating and aborts the current control cycle.
Parameters ERROR LIMIT, TEMP GAIN, CHECK WINDOW, and PWM START %
should be tuned for the actual setup: chamber volume, enclosure heat losses,
heater power, and airflow.
Examples:
- Small chamber + powerful heater: reduce
CHECK WINDOWand/or increaseTEMP GAINto catch anomalies faster. - Large chamber with high thermal inertia: increase
CHECK WINDOWandERROR LIMITto reduce false triggers. - False triggers at startup: usually fixed by slightly increasing
PWM START %andCHECK WINDOW.
Emergency stops by temperature:
- Air: emergency at
air_temp >= MAX AIR TEMP + 5 °C. - Heater: emergency at
heater_temp >= MAX TEMP + 10 °C.
FAN¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
ON THRESHOLD |
value | 40..70 °C, step 0.5 |
55 |
Fan turn-on threshold. |
HYSTERESIS |
value | 5..20 °C, step 0.5 |
5 |
Fan turns off when temp < ON THRESHOLD - HYSTERESIS. |
HYSTERESIS is used to prevent rapid fan toggling near the threshold.
The logic is simple:
- turn on: when temperature reaches
ON THRESHOLD; - turn off: only after temperature drops below
ON THRESHOLD - HYSTERESIS.
SERVO¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
CLOSED ANGLE |
value | 0..180°, step 1 |
20 |
Closed flap angle. Triggers servo preview when changed. |
OPEN ANGLE |
value | 0..180°, step 1 |
50 |
Open flap angle. Triggers servo preview when changed. |
CLOSED TIME |
value | 0..3600 s, step 1 |
600 |
Time to keep flap closed. |
OPEN TIME |
value | 0..600 s, step 1 |
30 |
Time to keep flap open. |
SMART MODE |
toggle | ON/OFF | OFF | Smart flap control by humidity trend during active drying. |
SERVO helps remove high-humidity air from the dryer.
The optimal flap open/close frequency depends on real conditions:
filament moisture, chamber volume, and ambient humidity.
Default values are a practical baseline and were selected empirically.
Flap timer behavior:
- If
OPEN TIME = 0andCLOSED TIME > 0, flap is kept closed. - If
CLOSED TIME = 0andOPEN TIME > 0, flap is kept open.
GLOBAL (global)¶
PORTAL¶
| Item | Type | Logic |
|---|---|---|
CLAIM |
action | Starts UART Link claiming procedure and shows status. |
IGNOR EXT CMD |
toggle | “Telemetry without remote control” mode. |
CLAIM:
- intended to bind the device to the portal via UART Link;
- currently, Link is usually configured through
install.idryer.orgin one flow: firmware flashing, Wi-Fi setup, and portal binding; CLAIMflow will be expanded in future firmware versions.
IGNOR EXT CMD:
- allows keeping full portal functionality (telemetry, statistics, filament tracking), while disabling execution of incoming external control commands;
- if you prefer maximum local control, enable this mode;
- important: in the current firmware, this flag is present in menu storage, but full command filtering by this flag is still being integrated.
SESSION COUNTER¶
| Item | Type | Range | Default | Meaning |
|---|---|---|---|---|
DRYING |
value | 0..65535 |
0 |
Drying session counter. |
STORAGE |
value | 0..65535 |
0 |
Storage session counter. |
PROFILE |
value | 0..65535 |
0 |
Profile session counter. |
Counters are incremented when controller enters the corresponding mode. Counter purpose: track cycle counts (drying/storage/profile), analyze usage intensity, plan maintenance, and estimate operational load on infrastructure.
PORT CONFIG¶
| Item | Type | Range | Default |
|---|---|---|---|
PORT 1 |
value | 0..3 |
2 (SCL) |
PORT 2 |
value | 0..3 |
3 (LNK) |
PORT 3 |
value | 0..3 |
1 (SCR) |
Value mapping:
0 = EXT(extra dryer module)1 = SCR(screen)2 = SCL(scales)3 = LNK(UART link)
Validity constraints (UI blocks invalid combinations):
- Port1: only
EXTorSCL. - Port2:
EXT,SCL, orLNK. - Port3:
SCRorLNK. SCR,SCL,LNKmay exist only on one port each.Port2=EXTis allowed only ifPort1=EXT.
UNITS¶
| Item | Type | Range | Default | Logic |
|---|---|---|---|---|
UNITS |
value | 1..3 |
1 |
Clamped by hardware maximum (calcMaxUnits()), then active CONTROLLER is corrected if needed. |
LANGUAGE¶
| Item | Type | Range | Default |
|---|---|---|---|
LANGUAGE |
value | 0..1 |
1 |
Values:
0 = RU1 = EN
Quick scenarios¶
- Manual drying:
CONTROLLER -> DRYING -> TEMPERATURE/TIME -> START. - Preset drying:
PRESETS -> material -> START. - Humidity-based storage:
STORAGE -> BY HUMIDITY=ON -> START, then tuneSETTINGS -> STORAGE -> HYSTERESIS % / MIN HOLD. - % of drying temp storage:
SETTINGS -> STORAGE -> ABS/%DRY=ON, set% OF DRY TEMP, thenSTORAGE -> START. - Profile run:
PROFILE -> PROFILE START -> FIRST STAGE -> PROFILE START.