Hola a todos
No haré presentaciones largas y líricas sobre cuán corto y cruel es el destino de los electrodomésticos. Lo que ayer se percibió como el último logro del progreso, hoy ya será una parte familiar del hogar promedio, y mañana simplemente será arrojado al vertedero, a pesar de su plena capacidad de trabajo o, en el mejor de los casos, desmantelado para partes como donante de partes. Para "hay botones, pero quiero un sensor", y "el diseño es soviético" y "no hay este chip". Y bueno, si estamos hablando de algún tipo de microondas o hervidor de agua chino, al que realmente no te acostumbras, debido a su corto ciclo de vida y la falta plástica de espiritualidad.
Pero qué hacer cuando se trata de algo que ha sido recordado por varias generaciones de su familia y desde la infancia fue para usted la encarnación de la comodidad del hogar, las cosas de la abuela y toda la "lámpara". Tirar una mano no se eleva, ya que hay demasiados recuerdos con esta cosa, y en general esto es blasfemia. Pero no es posible usarlo debido a la obsolescencia total y la apariencia francamente impresentable.
Que hacer
Derecho! Resucitar
Conoce a nuestra heroína Horno eléctrico "Jarkov".

Para empezar, un breve conocimiento del tema:
- Año de lanzamiento: 1980 (mi edad).
- Potencia: 800 vatios.
Y eso es todo. No hay temporizador, no hay controlador de temperatura o potencia, no hay termómetro. Wai Fai tampoco es buscado en todas partes, sinceramente. Bueno, no, eso es todo. No hay nada Solo la carcasa con elementos calefactores y el enchufe en la toma, incluso sin interruptor. Hornea como quieras.
Cuando durante mi vida de soltero desenterré esta rareza en las entrañas de los garajes, limpié una lágrima nostálgica y traté de cocinar algo en ella, entonces comenzó a llegar a mí que con todo su lindo vintage, este "generador de pasteles" es tan fácil de usar como el primero Bicicleta de madera 1817 por Carl von Dres Puedes mirar el museo, maravillarte con la cosecha también, pero después del primer viaje condicional, entiendes que César es de César, y un lugar raro en el museo, y que aún viajaré en la bicicleta moderna porque no quiero vencer a los riñones.

Entonces está aquí. Cuando se enciende, este demonio de la estufa se asó inmediatamente a 400 grados, recordándome de manera convincente que cualquier materia orgánica cuando se calienta tiene la garantía de convertirse en carbón. Y la pizza de prueba no fue la excepción. No en vano en los archivos familiares, las recetas para hacer pasteles en esta estufa se parecían más a una descripción de los modos de funcionamiento tecnológicos de un alto horno. Se sugirió calentar durante 10 minutos, luego insertar la bandeja para hornear con las fuentes, luego hornear X minutos con la puerta entreabierta, luego U minutos con completamente abierta, intercambiando periódicamente las bandejas para hornear. En 1980, la ingeniería soviética no podía ofrecer a la mujer soviética ninguna otra forma de ajustar la temperatura, excepto abriendo la puerta del horno. Yura Gagarin ha estado girando en órbita durante 19 años y nuestra bomba nuclear era la más nuclear, pero las amas de casa soviéticas continuaron calentando el planeta con hornos de Jarkov.
Esta bien La situación se ha aclarado, se han establecido objetivos, se han afilado las herramientas. Pasemos a la parte técnica.
Componente de software
“Creo en el Padre Todopoderoso, el Creador del cielo y de la tierra, visible para todos e invisible. El nombre de mi dios es Arduino. Amén ".
Siendo un feligrés celoso de la iglesia Arduinova, naturalmente decidí esculpir mi creación en esta plataforma de caridad. Porque es simple y barato y se adapta a tus piernas. Pero sobre el relleno electrónico un poco más tarde, y ahora miramos al relleno del software. Bosquejo, quiero decir.
Nos enfrentamos a la siguiente tarea. Las siguientes funciones deben implementarse en el controlador del horno:
- temporizador: ajuste de la hora de nuestro programa;
- termostato: ajuste y mantenimiento de la temperatura a cierto nivel;
- alarma sonora de la primera salida a la temperatura establecida: el momento en que es hora de poner pasteles;
- señalización sonora del final del programa: el momento en que es hora de obtener los pasteles;
- Indicación visual de los modos de funcionamiento: para comprender lo que está sucediendo en esto y es simplemente hermoso. Hay dos indicadores: el programa está encendido y los diez están encendidos.
- visualización del tiempo de funcionamiento restante. Comprender cuándo es hora de secretar jugo gástrico.
Después de pintar los rollos de los sabios en los foros de arduino, con la ayuda de Dios se creó el siguiente govnokod. La crítica no es aceptada. Quien critique no recibirá pasteles.
Bosquejo #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; } } }
Todo es más de lo habitual, esencialmente hecho de los ejemplos más básicos de trabajo con una pantalla Nokia 5110, un codificador, un termistor y un relé. La elección a favor de estos componentes se justifica en la siguiente parte de nuestra fascinante narrativa.
El menú consta de 4 elementos: "TEMP", "TIME", "START" e "INFO". De qué es responsable qué, creo que está claro en la foto. Si es necesario, puede detener el programa, agregar o reducir el tiempo o la temperatura, y continuar nuevamente.

Naturalmente, nuestra configuración se almacena en una memoria no volátil.
También se agregó el control de sobrecalentamiento del horno y el control de una rotura o daño al sensor de temperatura. Si la temperatura supera los 250 grados (un relé se adhiere o se detecta alguna falla) o la temperatura cae por debajo de cero (un sensor abierto, muestra 270 grados en el abierto), se producirá una alarma.
Componente de hardware
Para implementar la funcionalidad descrita anteriormente, necesitamos los siguientes componentes:
- Fuente de alimentación 220 - 5 voltios, arrancada de algún tipo de carga. Alimenta toda la electrónica.
- Arduino pro mini. Superbrain de silicio responsable de gestionar nuestra creación.
- Pantalla monocroma Nokia 5110, resolución 84 * 48 píxeles con una ligera revisión. Muestra los elementos del menú, lo que le permite establecer la temperatura, el tiempo, habilitar el programa para la ejecución y ver los parámetros actuales en el proceso.
- Codificador (también conocido como codificador, también conocido como giro). Le permite administrar intuitivamente el menú de configuración y solo requiere un agujero en el panel de control.
- Relé El módulo de relé más común es de 10 amperios chinos. Incluso sin optoaislamiento. Sí, el riesgo es mi segundo nombre.
- Termistor como sensor de temperatura. Una vez, un sensor térmico no identificado en un hilo fue arrancado de algún dispositivo por mí, permaneció inactivo, ahora se ha convertido en una demanda. Las pruebas mostraron que dentro de un termistor NTC regular a las 10 com. Es decir, todo es más que simple y el límite de temperatura del pasaporte de 250 a 300 grados corresponde a mis tareas. Para estar seguro, hice un banco de pruebas con un termistor y un sensor digital DS18B20. Hasta 100 grados mostraron fosas nasales en la nariz y la precisión es más que excesiva. Lubo!
- Indicación de luz: un par de LED de color naranja. Indicación de sonido: zumbador piezoeléctrico activo.

Para una mayor atmósfera, es necesario terminar la pantalla. Por defecto, las pantallas del Nokia 5110 vienen con LED de luz de fondo blanca o azul brillante. Los LED blancos no corresponden al estilo externo planeado, y los LED azules vyrviglazny parecen provocar ataques de epilepsia entre los usuarios y, en general, existe la creación de Satanás, diseñado para contribuir a la pronta venida del Anticristo. También los bebemos en la hoguera. Pater noster. Amén
A continuación, tomamos los LED smd de color naranja, diseñados para simular bombillas incandescentes de la vieja escuela y soldarlas en lugar de las estándar, después de quitar el bisel de metal de la pantalla y la pantalla LCD en sí. Ahora todo es Feng Shui.
Encontramos una caja de plástico adecuada con orejas de montaje. Colocamos en él una unidad de fuente de alimentación, un arduinka, un chirrido y un Trustushka. Emitimos un par de cables a la red eléctrica, un par de cables al termistor y un mazo de cables al panel frontal a la pantalla, el codificador y los LED de estado con difusores. El lugar de la unidad de control está en la barriga del horno.

Componente de hierro
Con todo mi amor por la tecnología antigua, nunca me comprometería a restaurar este horno si no fuera por una cosa: tengo una cocina de estilo provenzal y la carcasa vintage redondeada de este horno encaja perfectamente en el interior. Por lo tanto, se decidió engañar.
Quitamos el panel posterior doblando las 4 orejas de fijación para llegar a la pared posterior de la cavidad interna de la estufa. Sacamos una capa de armas de destrucción masiva llamada "lana de vidrio". En el medio de la pared posterior de la cavidad interna, perforamos un orificio del tamaño de la varilla del termistor, insertamos el termistor, apretamos la tuerca, retiramos los cables debajo de la caja, recogemos los restos de lana de vidrio, apretamos la lana de algodón de basalto y la recogemos.
A continuación, preparamos el panel de control, elementos de bolígrafos y plantillas para la decoración. Sin plástico, solo metal. Como no sé cómo dibujar en AutoCAD, dibujo los detalles necesarios en Photoshop y los convierto a formato dwg a través de algún tipo de servicio en la nube. Sí, soy un pervertido, lo sé, me gusta. Damos dibujos para corte por láser.

Suelde el tablero a la ubicación planificada. Soldamos los triángulos que faltan en los lados, ponemos masilla y limpiamos el lugar de la soldadura, maximizando la apariencia de una parte sólida. En el tablero hay 4 ranuras: un lugar para la pantalla, un lugar para un codificador con orificios para LED debajo del giro "para belleza" debajo del giro y ranuras rizadas para los indicadores de operación y calentamiento. El panel está hecho de acero de 2 mm de espesor, lo que no sería suficiente. "El peso es confiable". Boris Razor.
La venerable edad del horno y muchos años de estar en condiciones inhumanas no podían dejar rastros en su cuerpo. Había rasguños de pintura, pequeñas abolladuras y focos de corrosión. Ponemos el cepillo del molinillo y limpiamos tanto como sea posible. Masilla abolladuras y defectos con rellenos de automóviles. Lo limpiamos de nuevo. Desengrasar.

Más adelante en la pintura. No encontré en mi área la oportunidad de colorear el esmalte pentaftálico con los colores de mi elección, por lo tanto, elegí entre los colores listos para usar disponibles. Se eligió marfil para el color principal del estuche y pistacho para los elementos de la decoración del estuche.
Pintamos, cortamos, juramos, limpiamos las manchas, volvemos a pintar, volvemos a cortar, juramos nunca volver a engañar con algo similar, sino simplemente golpear pacíficamente como todos los hombres normales, calmarnos, pintar de nuevo y estar satisfechos. Esperamos una semana hasta que la pintura se seque con seguridad.

Mientras la estufa se seca, cocinamos en un montón de sujetadores para la manija de la puerta de bloqueo, dibujamos un boceto de las manijas de madera y se lo damos al tornero. Pintamos los bolígrafos y los dejamos secar. Pintamos la perilla del codificador y la placa de metal en el cuerpo de la pantalla.


Después de que la carcasa se haya secado por completo, aplicamos plantillas y pintamos con pintura de pistacho.
Luego, juntamos todo en un montón y entendemos que las superficies laterales del horno están provocativamente vacías y no pueden evitar apegarse a otra cosa. Pero pintar a través de plantillas de metal es extremadamente inconveniente debido a la fuga de tinta debajo de la plantilla y la necesidad de un pincel con el solvente para ajustar la imagen. Y no pude ordenar plantillas para ordenar de Orakal debido a una falta de comprensión con el "gerente" de una agencia de publicidad. Por lo tanto, me encontré listo para usar, de tamaño adecuado en Internet.
Quédate. Nosotros pintamos Te admiramos

A continuación, juntamos todo: instale la pantalla, el codificador y la perilla del codificador. A partir de plexiglás agrietado, hacemos difusores para indicadores de modos de funcionamiento y los pegamos desde la parte inferior del tablero. Estiramos y soldamos los cables de los módulos e instalamos el conector de alimentación de red con el botón de encendido. Perforamos e instalamos soportes para mangos de madera. Pegue fieltro en el interior del puntero Abrir-Cerrar para que la manija no raye la superficie de la puerta durante la rotación.
Luego, llamamos a la amante, le damos esta creatividad, escuchamos cuán inteligente y hermosa soy, y mientras esperamos los pasteles, agregaremos un par de líneas más, explicando por qué lo hice de esta manera y no de otra manera.



1. ¿Por qué el algoritmo de mantenimiento de temperatura es tan tonto en lugar de PID?
Porque simplemente no hay necesidad. Para un programa de trabajo estándar, 30-40 minutos, la temperatura de la estufa pasa el punto objetivo solo un par de veces. La estufa es pequeña, bien aislada, se enfría lentamente. Algoritmo PID trivial en ninguna parte a la vuelta. Se produce una pequeña inercia de temperatura solo una vez durante el primer conjunto de temperaturas y la superposición es de aproximadamente 20 grados, lo que no es del todo importante para hornear y se nivela convenientemente abriendo la puerta en este momento para colocar la sartén. Para esto, suena la señal para alcanzar la temperatura de funcionamiento. La siguiente iteración generalmente ocurre en el rango del orden de + - 2 grados.
2. ¿Por qué es un relé, no un triac, y por qué no PWM?
De todos modos Me encantan los simistores y sé cómo cocinarlos, pero al menos no crees que sea necesario romperlos para meterlos en el dispositivo, en el que el relé hace clic cuatro veces en media hora de funcionamiento. Y a 800 vatios de potencia, es decir, tres amperios de corriente, incluso en el relé chino habrá un margen de seguridad suficiente. Pero PWM no tiene nada que hacer aquí, no ese nivel del dispositivo. Sí, y el relevo es sincero y la lámpara, y el triac es arrogancia y orgullo. Y la anfitriona está más que feliz, y este era un objetivo estratégico. En resumen, eso es todo.
3. ¿Qué más se planea?
Bandejas de acero inoxidable. Porque en el original hay bandejas para hornear de moras, y si ya hay tanto calor, entonces las bandejas para hornear deben corresponder. Luego dibujaré y se lo daré al láser.

Para sim déjame irme, fui a probar los pasteles. Privit de Ucrania.