Site Loader

Кухонный таймер на Arduino

2012-02-17

Все статьи →

Этот кухонный таймер представляет собой достаточно простое устройство, кнопка для нажимания и удерживания, которая поведет отсчет с интервалами в 5 минут до тех пор, пока вы не отпустите  кнопку. Когда вы это сделаете, будет сигнал и таймер начнет отсчитывать назад. В таймер входят будильник и дисплей с пронзительным звуком, чтобы привлечь ваше внимание.

я взял все электрические компоненты из старых испорченных приспособлений. Старайтесь использовать вещи повторно, таким образом можно довольно просто избавиться от испорченной электроники, постарайтесь использовать поломанное по максимуму! Видите перемычки в проекте? Нет, скрепки для бумаги намного лучше  — они очень дешевы и более надежны:)

Шаг 1. Компоненты

Вам понадобятся:

Arduino – я использовал duemillanove, но вы всегда можете взять другую вместо нее.

 Проводки переходников – у меня они закончились, и я использовал скрепки для бумаги, но вы всегда можете сделать по-своему.

Кнопка – думаю, что можно использовать кнопку, встроенную в протошилд!

10 Bar LED Bar Graph – можно использовать для этого  10 светодиодов, я нашел мои в сломанном CD плеере.

Пьезо-электрическая пищалка –я использовал элемент от старого кухонного таймера со сломанным чипом.  В общем-то, это и стало причиной, почему я захотел сделать собственный таймер на основе Ардуино!

Резистор – для подключения кнопки я использовал  подтягивающий резистор  в 10k, который выпаял из машинки для посева семян.

Дополнительно:

Arduino шилд – я использовал его, т.к. мне нравится экспериментировать с Arduino, и я не хочу долго возиться с таймером, если можно бысро сделать и пользоваться. В шилд встроена небольшая макетная плата, с ними проект выглядит аккуратнее.

Еще резисторы – для ваших компонентов, чтобы не сгорели выводы на вашей Arduino. Хотя я знаю, что это хорошая идея, у меня на тот момент не было достаточно резисторов, кроме того, я не знал, как использовать подтягивающие резисторы с Arduino, поэтому на тот момент сделал без них. Просто помните об этом, и не моя вина, если вы сожжете свою Arduino!

Шаг 2. Строим!


Проще всего показать, как соединена схема, это нарисовать ее в программе Fritzing (см. выше). Теперь о схеме. Как вы видите, одна сторона линейки из 10 светодиодов соединена с Gnd выводом Arduino, в то время, как каждая ножка с другой стороны присоединена к цифровому выводу Arduino. Это значит, что когда на выводе Arduino установлен высокий уровень (HIGH), соответствующий сегмент светодиода загорится. Выводы используемые для соединения с Arduino, 3, 4, 5, 6, 7, 8, 10, 11, 12, и 13, а вывод 2 резервируется для кнопки, и ШИМ (PWM) вывод 9 зарезервирован для использования пьезо-электрического звукового сигнала. Кнопка подсоединена проводком, таким образом, что когда она нажата напряжение 5В подается на вывод 2 и на нем появляется высокий логический уровень (HIGH), а когда кнопка не нажата, вывод на вывод 2 будет поступать низкий логический уровень (LOW). Пьезо звуковой сигнал соединен с ШИМ выводом 9, таким образом мы можем имитировать квадратную синусоидальную волну, используя analogWrite, который создаст звуковой сигнал, предупреждающий, что время истекло.


ШАГ 3: Кодируйте! Или используйте мой код

 

Чтобы запустить кухонный таймер, накормите вашу Ардуинку качественным, вкусненьким кодом. Я написал достаточно простой (но страшненький на вид) код, который может вести все это. Те, кому достаточно, чтобы система просто работала, могут загрузить его сейчас.

Объяснить немного сложнее, поэтому я сделаю краткий обзор, а остальное достаточно понятно:

Сначала мы инициализируем все выводы и функции, которые собираемся использовать, чтобы убедиться, что наша Arduino будет с ними работать. Мы используем const int чтобы показать, что вывод, который мы инициализируем, является константным и не изменится. Переменные могут также быть инициализированы, но, как правило, они не является константными (постоянными), так как они установлены по всему скрипту. Затем мы проверяем, была ли кнопка (подключенная к выводу 2) нажата или нет, и если это так, то загорается следующий сегмент, и добавляет к tastyTimeVariable.

Это означает, что мы можем использовать функцию else, чтобы указать необходимый отрезок времени, в зависимости от величины нашего tastyTimeVariable. Вы увидите, что мы задерживаем  «300L * 1000L», что соответствует примерно 5 минутам, так как 300,000 миллисекунд = 300 секунд, и 300/60 = 5. Затем мы говорим Arduino, что если tastyTimeVariable равняется чему угодно, кроме 0 (другими словами, кнопка нажата, и какой-то отрезок времени выбран) включить графический дисплей, и пищать пищалкой. Мы можем менять длительность звукового сигнала, меняя команду.

Я также написал комментарии в скрипте, чтобы помочь тем, кто хочет понять, как это работает, или модифицировать для своих нужд.

Добавляю сообщение, присланное мне от одной читательницы, она пишет:

Я изменила код кухонного таймера, т.к. он был очень длинным. Написанный мною код делает то же самое, но является частью оригинального кода. Надеюсь, вы не возражаете. Вот линк к нему. Для работы этого скетча необходима библиотека Utility, если она у вас не установлена — скачайте и сохраните в подпапку libraries папки, в которую установлен ваш Arduino IDE

Это фантастический кусок кода, поэтому попробуйте его, процесс инсталляции тот же.

Большое спасибо за присланный код!

 

Шаг 4 Готовим!

 

Да, подключаем устройство к USB адаптеру. Не думаю, что оно очень защищено от воды, поэтому убедитесь, что руки сухие перед тем, как пользоваться. И все, что вы делаете, теперь на вашей ответственности, поэтому не пытайтесь потом предъявлять мне иск.  

 */ Usage Instructions

Перезагрузите Arduino, и нажмите кнопку, чтобы светодиодные сегменты загорелись. Каждый сегмент представляет 5 минутный отрезок времени. Когда нужное количество сегментов загорится, отпустите кнопку. Дисплей засветится и все сегменты появятся опять. 5 минут спустя один исчезнет, и так далее, до тех пор, пока время не истечет. В этот момент раздастся звуковой сигнал. Чтобы остановить сигнал, перезагрузите Arduino. Выключать Arduino не нужно, т.к. кухонный таймер не включается без нажатия.

 

 Наслаждайтесь /*

 

 Anonymouse197, Ari Cooper Davis ©, anonymouse197[at]gmail. com

Прерывание

— структура ядра Arduino и использование таймера

спросил

Изменено 5 лет, 6 месяцев назад

Просмотрено 2к раз

Мне нужно было использовать TC1 для захвата ввода, а также AnalogWrite() и прерывание примерно на 1 мс для опроса пользовательского интерфейса (кодер, кнопка).

ATmega328p Arduino Nano (техническое описание, будьте осторожны: много опечаток битовых символов) имеет три таймера:

  1. TC0
  2. ТС1
  3. ТК2

Не так просто найти информацию о структуре «ядра Arduino» и использовании периферийных устройств. Справочник по Arduino, похоже, не содержит никакой информации.

Как и взлом Arduino.

Некоторую информацию можно найти на

https://arduino-info.wikispaces.com/Timers-Arduino

, но я не уверен, что она актуальна. Например, я обнаружил, что отключение TC2 также отключает аналоговая запись () ШИМ. Попытка использовать TC0 приводит к ошибке, так как TIMER0_OVF_vect уже используется («множественное определение `__vector_16′»).

Как я могу использовать таймеры (и их прерывания), которые уже используются для ядра?

  • прерывание
  • ШИМ
  • atmega328
  • таймеры
  • основные библиотеки

3

Вот краткое изложение всего этого. На ATmega328P (Arduino Uno, Nano, д.), основная библиотека Arduino использует таймеры следующим образом:

  • Таймер 0
    • Функции синхронизации и задержки с использованием прерывания TIMER0_OVF
    • «быстрый» ШИМ на частоте 980 Гц на контактах 5 и 6 (PD5 и PD6)
  • Таймер 1
    • «фазокорректирующий» ШИМ на 490 Гц на контактах 9 и 10 (PB1 и PB2)
  • Таймер 2
    • «фазокорректирующий» ШИМ на 490 Гц на контактах 3 и 11 (PD3 и PB3)

Предварительные делители всех трех таймеров установлены на 64. TIMER0_OVF это по умолчанию включено только прерывание по таймеру.

Обратите внимание, что библиотеки могут использовать таймеры в своих целях. Сервопривод например, использует Таймер 1 для выполнения ШИМ на основе прерываний.

«Повторная реализация» обработчиков прерываний для освобождения ресурсов таймера/счетчика потребует внесения изменений в прошивку ядра Arduino. Но может быть обходной путь:

Исходный код показывает, как используются init() и loop() :

https://github.com/arduino/Arduino/blob/master/hardware/arduino/ avr/cores/arduino/main.cpp

и основная инициализация таймера здесь:

https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/wiring.c#L45

и init() Там же находится , который также настраивает все остальные таймеры для фазовой коррекции ШИМ

AnalogWrite() находится в https://github. com/arduino/Arduino/blob/master/hardware/ arduino/avr/cores/arduino/wiring_analog.c

Я думал, что как раз на 490/980 Гц он может использовать программно-ШИМ, но на самом деле он выбирает соответствующий таймер 9Выход 0101 сравнивается с выводом (это также означает, что процессор может быть отключен, пока генерируется ШИМ).

Это делается с помощью поиска во время выполнения в заголовке платы digital_pin_to_timer_PGM , например. https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/variants/standard/pins_arduino.h

, который кажется (условным) списком всех контактов.

Таким образом, существует ограниченный косвенный выбор того, какой таймер используется для ШИМ:
PD5 и PD6 обслуживаются TC0, поэтому использование одного из них как 9Выходной контакт 0029 AnalogWrite() освобождает TC2 для моих целей (опрос ~ 1 кГц).

У меня работает!

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *