暑期小玩具:冰滴咖啡机
之前中了抖音的毒,看到这款桌面冰镇神器
神奇的以为只要把CPU风扇倒过来就能制冷。。。。仔细一看原来起作用的是制冷半导体板。其实原理很简单,就是制冷半导体板的一面制冷(低温),一面发热(高温),然而需要及时将发热面的热量散去,制冷面才能持续制冷,所以加了个CPU风声对发热面进行散热。
知道原理后看手头上刚好有个闲置CPU风扇,又心痒痒,就淘宝了配件。
冰镇神器弄起来了,但感觉这货就是个鸡肋,第一,办公室和家里都有冰箱,我在哪需要这个东西来冰镇可乐? 第二,这东西制冷速度其实不快,就算我买的已经是大功率制冷半导体,要一杯水直接结冰依然要几个小时以上。
所以整完又在想,那这东西能用来干嘛,我淘宝了下,有些人用来做手机水冷散热器,嗯,这个不错,但我没这个需求。 看到水冷管,突发奇想,最近天气热,在咖啡馆坐的时候点了个冰滴咖啡,觉得很不错,自己后来咸鱼了个冰滴壶,但放冰块调水滴速都好烦。所以想想觉得用这个冰镇神器来做一个冰滴咖啡机。
想法很简单,就是加个水泵,控制水速非常缓慢,通过类似冷却管的形式在冰镇神器中通过,变成冰水滴入咖啡粉进行萃取。
淘宝了最小功率的蠕动泵,食用级硅胶管,这样水只在硅胶管中流动,不会接触到水泵内部。为了让硅胶管在冰镇神器里类似冷却管螺旋,买了些管夹(这个着实是买得贵...找不到便宜的)
控制部分翻出我9年前买的玩具,arduino,这个是当年刚兴起这种电子积木的时候买的,也算是单片机编程,用C的其实。为什么说是玩具,就正常都是在他的框架下去实现功能,很多功能库人家都已经写好可以直接调用,所以简单,外围电路也都是统一的规范
驱动蠕动泵的采用L298N,用他有两个作用,一个是方便控制蠕动泵速度和启停,通过arduino的PWM引脚就可以控制速度。二是蠕动泵电压是12V,制冷半导体也是12V,arduino是5V,我手头有刚好剩一个之前是要买来更换LED灯具的电源因为尺寸不对没能装上而闲置,是个12V电源。L298N输入12V电源驱动12V蠕动泵,还可以提供5V给arduino。完美解决问题。
控制按钮键盘自己焊,加个4位数码管显示(之前看家里剩下不带芯片的4位数码管,然后要焊上限流电阻,这个还好,问题是他要占用12个arduino引脚,那我引脚就不够用了)淘宝个集成TM1637的3块8包邮。。除了电源和地,就只要一个GIO和CLK,arduino还有现成的库,舒服~
在加个继电器,控制半导体制冷片开关。又买了两块亚克力板,画孔钻孔,把东西都装上,接线。
最后还要加速咖啡滤杯,随意买个茶漏来用,因为之前上一个冰滴壶虽然咸鱼卖了,但还遗留写圆片滤纸,就想着拿来用掉。但后来用过后发现用茶漏加滤纸过滤太慢,萃取过度其实,后面再换吧。
万事具备,只缺代码
代码其实也简单,用到的第三方库有SevenSegmentTM1637也就是TM1637数码管显示库和SCoop子线程库
这里主要是开一个线程循环控制蠕动泵的启停,来对冰滴速度进行控制。而主线程主要是读取按钮输入改变对应参数来进行设置和显示数码管内容,下面是两个线程主要代码。
void TaskPump::setup(){ //电机驱动线程设定
pinMode(PIN_MOTOR_DRIVE_SIGNAL_1, OUTPUT);
pinMode(PIN_MOTOR_DRIVE_INPUT_1, OUTPUT);
pinMode(PIN_MOTOR_DRIVE_INPUT_2, OUTPUT);
digitalWrite(PIN_MOTOR_DRIVE_INPUT_1, LOW);
digitalWrite(PIN_MOTOR_DRIVE_INPUT_2, LOW);
}
void TaskPump::loop(){ //电机驱动线程循环
if(bMainSwitch && bPumpFlag && !bDrainFlag){
analogWrite(PIN_MOTOR_DRIVE_SIGNAL_1, iPumpSpeed);
sleep(iPumpKeep);
analogWrite(PIN_MOTOR_DRIVE_SIGNAL_1, 0);
sleep(iPumpIntervalTime);
}
}
void setup() {
// put your setup code here, to run once:
pinMode(PIN_BUTTON_1, INPUT);
pinMode(PIN_BUTTON_2, INPUT);
pinMode(PIN_BUTTON_3, INPUT);
pinMode(PIN_BUTTON_4, INPUT);
pinMode(PIN_BUTTON_5, INPUT);
pinMode(PIN_BUTTON_6, INPUT);
pinMode(PIN_RELAY_COOLER, OUTPUT);
display.begin();
display.setBacklight(100);
display.clear();
digitalWrite(PIN_RELAY_COOLER, LOW);
mySCoop.start();
}
void loop() {
// put your main code here, to run repeatedly:
yield();
if (digitalRead(PIN_BUTTON_1) == HIGH){//总开关
delay(500); //消除抖动
IceDripMain();
}
if (digitalRead(PIN_BUTTON_2) == HIGH){//暂停
delay(500);
PumpSwitch();
}
if (digitalRead(PIN_BUTTON_3) == HIGH){//加
delay(500);
ParamUp();
}
if (digitalRead(PIN_BUTTON_4) == HIGH){//减
delay(500);
ParamDown();
}
if (digitalRead(PIN_BUTTON_5) == HIGH){//排水
delay(500);
DrainSwitch();
}
if (digitalRead(PIN_BUTTON_6) == HIGH){//切换加减按键功能
delay(500);
ToggleParam();
}
ulCurrentMillis = millis();
if (ulCurrentMillis - ulPrevShowMillis >= UPDATE_TIME_INTERVAL) {
ulPrevShowMillis = ulCurrentMillis;
if(bMainSwitch){
MsToTime(ulRunMillis + ulCurrentMillis - ulStartMillis);
display.clear();
display.setColonOn(true);
display.print(strTime);
if((ulRunMillis + ulCurrentMillis - ulStartMillis) > iLongestRunTime){
IceDripMain();
}
}else{
display.clear();
display.setColonOn(false);
display.print("ffff");
}
}
delay(50);
}
arduino性能就只能做些小控制,UNO开3个线程就不正常了。
算下来,这套东西也要花费2百多大洋,时间上断断续续,想起一点就买一点配件,配件凑齐又断断续续调试下,两个月才弄完。也就权当是过暑假做的玩具吧。
技术含量不高,都是些玩具,其实主要还是喜欢自己动手,把自己的想法做出来,包装成貌似很高大上的样子。
在这个过程中,类似与从产品构思(制冷半导体能用来做什么),思考用户需求(拿来做冰滴咖啡),产品设计和技术选型(利旧电源、arduino控制、L298N驱动蠕动泵等),硬件实现与软件编码,到后期营销产品拍摄、短视频剪辑、本文档编写。
anyway 开心就好。