Files
arduino-filament-dryer/README.md
2026-07-08 16:11:57 +02:00

135 lines
4.4 KiB
Markdown
Raw 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
```
Emergency cutoff is fixed at **70°C** — you can autotune at 5055°C with ABS in the chamber while hot corners stay below that.
5. Dry at your target — fan runs at the stir PWM (default **178**) unless you override with `fan <pwm>`; `fan auto` returns to the default.
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 |