Кухонный таймер
- Войдите на сайт для отправки комментариев
Итак, нужен кухонный таймер.
В качестве устройства ввода - неубиваемый телефонный диск, сам аппарат прослужил на кухне более 15 лет и остался полностью работоспособен. В качестве дисплея - четырёхразрядный индикатор, помните первые телефоны с АОН или например, как современные мультиварки с оранжевыми индикаторами. После ввода количества минут таймер отсчитывает их в обратном порядке до нуля. Последние 3 секунды звенит к звонок телефона. При наборе цифры, сдвигает разряд числа вверх и прибавляет набранное. В первых трёх разрядах индикатора - сотни, десятки и единицы минут, потом точка и в четвертом десятки секунд. Для сброса нужно доввести число более 9999, тогда высветится "0" и таймер перейдёт в режим отображения текущего времени. Дополнительно нужен термометр встроенный в ложку и закреплённый вместо трубки на витом проводе. При снятии ложки с рычага индикатор переходит в режим отображения температуры. Доплнительно будет полезен анализатор качества воздуха включающий вытяжку над плитой, а в случае присутствия газа - соответствующий сигнал.
Собственно схема электрическая принципиальная:
Ниже привожу код:
Проблема 1: После вывода в разряд индикатор горит только до вывода в следующий разряд
100
//Вывод на индикатор
101
D1();
102
D2();
103
D3();
104
D4();
Что не так? Как исправить?
Проблема 2: Таймер никак не хочет считать обратно, и тем более выводить на индикатор десятки секунд
Расчудесный список "хотелок". С воображением и фантазией у автора все прекрасно.
Это лишь основные моменты. Я про корпус ещё не сообщал ;)
Кстати тема задублировалась. Прошу администрацию сообщения перенести сюда, а дубликат http://arduino.ru/forum/proekty/kukhonnyi-taimer-0 удалить.
Да, чуть совсем не забыл!
Источники:
1. Дисковый номеронабератель http://diy-blog.net/podklyuchenie-diskovogo-nomeronabiratelya-k-arduino/
2. Сдвиговый регистр http://arduino.ru/Tutorial/registr_74HC595
3. Индикатор http://www.rubachek.com/node/130
Были несомненно другие, но сейчас уже не вспомню.
мельком глянул
1. если хватает выводов зачем сдвиговый регистр? он время тратит. зачем огород городить, или не знаете куда применить сдвиговый регистр?
2. считывать номеронабиратель лучше по прерываниям
3. что за странный набор резисторов для номеронабирателя. насколько помню там просто механика. должно и внутренних подтягивающих хватить. ну может максимум мелкий кондер параллельно подцепить от дребезга
4. если сделаете как предлагал выше код достаточно сильно уменьшится
5. есть ли смысл собирать свое если готовый кажется рублей 50 стоит? но если все же хочется свое почему бы и нет. хотя выбор устройства ввода странный, но это ваше дело
Jeka_tm >>
1. Выводов кастрофически не хватает. Экономия в пять выводов одной микросхемой в ущерб скорости оправдано.
2. Пример в студию
3. Нужно сделать один уровень во время импульса набора, и другой уровень в момент размыкания. В оригинале было 440 Ом и 10 кОм
4. См пп2
5. Если винтажный и функциональный прибор по ТЗ найдется готовый - готов приобрести.
1. если выводов не хватает прицепите втрой сдвиговый регистр. еще 4 вывода освободится
сдвиговый регистры в принципе лучше заменить на MAX7219. и проще и выводы экономит, и процессор почти не тратит если не постоянно отправлять цифры на индикатор, а только при изменении
2. а смысл? железка собрана?
3. 0 и 5В плохие уровни?
4. см п.2
5. не такой врядли есть, лучше конечно если хочется собрать свой
2. считывать номеронабиратель лучше по прерываниям
4. если сделаете как предлагал выше код достаточно сильно уменьшится
Что такое прерывания я знаю. Не знаю как реализовать физически и программно на ардуино. Научите.
неа. люди совсем обнаглели. ни спасибо ни пожалуйста. сами делайте, идею я подал
Да просто идей про прерывания на ардуино слышал уже море, а как спросишь пример на Uno + кнопка - сразу в кусты все разбегаются! Идея по прерываниям работать - согласен неплохая. Но реализована она только внутри. Пользователю ее не дают юзать.
По этому лучшее что пока нашел - millis(). Эта функция возвращает кол-во милисикунд с момента запуска. Можно в общем цикле сравнивать ее со своим же значением (минус продолжительность цикла) в момент прошлого действия:
да ладно))
http://arduino.ru/Reference/AttachInterrupt
пользуйся
А поискать пример вааще никак?
Вот, например, что первым находится
Вот это уже по делу! А то все слова, слова...
Сама идея использования прерываний для ввода - хороша. Но в моем случае функция millis() все равно останется, по крайней мере для вывода на индикатор. Как выяснилось индикатор светит только в один регистр одновременно (или во все но одинаковое значение). А светить мне нужно периодически (динамически).
MAX7219
А светить мне нужно периодически (динамически).
И как этакое сделать - это мы должны думать, да?
Повторно изучил даташит и примеры по MAX7219. Остались вопросы.
На сколько я понимаю предлагаемый драйвер семирегистровый. У меня четыре регистра. Есть такой?
Внутри представляет собой тот же сдвиговый регистр, но управляется по модной шине SPI. Полагал что эта шина нужна для взаимодействия между устройствами.
Например, если у меня будет центральный таймер в коридоре с выходом в интернет, и я захочу с него обмениваться информацией с периферийными таймерами - кухонным (сварились ли пельмени), комнатным(будильник прикроватный с монитором сна), и балконным(телескоп следящий за положением тел в альфа-центавре), а так же таймерами робота-пылесоса и робота-пивовара, - тогда да без SPI не обойтись, а тут?
еще раз изучите, почитайте статьи а то глупость написали
а прочитайте еще то что я написал когда предлагал 7219 первый раз
не обязательно по хардварному spi если так пугает
Путём нехитрых преобразований, благодаря PSD часть кода, отвечающего за индикацию была доработана:
Остались открытыми вопросы мерцания точкой раз в секунду (фактически при перерисовке индикатора), а так же вывод в четвертый разряд дробной части числа - десятки секунд.
А что касается резисторов и подключения номеранабирателя используй встроенные подтягивающие резисторы. Описание: http://arduino.cc/en/Tutorial/InputPullupSerial
"Десятки секунд"
Мигание точкой
Про подтягивающие сопротивления - здорово. Попробую использовать.
Что касается проекта в целом вижу основную проблему в единицах и приведении типов.
Мы вводим целые значения с номеронабирателя. Добавляем тоже только целые.
Таймер должен отнимать целые единицы секунд или 1,6 минуты (что бы мерцать точкой), а это уже float.
Выводим на индикацию по разрядам раздельно так же целыми, но прорисовываем весь индикатор.
Напрашивается вывод перевести всё во float, но тогда не катит %
Не нужен тебе float! int должно хватать за глаза. Точка у тебя логическая\виртуальная, а не математическая.
Не нужен тебе float! int должно хватать за глаза. Точка у тебя логическая\виртуальная, а не математическая.
Тогда нужно обращаться к разрядам индикатора как к символьным полям. Сейчас я 123.5 минуты вывожу, а когда таймер до нуля досчитает выведу текущее время 14.32
может проще нормально писать? 5 часов 3 минуты
Не нужен тебе float! int должно хватать за глаза. Точка у тебя логическая\виртуальная, а не математическая.
Тогда нужно обращаться к разрядам индикатора как к символьным полям. Сейчас я 123.5 минуты вывожу, а когда таймер до нуля досчитает выведу текущее время 14.32
В основном цикле (loop) необходимо закодировать таймер, а прога индикации сама разобьет на разряды и отрисует.
Попробуй еще раз описать алгоритм работы устройства, хотя бы человеческим языком, так что бы получилась связанная картина конечных состояний с определением всех возможных комбинаций режимов и пределами вводимых/выводимых значений - потом останеться просто описать это программе.
Попробуй еще раз описать алгоритм работы устройства, хотя бы человеческим языком, так что бы получилась связанная картина конечных состояний с определением всех возможных комбинаций режимов и пределами вводимых/выводимых значений - потом останеться просто описать это программе.
Пробую. Есть несколько (пять) режимов работы устройства:
1. Таймер в минутах (999.5 - _ _0.0) шаг 0.1 мин, точка в третьем разряде.
Во время ввода номера значение таймера округляется нвиз до целого, увеличивается на порядок и прибавляется введённая цифра. Вводится только целое число.
2. Время, отображается когда таймер равен нулю (_0.00 - 23.59) шаг 1 мин и точка во втором разряде
3. Градусник, когда поднят рычаг (_ _ _0. - 9999.) , в градусах цельсия.
4. Газоанализатор при изменении уровня загрязнения воздуха (0.000 - 9.999), регулирует обороты вытяжки.
5. Процент природного газа в воздухе, пока не снять/повесить рычаг (.0000 - .9999), инициирует звуковую сигнализацию.
Точка всегда мигает раз в секунду.
P.S.: Планировал начать с главного и последовательно наращивая функционал получить вышеназванное.
Это не алгоритм, это хотелки.
Для начала и это что-то.
Переход между режимами таймер время: нет таймера - значит время
Переход от режимов время/таймер к измерению температуры и обратно: по событию рычага
А как осуществляется переход к режимам газ и из каких режимов - я запутался
Для начала и это что-то.
Переход между режимами таймер время: нет таймера - значит время
Переход от режимов время/таймер к измерению температуры и обратно: по событию рычага
А как осуществляется переход к режимам газ и из каких режимов - я запутался
Нет таймера-значит время
рычаг - это кнопка в восьмой строке кода. Если нажата режим "время/таймер", если отпущена "термометр".
газ меряется периодически (раз в минуту) в фоновом режиме и в случае утечки газа - гудит, в случае низкого качества воздуха - увеличивает обороты вытяжки. Вероятно это два разных датчика. Они выводятся на индикатор при наступлении заданных пороговых значений на несколько секунд в любом режиме
Предполагал, что в основном цикле будет такой алгоритм: ММ-получаем время, СС-проверяем таймер (если есть отнимаем единицу), СС-проверяем рычаг (если снят меряем температуру), ММ-меряем воздух, ММ-меряем газ, СС-выводим на индикатор, СС-звеним (если таймер 0>3), СС-гудим (если газ>предел утечки), ПП-набираем номер
ММ - событие раз в минуту, СС - раз в секунду, по прерыванию
К вопросу о звуковом оповещении. Начнем с простого пьезоэлемента. Если я его применю, то при наличии предельной концентрации газа в воздухе в пьезоэлементе произойдет разряд и я рискую услышать несколько более громкий щелчек с кухни?
К вопросу о звуковом оповещении. Начнем с простого пьезоэлемента. Если я его применю, то при наличии предельной концентрации газа в воздухе в пьезоэлементе произойдет разряд и я рискую услышать несколько более громкий щелчек с кухни?
В пьезоизлучателе, а равно как и магнитодинамической системе той или иной конструкции, открытый разряд, так сказать, не предусмотрен конструкцией
Пока предварительно осваиваю номеронабиратель по прерываниям...
А напиши как у тебя соединены сегменты (не разряды) индикатора с регистром - необходимо для правильного кодирования знакосинтезирующего массива.
A, B, C, D, E, F, G, DP
Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7
А напиши как у тебя соединены сегменты (не разряды) индикатора с регистром - необходимо для правильного кодирования знакосинтезирующего массива.
A, B, C, D, E, F, G, DP
Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7
Все верно. Если я правильно понимаю, нужно подтвердить это:
В изначальной схеме, после визуальной трассировки проводников были исправлены некоторые неточности.
Светодиоды большие это важная часть?
Может ну их к лешему.
Пошли ты лесом этих советчиков раз готового кода с регистром сдвиговым не дают.
Я диплом на 5 написал в свое время с регистром сдвиговым и больше по мне не барское это дело счетами ковыряться паяльником разводить если готовое заводское можно купить и код простой как грабли.
А может есть простой LCD1602 с контроллером запоминающим за 4$
http://ru.aliexpress.com/item/Free-Shipping-High-Quality-5V-Screen-White-Character-Blue-Backlight-LCD-Module-1602-for-Arduino/1772760469.html
QC1602A v2.0 мне замечательно знаком и в наличии имеется. Кириллицы в нем нет. По-этому нормально писать он всё равно не сможет
Тем более он может быть удобен для работы с прибором в непосредственной близости, я бы сказал "на расстоянии вытянутой руки", ибо дальше разглядеть показания вряд ли будет возможно. В моём случае таймер будет закреплён на стене, над плитой, под вытяжкой. Это место замечательно просматривается с любой точки кухни. Расчётное расстояние непринуждённого обзора от 0.3 до 3.5 метров.
QC1602A v2.0 мне замечательно знаком и в наличии имеется. Кириллицы в нем нет. По-этому нормально писать он всё равно не сможет
Тем более он может быть удобен для работы с прибором в непосредственной близости, я бы сказал "на расстоянии вытянутой руки", ибо дальше разглядеть показания вряд ли будет возможно. В моём случае таймер будет закреплён на стене, над плитой, под вытяжкой. Это место замечательно просматривается с любой точки кухни. Расчётное расстояние непринуждённого обзора от 0.3 до 3.5 метров.
А что у нас с русскими? Я вообще не в теме про русские. Я как-то станки делаю и тут всегда латиница. Какой-то русский индиктор с контроллером специальным надо пкупать? CCылочку? Я свой индикатор и телефон практически из мусорки достал. Индикатору наверно вообще лет 15. Телефону 54 года.
Пошли ты лесом этих советчиков раз готового кода с регистром сдвиговым не дают.
Наполовину сделанную работу не показывают...
В очередной раз переписал программу индикации - теперь с мерцанием точки. Покажу после кодирования часов и таймера.
чтоб кода дурного не писать видно как девять ножек протянул?
всегото надо в нижнюю строчка пошла нижняя строчка
Вот кода для сдвигового регистра и 4 семисегментников дадут пусть зубоскалят.
Там еще таймера расписавать больше дня.
art100 ты че там бухой чтоли? бред уже начинаешь писать. читай хоть внимательнее
Я процитировал предложение "нормальной" индикации jeka_tm "5 часов 3 минуты". Слова "часов" и "минут" написаны по русски. Так не получится на 1602А, да и не видно будет символы высотой 4 мм с расстояния в 3.5 метра. Существуют индикаторы с русскими таблицами символов. Скажу больше, можно символы генерить и выводить побитно. Я забил написав 12 русских букв (столько нужно было для проекта).
В Вашем случае, конечно, использование именно такого индикатора оправдано.
art100 ты че там бухой чтоли? бред уже начинаешь писать. читай хоть внимательнее
а в чем вопрос? ТС неделю индикатор завести не может Ну ладно попробую это все переичать. Хороводы вокруг регистра водите.
да не так дословно. напишу точнее вместо 125.5 писать 05:03
Да, по ходу art100 сам телефон дзержинского от сети 220 вольт запитал, вот его и не отпускает.
да при чем тут индикатор. он у меня просил код для прерываний для номеросчитывателя. не включай барана, пишу это уже не первый раз
Не столько бУкАв я осилить не смог.
Мне завести телефон-arduino-LCD-PWM хватило вместе со слесарской работой 1-ого дня.
Я не могу постичь чего вы тут обсуждаете.
Перепись железа отсутсвует
Схема железа отсутствует.
Какая-то бадяга про код.
Код работы с НомероНабирателем 100% рабочий.
Я пас. Пойду рюмашку наливочки пока жена не видит опрокину.
Извыняй Жека если чо не так. Ногами не бейте.
да ладно проехали
код рабочий только если только он работает, так как прерываний не требуется
но когда индикатор через сдвиговый регистр подключен, динамическая индикация, соответственно постоянное ногодрыганье, и тут можно пропустить импульс с номеронабирателя, поэтому и писал что лучше через прерывания