Skip to content

dankamongmen/dankdryer

Repository files navigation

ESP32, OpenSCAD, and KiCad sources for the Dankdryer, the world's best filament dryer. Side view a nick black joint

Features

  • Temperatures up to at least 150℃ when printed with proper materials.
    • Such temperatures are appropriate (necessary) for certain engineering filaments.
    • A high-temperature spool is required at these temperatures.
  • Accurate weight sensing throughout to determine how much water has been exorcised.
    • Post contextless deltas to reddit in the heat of dumbass arguments! DATA, bitch!
  • Slow rotation like delicious savory meat.
  • Equal heating of all the spool's filament.
  • Control and reporting over MQTT via WiFi.
  • OTA firmware upgrades.
  • Isolated hot and cool chambers, with most active equipment in the cool chamber.
  • Humidity sensing and temperature sensing in both chambers.
  • Entirely open source.

More info at dankwiki.

Dependencies

The project is built with GNU Make. Running make in the toplevel will attempt to build firmware and STLs. Building the firmware requires the esp-idf library and a configured ESP-IDF environment (i.e. the various IDF_* environment variables must be set), along with CMake. idf.py ought be in your $PATH, and work when invoked.

A network configuration file must be created and populated at esp32-s3/dankdryer/dryer-network.h.

Firmware

3D models

  • OpenSCAD 2024.10+

I use BOSL2, which is included as a submodule.

PCB

  • KiCad 8+

Construction / BOM

The device as designed requires approximately 600g of high-temperature filament (PC, PAHT-CF, etc.) to print, as well as about 20g of polycarbonate. The exact amount of filament will depend on material and print settings. Seven pieces must be printed:

  • Hot chamber (pa6-cf)
  • Cool chamber (pa6-cf)
  • Top (pa6-cf)
  • Motor sheath (polycarbonate)
  • Sheath coupling (polycarbonate)
  • Spool platform (polycarbonate)
  • AC shield (polycarbonate)

and it is possible that you'll need an eighth:

  • Optional: Interlayer (tpu 95a)

The hot and cool chamber dominate filament consumption, though the top is non-negligible.

If you print your top and bottom chambers from different materials, or otherwise end up with chambers which don't precisely mate, print the interlayer and put it between the two chambers to get an airtight seal.

Hot chamber

We need a temperature sensor and hall effect sensor (and obviously the heating circuit) in the hot box; nothing else ought be there.

Cool chamber

Of these, we don't need nearly so powerful an AC adapter, and we ought be able to use a cheapter motor.

PCB components

Custom PCB

Generated via Kicad:

Id Designator Footprint Quantity Designation
1 OC1 MOC306XS_LTO 1 MOC3063S
2 R4 R_0805_2012Metric_Pad1.20x1.40mm_HandSolder 1 360
3 R11;R10 R_0805_2012Metric_Pad1.15x1.40mm_HandSolder 2 47
4 R2 R_0805_2012Metric_Pad1.20x1.40mm_HandSolder 1 620
5 U2 WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm_ThermalVias 1 TPS62162DSG
6 R5;R1 R_0805_2012Metric_Pad1.15x1.40mm_HandSolder 2 680
7 U3 SOT-89-3 1 HT7550-1-SOT89
8 J8 TerminalBlock_bornier-2_P5.08mm 1 motor
9 J2 FanPinHeader_1x04_P2.54mm_Vertical 1 upper fan
10 C6;C4;C2;C5;C1 C_0805_2012Metric_Pad1.18x1.45mm_HandSolder 5 10u
11 J5 TerminalBlock_bornier-4_P5.08mm 1 Screw_Terminal_01x04
12 C9;C3;C8 C_0805_2012Metric_Pad1.18x1.45mm_HandSolder 3 0.1u
13 R6;R8 R_0805_2012Metric_Pad1.15x1.40mm_HandSolder 2 4.7k
14 J4 TerminalBlock_bornier-2_P5.08mm 1 heater
15 U6 XCVR_ESP32-C6-MINI-1U-H4 1 ESP32-C6-MINI-1U-H4
16 J3 FanPinHeader_1x04_P2.54mm_Vertical 1 lower fan
17 R13 R_0805_2012Metric_Pad1.15x1.40mm_HandSolder 1 10k
18 R12 R_0805_2012Metric_Pad1.15x1.40mm_HandSolder 1 330
19 R3 R_0805_2012Metric_Pad1.20x1.40mm_HandSolder 1 100
20 C10 C_0805_2012Metric_Pad1.18x1.45mm_HandSolder 1 1u
21 J1 BarrelJack_Wuerth_6941xx301002 1 Barreljack
22 U4 SOI16_NAU7802SGI_NUV 1 NAU7802SGI
23 R14 R_0805_2012Metric_Pad1.15x1.40mm_HandSolder 1 3.3k
24 J7 TerminalBlock_bornier-4_P5.08mm 1 5kg load cell
25 Q2 SOT-323_SC-70 1 SSM3K127TU
26 Q1 TO-252-2 1 BT136S-800E
27 J9 PinHeader_1x04_P2.54mm_Vertical 1 Conn_01x04
28 U5 MSOP10_MC_MCH 1 EMC2302
29 R7 R_0805_2012Metric_Pad1.15x1.40mm_HandSolder 1 1.62k
30 L1 L_0805_2012Metric_Pad1.05x1.20mm_HandSolder 1 2.2u

MQTT

MQTT is used to report status and to accept commands.

Controls

  • NAME/control/tare: tare using the last weight read
  • NAME/control/dry: takes as argument a string "DRYS/TEMP", where DRYS and TEMP are unsigned integers specifying the number of seconds to dry, and the temperature to dry at. Any ongoing drying operation will be replaced with the newly specified one. Specifying zero for DRYS will cancel any ongoing drying operation.
  • NAME/control/lpwm: takes as argument a hexadecimal number between 0 and 255, left-padded with zeroes so as to be exactly two digits, i.e. "00".."ff". Sets the lower fan's PWM.
  • NAME/control/upwm: takes as argument a hexadecimal number between 0 and 255, left-padded with zeroes so as to be exactly two digits, i.e. "00".."ff". Sets the upper fan's PWM.
  • NAME/control/factoryreset: takes no arguments. Blanks the persistent storage, disables the motor and heater, and reboots.

Renderings

View from the top of the lower chamber by itself, with the AC adapter and motor assembly present.

Top view, lower chamber

Combined OpenSCAD render for mating testing.

Combined render

Questions

  • How does air flow? Let's get some visible air and test it.
  • What all could we accomplish by reading RFID?

About

the world's best filament dryer

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published