Введение¶
Все началось с картошки, точнее с того, что она опять замерзла. Мой гараж находится последним в ряду и получается немного на бугре, хотя он и имеет три уровня, но в середине зимы мороз все же добирается до ценного злака и примораживает его. Такое случается обычно в феврале. После нескольких лет облома, чтобы этого больше не повторялось был разработан небольшой и несложный контроллер. При разработке было желание попробовать динамическую индикацию на 7-сегментных индикаторах, устройство должно быть простым и повторяемым, на распространенной элементной базе. И обязательно быть винтажным и теплым ламповым, т.е. опенсорсным и опенхардварным.
Описание работы¶
Главным действующим лицом является недорогой микроконтроллер ATMega48 от компании Atmel. К разъему XS1 подключается датчик температуры - DS18S20. Считывая с него показания контроллер их выводит в динамическом режиме на семисегментные индикаторы D9-D12. Ключи VT1-VT4 включают нужный индикатор, а микросхема DD2 декодер преобразовывает код от микроконтроллера в код индикаторов. Кнопки S1-S3 служат для оперативного управления работой контроллера. Сопротивления R3-R5 и диоды D3-D8 обеспечивают защиту выводов микроконтроллеров от статического электричества. Силовой транзистор VT5 управляемый с микроконтроллера включает/выключает реле контролирующее эл.питание нагревателя. Светодиод D13 сигнализирует о включенном нагревателе.
| Схема принципиальная контроллер | Схема принципиальная силовая часть |
| |
Настольной системой вот уже много лет является Linux Debian и все действия производились под ним. Для рисования схемы и платы использовался открытый CAD gEDA. Часть символов и корпусов взята с http://www.gedasymbols.org. Как позже будет описано, зря я понадеялся на коллективное бессознательное... Это был мой первый опыт в использовании пакета gEDA, до этого пользовался PCAD4.5, OrCAD, Eagle, KiCAD. Все оказалось не так страшно, работать, рисовать схемы и платы вполне можно. После разводки платы, были сгенерированны итоговые картинки, как выглядит плата с одной и другой стороны. Плата получилась небольшая 80х60мм.
Файлы gEDA контроллера: gheater_Rev_A_gEDA.tar.gz
Итоговый вид платы вид сверху¶
Итоговый вид платы вид снизу¶
После разводки платы и проверки. Были сгенерены файлы Gerber для производства и отправлены знакомому китайцу с вопросом о цене.
Ответ не порадовал, чтобы снизить цену за плату пришлось заказать изготовление 30шт. Полторы недели длилось производство и две недели они ехали до меня.
Печатные платы с завода вид сверху¶
Печатные платы с завода вид снизу¶
После начала монтажа выяснились небольшие технические проблемы. В нескольких корпусах которые были взяты с http://www.gedasymbols.org маленькие отверстия, у корпуса для кварца расстояние между ногами меньше чем нужно. Доверяй и проверяй, этот принцип нужно соблюдать с чужими библиотеками. Все решилось небольшим надфилем и аккуратной запайкой. Так же нашел одну ошибку, R18 должен быть подключен к D11, а не к D10. Режем, кидаем перемычку и все показывает как надо. Ввиду невозможности в нашей глуши достать аутентичные конденсаторы C3 и C4 пришлось ставить их бескорпусные аналоги, что несколько выбивается из винтажности. Фотографий платы в сборе к сожалению нет, пока собирал и отлаживал было не до того, как стало до того, плата уже стояла на своем месте прикрученная.
Однако мало собрать и запустить плату, ее еще надо установить в соответствующий корпус с нужными органами управления. Т.к. контроллер будет стоять в подвале, то условия эксплуатации выглядят следующим образом:
- температура окружающей среды -15...+10
- влажность воздуха до 100%
Есть большая вероятность попадания влаги и образования росы в любом месте устройства. Для защиты делаем корпус максимально герметичным, все щели заливаются пластиком из клеевого пистолета, или заливаются лаком. В нижней части коробки возможно появление воды, оставляем ее свободной, все находится чуть выше. Все соединения пропаиваются и закрываются термоусадочными трубками. Для оперативного управления ставятся герметичные кнопки.
Список используемых радиодеталей:
| Сопротивление | R1, R23 | 470 0.125Вт. | 2 | |
| Сопротивление | R2, R20 | 10К 0.125Вт. | 2 | |
| Сопротивление | R3, R4, R5 | 51 0.125Вт. | 3 | |
| Сопротивление | R6 | 4.7к 0.125Вт. | 1 | |
| Сопротивление | R7, R8, R9, R10, R19 | 1К 0.125Вт. | 5 | |
| Сопротивление | R11, R12, R13, R14, R15, R16, R17, R18 | 220 0.125Вт. | 8 | |
| Сопротивление | R21 | 1k 0.250 Вт. | 1 | |
| Сопротивление | R22 | 220 5Вт. | 1 | не ставил |
| Конденсатор | C1, C2, C5 | 47нФ | 3 | |
| Конденсатор | C3, C4 | 12пФ | 2 | |
| Конденсатор | C6 | 220нФ | 1 | |
| Конденсатор | C7 | 0.47мкФ 630В | 1 | не ставил |
| Конденсатор | C8 | 220мкФ 25В | 1 | |
| Конденсатор | C9, C10 | 33нФ | 2 | |
| Конденсатор | C11 | 100мкФ 12В | 1 | |
| Диод | D1, D3, D4, D5, D6, D7, D8 | КД521 | 7 | |
| Диод | D2, D13, D16 | -- | 3 | мелкие, расстояние между ножками 3мм, взял из дохлого свича |
| Диод | D9, D10, D11, D12 | АЛС324Б1 | 4 | |
| Диод | D14 | 1N4001 | 1 | |
| Диод | D15 | DB107S | 1 | |
| Транзистор | VT1, VT2, VT3, VT4 | КТ361 | 4 | |
| Транзистор | VT5 | КТ819 | 1 | |
| Микросхема | DA1 | 7805 | 1 | |
| Микросхема | DD1 | ATMega48 | 1 | |
| Микросхема | DD2 | КР533ИД18 | 1 | |
| Кварц | XTL1 | 16МГц | 1 | |
| Реле | RE1 | DC 12V, AC 220V 10A | 1 | |
| Трансформатор | T1 | 220V x 9V 0.25A | 1 | |
| Кнопка | S1, S2, S3 | герметичная | 3 | подарили, марка-модель не известна |
| Кнопка | S4 | -- | 1 | мелкая кнопка поверхностный монтаж, модель не известна |
| Кнопка | S5 | -- | 1 | решил не ставить, обойтись отдельным 4-х полюсным автоматом |
| Предохранитель | F1 | 5А | 1 | |
| Предохранитель | F2 | 0.5А | 1 | |
| Разъем | XS1 | -- | 1 | для пробы поставил стерео джек гнездо на корпус |
| Разъем | XS2 | 5x2 2.54 | 1 | |
| Разъем | XS3 | -- | 1 | для пробы поставил микрофонный 3-х штыревой |
| Разъем | XS4 | розетка влагозащищенная | 1 |
Общий вид в сборе¶
Вид справа¶
Хорошо видна влагозащищенная розетка, все отверстия заклеены клеевым пистолетом.
Вид слева¶
Сверху вниз: разъем термодатчика, предохранитель силовой части, предохранитель контроллерной части, входящий разъем питания 220В.
Вид сверху¶
Видно 'уши' за которые контроллер будет вешаться на стену.
Общий вид внутри¶
Контроллер¶
Силовая часть¶
Возможные модернизации¶
- Микросхема стабилизатор DA1 7805 может быть заменена на DC/DC преобразователь PSR-7805LF.
- Декодер DD2 можно исключить, соединив проводками 7D1-R11, 7D2-R12, 7D3-R13, 7D4-R14, #LT-R15, #RBO-R16, #RBI-R17. Немного переделать программу, добавив таблицу знаков. При такой модификации на индикаторе можно получить любой знак который можно на нем построить, а не только тот который зашит в декодере. С декодером знак '-' приходится отображать как 'c', бо в нем нет знака минуса. Этот мод позволяет решить эту проблему и обойти другую - когда купить декодер негде.
- Замена силового транзистора VT5 на любой биполярный n-p-n транзистор с запасом выдерживающий ток протекающий через реле. В моем случае ток реле около 80мА.
- Замена силового реле на любое доступное. Реле работает от выпрямленного напряжения выдаваемого трансформатором. У меня было реле на 12В, подобрал и трансформатор на 12В. Если есть реле на меньшее напряжение 9...7В можно подобрать близкий трансформатор и запитать от него. При работе от большего напряжения придется увеличить радиатор линейного стабилизатора DA1.
- Кнопка S4 сброс МК практически не нужны, можно не ставить, как и диод D1.
- Если нагрузка чисто резистивная, можно не ставить C7, R22. Если их ставить, то они должны стоять как можно ближе к нагрузке, может даже в самой розетке.
Программная часть¶
Для индикации работы устройство имеет три дополнительных светодиода, верхний показывает наличие питания +5В, средний монитор работы МК, нижний показывает что нагреватель включен. Т.к. контроллер работает в достаточно сложных условиях, в нем через бит конфигурации включен сторожевой таймер и он работает постоянно. Небольшой планировщик задач запускает задачи по расписанию. Одна из этих задач отвечает за сброс сторожевого таймера. В случае подвисания МК или возникновения ситуации когда какая-либо функция слишком долго (более 2 сек.) монопольно использует МК сторожевой таймер сбросит его. Светодиод монитор работы МК при старте показывает этапы начала работы, при выходе на рабочий режим моргает с частотой 1Гц. Показывая что с МК все в порядке и устройство работает штатно. Из-за высокой вероятности отключения эл.питания в любой момент времени, все данные хранящиеся в ЕЕПРОМ перед загрузкой проверяются на соответствие граничным условиям. В случае когда данные не соответствуют, они считаются испорченными и для них используются значения по умолчанию. Т.к. контроллер рассчитан на использование в подвальном помещении, то граничный диапазон сильно заужен и может быть пересмотрен под конкретные требования.
В контроллере задаются следующие величины:- нижний порог температуры - если температура падает ниже этого порога, происходит включение нагревателя
- верхний порог температуры - если температура поднимается выше этого порога, происходит выключение нагревателя
- защитное время - время в течении которого переключение в другое состояние запрещено. Служит для продления срока службы реле и устранения аварийной ситуации, когда из-за каких-либо проблем МК начинает считать, что надо включать-выключать нагреватель с большой частотой. После срабатывания реле, запускается таймер защитного времени и пока оно не кончилось переключения в другое состояние не произойдет.
Программа микроконтроллера с исходными текстами: gheater_2011_09_22.tar.gz
Конфигурационные байты контроллера программируем командой:
avrdude -c stk200 -p m48 -P /dev/parport0 -U lfuse:w:0xE7:m
В данный момент в меню пока нет пунктов:- 5 - показать количество включений
- 6 - сброс счетчика включений
Т.к. надо было быстрее заканчивать с корпусом, герметизировать его. Бумагу для меню сделал так сказать с небольшим запасом, бо ставить новую туда нет возможности.
P.S.¶
Заранее отвечу на некоторые вопросы:
Да, я знаю что подобное устройство можно купить в магазине.
Да, я знаю что плату можно было сделать самому из клея, фольги и фанеры.
Да, я знаю что можно было использовать плату от Ардуино клонов.
Да, я знаю что программу можно было написать на ассемблере и тогда туда бы влез тетрис.