电烤箱“哈尔科夫”的第二人生

大家好

对于家用电器的命运有多短暂和残酷,我将不做冗长而抒情的介绍。 昨天被认为是进步的最后成就,今天已经是普通家庭熟悉的一部分,而明天,尽管它有足够的工作能力,或者甚至最好是作为零件捐赠者被拆除,但它将被扔进垃圾填埋场。 对于“有按钮,但我需要传感器”,“设计是铲子”和“没有此芯片”。 好吧,如果我们谈论的是某种中国微波炉或水壶,由于它们的生命周期短和具有可塑性,它们实际上是您不习惯的。

但是当涉及到您的家人已经几代人记住的事情时,该怎么办呢?从小就对您来说,是家庭舒适,祖母的好东西和整个“灯”的体现。 伸出一只手不会上升,因为这件事有太多的记忆,总的来说这是亵渎。 但由于完全过时且坦率地说外观无法使用,因此根本无法使用它。

怎么办

对! 复活。

认识我们的女主人公。 烤箱电“哈尔科夫”。

图片

首先,简要了解一下该主题:

  • 发行年份-1980(我的年龄)。
  • 功率-800瓦。

仅此而已。 没有计时器,没有温度或电源控制器,没有温度计。 老实说,惠辉也没有到处搜寻。 好吧,不,仅此而已。 没事 仅在带有加热元件和插头插入插座的情况下,即使没有开关也是如此。 随便烤。

当我在以前的单身汉生活中,在车库的大便中挖出这种稀有物,刷掉怀旧的眼泪,并尝试在里面煮东西时,然后它开始让我意识到,它的所有可爱年份都像第一个产生馅饼的用户友好Carl von Dres的1817年木制自行车 您可以看一下博物馆,也可以惊叹于年份,但是在第一次有条件旅行之后,您就会知道凯撒是凯撒的,并且在博物馆中很少见,我仍然会骑着现代自行车,因为我不想打败肾脏。

图片

就在这里。 打开后,此炉子恶魔立即在400度下烤制,令人信服地提醒我,加热后的任何有机物都一定会变成煤。 试用比萨饼也不例外。 在家庭档案中并非没有,在此炉子上做馅饼的食谱更像是对高炉技术操作模式的描述。 建议先加热10分钟,然后将烤盘和烤源一起放入,然后在半开的门上烘烤X分钟,然后在完全打开的情况下烘烤U分钟,定期更换烤盘。 在1980年,苏联工程师无法通过其他方法来调节温度,除非打开烤箱门。 尤拉·加加林(Yura Gagarin)在轨道上旋转了19年,而我们的核弹是最核的,但是苏联家庭主妇继续使用哈尔科夫(Kharkiv)烤箱加热地球。

知道了 情况已经澄清,目标设定,工具更加完善。 让我们继续到技术部分。



软件组件


“我相信全能的一位父亲,是天地万物的创造者,所有人都看不见。 我的上帝的名字叫Arduino。 阿们。”

作为Arduinova教堂的热心教区居民,我自然决定在这个慈善平台上雕刻我的想法。 因为它既简单又便宜,适合您的腿。 但是稍后,关于电子填充,现在我们将目光转向软件填充。 素描,我的意思是。

我们面临以下任务。 必须在烤箱控制器中实现以下功能:

  • 计时器-设置程序时间;
  • 恒温器-将温度设定和维持在一定水平;
  • 第一次出口到设定温度时发出声音警报-是时候放馅饼了;
  • 声音表明程序结束-是时候获取馅饼了;
  • 可视化的操作模式指示-为了了解其中发生的事情,它很漂亮。 有两个指示灯-程序已启动,而十个已打开。
  • 显示剩余工作时间。 了解何时该分泌胃液。

在arduino论坛上画了智者的卷轴后,在上帝的帮助下,创建了以下govnokod。 批评不被接受。 批评的人不会得到馅饼。

草绘
/* d6 -    () d7 -   ()     () d8 -  d9 - ce () () d10 - rst () () d11 - dc () () d12 - din  () d13 - clk  () gnd - bl  ( gnd) a0 -   () a1 -   () a2 -   () a4 -  .  10   4  +5.   -  4 vcc -  () gnd -  () */ #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> #include <EEPROM2.h> #include <SPI.h> volatile byte seqA = 0; volatile byte seqB = 0; volatile byte cnt1 = 0; volatile byte cnt2 = 0; volatile int Temp = 150; //    volatile int Time = 30; //     boolean heat = false; boolean work = false; boolean first_heat; volatile boolean right = false; volatile boolean left = false; volatile boolean button = false; long previousMillis = 0; int temp_count; long time_ost; long time_millis; byte menuitem = 1; //     1 byte page = 1; //   1 unsigned long heatMillis = 0; #define RT0 10000 //  #define B 3950 // K #define VCC 5 //-  #define R 10000 //R=10  float RT, VR, ln, TX, T0, VRT, temp_izmer, temp_itog; Adafruit_PCD8544 display = Adafruit_PCD8544(13, 12, 11, 9, 10); //************************************************************************************************** void setup() {//************************************************************************************* //*************************************************************************************************** Serial.begin(115200); pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(A2, INPUT); pinMode(A4, INPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(A0, HIGH); // digitalWrite(A1, HIGH); // digitalWrite(A2, HIGH); //  digitalWrite(6, LOW); //   digitalWrite(7, HIGH); //  digitalWrite(8, LOW); // T0 = 25 + 273.15; // T0  ,      PCICR = 0b00000010; // 1. PCIE1: Pin Change Interrupt Enable 1 PCMSK1 = 0b00000111; // Enable Pin Change Interrupt for A0, A1, A2 // Initialize LCD display.setRotation(2); // Set LDC orientation display.begin(60); // Set LCD contrast display.clearDisplay(); // Clear display display.display(); // Apply changes Temp = EEPROM_read_byte(0); Time = EEPROM_read_byte(3); sei(); } //************************************************************************************************ void loop() {//********************************************************************************** //************************************************************************************************ //   unsigned long currentMillis = millis(); //   ***************************************************************************** if (page==1) { display.setTextSize(1); display.clearDisplay(); display.setTextColor(BLACK, WHITE); display.drawFastHLine(0,0,83,BLACK); display.drawFastHLine(0,47,83,BLACK); display.drawFastVLine(0,0,47,BLACK); display.drawFastVLine(1,0,47,BLACK); display.drawFastVLine(2,0,47,BLACK); display.drawFastVLine(3,0,47,BLACK); display.drawFastVLine(4,0,47,BLACK); display.drawFastVLine(83,0,83,BLACK); display.setCursor(5, 2);//   if (menuitem==1) { display.setTextColor(WHITE, BLACK); //     display.drawFastHLine(0,1,83,BLACK); //************************* } else {display.setTextColor(BLACK, WHITE); //        } display.print(" TEMP "); display.setCursor(5, 14); if (menuitem==2) { display.setTextColor(WHITE, BLACK); display.drawFastHLine(0,13,83,BLACK); } else {display.setTextColor(BLACK, WHITE);} display.print(" TIME "); if (menuitem == 3) { display.setTextColor(WHITE, BLACK); display.drawFastHLine(0,25,83,BLACK); } else { display.setTextColor(BLACK, WHITE); } display.setCursor(5, 26); display.print(" START: "); if (work) { display.print("ON "); } else { display.print("OF "); } display.setCursor(5, 38); if (menuitem==4) { display.setTextColor(WHITE, BLACK); display.drawFastHLine(0,37,83,BLACK); } else {display.setTextColor(BLACK, WHITE);} display.print(" INFO "); if (left) { left = false; menuitem--; if (menuitem==0) { menuitem=1; } } if (right) { right = false; menuitem++; if (menuitem==5) { menuitem = 4; } } display.display(); if (button) { button = false; digitalWrite(8, HIGH); delay (50); //        digitalWrite(8, LOW); if (page == 1 && menuitem==1) { page=3; } else if (page == 1 && menuitem==2) { page=4; } else if (page == 1 && menuitem==4) { page=5; } //  ******************************************************************************** else if (menuitem == 3 && page == 1) { if (work) { work = false; digitalWrite(6, LOW); //    } else { heatMillis = currentMillis; work = true; first_heat = true; digitalWrite(6, HIGH); //    } } } } //   ()*************************************************** if (page==3) { display.setTextSize(1); display.clearDisplay(); display.drawFastHLine(0,0,83,BLACK); display.drawFastHLine(0,1,83,BLACK); display.drawFastHLine(0,47,83,BLACK); display.drawFastVLine(0,0,47,BLACK); display.drawFastVLine(83,0,83,BLACK); display.drawFastVLine(82,0,10,BLACK); display.drawFastVLine(81,0,10,BLACK); display.drawFastVLine(80,0,10,BLACK); display.drawFastVLine(79,0,10,BLACK); display.setTextColor(WHITE, BLACK); display.setCursor(1, 2); display.print(" Temp "); display.drawFastHLine(0,10,83,BLACK); display.setTextColor(BLACK, WHITE); display.setCursor(26, 12); display.print("Degree"); display.setTextSize(3); if (Temp >=100) { display.setCursor(16, 23); } else { display.setCursor(27, 23); } display.print(Temp); if (left) { left = false; Temp--; } if (Temp==49) { Temp=50; } if (right) { right = false; Temp++; } if (Temp==251) { Temp=250; } if (button) { digitalWrite(8, HIGH); delay (50); digitalWrite(8, LOW); button = false; page=1; EEPROM_write_byte(0, Temp); } display.display(); } //   ()*************************************************************************** else if (page==4) { display.setTextSize(1); display.clearDisplay(); display.drawFastHLine(0,0,83,BLACK); display.drawFastHLine(0,1,83,BLACK); display.drawFastHLine(0,47,83,BLACK); display.drawFastVLine(0,0,47,BLACK); display.drawFastVLine(83,0,83,BLACK); display.drawFastVLine(82,0,10,BLACK); display.drawFastVLine(81,0,10,BLACK); display.drawFastVLine(80,0,10,BLACK); display.drawFastVLine(79,0,10,BLACK); display.setTextColor(WHITE, BLACK); display.setCursor(1, 2); display.print(" Time "); display.drawFastHLine(0,10,83,BLACK); display.setTextColor(BLACK, WHITE); display.setCursor(22, 12); display.print("Minutes"); display.setTextSize(3); if (Time >=10) { display.setCursor(27, 23); } else { display.setCursor(38, 23); } display.print(Time); if (left) { left = false; Time--; } if (Time==0) { Time=1; } if (right) { right = false; Time++; } if (Time==61) { Time=60; } if (button) { digitalWrite(8, HIGH); delay (50); digitalWrite(8, LOW); button = false; page=1; EEPROM_write_byte(3, Time); } display.display(); } //   ( )*********************************************************** else if (page==5) { display.clearDisplay(); display.setTextColor(BLACK, WHITE); display.setTextSize(1); display.drawFastHLine(0,0,83,BLACK); display.drawFastHLine(0,47,83,BLACK); display.drawFastVLine(0,0,47,BLACK); display.drawFastVLine(83,0,83,BLACK); display.setCursor(3, 5); display.print("TEMP_UST:"); display.setCursor(64, 5); display.print(Temp); display.setCursor(3, 20); display.print("TEMP_TEK:"); display.setCursor(64, 20); display.print(temp_itog, 0); display.setCursor(3, 35); display.print("TIME_OST:"); display.setCursor(64, 35); display.print(time_ost); if (button) { digitalWrite(8, HIGH); delay (50); digitalWrite(8, LOW); button = false; page=1; } display.setTextSize(2); display.display(); } //  ********************************************* if (work) { time_millis = Time * 1000; time_millis = time_millis * 60; time_ost = ((time_millis) - (currentMillis - heatMillis)); time_ost = time_ost/1000; time_ost = time_ost/60; } else { time_ost = 0; } //  ******************************************* if (((currentMillis - heatMillis) > time_millis) && (work)) { work = false; digitalWrite(6, LOW); //    digitalWrite(8, HIGH);//   delay (1000); digitalWrite(8, LOW); delay (500); digitalWrite(8, HIGH); delay (1000); digitalWrite(8, LOW); delay (500); digitalWrite(8, HIGH); delay (1000); digitalWrite(8, LOW); } // ************************************************* if (currentMillis - previousMillis > 500) { previousMillis = currentMillis; VRT = analogRead(A4); //   VRT VRT = (5.00 / 1023.00) * VRT; //   VR = VCC - VRT; RT = VRT / (VR / R); // RT ln = log(RT / RT0); TX = (1 / ((ln / B) + (1 / T0))); //   TX = TX - 273.15; //   temp_count++; temp_izmer = temp_izmer + TX; } if (temp_count == 10) { temp_itog = temp_izmer/10; temp_count = 0; temp_izmer = 0; } //     ********************** if (temp_itog < (Temp - 1)) { //  heat = true; } if (temp_itog > (Temp + 1)) { heat = false; if (first_heat) { //        first_heat = false; digitalWrite(8, HIGH);//   delay (200); digitalWrite(8, LOW); delay (300); digitalWrite(8, HIGH); delay (200); digitalWrite(8, LOW); delay (300); digitalWrite(8, HIGH); delay (200); digitalWrite(8, LOW); } } // ***************************************************** if ((work) && (heat)) { digitalWrite(7, LOW); //   digitalWrite(5, HIGH); //    } else { digitalWrite(7, HIGH); //   digitalWrite(5, LOW); //    } //     ******************************************** if ((temp_itog < 0) || (temp_itog > 250)) { digitalWrite(8, HIGH);//   delay (500); digitalWrite(8, LOW); delay (500); } } //    ****************************************************************** ISR (PCINT1_vect) { // If interrupt is triggered by the button if (!digitalRead(A0)) { button = true; } else { // Else if interrupt is triggered by encoder signals boolean A_val = digitalRead(A1); // Read A and B signals boolean B_val = digitalRead(A2); // Record the A and B signals in seperate sequences seqA <<= 1; seqA |= A_val; seqB <<= 1; seqB |= B_val; // Mask the MSB four bits seqA &= 0b00001111; seqB &= 0b00001111; // Compare the recorded sequence with the expected sequence if (seqA == 0b00001001 && seqB == 0b00000011) { cnt1++; left = true; } if (seqA == 0b00000011 && seqB == 0b00001001) { cnt2++; right = true; } } } 


一切都比平时更多,基本上都是由使用诺基亚5110屏幕,编码器,热敏电阻和继电器的最基本示例组成的。 在这些有趣的叙述的下一部分中,选择这些要素的理由是合理的。

菜单包含4个项目:“温度”,“时间”,“开始”和“信息”。 我想从照片中可以清楚看出是什么造成了什么。 如有必要,您可以停止程序,增加或减少时间或温度,然后再次继续。

图片

自然,我们的设置存储在非易失性存储器中。

还增加了烤箱的过热控制和温度传感器的断裂或损坏的控制。 如果温度超过250度(继电器发生摇动或某些故障原因)或温度降至零以下(传感器打开,则显示270度处于打开状态),则会触发警报。



五金配件


要实现上述功能,我们需要以下组件:

  • 电源220-5伏特,由于某种充电而破裂。 它为所有电子设备供电。
  • Arduino专业版mini。 硅超级大脑负责管理我们的创意。
  • 诺基亚5110单色屏幕,分辨率84 * 48像素,稍有修改。 显示菜单项,可让您设置温度,时间,启用程序执行并查看过程中的当前参数。
  • 编码器(又名编码器,又称扭曲)。 它使您可以直观地管理设置菜单,并且在控制面板上仅需要一个孔。
  • 接力赛 最常见的继电器模块是10安培。 即使没有光隔离。 是的,风险是我的中间名。
  • 热敏电阻作为温度传感器。 有一次,我从某个设备上弄断了一个线程上的身份不明的热传感器,使其闲置了,现在变得很需要。 测试表明,在10 com的常规NTC热敏电阻内。 也就是说,一切都不只是简单的事情,护照温度限制在250-300度也符合我的任务。 可以肯定的是,我使用热敏电阻和数字传感器DS18B20制作了一个测试台。 高达100度时在鼻孔中显示出鼻孔,并且准确性超过了标准。 鲁波!
  • 指示灯指示-一对橙色LED。 声音指示-有源压电蜂鸣器。

图片

为了获得更大的气氛,有必要整理屏幕。 默认情况下,诺基亚5110屏幕带有白色或明亮的蓝色背光LED。 白光LED并不符合计划的外观风格,蓝光vyrviglazny LED似乎在用户中引起癫痫发作,并且总的来说,有撒旦的诞生,旨在促进敌基督者的迅速崛起。 我们还在篝火上喝它们。 帕特·诺斯特。 阿们

接下来,我们将橙色的smd LED用来模拟老式的白炽灯泡,并在去除屏幕的金属边框和其下方的LCD屏幕本身之后,焊接它们而不是标准的白炽灯泡。 现在一切都是风水。

我们找到一个合适的带有安装耳的塑料盒。 我们在其中放置了一个电源,一个arduinka,一个squeaker和alyushka。 我们将一对电线输出到电源,将一对电线输出到热敏电阻,并将线束输出到屏幕,编码器和带扩散器的状态LED的前面板。 控制单元的位置在烤箱的腹部。

图片



铁成分


凭借我对旧技术的全部热爱,如果不是一回事,我将永远不会尝试恢复它-我有一个普罗旺斯风格的厨房,并且该烤箱的圆形老式箱完美适合内部。 因此,决定傻瓜。

我们通过弯曲4个固定耳来拆下后面板,以到达炉子内部空腔的后壁。 我们取出了一层称为“玻璃棉”的大规模杀伤性武器。 在内部空腔后壁的中间,我们为热敏电阻杆的尺寸钻了一个孔,插入了热敏电阻,拧紧螺母,拆下外壳下方的电线,挑出玻璃棉的残留物,取而代之地将玄武岩棉棉推回去。

接下来,我们准备控制面板,用于装饰的笔和模板的元素。 没有塑料,只有金属。 由于我不知道如何在AutoCAD中进行绘制,因此我在Photoshop中绘制了必要的细节,然后通过某种云服务将其转换为dwg格式。 是的,我是个变态,我知道,我喜欢它。 我们提供用于激光切割的图纸。

图片

将仪表板焊接到计划的位置。 我们在侧面焊接缺失的三角形,腻子并清洁焊接处,以最大化实体零件的外观。 仪表板上有4个插槽-一个屏幕位置,一个编码器位置,在扭曲下方有一个用于LED的孔,在扭曲下方有“美观”,还有用于操作和加热指示器的卷曲插槽。 面板由2毫米厚的钢制成,这还不够。 “重量可靠。” 鲍里斯·剃刀。

烤箱的古老年代和多年处于不人道的状况下,不得不在其身上留下痕迹。 有油漆划痕,小凹痕和腐蚀灶。 我们戴上研磨机刷并尽可能地清洁。 油灰凹陷和汽车填充剂缺陷。 我们再次清洗。 脱脂

图片

进一步绘画。 在我所在的地区,我没有发现用自己选择的颜色对五种搪瓷进行着色的机会,因此,我从可用的现成颜色中进行选择。 象牙色被选为表壳的主要颜色,而开心果被选为表壳的装饰元素。

我们油漆,割草,发誓,清理污渍,重新油漆,再次割草,我们发誓再也不会像傻瓜那样愚弄人,而只是像所有普通男人一样安静地th打,冷静下来,再油漆一次,并感到满意。 我们等了一周直到油漆干了。

图片

炉子干燥后,我们用一束紧固件烹饪门锁把手,画出木柄的草图并将其交给特纳。 我们自己给笔刷上漆,然后晾干。 我们将编码器旋钮和金属板涂在屏幕主体上。

图片

图片

机壳完全干燥后,我们将模版涂上开心果漆。

接下来,我们将所有内容放在一起堆放,并了解烤箱的侧面极度空旷,不禁会粘在其他东西上。 但是通过金属模版进行涂装非常不方便,因为模版下的油墨泄漏,然后需要用溶剂刷以调节图像。 而且由于缺乏对广告代理商的“经理”的了解,我无法从Orakal订购模具。 因此,我在Internet上找到了适合大小的现成产品。

坚持下去 我们画。 我们很佩服你。

图片

接下来,我们将所有内容放在一起-安装屏幕,编码器和编码器旋钮。 从破裂的有机玻璃中,我们制造出用于指示操作模式的扩散器,并从仪表板的底部将其粘合。 我们拉伸并焊接模块的电线,然后使用电源按钮安装网络电源连接器。 我们为木柄钻孔并安装支架。 开-关指针内部有胶水,因此在旋转过程中把手不会划伤门的表面。

接下来,我们给情妇打电话,给她创造力,听听我的聪明和美丽,在等待馅饼的同时,我们将增加几行文字,解释为什么我这样做,而不是其他方式。

图片

图片

图片

1.为什么温度维护算法这么笨而不是PID?

因为根本没有必要。 对于30-40分钟的标准工作程序,炉子的温度仅通过目标点几次。 炉子很小,保温良好,冷却缓慢。 PID算法琐碎无处可回。 小的温度惯性在第一组温度期间仅发生一次,并且重叠大约为20度,这对于烘焙而言根本不重要,并且可以方便地通过此时打开锅盖来平整锅盖来使其平整。 为此,将发出达到工作温度的信号。 下次迭代通常发生在+/- 2度的范围内。

2.为什么是继电器而不是三端双向可控硅开关元件?为什么不使用PWM?

都一样 我喜欢模拟晶体管,我知道如何烹饪它们,但至少您不认为需要将裂纹推入设备中,继电器在半小时的运行中会发出四次咔嗒声。 在800瓦的功率下,即三安培的电流,即使在中国继电器中也将有足够的安全裕度。 但是PWM与此处无关,与器件的电平无关。 是的,接力是真诚和热情,三端双向可控硅开关是傲慢和骄傲。 女主人很高兴,这是一个战略目标。 简而言之,仅此而已。

3.还有什么计划?

不锈钢烤盘。 因为原来有黑莓制成的烤盘,如果已经有这种热量,则烤盘应与之对应。 稍后,我将绘图并将其交给激光。

图片

为了让SIM卡让我请假,我去测试了馅饼。 来自乌克兰的Privit。

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


All Articles