本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于Particle Photon的除湿机

发布时间:2022-07-22
分享到:

基于Particle Photon的除湿机

发布时间:2022-07-22
分享到:

这是一个用于 3D 打印干燥箱的除湿器,无需干燥剂即可保持灯丝干燥。

概述
构建此项目后,你就可以给你的 3D 打印机干燥箱配备一个功能齐全的除湿机,以保持您的灯丝干燥并随时以备使用了。除湿机使用 Peltier 设备工作,该设备将热量从设备的一侧传递到另一侧,从而产生冷热侧。设备的冷侧会产生冷凝水,从而去除干燥箱内空气中的水分。Peltier 夹在两个散热器之间,风扇在其中吹过。风扇为 Peltier 的热侧提供冷却,同时还吹走冷散热器翅片上积聚的冷凝水。

除湿机由两个 Particle Photon 控制。一个 Photon 控制 Peltier 设备,而另一个读取干燥箱内的湿度和温度。两个 Photon 相互通信以确定 Peltier 是否应该打开或关闭以及功率级别是否应该设置为一或二(低或高)。当湿度水平达到大约 30% 时,高功率模式启动。在这一点上,只有通过低于冰点才能从空气中去除更多的水分。可以使用预定义的变量在代码顶部设置所需的目标湿度和其他参数。

构建
首先,将原来的筒形插头从电源上断开,并焊接在新的大电流筒形插头上。

使用导热膏和夹具支架组装两个散热器和 Peltier 模块。使用大型散热器随附的紧固件连接夹具支架。如图所示,确保将大型散热器的散热片定位在夹具的长方向上。否则散热器将无法正确装入外壳。

注意:散热器随附的弹簧将不用于此项目。

参考电路原理图来组装电子设备。如果需要,连接器可用于电路的低电流部分。

注意:在将这两个组件连接到电路的其余部分之前,将摇臂开关和大电流筒形插孔插入电子外壳盒。还要确保将 12V 电压传输到灯丝盒中的光子的电线足够长,以便通过出口空气管进入灯丝盒。

将 Peltier 组件放入其外壳内,并用四个 M3x16 螺钉固定。

注意:只拧紧螺丝,直到它们紧贴为止。

使用适合您选择的风扇的紧固件将 90 毫米风扇固定到顶部管道连接器上。

注意:调整风扇方向,使空气通过顶部管道连接器的小端吸入。

将顶部管道连接器和电子外壳连接到 Peltier 组件外壳,同时引导电线穿过外壳的切口。将四个 M3x12 螺钉用于顶部管道连接器,四个 M3x6 螺钉用于电子外壳(警告:一旦感觉到任何阻力,请停止拧紧电子外壳的螺钉,否则您会剥去螺纹。这很容易做到,因为螺钉与塑料的接合只有 3 毫米。)

注意:对于某些电线尺寸,可能需要扩大切口。

使用四个 M3x10 螺钉将侧管连接器连接到 Peltier 组件外壳。(警告:只有在第一次感觉到阻力后才稍微拧紧螺丝,否则你会剥掉螺纹。这里只有 6 毫米的啮合。)

使用 2-1/2" PVC 管或等效外径的管子将空气进出除湿机。可以使用 M3 螺钉和螺母将夹子拧紧到管子上。

将软管倒钩拧入靠近 Pelter 外壳组件底部的排水口。将聚氨酯软管连接到所需位置。注意:可能需要强力胶或适当的密封剂来防止软管倒钩螺纹周围的泄漏。如果软管倒钩不能成功地拧入印刷部件,则可以鼓励聚乙烯软管在没有倒钩的情况下装入孔中,并用强力胶或其他方法固定到位。

peltier 控制代码:

/* Program description*/
// User Configuration
const float Power_Level_1 = 90;          //Low power level in percent supplied to the Peltier module that will not cause the dehumidifier to ice up
const float Power_Level_2 = 100;         //Supplies maximum power to the Peltier module but may cause the dehumidifier to ice up
const float Fan_Speed_1 = 40;            //Fan speed in percent for power level 1 above
const float Fan_Speed_2 = 60;            //Fan speed in percent for power level 2 avove
const char Peltier_MOSFET_Pin = D0;      //Pin that will control the Peltier MOSFET (Must be digital PWM)
const char Fan_MOSFET_Pin = D2;          //Pin that will control the fan MOSFET (Must be digital PWM if anything other than 100 is used for the fan speeds)
const int Fan_PWM_Frequency = 20;        //Frequency of the PWM signal that will be sent to the Fan
const int Peltier_PWM_Frequency = 500;   //Frequency of the PWM signal that will be sent to the Peltier module

// Program Variables
bool request_Peltier_on = false;
float Peltier_power_level = (Power_Level_1/100)*255;
int Peltier_current_state = 0;
float Peltier_current_power_level = Peltier_power_level;
float fan_speed = (Fan_Speed_1/100)*255;
unsigned long last_millis = 0;
int update_interval = 60000;


// Recieved Data Handlers
void on_off_request_handler(String event, String data) {
    request_Peltier_on = data.toInt();
    Particle.publish("Gunner_P/MEGR_3171/Dehumidifier_Filament_Box/Peltier_state", String(request_Peltier_on), 10);
}

void Peltier_power_handler(String event, String data) {
    if (data.toInt() == 1) {
        Peltier_power_level = (Power_Level_1/100)*255;
        fan_speed = (Fan_Speed_1/100)*255;
        Particle.publish("Gunner_P/MEGR_3171/Dehumidifier_Filament_Box/Peltier_power", String(1), 10);
    }
    if (data.toInt() == 2) {
        Peltier_power_level = (Power_Level_2/100)*255;
        fan_speed = (Fan_Speed_2/100)*255;
        Particle.publish("Gunner_P/MEGR_3171/Dehumidifier_Filament_Box/Peltier_power", String(2), 10);
    }
}


// Dehumidifier Manager
void dehumidifier_manager() {
    if (request_Peltier_on && Peltier_current_state == 0) {
        analogWrite(Peltier_MOSFET_Pin, Peltier_power_level, Peltier_PWM_Frequency);
        Peltier_current_power_level = Peltier_power_level;
        analogWrite(Fan_MOSFET_Pin, 255, Fan_PWM_Frequency);
        delay(200);
        analogWrite(Fan_MOSFET_Pin, fan_speed, Fan_PWM_Frequency);
        Peltier_current_state = 1;
    }
    if (!request_Peltier_on && Peltier_current_state == 1) {
        analogWrite(Peltier_MOSFET_Pin, 0);
        analogWrite(Fan_MOSFET_Pin, 0);
        Peltier_current_state = 0;
    }
    if (Peltier_current_state == 1 && Peltier_current_power_level != Peltier_power_level) {
        analogWrite(Peltier_MOSFET_Pin, Peltier_power_level, Peltier_PWM_Frequency);
        Peltier_current_power_level = Peltier_power_level;
        analogWrite(Fan_MOSFET_Pin, 255, Fan_PWM_Frequency);
        delay(200);
        analogWrite(Fan_MOSFET_Pin, fan_speed, Fan_PWM_Frequency);
    }
}


// Setup
void setup() {
    pinMode(Peltier_MOSFET_Pin, OUTPUT);
    pinMode(Fan_MOSFET_Pin, OUTPUT);
    Particle.subscribe("Elijah_C_MEGR_3171_Dehumidifier_Filament_Box_Project", on_off_request_handler);
    Particle.subscribe("Elijah_C_MEGR_3171_Peltier_Power_Level_Dehumidifier_Box", Peltier_power_handler);
    Particle.publish("Gunner_P/MEGR_3171/Dehumidifier_Filament_Box/Peltier_state", String(request_Peltier_on), 10);
}


// Loop
void loop() {
    if (millis() - last_millis >= update_interval); {
        dehumidifier_manager();
        last_millis = millis();
    }
}

ThingSpeak 记录干燥箱的实时湿度和温度以及除湿机的电源状态。可随时随地查看除湿机状态,确保系统正常运行。注意:上面显示的图表包含每 30 秒报告一次的数据,而不是代码中设置的 5 分钟默认值。 

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:Elijah Conrad,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论