Pull to refresh

Самодельная дымомашина

Reading time3 min
Views18K
Для демонстрации стимпанковского косплея понадобилась дымомашина (ну какой же стимпанк без дыма?), но на месте выступления ее не оказалось. Недолго думая, решил сделать свою маленькую дымомашину, с терморегулированием, дистанционным управлением (применялся контроллер ESP-12E) и батарейным питанием. За основу взял уже описывавшуюся дымелку с измерением температуры, но немного усложнил схему для улучшения характеристик.



Самым сложным элементом оказалось изготовление спирали и системы подачи смеси глицерина с пропиленгликолем. После пары экспериментов, остановился на шестивитковой спирали диаметром примерно 12 мм, намотанной из «косички», свитой из 7 титановых жил 0.29 диаметром. Вообще, лучше было бы взять более толстый провод и обойтись без «косички», но под рукой был ограниченный выбор материалов. Получившаяся спираль имеет сопротивление около половины ома, что дает теоретическую мощность для 12 вольт в 240 ватт (на деле — мощность нагрева будет меньше, из-за необходимости удержания температуры на отметке в 210-230 градусов).

Провод спирали после свивания в косичку и намотки (мотать надо на трубку меньшего диаметра, так как титан очень упруг) лучше промыть и прокалить (подавая 12 вольт с батареи до красного каления, чтобы устранить попавшие органические загрязнения (жир с пальцев и тому подобное).

Вообще была идея сделать нагреватель в виде заполненной машинным маслом медной трубки со спиралью внутри, что бы гарантировало практически полную равномерность нагрева и позволило бы сделать гораздо более мощный нагреватель, но под рукой не оказалось нужных материалов.

С подачей жидкости пришлось повозиться, так как она должна быть, с одной стороны, непрерывной и равномерной, а с другой — еще и не слишком обильной. Под рукой была водяная помпа, которая не имела регулировки подачи, поэтому остановился на следующей конструкции — перфорированная силиконовая трубка диаметром 5мм (полтора десятка отверстий сверлом 1.2мм), обмотанная ватой, поверх которой и располагается спираль. Так как помпа гонит гораздо больше жидкости, чем вытекает через вату — конец трубки идет в тот же самый резервуар, откуда помпа забирает состав. Сам резервуар представляет из себя напечатанную на принтере чернильницу-непроливайку, которая находится под собственно спиралью и, ко всему прочему — собирает капли жидкости, которые с нее стекают.

Надо сказать, что неплотное прилегание спирали к вате (или даже просто слишком длинные выводы у спирали, которые не контактируют с жидкостью) приводят к неравномерному нагреву, что вызывает запах гари и дело может даже закончиться возгоранием. Из-за этого невозможно делать слишком большую или длинную спираль, ограничивая мощность. Поэтому методика была такой — поверх дырявого участка трубки наматывается прямоугольник ваты (в магазинах для вейперов она в таком виде и продается), затем полученный ватный цилиндр с трубкой внутри — вкручивается в спираль, как по резьбе.

В качестве вентилятора взял 12-вольтовую турбину, которую hobbyking как-то продавал за сущие копейки. Помпа — водяная китайская (из-за того что она была расчитана на 6 вольт, пришлось добавить еще dc-dc преобразователь на LM2596), подключена параллельно вентилятору. Питается машинка от 3S Li-Pol батареи 2.6 Ампер-часа с рейтингом 40C.

Схема:

image

Фрагмент кода управления (довольно грубая регулировка, не хотелось возиться с PID-контроллером и его настройкой), функцию pulse_heat_coil() вызываем с нужным промежутком для нагрева (рекомендуется в 10-20 миллисекунд). Для более точной регулировки — нужен как минимум второй АЦП (для одновременного измерения напряжения батареи) и отдельный от wifi контроллер (как в описанных мною модах для вейпинга на stm32 и arduino mini pro). Вентилятор с помпой лучше включать за несколько секунд до нагревателя и выключать через десяток секунд после, во избежание неприятных инцидентов.

// Measure coil resistance (and put it into coil_input)
#define TEST_RESISTOR 25
#define HALF_PULSE_RANGE 1.6
#define STOP_PULSE_RANGE 1.7

float coil_input_zero = 0.001;
float coil_input_zero, batt_input, coil_resist;

void measure_coil() {
  // Measure battery voltage (only possible when heater on)
  if (digitalRead(HEATER) == HIGH)
    batt_input = analogRead(A0);

  // Turn off heater
  analogWrite(HEATER, 0);
  digitalWrite(HEATER, LOW);
  delayMicroseconds(10);
  
  digitalWrite(TESTPIN, HIGH);
  delayMicroseconds(10);
  coil_input = analogRead(A0);
  digitalWrite(TESTPIN, LOW);
  delayMicroseconds(10);
  if (coil_input_zero == 0.001)
    coil_input_zero = coil_input;

  coil_resist = TEST_RESISTOR * ((float) coil_input / (float) batt_input - 1);
} // void measure_coil()

// Make coil heating pulse with thermocontrol
void pulse_heat_coil(int pulse_delay) {
  float curr = (float) coil_input / (float) coil_input_zero;
  
  if ((coil_input < 1023) && (curr < STOP_PULSE_RANGE)) {
    if (curr > HALF_PULSE_RANGE)
      analogWrite(HEATER, PWMRANGE / 2);
    else 
      analogWrite(HEATER, PWMRANGE-1);
    delay(pulse_delay - 1);
  } else {
    analogWrite(HEATER, 0);
    digitalWrite(HEATER, LOW);
    delay(pulse_delay - 1);
  }

  delayMicroseconds(50);
  measure_coil();
} // void pulse_heat_coil(int pulse_delay)

Tags:
Hubs:
Total votes 25: ↑23 and ↓2+21
Comments24

Articles