Files
arduino-filament-dryer/README.md
2026-08-07 17:36:15 +02:00

135 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Voron filament dryer
Arduino Nano firmware for a chamber dryer with four SHT31 humidity/temperature sensors, PID heater control, and PWM fan mixing.
## Pinout (Arduino Nano)
All settings below are defined in `include/config.h`.
| Signal | Nano pin | Notes |
|--------|----------|-------|
| I2C SDA | A4 | Shared bus (Wire) |
| I2C SCL | A5 | Shared bus (Wire) |
| TCA9548A mux | I2C `0x70` | 8-channel I2C multiplexer |
| SHT31 sensors | Mux channels 2, 3, 4, 5 | One sensor per channel |
| SHT31 address | `0x44` | ADDR pin low; use `0x45` if ADDR is high |
| Fan | D5 | 24 V fan via N-channel MOSFET (hardware PWM) |
| Heater | A2 | Solid-state relay (burst control) |
USB serial: **115200 baud**.
## Dev setup
### PlatformIO
This repo uses the PlatformIO CLI (see `.vscode/tasks.json`). If PlatformIO is already installed under `~/.platformio/penv/`, use that directly — you do not need to run the web installer again.
```bash
~/.platformio/penv/bin/pio --version
~/.platformio/penv/bin/pio run # build
~/.platformio/penv/bin/pio run -t upload # flash
~/.platformio/penv/bin/pio device monitor # serial monitor
```
On Arch Linux / CachyOS, install via the package manager if you prefer:
```bash
sudo pacman -S platformio
```
If upload cannot find the port, add to `platformio.ini`:
```ini
upload_port = /dev/ttyUSB0 ; or /dev/ttyACM0, or a /dev/serial/by-id/... path
monitor_port = /dev/ttyUSB0
```
List available ports:
```bash
ls -la /dev/serial/by-id/
```
### Serial port permissions (Linux)
**Recommended — udev rules (one-time, works in Cursor without re-login):**
```bash
sudo ./scripts/install-udev-rules.sh
# unplug and replug the Arduino
```
This installs PlatformIOs `99-platformio-udev.rules` (covers CH340 clone Nanos and other common adapters).
**Alternative — group membership:**
```bash
# Arch / CachyOS
sudo usermod -aG uucp $USER
```
You must **fully log out of the desktop** (not just reboot or open a new terminal) so `id` shows the new group. Cursors terminal often keeps the old group list until you restart Cursor after logging out.
**Immediate workaround** (no sudo, current terminal only):
```bash
sg uucp -c "$HOME/.platformio/penv/bin/pio run -t upload"
```
Verify access: `test -w /dev/ttyUSB0 && echo ok`
## First run
1. Flash firmware and open the serial monitor at 115200 baud.
2. Confirm `TCA9548A detected` and four valid sensor channels (`ch2``ch5`).
3. Find **stir fan** speed (optional — default is **PWM 178**, ~70%):
```
target 0
fanchars
```
Sweeps **30%, 100%, 60%, 80%** fan — heats to max **60°C** corner at **100%** heater. Cools to **40°C** avg between runs. Skips a fan speed if 60°C isn't reached in time. Optional midpoint refine if best isn't at 30% or 100%. Or: `python3 scripts/fan_characterize.py`. When done, `fanchars save` writes the winner to EEPROM (or skip and keep the 178 default).
4. Tune **heat PI** (stored in EEPROM on autotune complete):
```
target 0
pid default
autotune 50
```
Cutoff follows target (`target + 12°C`, max 95°C) — e.g. ABS at 55°C trips at 67°C corner, nylon at 80°C at 92°C.
5. Dry at your target — fan runs at stir PWM (default **178**) whenever target > 0, including heat-up. Override with `fan <pwm>`; `fan auto` returns to default. Fan auto-off below 40°C applies only in idle (`target 0`).
Send `help` over serial for all commands (`target`, `fanchars`, `fan`, `log on/off`, `status`, `pid`, etc.).
## Raspberry Pi control
On the Pi, use the curses TUI to set targets and monitor the chamber (SSH with a TTY: `ssh -t`):
```bash
python3 scripts/capture_csv.py tui
```
Keys: `0` idle · `t` target · `p` material presets · `f`/`F` fan · `l` CSV log · `a` autotune · `:` command · `q` quit
Headless CSV-only logging (e.g. systemd) is documented in [pi-instructions.md](pi-instructions.md).
## Filament drying table
| Filament | Dryer temperature | Drying time (hours) |
|----------|-------------------|---------------------|
| PLA | 5055 °C (122131 °F) | > 6 |
| ABS | 6065 °C (140149 °F) | > 6 |
| PETG | 6065 °C (140149 °F) | > 6 |
| Nylon | 7075 °C (158167 °F) | > 24 |
| Desiccants | 6065 °C (149 °F) | > 12 |
| PVA | 4045 °C (104113 °F) | > 24 |
| TPU/TPE | 5055 °C (122131 °F) | > 8 |
| ASA | 6065 °C (140149 °F) | > 8 |
| PP | 5055 °C (122131 °F) | > 6 |
| HIPS | 6065 °C (140149 °F) | > 8 |
| PC | 7075 °C (158167 °F) | > 12 |
| PEEK | 120125 °C (248257 °F) | > 24 |