Часть первая: Лирическая. Отвечает на вопрос «ЗАЧЕМ?»
В этом году яблок у меня будет
дону очень много! Да и остальное плодово-ягодное уродилось на даче неплохо. И, если раньше мне прекрасно хватало урожая для удовлетворения годовой потребности в чаче, граппе, кальвадосе и в остальных источниках витаминов и хорошего настроения, то в этом году на яблонях просто северный зверь, как много яблок. А столько бочек для замачивания этого добра у меня нет, да и, пожалуй, здоровья потом не хватит. В общем, решил я начать сушить.
Первым делом заказал я себе сушилку довольно внушительного, для непромышленного производства конечно, объема на 5 лотков с теном на полкиловатта. Сушилка пока едет, но, у нее, помимо таких достоинств как простота, регулируемая мощность и обилие хороших отзывов есть одно слабое место. Как и у большинства подобных аппаратов у нее нет таймера обратного отсчета или, по-народному, реле времени. А эта штука для сушилки ну весьма нужная. Посудите сами: при разных режимах сушки и разных продуктах время сушки может доходить до 2-х суток! Т.е. процесс сушки может закончиться в самое неожиданное время – ночью, например, или, когда мы на работе. Кто выключать будет?
Простой выход есть – купить реле времени в виде розетки с возможностью программирования времени коммутации. Но не все так просто. Я живу в небольшом городке и всяких Икей, Ашанов и прочих Мерлин Монро у нас нет в принципе, а есть только армяне, активно торгующие только самыми ходовыми товарами типа лампочки Ильича. Значит – заказ с Али или Ебея. Но урожай-то – вот он, а где Китай и наша быстрая почта? Вот то-то и оно…
Перелом стопы, штука конечно не очень. Гипс, очереди к врачу, ходишь как зомби из С.Т.А.Л.К.Е.Р.- а. А с другой стороны – не надо полтора месяца ходить на работу, ничего не болит, полные холодильники пива от любящей жены, ящик волжской воблы (посылка от мамы) и, опять же, чемпионат мира по футболу… В общем, плюсы свои есть, и, главное – времени свободного уйма. Да и загашники им. Плюшкина наполнились за столько лет шопинга в Китай-магазинах не слабо.
Вот, вроде все сложилось, чтобы самому попробовать сделать реле времени для сушилки и далее я расскажу о результате и покажу его.
Часть вторая: Практическая. Отвечает на вопрос «КАК?»
Для начала я определился с задачами. Реле должно обладать возможностью задавать независимо часы и минуты, отображать остаток времени в процессе работы, коммутировать ток, достаточный для сушилки, выдавать сигнал по окончании работы, быть по возможности, компактным, удобным и, разумеется, недорогим по бюджету.
Поскольку я часто в последнее время работаю с ардуино, то выбор платформы для меня был очевиден -Arduino Pro Mini в самом дешевом варианте на чипе Atmega 168, с рыночной стоимостью в
районе $1.5. Мне-же эти ардуинки в свое время вообще обошлись в полцены, поскольку хитрый прод горсть заказанных 328-х обильно разбавил 168-ми и, пойманный за руку, не торгуясь, вернул половину суммы.
В качестве устройства отображения отлично подошел дисплейчик на TM1637 с высотой цифр 0.36”, найденный в запасах и продающийся сейчас на ебее
центов по 80. Данный дисплей изначально заточен на отображение времени, поэтому для моей цели вписался прекрасно.
Для силовой коммутации я применил самое популярное одноканальное реле SDR-05VDC-SL-C, предлагаемое на
ebee по полбакса за штуку. Но тут у меня сначала возникли сомнения – потянет ли? Хотя на нем и написано: 10A 250VAC, что-то я засомневался в способности этой малютки держать не то, что 2.5, а даже нужные мне полкиловатта. Пришлось обратиться к гуру электроники и наш уважаемый
Ksiman развеял мои сомнения, поручившись за эту релюху.
В качестве устройства для подачи сигнала по истечении заданного времени я использовал пьезопищалку, кои ныне продаются
дешевле бакса за пяток. Громкость сигнала у нее примерно, как у сигнала микроволновки, впрочем, думаю, там примерно такие и стоят.
В качестве питания для ардуины, как ни странно, подошел маленький и исключительно поганый БП 220VAC-5VDC, купленный еще во времена оные за компактность и валяющийся без дела по причине нежелания ардуино-девайсов работать с таким мерзким питанием. Однако, к моему удивлению, с моим текущим набором компонент эта гадость подружилась отлично.
Наконец я и подошел к самому интересному – устройству ввода. Как осуществлять ввод быстро, безошибочно, с максимальным комфортом, не городя при этом многокнопочных панелей? И вот тут своего звездного часа дождался наконец энкодер KY-040, о существовании которого я когда-то узнал тут-же на муське, тогда-же его заказал и у меня давно чесались руки познакомиться с этим девайсом поближе.
На фото один из двух энкодеров, полученных мной с алиэкспресса еще в конце зимы. Цену видно на скриншоте заказа, сейчас они стоят чуть дороже, но стоимость также измеряется в центах. Что такое энкодер, объяснять, думаю, не надо. Ежедневно каждый из нас пользуется колесиком мыши. Особенностью же данного энкодера является наличие встроенной кнопки, срабатывающей при нажатии на торец вала сверху вниз. Кнопка без фиксации. Поворот вала на один шаг сопровождается легким, но вполне ощутимым щелчком и таких шагов здесь всего 30 на один полный поворот вала.
Посмотрим на пины энкодера поближе. Кроме питания + и GND видим пины CLK, DT и SW. Пин DT, при вращении вала, выдает простую последовательность 0 и 1 и служит для подсчета количества шагов, на которое вал поворачивается. А вот пин CLK позволяет определить направление вращения, для чего его значение нужно сравнить со значением на пине DT. Ну а пин SW и есть та самая пресловутая кнопка.
И как же, спросите вы, можно одним энкодером реализовать весь функционал по управлению реле? Можно. Но для этого я программным способом расширю возможности кнопки – введу понятия «короткое нажатие» и «длинное нажатие». Поэтому пора собирать стенд и приступать к моей любимой части любого проекта – программированию.
В качестве мозга для стенда я предпочитаю arduino UNO за большое количество доступных без макеток пинов, как пап, так и мам, наличия напряжений 5V и 3.3V и высокую скорость загрузки скетчей. При этом сохраняется полная совместимость с arduino Pro Mini, поскольку UNO базируется на том же самом чипе Atmega 328.
Схему подключения рисовать смысла нет, поскольку все подключения пинов расписаны в головном блоке программы. Ну и не забываем энкодер, дисплей и БП подключить к VCC и GND ардуино, соблюдая полярность. Прежде чем перейти к скетчу, хочу обратить внимание на то, что в качестве счетчика времени будет использоваться внутренний таймер ардуины. Да, это не такой точный таймер, как, например, DS3231 и я провел эксперимент, в результате которого выявилась ошибка в 2 сек на каждый час. Т.е. за 10 часов накопится ошибка в 20 сек. Для моих целей это несущественно и поэтому ставить точный сторонний таймер было бы экономически нецелесообразно. К тому-же я уверен, что тем-же механическим таймерам и такая точность не по-плечу.
Скетч
// © Klop 2018
// Реле времени для часов/минут
// погрешность ~ 2 секунды в час
#include <TM1637Display.h>
#include <TimerOne.h>
#include <Encod_er.h>
#define CLK 4 // пин 4 подключаем к CLK дисплея
#define DIO 3 // пин 3 подключаем к DIO дисплея
#define pin_DT 9 // пин 9 подключаем к DT энкодера
#define pin_CLK 2 // пин 2 подключаем к CLK энкодера
#define pin_SW 12 // пин 12 подключаем к SW энкодера
#define pin_Relay 7 // пин 7 подключаем к реле
#define pin_Speaker 11// пин 11 подключаем к + пищалки ( - пищалки на землю)
#define NotPush 0
#define ShortPush 1
#define LongPush 2
#define DurationOfLongPush 2000 // длительность длинного нажатия
#define interval 250
Encod_er encoder(pin_CLK, pin_DT, pin_SW);
TM1637Display display(CLK, DIO);
byte cyfra[]={63,6,91,79,102,109,125,7,127,111};
byte data[] = {0,0,0,0};
byte mask=15, Hour=0, Minut=0, flsvet, zn, Signal=0;
unsigned long TimeOfPush, tempu, TimerSec=0, mycounter=0, temp1, temp2;
bool dvoet, myfl=false, ModeArbeiten=false, UkazHM=true, flEND=false;
int8_t VAL;
struct myMerz
{word freq;
unsigned long temp;
bool flsvet;
};
myMerz trig[]={{500,0,false}, // интервал мерцания двоеточия при работе
{200,0,false}, // интервал мерцания минут и часов при задании времени
{1000,0,false}};// интервал прерывания сигнала при окончании работы
void setup()
{ Timer1.initialize(interval); // инициализация таймера 1, период interval мкс
Timer1.attachInterrupt(timerInterrupt, interval); // задаем обработчик прерываний
display.setBrightness(1);
pinMode (pin_DT,INPUT);
pinMode (pin_CLK,INPUT);
pinMode (pin_SW,INPUT);
pinMode (pin_Relay,OUTPUT);
digitalWrite(pin_Relay, HIGH);
digitalWrite(pin_SW, HIGH); // подтягиваем к 5V
TimeOfPush=0;
delay(100);
encoder.timeLeft= 0;
encoder.timeRight= 0;
}
//------------------------------------------------------------
// обработчик прерывания
void timerInterrupt() {
encoder.scanState();
if (ModeArbeiten)
{tempu++;
if (tempu==4000) {tempu=0; mycounter++;}
}
}
//------------------------------------------------------------
void View()
{ // byte h=Hour; byte m=Minut; //для любителей видеть неполные мин (править ниже Hour и Minut на h и m)
// if (ModeArbeiten && mycounter>0) {m++; if (m==60) {m=0; h++;}
data[0]=cyfra[Hour/10];
data[1]=cyfra[Hour%10];
data[2]=cyfra[Minut/10];
data[3]=cyfra[Minut%10];
for (byte i=0;i<4;i++) if (!bitRead(mask,i)) data[3-i]=0;
if (dvoet) data[1]= data[1]|0x80;
display.setSegments(data);
}
//------------------------------------------------------------
bool procmerz(byte num)
{ unsigned long tempmillis=millis(); // триггер переключается с периодом из trig
if (tempmillis-trig[num].temp>trig[num].freq)
{ trig[num].temp=tempmillis;
trig[num].flsvet=!trig[num].flsvet;
}
return(trig[num].flsvet);
}
//------------------------------------------------------------
byte mypush() // возвращает длинное-2, короткое-1 или осутствие нажатия-0
{ unsigned long tpr=millis();
byte res=NotPush;
if (!digitalRead(pin_SW))
{ if (TimeOfPush==0) TimeOfPush=tpr; else
if (tpr-TimeOfPush>DurationOfLongPush && !myfl)
{ TimeOfPush=0;
myfl=true;
return(LongPush);
}
} else
{ if (TimeOfPush>0 && !myfl) res=ShortPush;
TimeOfPush=0;
myfl=false;
}
return(res);
}
//------------------------------------------------------------
int8_t norm(int8_t aa, byte dob, byte mf) // делаем аа в пределах mf, начиная от dob
{
if (aa>mf) return(dob);
if (aa<dob) return(mf);
return(aa);
}
//------------------------------------------------------------
void Sec2HourMin()
{
Hour=(TimerSec-mycounter)/3600;
Minut=(TimerSec-mycounter)%3600/60;
}
//------------------------------------------------------------
void loop()
{
dvoet=true;
zn=procmerz(1);
mask=15;
unsigned long tempx=millis();
if (procmerz(2) && flEND && tempx-temp2<10000L) analogWrite(pin_Speaker,150); // издаем звук
else analogWrite(pin_Speaker,0);
byte rrr=mypush();
if (rrr!=NotPush) // произошло нажатие
{ flEND=false;
if (rrr==ShortPush) UkazHM=!UkazHM; // короткое
if (rrr==LongPush) {ModeArbeiten=!ModeArbeiten; // длинное
if (ModeArbeiten) { mycounter=0; // запуск таймера
TimerSec=Hour*3600L+Minut*60L;
tempu=0;
if (TimerSec==0) ModeArbeiten=false;
else digitalWrite(pin_Relay,LOW);
} else
{ digitalWrite(pin_Relay,HIGH);//отключаем реле принудительно
Hour=0;
Minut=0;
}
}
}
if (ModeArbeiten) // режим работы
{ dvoet=procmerz(0);
if (TimerSec==mycounter) { ModeArbeiten=false; // отключаем реле по времени
digitalWrite(pin_Relay,HIGH);
temp2=tempx;
flEND=true;
}
Sec2HourMin();
} else // режим установки времени
{if (UkazHM) { if (zn) mask=B0011;
Hour=norm(Hour+VAL,0,99);
}
else {if (zn) mask=B1100;
Minut=norm(Minut+VAL,0,59);
}
if (tempx-temp1<500) mask=15; // не моргать при вращении энкодера
}
VAL=0;
if (encoder.timeRight!=0) // обрабатываем повороты энкодера
{ VAL=1;
encoder.timeRight=0;
goto m1;
} else
if (encoder.timeLeft!=0)
{ VAL=-1;
encoder.timeLeft=0;
m1: temp1=tempx;
flEND=false; // при любом повороте отключаем сигнал
if (!digitalRead(pin_SW)) VAL=0; // если кнопка нажата, поворот игнорить
}
View();
}
В скетче используются 3 дополнительные библиотеки:
Encod_er.h,
TM1637Display.h,
TimerOne.h
Основные моменты скетча я снабдил комментариями.
Поясню вкратце логику работы.
При подаче питания мы увидим на дисплее нули на месте часов и минут, причем часы быстро мигают. Это означает, что именно часы находятся в режиме редактирования и поворот вала энкодера приведет к изменению их значения. Короткое нажатие на энкодер переключит нас с часов на минуты. Коротким считается нажатие кнопки на время менее 2 сек и отрабатывается по отпусканию кнопки. Значения часов меняются с 0 до 99 по кругу, значения минут с 0 до 59 аналогично. Для комфортного выставления времени, во время вращения вала, изменяемое значение не мигает. В режиме редактирования времени двоеточие горит постоянно. Нажатие кнопки и ее удерживание более 2 сек считается длинным нажатием и автоматически наступает после 2 сек удерживания кнопки, отпускание может произойти когда угодно потом. Но пока не будет отпущена кнопка, следующего нажатия не произойдет. Итак, длинное нажатие стартует реле времени, если оно находилось в режиме редактирования времени или принудительно отключает его, если то находилось в режиме работы. Во втором случае оставшиеся часы и минуты обнуляются. В режиме работы на дисплее выводится оставшееся время, двоеточие мигает с периодом 1 сек. В этом режиме реле не реагирует на вращение вала и короткие нажатия. По истечении заданного времени реле отключается и на протяжении 10 сек выдается прерывистый сигнал об окончании работы. Если во время сигнализации повернуть вал энкодера или нажать на него, сигнал снимается. Если при нажатой кнопке повернуть вал, ничего не произойдет, поэтому случайно сбить время во время длинного нажатия не получится.
Все отлажено и проверено. Заливаем полученный скетч в arduino Pro Mini и паяем всю конструкцию.
Почему компоненты не на плате? Потому, что я решил все это дело разместить в распределительной коробке, оказавшейся у меня в загашнике. Тщательно все изолируем и помещаем в эту коробку. Все встало довольно плотно, для надежности я зафиксировал элементы термоклеем.
Для пьезопищалки просверлил отверстие и вклеил пищалку точно напротив него. На вал энкодера насадил маховичок из загашника. С одной стороны в коробку заходит провод с вилкой, с другой провод с розеткой. В итоге получился такой удлиннитель с реле времени посередине. Во время многочасовой работы нагрева не зафиксировано.
В конце обзора короткое видео работы реле:
В итоге, благодаря использованию энкодера KY-040 я получил довольно удобное управление для реле времени и заказал себе еще пару на будущее.
А реле этот урожай конечно отработает и перейдет на ПМЖ в гараж, где этому колхозу самое место ). Там у меня электрокоптильня с теном 700W, которая используется круглогодично. И тоже без реле времени.
Многими учеными неоднократно доказывалось умение комаров прокалывать пространственно-временной континуум на дистанции не менее двух метров. Вот он был в районе лампочки… Бац! И он уже заходит в атаку на твою мягкую шкурку.
Вот во время мгновенного перемещения по проколу, комар не подвержен влиянию никаким средствам уничтожения извне.
А отстрел комара непосредственно вблизи объекта его атаки, т.е. твоей шкурки, чреват повреждениями шкурки. Что не есть good.
чем пока пользуются мутоцеклисты (Att, я — предупредил!;)
с желающих избавиться от комаров — брать денег;
с желающих пострелять по чужим комарам — брать денег;)
Единственное, что я бы сделал иначе — перенёс бы ручку энкодера на одну поверхность с дисплеем. В нынешнем исполнении нажимать на кнопку кажется весьма неудобным.
Внёс себе в закладки, на будущее..-свой выращенный табак сушить буду..(-разумеется, подогнав параметры под оный).Ну, и прочие «деликатесы» из сада-огорода.
ps ещё кто-то помнит фильм?
Резюме:-попытка повсюду выглядеть остроумным превращает некоторых особей в заурядных «абырвалг»ов… ;-)
ru.aliexpress.com/item/CN101A-AC-12V-Digital-LCD-Power-Timer-Programmable-Time-Switch-Relay-8A-TO-16A-CN101-TIMER/32652166624.html
или отсюда
ru.aliexpress.com/af/%25D1%2580%25D0%25B5%25D0%25BB%25D0%25B5-%25D0%25B2%25D1%2580%25D0%25B5%25D0%25BC%25D0%25B5%25D0%25BD%25D0%25B8.html
но просто таймер на 99 часов, без дней недели и т.д. Механический на 24 часа не подходит- нужно более 24 часов и возможность выставить время с точностью до минуты.
Куплен в оффлайне за 300-500 рублей, точно не помню :)
Выставляется (в том числе) когда включить или когда выключить до 99 часов 59 минут с точностью до минуты :)
Считать какое время и день будет через 40 часов 10 минут и вводить день и время ненадо?
свет
ru.aliexpress.com/item/Hot-Selling-XH-M131-DC-5V-Light-Control-Switch-Photoresistor-Relay-Module-Detection-Sensor/32813461661.html?spm=a2g0s.9042311.0.0.41a933ed9OtKpp
температура
ru.aliexpress.com/item/W1209-LED-Digital-Thermostat-Temperature-Control-Thermometer-Thermo-Controller-Switch-Module-DC-12V-Waterproof-NTC-Sensor/32802291474.html
времени
ru.aliexpress.com/af/%25D1%2580%25D0%25B5%25D0%25BB%25D0%25B5-%25D0%25B2%25D1%2580%25D0%25B5%25D0%25BC%25D0%25B5%25D0%25BD%25D0%25B8.html
и т.д.
Если нужно просто решить задачу — можно и готовое купить.
Оба подхода имеют право на существование.
Термоклей поплывет, когда Вы выселите устройство в гараж.
А почему термоклей в гараже должен поплыть?
Отказался от термоклея в пользу УФ полимеров с Али + УФ фонарик
Берите любой прозрачный.
Для полимеризации использую Convoy S2+ black UV 365nm led flashlight. Немного дорого для этих целей, но за 10 секунд всё схватывается. Можно использовать и подручные источники УФ.
ЗЫ: Есть два типа гелей — top cover и build. Топ при полимеризации дает твердую поверхность. Билд получается мягче.
Ну, в принципе, прочности должно хватить. Не ясно только, как он отнесется к вибрациям и продолжительному использованию. Ногти-то вроде больше месяца «не ходят».
У меня 4 яблони (а вообще их 6, но 2 ранние). Когда пипец сколько яблок — это как минимум 5-6 мешков с каждой, в мешке 4 ведра. Это значит я только с одной яблони яблоки сушить буду месяц :-) при этом переодически переставляя поддоны, как вы правильно заметили.
Не, этот ветерок не вариант ниразу. :-)
— Дорогая, что то мясо жестковато…
— Не знаю, я варила, как в в поваренной книге написано: возьмите один килограмм мяса и варите его один час. Я взяла полкило и варила полчаса…
Один черт — только на своем опыте станет понятно, сколько сушить.
а так сейчас в продаже полно всяких сушилок хушь с таймером, хуж без, другое дело — агрегаты с более менее приличным объёмом и производительностью сушки стоят нормальных денег.
небыло кстати мыслей сделать пастилу из яблок, коли их так много.
за стиль изложения — плюс!
10-20 л воды
2-4 кг сахара
100 г сухих дрожжей
и,
надоможно чаще пищать;)откуда я все это знаю? я сам переписывал свою билиотеку под энкодер аж три раза — elchupanibrei.livejournal.com/29025.html
но получилось очень хорошо. имхо одна из лучших на github под arduino. поддерживает все популярные камни: Arduino AVR, Arduino ESP8266, Arduino STM32
ошибок нет, есть пропуски.
возможно дело в конструкции енкодеров, конечно.
Может кондеры на экодер повесить, как тут советовали?
сигнал при вращении по часовой:
сигнал при вращении против часовой:
вроде кардинальной разницы не видно.
пропуски, особенно против часовой, начинались на заметно меньших скоростях, тут пытался крутануть максимально быстро.
возможно емкость тут и поможет. по идее это не дребезг после переключения, а нестабильный контакт при высокой скорости скольжения (возможно еще и отклонения вала добавляют).
моя на пост выше, но без конденсаторов не обошлось — быстрые камни Cortex аля ESPЗ8266 и STM32 успавали ловить кучу дребезга.
Для каждой кнопки есть ее состояние и счетчик опросов. Состояния могут быть: «свободна», «проверка нажатия», «нажата», «долго нажата», «отпущена», «отпущена после долгого нажатия», «обработана». Изначальное состояние кнопок — «свободна».
Опрашиваете состояние в прерывании таймера, например, 100 раз в секунду. Если нажатие появляется когда у кнопки состояние «свободна» или «отпущена» или «отпущена после долгого нажатия», то переводите состояние кнопки в «проверка нажатия» начинаете выжидать, например, 5 опросов. Если за эти 5 опросов нажатие пропало, переводите состояние кнопки обратно в «свободна» и сбрасываете счетчик. Если все 5 опросов нажатие сохраняется — переводите состояние в «нажата» и начинаете выжидать, например, 100 опросов. Если в течении этих 100 опросов нажатие сохраняется и состояние не изменилось на «обработана» (см. ниже), то переводите состояние в «долго нажата». Если нажатие пропало когда состояние было «нажата», переводите в состояние «отпущена», если пропало когда состояние было «долго нажата», переводите состояние в «отпущена после долгого нажатия», если пропало когда состояние было «обработана» переводите состояние в «свободна».
В основном цикле программы просто проверяете состояние кнопок и если оно равно «нажата», «отпущена», «долго нажата» или «отпущена после долгого нажатия», то выполняете соответствующие действие (или ничего не выполняете) и ставите кнопке состояние «обработана».
Алгоритм проверен годами и не в одном девайсе с самыми разными видами кнопок. Аналогично можно и с энкодером, только еще добавить счетчик нажатий. Хотя в STM32 есть аппаратный интерфейс энкодера со своими фильтрами и он превосходно работает… с дополнительными небольшими конденсаторами :)
ведь достаточно всего-то немного подумать…
или погуглить.
Ну и форумы, наверное, по ардуине? Типа "- У меня этот скетч работает неправильно, помогите! — Попробуй вон тот скетч или вот этот." :)
Что-то я на более профессиональных форумах (тот же электроникс, к примеру) не видел многолетних поисков алгоритма обработки энкодера :)
Сам я написал обработку энкодера на STM32 часа за два, проблем не было :)
у меня на работе иногда программисты таскают что-то кусками готовыми, а потом при неожиданных результатах или просто вопросах по коду начинается «я оттуда взял, не разбирался, работает же»… приходится отучать по возможности.
Без проблем.
Наверное, потому что тогда не только ардуины, тогда и интернета не было…
И приходилось самому думать и самому писать.
На али продается таймер с энкодером. Так, даже на китайщине нет никаких переключателей минуты-часы.
Все уже придумано :)
Вообще прогрессивная регулировка очень удобная вещь, просто надо правильно ее настроить и тогда все отлично регулируется.
Кстати интересная вещь, у той же плиты где стоят эти часы (а не только таймер), нет 00.00, вместо этого они показывают 24.00 :)
С одного энкодера, без переключения, вполне можно настраивать от, положим, 30 секунд до пары недель, если сие нужно. Поупражняйте мозг, это интересно.
Если «никак», то в PM.
Но, имхо, в данном случае имеем «дорога ложка к обеду».
Автору нравится так, с отдельными часам и минутами. Так зачем ему переделывать работающее у НЕГО так, чтобы это нравилось ВАМ?
Если ЕМУ надоест ЕГО реализация, он её переделает. Если, конечно, захочет. :)
Я попытался 'достучаться' до автора, но такие, как вы,
Samman, могут только мешать.
Ага, «Есть только 2 мнения, неправильное и моё.» :D
Не у всех любителей сушить яблоки, яблони рядом духовками, в которых 24-часовые таймеры.
Как-то так…
Как только вес загруженного продукта уменьшился до определенного значения — сушилка выключается…
Продукт никогда не будет работать как осушитель потому что его влажность никогда не упадет ниже влажности продуваемого через сушилку воздуха :)
Именно это я и написал в предыдущем комментарии.
А если руки растут из нужного места, так и вообще приделать всю ардуину непосредственно к сушилке.
На AVR давно делал, использовал исходник Chan'a
предыдущее время выдержки, и как его использовать — никак), брать предопределённое в скетче, или брать за основу
а вот сохранять прошлое значение в nvram я бы не стал — не потому, что жалко флеш (не жалко!), а из-за того, что «питание просто так не пропадает»
У меня задача включать таймер на вентиляторе в туалете, после выключения в нём света.
Вот таймер на мой взгляд удобный, управление (установка времени) не кнопками и не энкодером.
aliexpress.ru/item/32837313833.html
Там стоит переменный резистор на 500 ком.
Также дисплей показывает установленное время переменным резистором. При работе таймера бегут секунды и минуты, меняется соответственно обратному отсчёту.
Резистор с платы можно выпаять и установить вместо него удобный большой потенциометр на корпус в котором будет таймер, также и дисплей перенести на корпус.