Не буду делать долгие и лирические вступления о том как коротка и жестока судьба бытовой техники. То что еще вчера воспринималось как последнее достижение прогресса, сегодня уже будет привычной частью среднестатистического домохозяйства, а завтра будет просто выброшено на свалку, не смотря на полную работоспособность или в лучшем случае – разобрано на запчасти как донор деталей. Ибо «тут кнопки, а хочу сенсор», и «дизайн совковый» и «нет этой фишки». И ладно если речь идет о какой то китайской микроволновке или чайнике, к которым и привыкнуть то толком не успеваешь из-за их короткого жизненного цикла и пластиковой бездуховности.
Но что делать, когда речь идет о вещи, которая помнит несколько поколений твоей семьи и с детства была для тебя воплощением домашнего уюта, бабушкиных вкусностей и всего самого «лампового». Выкинуть рука не поднимется, как с этой вещью уж слишком много воспоминаний и вообще сие есть кощунство. Но и использовать ну уж никак не представляется возможным по причине тотального устаревания и откровенно непрезентабельного вида.
Что делать?
Правильно! Воскрешать.
Встречайте нашу героиню. Духовка электрическая «Харьков».
Для начала короткое знакомство с подопытной:
- Год выпуска – 1980 (моя ровесница).
- Мощность – 800 ватт.
И все. Нет ни таймера, ни регулятора температуры или мощности, ни термометра. Вай фая тоже нет, везде искал, честно. Ну нет и все. Ничего нет. Только корпус с ТЭНами и вилка в розетку даже без выключателя. Выпекай как хочешь.
Когда в период моей былой холостяцкой жизни я отрыл в недрах гаражей этот раритет, смахнул ностальгическую слезу и попытался что то в ней приготовить, то до меня стало доходить что при всей своей милой винтажности, этот «генератор пирожков» такой же дружелюбный к пользователю как первый деревянный велосипед 1817 года авторства Карла фон Дреза. В музее посмотреть можно, поумиляться винтажности тоже, но после первой же условной поездки понимаешь что кесарю кесарево, а раритету место в музее, и кататься я буду все таки на современном велике ибо отбивать почки не хочется.
Так и тут. При включении этот печко-демон сходу жарил под 400 градусов, убедительно напомнив мне что любая органика при нагревании гарантированно превращается в уголь. И пробная пицца не стала исключением. Не зря в семейных архивах рецепты приготовления пирожков на этой печке более напоминали описание технологических режимов работы доменной печи. Предлагалось разогревать 10 минут, потом вставлять противень с исходниками, далее выпекать Х минут с приоткрытой дверцей, потом У минут с полностью открытой, периодически меняя местами противни. Ибо в 1980 году советская инженерная наука не могла предложить советской женщине иного способа регулировки температуры, кроме как открывая дверцу духовки. Юра Гагарин уже 19 лет как на орбите крутился и наша ядрёная бомба была самая ядрёная, но советские хозяйки все продолжали греть планету духовками «Харьков».
Ладно. Ситуация прояснена, цели поставлены, инструменты наточены. Перейдем к технической части.
Программная составляющая
«Я верю во Единого Отца Вседержителя, Творца неба и земли, видимым же всем и невидимым. Имя богу моему Ардуино. Аминь.»
Будучи ревностным прихожанином церкви Ардуиновой, я естественно решил лепить свое детище на этой богоугодной платформе. Ибо и просто и дешево и по ногам подходит. Но об электронной начинке немного позже, а сейчас обратим наши взоры на программную начинку. Скетч, то бишь.
Перед нами стоит следующая задача. Необходимо реализовать следующие функции в контроллере духовки:
- таймер — задание времени работы нашей программы;
- термостат — задание и поддержание температуры на определенном уровне;
- звуковая сигнализация первого выхода на заданную температуру — момент когда пора пироги ставить;
- звуковая сигнализация окончания программы — момент когда пора пироги доставать;
- визуальная индикация режимов работы — что бы понимать что происходит в данный и еще это просто красиво. Индикаторов два – включена программа и включен тэн.
- отображение оставшегося времени работы. Что бы понимать когда пора выделять желудочный сок.
Пошерстив свитки мудрецов на ардуинофорумах, с божьей помощью был сотворен следующий говнокод. Критика не принимается. Кто будет критиковать, тот не получит пирогов.
/*
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 пунктов: «TEMP», «TIME», «START» и «INFO». Что за что отвечает, думаю ясно из фото. При необходимости можно остановить программу, добавить или убавить время или температуру и вновь продолжить.
Естественно, наши настройки сохраняются в энергонезависимой памяти.
Так же была добавлен контроль перегрева духовки и контроль обрыва или порчи термодатчика. При выходе температуры за 250 градусов (залипание реле или какой то неучтенный сбой) или падении температуры ниже нуля (обрыв датчика, в обрыве он показывает – 270 градусов) будет тревога.
Аппаратная составляющая
Для реализации описанного выше функционала нам потребуются следующие компоненты:
- Блок питания 220 – 5 вольт, выдранный из какой то зарядки. Питает всю электронику.
- Arduino pro mini. Кремниевый супермозг, отвечающий за управление нашим детищем.
- Экран монохромный Нокия 5110, разрешением 84*48 точек с небольшой доработкой. Отображает пункты меню, позволяя настраивать температуру, время, включать программу на исполнение и просматривать текущие параметры в процессе работы.
- Энкодер (он же валкодер, он же крутилка). Позволяет в интуитивной форме управлять меню настроек и требует всего одно отверстие в панели управления.
- Реле. Самое обычный модуль реле на 10 китайских ампер. Даже без опторазвязки. Да, риск мое второе имя.
- Термистор в качестве датчика температуры. Когда то мной был выломан из какого то устройства неопознанный термодатчик на резьбе, лежал без дела, теперь стал востребован. Тестирование показало что внутри обычный NTC термистор на 10 ком. То есть все более чем просто и паспортный предел температуры в 250 — 300 градусов соответствует моим задачам. Для уверенности сделал пробный стенд из термистора и цифрового датчика DS18B20. До 100 градусов показывали ноздря в ноздрю и точность более чем избыточная. Любо!
- Световая индикация – пара оранжевых светодиодов. Звуковая индикация — активная пьезопищалка.
Для пущей атмосферности, необходимо допилить экран. По умолчанию, экранчики Нокии 5110 идут или с белыми или с ярко-синими светодиодами подсветки. Белые светодиоды не соответствую запланированному внешнему стилю, а синие вырвиглазные светодиоды будто призваны провоцировать приступы эпилепсии у пользователей и вообще есть творение сатаны, призванные способствовать скорейшему пришествию Антихриста. Выпаиваем и на костер их. Pater noster. Amen.
Далее берем оранжевые smd светододы, призванные имитировать олдскульные лампочки накаливания и впаиваем их вместо штатных, предварительно сняв металлический ободок экрана и сам ЖК экран под ним. Теперь все по фен-шую.
Находим подходящую по размеру пластиковую коробочку с крепежными ушками. В ней размещаем блок питания, ардуинку, пищалку и релюшку. Выводим пару проводов на сетевое питание, пару проводов на термистор и жгут проводов к передней панели к экрану, энкодеру и светодиодам состояния с рассеивателями. Место блока управления – на пузе духовке.
Железная составляющая
При всей своей любви к старой технике, я бы никогда не взялся реставрировать эту духовку если бы не одно но – у меня кухня в стиле прованс и округлый винтажный корпус этой духовки идеально вписывался в интерьер. Поэтому и решено было морочиться.
Снимаем заднюю панель, отогнув 4 крепежных ушка, что бы добраться до задней стенки внутренней полости печки. Вынимаем слой оружия массово поражения под названием «стекловата». Посредине задней стенке внутренней полости сверлим отверстие по размеру стержня термистора, вставляем термистор, закручиваем гайку, выводим провода под корпус, выковыриваем остатки стекловаты, вместо нее напихиваем базальтовую вату и собираем обратно.
Далее готовим панель управления, элементы ручек и трафареты для декора. Никакого пластика, только металл. Так как я не умею чертить в Автокаде, то необходимые мне детали рисую в Фотошопе и конвертирую в dwg формат через какой то облачный сервис. Да, я извращенец, я знаю, мне нравится. Отдаем чертежи на лазерную порезку.
Привариваем приборную панель на запланированное место. Довариваем по бокам недостающие треугольнички, шпатлюем и зачищаем место сварки, максимально создавая видимость сплошной детали. На приборной панели 4 прорези – место под экран, место под энкодер с отверстиями для светодиодов под крутилкой «для красоты» под крутилкой, и фигурные прорези для индикаторов работы и нагрева. Панель из стали толщиной 2 мм, что бы не мало было. «Вес это надежно». Борис Бритва.
Почтенный возраст духовки и многолетнее нахождение в негуманных условиях не могли не оставить следов на ее корпусе. Имели место царапины краски, мелкие вмятинки и очаги коррозии. Одеваем на болгарку щетку-крацовку и максимально зачищаем. Шпатлюем вмятины и дефекты автомобильной шпатлевкой. Снова зачищаем. Обезжириваем.
Далее по покраске. Я не нашел в своей местности возможности заколорировать пентафталевую эмаль в цвета на выбор, посему выбирал из доступных готовых цветов. Была выбрана слоновая кость для основного цвета корпуса и фисташковая для элементов декора корпуса.
Красим, косячим, материмся, убираем потеки, перекрашиваем, опять косячим, клянемся больше никогда не морочиться с подобным, а просто мирно бухать как все нормальные мужики, успокаиваемся, снова красим, остаемся довольны. Ждем неделю пока краска точно высохнет.
Пока сохнет печка, варим в кучу крепления для запирающей ручки двери, чертим эскиз деревянных ручек и отдаем токарю. Красим уже сами ручки и оставляем на просушку. Красим ручку энкодера и металлическую накладку на корпусе экрана.
После полного высыхания корпуса, накладываем трафареты и красим уже фисташковой краской.
Далее приблизительно складываем все в кучу и понимаем что боковые поверхности духовки провокационно пусты и не можем не удержаться что бы не налепить что еще и туда. Но красить через металлические трафареты крайне неудобно из-за подтекания краски под трафарет и необходимости потом кисточкой с сольвентом корректировки рисунка. А трафареты на заказ из оракала не смог заказать из-за отсутствия понимания с «манагером» из рекламного агенства. Посему нашел готовые, подходящие по размеру в инете.
Наклеваем. Красим. Восхищаемся.
Далее собираем все в кучу – устанавливаем экран, энкодер и ручку энкодера. Из ошкуренного оргстекла делаем рассеиватели для индикаторов режимов работы и клеим их снизу приборной панели. Протягиваем и паяем провода модулей и устанавливаем сетевой разьем питания с клавишей включения. Сверлим и устанавливаем держатели для деревянных ручек. На изнанку указателя Open-Close клеим фетр, что бы ручка при вращении не царапала поверхность дверцы.
Далее зовем хозяйку, вручаем ей этот креатив, выслушиваем какой я умный и красивый, и пока ожидаем пирогов, дописываем еще пару строк, обьясняя почему я это сделал именно так, а не иначе.
1. Почему алгоритм поддержания температуры такой тупой, а не PID?
Потому что просто нет необходимости. За стандартную программу работы, 30-40 минут, температура печки всего пару раз переходит целевую точку. Печка небольшая, неплохо утеплена, остывает медленно. PID алгоритму банально негде развернуться. Небольшая температурная инерция имеет место всего один раз при первом наборе температуры и перехлест составляет порядка 20 градусов, что совсем не принципиально для выпечки и удобно нивелируется открыванием дверки в этот момент для закладки противня. Для этого и звучит сигнал выхода на рабочую температуру. Следующая итерация вообще происходит в диапазоне порядка +- 2 градуса.
2. Почему реле, а не симистор и почему не ШИМ?
Все потому же. Симисторы люблю и готовить их умею, но хоть ты тресни не считаю необходимым их пихать в девайс, в котором за полчаса работы реле щелкает аж четыре раза. И при 800 ват мощности, то есть трех амперах тока даже в китайском реле будет достаточный запас прочности. А ШИМу тут вообще нечего делать, не тот уровень устройства. Да и реле это душевно и лампово, а симистор то высокомерие и гордыня. Да и хозяйка более чем довольна, а это и была стратегическая цель. Короче, все.
3. Что еще планируется?
Противни из нержавейки. Ибо в оригинале тут противни из черняшки и если уже такая жара, то и противни должны соответствовать. Позже нарисую и отдам на лазер.
За сим разрешите откланяться, ушел пироги тестировать. Привіт з України.
Комментарии (112)
skymal4ik
07.11.2018 19:37Очень круто и стильно! Мотивирует создать что-то своё, более осязаемое, чем чистый софт))
Ps над светодиодами ничего нету? Я бы поставил матовое стекло, чтобы подсветка более равномерной былаKonstacio Автор
08.11.2018 19:32Светодиоды вставлены в квадратики из ошкуренного оргстекла, приклеенные с обратной стороны панели. Была мысль увеличить количество светодиодов для более равномерного свечения, но тогда надо было бы еще транзисторы, что бы порты ардуинки не перегрузить. Решил что и так сойдет )
Andy_Big
07.11.2018 19:47+1Я бы вместо «OPEN-CLOSE» написал бы «ОТКР-ЗАКР» :)
u010602
08.11.2018 03:13Напомнило жуткие красные надписи трафаретом на стенах в бассейне — «ЗАКРОЙ КРАН!». Нет уж лучше «OPEN-CLOSE».
CKOPOCTb
08.11.2018 20:34ПОРОШОК НЕ ВХОДИ!
vlreshet
07.11.2018 19:47Блин, очень круто!) Кстати, давно хочу сделать похожую вещь, и ардуино даже есть, но не хватает знаний в плане электроники. Может немного подскажете, если не сложно? Задача: есть китайская бутербродница, без какой-либо электроники, тупая до безобразия: стоят спирали, стоит «кнопка» которая нажимается когда бутербродницу закрываешь. После достижения нужной температуры «кнопка» должна отключаться. Но, видимо, что-то в этой конструкции не так, потому что термопредохранитель на 220 градусов я менял уже трижды. Поэтому хочется сделать «умную» бутербродницу — с ручным заданием температуры и временем работы. Вопрос — какой датчик температуры целеобразно использовать (в связке с ардуино)? Температура работы — ну градусов до двухсот, не больше.
Andy_Big
07.11.2018 20:09Если задача — именно довести до ума бутербродницу, а не повозиться с ардуинами, то может быть проще будет купить готовый термостат? :) Типа такого — www.aliexpress.com/item/Free-Shipping-PID-digital-Temperature-Control-Panel-REX-C100-for-BGA-rework-station/1920308843.html
К нему термопару для мультиметра (K-типа) и твердотельное реле :)
Если же хочется самому на ардуине, то выбор термодатчика, в общем-то, очевиден — термистор (например, один из используемых в 3D-принтерах, они продаются на каждом углу и в Китае и у нас).vlreshet
08.11.2018 10:09Чтобы просто довести её до ума нужно поменять ту «кнопку», которая, судя по всему, не отстреливает после нужной температуры, и допускает сгорание предохранителя. Но это же не интересно) Что я, зря ардуину покупал? :D За советы спасибо)
robux
07.11.2018 20:27+1Дивчине косынку надень (в том числе по санитарным нормам).
И ещё замени механическое реле на твердотельное.
А так, молодец )tormozedison
07.11.2018 23:47Не на твердотельное, а на контактор с мостиковыми контактами. Он не залипнет.
Andy_Big
08.11.2018 01:18800 Ватт и твердотельное потянет легко без доп. охлаждения или с небольшим радиатором :) Зато совершенно бесшумно, в отличии от контактора, и управляющий ток мизерный, ардуина напрямую потянет :)
sim31r
08.11.2018 02:38+2Иногда щелкание и полезно, индикация что работает всё хорошо.
Andy_Big
08.11.2018 11:00Реле — может быть, но не контактор в корпусе из тонкого железа :)
Ну и на мой взгляд на такие вещи звуковая индикация должна быть когда что-то плохо, а не когда все хорошо. В проекте для этого все есть, кстати :)sim31r
08.11.2018 15:30У меня 3D принтер, стол нагревается от грелки силиконовой на 220В, мощность 300Вт. Вот, когда отправляю на 3D принтер щелчок включения первый признак что всё в порядке. Там чуть громче нажатия клавиши клавиатуры. Плюс когда принтер завис, или сам вручную послал команду прогрева стола (типа заранее прогрею и на минуту быстрее напечатаю всё), а потом забыл, щелкание признак того что устройство зря стоит нагретым. Даже купил электронное реле, но
лень менятьпривык к механическому реле ))Andy_Big
08.11.2018 17:49У меня тоже принтер, стол греется от 12 вольт (около 360 Ватт) ШИМом через мощный MOSFET. Сама плата принтера тоже коммутирует стол транзистором, но менее мощным, что-то около 150 Ватт в оригинальной конструкции. Не испытываю никаких неудобств от отсутствия щелчков :)
Там чуть громче нажатия клавиши клавиатуры.
Вы слышали как срабатывают предлагаемые в том комментарии контакторы? Я Вас уверяю — если бы у Вас в принтере стоял контактор, Вы бы очень быстро поставили купленное электронное реле вместо него :)
К тому же механические реле (китайские) — менее надежная штука чем твердотельные реле (тоже китайские).sim31r
09.11.2018 00:39Твердотельное реле может пробиться даже в выключенном состоянии, от мощной сетевой помехи. Реле или не включится (если обмотка реле сгорит) или залипнет после включения под минимальным наблюдением.
Реле работает не на индуктивную нагрузку, износ минимальный. В обогревателях биметалические пластинки могут более 10 лет работать, на токах существенно больших.
А если реализовывать ШИМ, то, конечно, только электронное реле применимо.Andy_Big
09.11.2018 01:07Твердотельное реле может пробиться даже в выключенном состоянии, от мощной сетевой помехи
Может, но шансов на это меньше, чем у китайского реле — залипнуть :) Вот если реле от какого-нить Omron, тогда другое дело. У меня 8 из 10 реле условного «ДжиньШунь» отказали в течении года, при том, что коммутировали они вообще сигнальные линии. А вот штук 8 твердотельников того же условного «СяньМинь» (но с гордой надписью OMRON, конечно же) работают уже пару лет.sim31r
09.11.2018 01:26А с какой частотой коммутировали линии? Если 1-2 раза в секунду, то мало какое реле долго проживет. Может во включенном состоянии долго были, а обмотка рассчитана на меньшее напряжение или бракованная и перегревается. В моем случае включения редки, как и нахождение во включенном состоянии, практически идеальный режим работы для реле.
Andy_Big
09.11.2018 02:52Включение-выключение — несколько раз в день, может быть 20-50. Во включенном состоянии могли и долго находиться, до одного часа. Реле герметичные слаботочные, обмотка на 5 вольт запитывалась примерно 4.8 вольтами, ток около 40 мА. Но с обмоткой все нормально, выходили из строя контактные группы — большинство переставали замыкать, а остальные залипали, причем точно не из-за нагрузки — они коммутировали единицы миллиампер при 3-5 вольтах :)
Где-то у меня так и лежат несколько пеналов по 25 штук этих реле, потому что после того как почти все девайсы с ними вернулись по гарантии, я перешел на такие же реле от Omron. Вот с ними за 5 лет ни одной проблемы :)
iig
07.11.2018 21:59Результат эстетически прекрасен. Программа не очень, но это и не особо важно, добавлять туда особо нечего. Хотя, если захочется добавить, к примеру, менюшку с предустановленными настройками для эклеров, тут захочется и pid-регулятор, и половину кода переписать..
maksimrep
07.11.2018 23:47+1Шикарно! У меня такая. Когда съезжал от родителей на свою съемную квартиру, на чердаке откопал сие чудо что бы печь пироги. Тогда, я ее всю почистил от ржавчины и покрасил жаростойкой краской, теперь видимо еще и апгрейт сделаю))). Кстати, кому интересно, буквально на днях делал в ней коржи для торта =D
USBLexus
08.11.2018 01:53Но что делать, когда речь идет о вещи, которая помнит несколько поколений твоей семьи и с детства была для тебя воплощением домашнего уюта, бабушкиных вкусностей и всего самого «лампового»
После переделки уже мало что напоминает былую ламповость, исходный девайс почти не узнается
alakond
08.11.2018 02:02«Схема подключения» энкодера странная. Вы GND с VCC нигде не перепутали?
Konstacio Автор
08.11.2018 19:36Вроде нет. Работает нормально.
alakond
08.11.2018 19:56Проверьте ещё раз ) По вашей схеме на энкодер подается только GND. VCC никак не подается. Не будет кнопка энкодера работать без подтяжки к VCC.
sim31r
09.11.2018 00:41+1Там Pull Up резисторы включены встроенные в микроконтроллер:
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A4, INPUT);
…
digitalWrite(A0, HIGH); //валкодер
digitalWrite(A1, HIGH); //валкодер
digitalWrite(A2, HIGH); // валкодер
Andy_Big
08.11.2018 19:57+1Если входы контроллера подтянуты внутри к питанию (Pull-UP), то вполне нормальная схема :)
sim31r
08.11.2018 02:50if (temp_itog > (Temp + 1)) {
heat = false;
if (first_heat) { // при первом достижении рабочей Т подаем сигнал
first_heat = false;
...
Вот тут же можно сделать, чтобы при первом нагревании отключения тэна произошло на 20 градусов ниже, и звуковой сигнал тоже подать на 20 градусов ниже. Если пироги уже в духовке не будет перегрева. А если по сигналу пироги отправляются в печку, то он прозвучит раньше, экономя хотя бы пол минуты времени.
После сигнала можно отключить нагреватель на 30 секунд, чтобы переходные процессы установились и далее работа без изменений.
Не нужно ни переменных новых вводить, ни алгоритм менять, только несколько строк кода. Первый запуск и так отрабатывается отдельно, еще добавить эту особенность и будет вообще почти идеальная работа.
Еще можно поставить аппаратный тепловой предохранитель на 300 градусов, который бы отключал всё, если вдруг микроконтроллер зависнет, реле заклинит, тиристор пробьется…
Если сделаете поддержку низких температур, от 40 градусов, там можно будет сушить фрукты-овощи-орехи. Да и телефон я пару раз сушил в духовке при 40-70 градусах (без аккумулятора), отлично справилась.
REPISOT
08.11.2018 06:05Имя богу моему Ардуино. Аминь.»
Ардуинопоклонники.Process0169
08.11.2018 12:55Мне кажется ардуинопоклонникам нужно создать и зарегистрировать свою церковь, чтобы попадать под защиту закона об оскорблении чувств верующих :)
Cyrill
08.11.2018 06:54+2При потере датчика температуры, помимо алярмы, хорошо бы отключаться. Ну ладно, хотя бы по перегреве.
olartamonov
08.11.2018 12:19+1Термопредохранитель надо поставить, который при перегреве просто рвёт 230 В физически — типа www.quartz1.com/price/model.php?group=4703&ext=2701 (а ещё лучше найти такой же, но с кнопкой — он при перегреве один раз отщёлкивается, а обратно включается только после физического нажатия кнопки).
А от софта достаточно алярмы, полагаться в таких вопросах на софт всё равно нельзя.sim31r
08.11.2018 15:33+2Там более не увидел в софте включение сторожевого таймера WDT, он в микроконтроллере есть.
olartamonov
08.11.2018 18:09+1На софт нельзя независимо от таймера, мало ли что там с микроконтроллером случится.
В печках/котлах/etc. всегда ставят два независимых канала контроля — основной и аварийный, в совсем ответственных применениях даже три — основной, резервный и аварийный.
Konstacio Автор
08.11.2018 19:40Вы абсолютно правы. Но в местных радиомагазинах термопредохранителей с температурой выше 200 градусов просто не было на момент изготовления. При случае, обязательно закажу и смонтирую.
mikelavr
08.11.2018 07:10Очень удивился, не увидев в техзадании на доработку пункта WiFi или BT4.0/BLE :-).
Доработки корпуса, стальные панели — великолепно! И это точно лучше, чем бухать.spc
08.11.2018 17:55+1Тогда это уже даже не Xiarkiv, а просто Xiaomi получится. К тому же Wi-Fi сам пироги в печь не положит, зачем множить сущности?
sim31r
09.11.2018 00:44Ну хлебопечка тоже сама тесто в себя не положит. Но некоторым нравится когда с утра свежая еда, приготовленная точно к моменту пробуждения )
spc
09.11.2018 01:00Да, но там уже есть Arduino, поэтому, как мне видится, таймер отложенного старта/времени приготовления впендюрить — вопрос желания и надобности. Необязательно же ради этого связку со смартфоном городить.
RinonNinqueon
08.11.2018 08:48Сделано очень красиво. Даже не хочется возмущаться, что сделано на ардуино/модулях/все_ленивые.
Сколько в итоге % флешки занято?
juray
08.11.2018 10:29Классная доработка, сам давно о такой думаю, но всё руки не доходят (сапожник без сапог, как обычно).
Надо сказать, у меня завалялась почти такая же, единственное отличие — заслонки на дверце нет. И пожалуй, постарше, чем 80-й год, она у нас в начале 80-х появилась уже в состоянии «сильно б/у», и мне даже довелось ее ремонтировать на уроке труда в начальных классах. Дали задание притащить какой-нить неисправный электроприбор — настольную лампу там, утюг… а я эту дуру притарабанил. Надо сказать, внутри у нее не ТЭНы, а нихромовая спиралька (как в старых электроплитках), обмотанная вокруг внутренней камеры. Разумеется, с керамическими изоляторами. Теплоизоляция — асбестовый картон, так что во время выпечки еще можно что-то разогревать прямо на корпусе.
Жарит она действительно огого, я в ней как-то попробовал слегка обжечь поверхность неких деревянных резных поделок (раньше я это делал термофеном или слабенькой горелкой). Чуть зазевался — изделия превратились угольки.
Так вот, давно вынашиваю мысль вот так же доработать её до нормального регулируемого термошкафа — не кулинарного а технологического (в будущем даже с термопрофилями, но это уже программные усовершенствования). Я думал разместить панель управления вертикально между передними ножками, но ваш дизайн куда лучше.
А для кулинарных целей у меня имеется другая кандидатура на подобную доработку — дешевенькая двухтэновая духовка с механическим таймером и люфтящим регулятором мощности:
Romario1974
08.11.2018 10:31Типичная задача для ардуино, использовать его как PLC для автоматизации железа. Сделано супер, впечатлили вырезаные лазером символы с подсветкой.
alexhott
08.11.2018 10:48У меня у мамы такая духовка с 80-х годов
Но она родилась с терморегулятором
До сих пор все работает, а сколько вкуснятины из нее мы съели…
Описанную автором пользовали в общаге всей секцией по очереди. Алгоритм выдержек по времени приходилось строго соблюдать, иначе еда получалась с дымком.
tvr
08.11.2018 11:28+1Юра Гагарин уже 19 лет как на орбите крутился
Т.е.письма родственников нигерийских космонавтовМеня зовут Бакаре Тунде, я брат первого нигерийского космонавта, майора ВВС Нигерии Абака Тунде. Мой брат стал первым африканским космонавтом, который отправился с секретной миссией на советскую станцию «Салют-6» в далеком 1979 году. Позднее он принял участие в полете советского «Союза Т-16З» к секретной советской космической станции «Салют-8Т». В 1990 году, когда СССР пал, он как раз находился на станции. Все русские члены команды сумели вернуться на землю, однако моему брату не хватило в корабле места. С тех пор и до сегодняшнего дня он вынужден находиться на орбите, и лишь редкие грузовые корабли «Прогресс» снабжают его необходимым. Несмотря ни на что, мой брат не теряет присутствия духа, однако жаждет вернуться домой, в родную Нигерию. За те долгие годы, что он провел в космосе, его постепенно накапливающаяся заработная плата составила 15 000 000 американских долларов. В настоящий момент данная сумма хранится в банке в Лагосе. Если нам удастся получить доступ к деньгам, мы сможем оплатить Роскосмосу требуемую сумму и организовать для моего брата рейс на Землю. Запрашиваемая Роскосмосом сумма равняется 3 000 000 американских долларов. Однако для получения суммы нам необходима ваша помощь, поскольку нам, нигерийским госслужащим, запрещены все операции с иностранными счетами. Вечно ваш, доктор Бакаре Тунде, ведущий специалист по астронавтике.Mladolaborant
08.11.2018 11:49Добрый день. А традиционный двухручечный интерфейс «температура/выдержка» вами не рассматривался? Как у такого девайса:
klirichek
08.11.2018 14:09-1А я бы тупо влепил биметаллическую термуху от старого утюга!
А на ардуине — либо термометр с "пищалкой" (без всякого касания силовой части вообще), либо может быть ещё реле времени.
namikiri
08.11.2018 14:18Очень крутая и аутентичная штука вышла!
А я бы всё же поставил вместо скучного и модного ЖКИ крутой и ламповый электролюминесцентный индикатор, японцы делают даже матричные, например.u010602
08.11.2018 16:01+1За 200-300 баксов (цены по вашей ссылке) можно купить крутую современную духовку, или запас пирожков на всю жизнь.
lorc
08.11.2018 14:26Осталось таки добавить ПИД, поддержку термопрофилей и можно будет паять платы на дому.
quartz64
08.11.2018 15:13Замечательный проект. А лазерную резку где заказывали, если не секрет? Не могу уже два дня найти сервис: либо опт с большой суммой минимального заказа, либо просто не отвечают на запрос.
Konstacio Автор
08.11.2018 19:48По соседству находится пром зона, где просто россыпь аргонщиков, ЧПУшников, токарей и в том числе маленький цех металлообработки с лазером. Точно знаю что в нашем городе на 300 тысяч населения таких «технопарков» несколько.
gerasimenkoao
08.11.2018 15:22Прекрасная работа, в которой прежде всего восхищает умение работать руками.
sim31r
08.11.2018 15:50Ибо в 1980 году советская инженерная наука не могла предложить советской женщине иного способа регулировки температуры, кроме как открывая дверцу духовки.
А там точно нет отрицательной обратной связи по температуре? Возможно биметаллическая пластинка, которая разрывает цепь 220В при нагреве. Со временем могла испортится просто. Это типичное инженерное решение в те годы:
Электродуховка ссср
Да и сейчас часто встречается. А лайф хак с открытой дверцей, возможно, уже придумали чтобы не чинить духовку.
Если бы изначально не было регулятора, думаю хотя бы мощность ограничили бы до 300Вт, чтобы температура не уходило в далеко не кулинарные значения.
Кстати еще есть идея, после разогрева питать духовку через диод. Через диод мощность нагревателя упадет до 400Вт и улучшится точность поддержания температуры, и реле будет реже включаться-выключаться. Из минусов решения нужно 2 реле…u010602
08.11.2018 16:49Я думаю подключать такую нагрузку через диод — дурной тон. Лучше сделать трансформатор понижающий или две спирали.
sim31r
09.11.2018 00:51В подъездах же подключают и ничего страшного не происходит. Самый простой способ снизить действующее напряжение. При наличии других вариантов, конечно не желательно. Но если конструкция не позволяет ставить 2 спирали то почему бы и нет?
Трансформатор на 800 Вт сравним со сварочным аппаратом будет.
Тиристоры и ШИМ могут дать помеху такой мощности, что лучше уже диод. Ну как вариант низкочастотная ШИМ, с частотой менее 1 Гц и электронным реле.
Еще можно дроссель использовать для снижения тока через нагрузку, но опять же размеры будут значительными. Как и у автотрансформатора.juray
09.11.2018 13:30В подъездах — лампочка 100 Вт, плюс-минус. Хотя если все этажи просуммировать — то как раз несколько сотен ватт и набегает.
Для мощных нагревателей с большой тепловой инерцией все-таки двухпозиционное регулирование (включать-выключать при пересечении порога) вполне достаточно. И при фиксированном пороге биметаллический термовыключатель — самое простое и дешевое решение. Непонятно, почему в этой печке такого не ставили (в моей аналогичной его тоже не оказалось).
ШИМ или ФИМ для нагревателя совершенно избыточны (из-за той ж инерции), а проблемы лишние создают (помехи). Оптимальное управление мощностью нагревателя — таки долгопериодное включение-выключение, с привязкой моментов коммутации к пересечению ноля. И это скорее, не широтно-импульсный, а число-импульсный метод получается, то есть включение на целое число полупериодов-«импульсов».sim31r
09.11.2018 15:23а проблемы лишние создают (помехи)
Кроме помех механическое разрушение спиралей. Если тиристором включать на половине сетевой волны, резкое нарастание тока di/dt вызывает «звон» спиралей нагревательных и механическое разрушений. Я даже в лампочке слышу звон при работе диммера, спираль дергается 100 раз в секунду и вибрирует на своей резонансной частоте.
u010602
10.11.2018 19:07В подъездах давно уже светодиоды, но даже если рассматривать такой аргумент, то там лампочек много, и направление диода — разное, и фаз несколько. В итоге влияние низкое. А тут почти 1квт, да внутри квартиры.
Konstacio Автор
08.11.2018 19:51Точно никакой регулировки нет и не было изначально, поскольку такие духовки были почти у всех родственников, и у всех изначально был почти один и тот же подход к уменьшению температуры.
bougakov
08.11.2018 16:34+1критически не хватает железного термопредохранителя, который будет рвать цепь 220В при перегреве. И watchdog для Ардуины, а то от искрения в реле она может словить помеху и зависнуть.
torkve
08.11.2018 18:53И watchdog для Ардуины, а то от искрения в реле она может словить помеху и зависнуть.
Вот так, читая про духовку, я узнал, как чинить свой холодильник)bougakov
08.11.2018 19:35Холодильник — не страшно. У меня был опыт попытки «пересадки мозга» посудомоечной машине — плата выгорела, запчастей не было и я решил применить Ардуину, но постоянно нарывался на зависания. Когда в один момент вдруг увидел, что МК завис после включения ТЭН и тот уже стал ярко-малиновым, свернул эксперимент и пошёл в магазин за новой посудомойкой.
ikirin
08.11.2018 17:16+1и кататься я буду все таки на современном велике ибо отбивать почки не хочется
Не понял я как на нем кататься, но есть подозрения, что почки отобьешь в последнею очередь…
DmitryShagin
08.11.2018 22:41Ещё немного доработать и после пирожков можно запекать печатные платы по термопрофилю :)
odissey_nemo
09.11.2018 14:32Да, красиво сделано в пост-СССР.
Жаль только, что из отечественных материалов в этой поделке ничего нет, что нельзя было бы сделать и в СССР. Т.е. пост-СССР никуда сам так и не продвинулся. Да и Юра Гагарин, будучи рождённым в пост-СССР вместе С Королёвым, не полетел бы никуда. Т.к. и Королёва бы не было. Зачем? Когда всё уже придумано в Китае? Который, если кто забыл, учился именно у СССР. Это и есть диалектика, а не досужие личностные измышления.tvr
09.11.2018 14:40Какой глубокий философски-пятничный комментарий, раскрывающий всю глубину, нет, даже больше — трагическую бездну, вскрытую в обсуждаемой здесь статье.
odissey_nemo
10.11.2018 03:12Ирония здесь неуместна. Смешное — оно всегда слишком уж на поверхности чего-бы то ни было. Возразите по существу, а не по подсознательноым ощущениям правоты СМдезИ.
Dvlbug
Одно из немногих статей про Ардуино, в которой нет метеостанции))
PS. Хозяйка не замужем? ;) Только ради этого и был написан комментарий.
sidristij
Скорее даже так: а жена не замужем, случаем? :)
SpiritEagle
Ну, теоретически, если выставить духовку на балкон с приоткрытой дверцей и вывести на экран температуру с датчика, то вполне себе и может послужить метеостанцией :-).
А автор молодец — очень полезная статья лично для меня, да и, думаю, для многих, кто интересуется Arduino.
sim31r
С закрытой дверцей будет среднесуточную температуру показывать, иногда полезно, для управления котлом например ))