自制烟机

为了演示蒸汽朋克角色扮演,需要一台抽烟机(嗯,什么样的蒸汽朋克没有烟?),但这不是在演出现场。无需三思而后行,我决定制造自己的小型烟机,并配备温度控制,远程控制(使用ESP-12E控制器)和电池电源。我以已经描述过的雾度与温度测量为基础,但略微复杂化电路以提高性能。



最困难的因素是制造甘油和丙二醇混合物的螺旋和进料系统。经过几次实验,他停了一个6圈螺旋形,直径约12毫米,由一个“辫子”缠绕而成,剩下7个直径为0.29的钛脉。通常,最好使用较粗的电线,并且不要使用“辫子”,但是手头的材料选择有限。所形成的螺旋具有大约半欧姆的电阻,这为12伏特提供了240瓦的理论功率(实际上,由于需要将温度保持在210-230度,因此加热功率会更少)。

将螺旋线绞成辫子并缠绕后(由于钛非常有弹性,因此必须缠绕在较小直径的管子上),最好漂洗和煅烧(通过从电池提供12伏电压至赤热,以消除有机污染物(手指等油脂)。

总的来说,有一种想法是制造一种以填充有机油且内部为螺旋形的铜管形式的加热器,这将确保几乎完全均匀的加热,并且将使功率更大,但手头没有必要的材料。 。

我不得不修改液体供应,因为一方面它应该是连续且均匀的,另一方面则应该不是太多。旁边有一个没有水流控制的水泵,所以我决定采用下一个设计-直径为5毫米的带孔硅胶管(用1.2毫米钻头打一打六个洞),用棉绒包裹,其上有一个螺旋形。由于泵驱动的流体比流过棉线的流体多得多,因此管的末端流到泵吸取成分的同一个水箱。墨池本身是在打印机上打印的不漏墨池,墨池位于实际螺旋形下方,此外,还收集从墨池中排出的液滴。

我必须说,螺旋线与棉花的松动配合(甚至螺旋线上的引线太长而没有与液体接触)会导致加热不均匀,从而产生燃烧的气味,甚至可能导致起火。因此,不可能形成太大或太长的螺旋线,从而限制功率。因此,方法如下-将矩形的棉线缠绕在试管的孔上(以这种形式在vapers商店中出售),然后将所得的带有试管的棉制圆柱体拧成螺旋状,就像通过螺纹拧紧一样。

他将一台12伏特的涡轮机用作风扇,以某种价格仅卖几美分就卖了。该泵是中国水泵(由于它是为6伏设计的,因此我必须在LM2596上增加另一个DC-DC转换器),并与风扇并联。该机器由2.6安时的3S锂电池供电,额定温度为40C。

方案:

图片

控制代码的一部分(相当粗略的调整,我不想打扰PID控制器及其设置),我们将pulse_heat_coil()函数调用为具有所需的加热间隔(建议在10到20毫秒之间)。为了进行更精确的调整-您至少需要第二个ADC(用于同时测量电池电压)和一个独立于wifi的控制器(如我在stm32和arduino mini pro上进行vaping所描述的mod一样)。最好在加热器前几秒钟用泵打开风扇,然后在十几秒后关闭风扇,以免发生不愉快的事故。

// 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)

Source: https://habr.com/ru/post/zh-CN399387/


All Articles