Одним из артефактов советских времен были настенные вторичные часы. Они не имели часового механизма, а управлялись централизованно — по сигналу от первичных часов, установленных где-нибудь в отдельной комнате на предприятии или учреждении, все часы передвигали стрелку на минуту вперед. Это была часовая сеть в пределах одного здания или в пределах одного завода.
Такие часы были разными, они часто встречаются в продаже, и встает вопрос — а можно ли заставить их показывать правильное время?
Самый простой вариант, конечно же, выкинуть старый «стрелкопередвигатель» и поставить нормальный часовой механизм от китайского будильника.
Более сложный: найти «первичные» часы и подключить к ним вторичные.
Еще вариант: купить готовый блок управления для таких часов. Все бы хорошо, но он дороже самих часов раза в три.
Но такой блок управления можно сделать самому. Уровень знаний для этого нужен примерно как у шестиклассника.
Для этого понадобится Arduino-совместимая плата (я использовал самое дешевое, попадавшееся в руки – Arduino Nano китайского производства)
и модуль под названием «драйвер двигателя» (фактически это очень умный транзистор), который у продавцов электроники для самодельщиков может называться L9110 или HG7881.
Кроме того, понадобится источник питания на 12 вольт (он будет снабжать электричеством часы и всю остальную электронику) и несколько соединительных проводов. Можно использовать специальные провода с разъемами типа “мама” для соединения таких плат (покупаются в тех же магазинах для самодельщиков), можно не заморачиваться и припаять любым имеющимся проводом. Блок питания проще всего купить на строительном рынке, там оно продается под названием «трансформатор для светодиодной ленты». Нужен на 12 вольт, вполне достаточно самого дешевого, на 25 ватт. Если в хозяйстве уже есть блок питания с мощностью побольше, то он тоже подойдет.
Схема подключения:
Пояснения к схеме: красный провод подсоединяется к выходу V+ блока питания. Он идет к ножке VIN на Arduino Nano и к ножке VCC на драйвере.
Черный провод подсоединяется к к выходу V– блока питания. Он идет к ножке GND на Arduino Nano и к ножкеGND на драйвере.
Синий провод соединяет ножку D12 на Arduino Nano c ножкой B-IA на драйвере.
Зеленый провод соединяет ножку D11 на Arduino Nano c ножкой B-IB на драйвере.
Провода от разъема MOTOR B на драйвере идут к часам. К какому контакту часов подключать какой провод – совершенно несущественно.
После того, как схема собрана, Arduino нужно запрограммировать. Для этого нужно установить среду разработки (Arduino IDE), скопипастить в новый документ программу, после чего залить эту программу в Arduino.
Arduino nano подключается к компьютеру с помощью USB -> Micro-USBкабеля (от мобильного телефона вполне подойдет). К источнику питания в 12 вольт в этот момент можно не подключать – необходимое питание плата получит от компьютера.
Как установить среду разработки, лучше прочитать у специально обученных людей:
http://wiki.amperka.ru/установка-и-настройка-arduino-ide
В некоторых случаях (то есть с большинством дешевых китайских плат) дополнительно понадобится устанавливать драйвер CH340. Без этого не получится выполнить шаг 3 инструкции и последующие.
Один из вариантов решения проблемы тут:
https://www.drive2.ru/c/1725630/
Версии виндовс у всех разные, так что с драйверами, возможно, придется повозиться. Пользователи остальных ОС тоже не обделены радостью – лично мне понадобилось несколько дней, чтобы методом проб и ошибок найти драйвер, подходящий для моей версии макос.
Сама программа для копипастинга тут:
Код:
int IN1 = 11;
int IN2 = 12;
boolean STATE = true;
void setup() {
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
}
void loop()
{
digitalWrite (IN2, STATE);
digitalWrite (IN1, !STATE);
delay(500);
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
delay(59500);
STATE = !STATE;
} Создаете новый документ, копируете туда этот малопонятный, но достаточно короткий текст, и заливаете его в вашу плату, как описано в Шаге 5 инструкции от Амперки.

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

На борту имеют шаговый двигатель и блок шестерёнок управления стрелками-часовой и минутной. В нете есть множество схем по запуску их. Можно конечно прикрутить ардуино, но ждать доставки и вкладываться…
Снял блок, смазал втулки шагового двигателя, промыл блок шестерёнок осветительным керосином и смазал. Есть печатные платы нарисованые в нете, но мне не приглянулись или двухсторонние, или растянутые в размерах.

тест
В программе нарисовал одностороннюю печатную плату 7 х 4 см. Вытравил. Низ печатки

Напаял деталек и проверил на других аналогичных часах, настройка практически не потребовалась. Готовая плата прошла проверку.

Установил на часы Стрела 1980 года. Работают и радуют, выходной блок сделан под одни часы, но можно изменить немного и можно ними управлять множеством «вторичных часов». Часы в работе

Автор статьи “Восстановление раритетных вторичных часов своими руками” Serv6
Смотрите так же:
- самодельный регулируемый стабилизатор тока от 0,05 до 5 А
- самодельный лабораторный источник питания 0-16 вольт
- самодельный импульсный сетевой источник питания
- автомобильный тестер-пробник своими руками
- как защитить батарейку мультиметра
- Ваша статья будет здесь если Вы ее нам пришлете 🙂 samodelkainfo@yandex.ru
Привет всем читателям и почитателям сайта Радиосхемы! Сегодня хочу поделиться с вами очередной простенькой конструкцией «Часы-термометр». Немного предыстории: вечером очень плохо видно показания уличного термометра, чтобы разглядеть положение стрелки, необходимо довольно долго вглядываться и иной раз пользоваться фонариком.
Спустя определённое время мне это надоело и решил заменить прибор на электронный, который бы отображал информацию на светодиодных семи сегментных индикаторах. После чего бы не пришлось даже подходить к окну, чтоб узнать уличную температуру. Так как индикацию хорошо видно более чем с трёх метров.
Схем данного устройства в сети полно, но я, как человек относящийся к семейству Радиолюбителей, решил собрать свою. Так как с недавних пор пытаюсь осваивать микроконтроллеры, то выбор пал на широко распространённый и дешёвый МК Atmega8. Далее была изготовлена плата по технологии ЛУТ, после чего уже приступил к программной части.
Программа написана на языке Си с помощью среды разработки CodeVisionAVR.
Схема принципиальная электрическая
В одном устройстве объединено две функции: собственно измерение температуры и времени (часы). Индикация производится попеременно, сменяясь через десять секунд. Для настройки часов используется две кнопки, аналогично простым китайским электронным часам: одна отвечает за выбор параметра, вторая за его изменение. Питается устройство от сети с помощью постоянного стабилизированного источника тока напряжением пять вольт (плата от зарядного устройства телефона).
Датчиком температуры является микросхема DS18B20. Так как в устройстве «Часы-термометр» нет своей батареи, при пропадании питания естественно показания будут сбиваться.
И что бы это не явилось причиной какого-нибудь опоздания человека на жизненно важные дела, имеется интересная «фишка» — при подаче питания вместо времени на дисплее будут отображаться прочерки, пока не нажмёшь одну из двух кнопок настройки.
Корпусом самодельного измерителя температуры послужила подходящая коробочка от запонок. В неё была помещена сама плата часов-термометра и плата вытащенная из телефонного зарядника. Датчик DS18B20 сделан выносным и подсоединяется через разъём.
Список необходимых деталей
- Микроконтроллер Atmega8 – 1шт.
- Кварц 32768 Гц – 1 шт.
- Датчик температуры DS18B20 – 1шт.
- Семи сегментный индикатор(4 – разряда) – 1 шт.
- Резисторы SMD типоразмера 0805:
- 620 Ом – 8шт.
- 0 Ом (перемычка) – 1шт.
- 4,7 кОм – 1шт.
- Тактовые кнопки – 2 шт.
Видео работы устройства на Ютуб-канале
Источник: https://radioskot.ru/publ/izmeriteli/chasy_termometr_na_mikrokontrollere_atmega8/15-1-0-1182
РадиоКот :: Часы-пропеллер по-русски
Добавить ссылку на обсуждение статьи на форумеРадиоКот >Схемы >Цифровые устройства >Бытовая техника >
| Теги статьи: | ЧасыМеханическая развертка (пропеллер итп)Добавить тег |
Часы-пропеллер по-русски
Привет, Радиокот! Поздравляю тебя с Днем Рождения и желаю, чтобы твой сундук со схемами и описаниями девайсов пополнялся всё большим количеством шедевров! И со своей стороны вручаю тебе вот такой вот красивый подарочек!

- сохранение времени и даты при отключении питания;
- автоматическое отключение на определенный промежуток времени (например, когда дома никого нет, — чтобы понапрасну не расходовать ресурс мотора);
- снижение яркости и скорости вращения стрелки в ночное время (ночью зрение более инерционно, поэтому снижение оборотов не приведет к сильному мерцанию часов);
- энергия на стрелку должна передаваться бесконтактным методом;
- управление часами с пульта ДУ и с компа;
- максимальная надежность (никаких скользящих контактов и биений стрелки быть не должно);
- конструкция должна быть из доступных компонентов;
Итак, часы делаем из двух плат – подвижная, находящаяся на роторе мотора и неподвижная. На подвижную плату было решено возложить только функцию индикации, а на неподвижную – все остальные функции. Энергию и данные на подвижную часть было решено передавать по трансформатору, об этом подробнее ниже)) А сейчас – схемы.
Рис. 1. Неподвижная часть (кликабельно)
Рис. 2. Подвижная часть (кликабельно)
Итак, начнем повествование с неподвижной части. Сердцем схемы является микроконтроллер (МК) DD3 ATmega48. Этот контроллер был выбран потому, что имеет 4 ШИМ-порта, у которых можно настраивать период ШИМ. Это очень удобно для экспериментального подбора рабочей частоты и скважности питающего напряжения вращающегося трансформатора.
С помощью этих портов также можно управлять мостовым преобразователем с генерацией мертвого времени (dead-time, чтобы исключить одновременное открытие верхнего и нижнего транзистора). Такой преобразователь собран на элементах DA1, DA3, VT1, VT3. Топология «мост» выбрана неслучайно.
При таком питании трансформатора, на вторичной обмотке не будет страшных выбросов, которые будут нам мешать, поскольку мы не только передаем на нее напряжение, но еще и данные.
Еще один вывод ШИМ задействован для регулировки скорости вращения мотора.
При отключении питания текущие время и дата должны сохраняться. За это отвечает микросхема часов реального времени DD2.
Чтобы часы управлялись с пульта, в схеме установлен фотоприемник TSOP4836. Хочу сказать, подойдет абсолютно любой фотоприемник на 5 В и рабочей частотой 36 кГц (38 кГц для пульта SONY). Кстати, прошивка написана для пультов SONY, в частности для RM-869.
Светодиод HL2 – инфракрасный. Его излучение используется стрелкой для определения своего положения.
На борту микроконтроллера также имеется аппаратный интерфейс UART. Через преобразователь интерфейсов USB-UART DD1, часы можно подсоединить к компу для конфигурирования и загрузки изображения/текста. Кроме того, по этому же интерфейсу можно и отправлять данные на подвижную часть! О передачи данных я расскажу попозже, а сейчас
Ядром стрелки является микроконтроллер ATmega8L, к портам которого через резисторы подсоединено 20 светодиодов, фотодиод как датчик положения, и выход дешифратора UART. Обращаю внимание, что половина светодиодов соединяется катодами к портам МК, а вторая половина – анодами. Это сделано для того чтобы распределить нагрузку между питающей и земляной шиной МК, и не перегружать одну из шин.
В качестве стабилизатора был выбран давно всеми избитый 78L05))). Ставить импульсный преобразователь не имеет смысла, т.к. большую часть времени идет сильная просадка на вторичной обмотке трансформатора.
Имеет смысл поставить какой-нибудь LDO-стабилизатор, но выигрыш по сравнению с 78L05 будет минимальным.
Фактически, в данном случае стабилизатор тут нужен только для того, чтобы не сжечь схему, когда не горят светодиоды, но в основном, большую часть времени выходные транзисторы стабилизатора открыты.
Стрелка определяет свое положение благодаря фотодиоду (или фототранзистору) HL21. Он может быть любым.
Через диод VD5 сигнал поступает на вход дешифратора. Дешифратор представляет из себя 2 RC-фильтра и 2 компаратора, которые преобразуют ВЧ сигнал высокого уровня в «1», а низкого уровня – в «0».
Ну и теперь самое интересное: как идет
Изначально предполагалось передавать данные путем изменения частоты питающего стрелку напряжения (20 кГц – «1», неактивный уровень UART; 100 кГц – «0», активный уровень UART). Однако красиво передача данных шла только при моделировании в Протеусе))) В реальности же это оказалось сделать почти невозможным.
Позже пришла идея переключать режим работы трансформатора мост/полумост. А прикол здесь вот в чем. При питании транса от мостового преобразователя (передаем «1»), на выходе трансформатора мы получаем и положительные и отрицательные импульсы. Таким образом, положительные импульсы проходят через диод VD5 и в точке А (рис. 2) мы получаем сигнал, форма которого показана на рис. 3.
Рис. 4. Форма сигнала в точке А рисунка 2 при работе трансформатора в режиме полумоста
Разница между представленными сигналами колоссальная! Далее после диода VD5 фильтруем сигнал с помощью DA3, и получаем на ее выходе чистый UART))
С указанными номиналами дешифратор работает на скорости до 1200 бит/с. Теоретически, можно достичь и большей скорости, но меня и эта вполне устроила.
Хочу заметить, для связи со стрелкой неподвижная часть тоже использует аппаратный UART. В нормальном режиме включена связь с компьютером: транзистор VT2 закрыт и данные на скорости 38400 бит/с без препятствий передаются на DD1 и далее на комп.
Когда нужно передать данные на подвижную часть, мы открываем VT2, тем самым блокируя передачу данных на комп; конфигурируем скорость в 1200 кбит/с и включаем прерывания INT0 по фронту и срезу.
В прерывании считываем состояния ножки и в соответствии с уровнем включаем трансформатор в нужный режим.
При переходе в полумостовой режим, стрелка получает всего 50% мощности и плюс к этому более пульсирующее питающее напряжение (как будто с диодного моста перешли на один диод).
Если в момент передачи данных горят светодиоды, то при передачи «0» мы получаем сильную просадку питающего напряжения. Так как МК работает на встроенном RC-генераторе, и его тактовая частота зависит от напряжения, то мы получаем рассинхронизацию при приеме данных.
В связи с этим нужно либо гасить светодиоды во время обмена данными (как я и сделал), либо ставить кварц.
К статье прилагаю исходный код для стрелки. Он слабо закомментирован, но в принципе разобраться в нем не сложно. Опишу основные моменты:
- Разрешение экрана составляет 3 градуса (1 оборот стрелки разбит 120 секторов)
- Для вывода изображения используется двойной буфер – в одном рисуем, а второй индицируем. Это сделано для того, чтобы избежать мусора на экране в момент перерисовки.
- Функция вывода изображения на экран написана на if-else, т.к. нужна высокая скорость ее выполнения.
- Вычисление периода переключения секторов производится не каждый оборот, а только когда происходит некоторое изменение скорости вращения стрелки. Это помогает избежать сильного дерганья (джиттера) изображения, когда часы работают на стабильных оборотах.
- Однако небольшое дерганье изображения иногда все же идет. Оно обусловлено отсутствием приоритетов прерываний в данном МК. Если вдруг раньше срабатывает прерывание от ИК-фотодиода, то изображение чуток смещается против часовой стрелки. Для устранения этого бага требуется МК с векторным контроллером прерываний.
Исходники стационарной части не выкладываю. Для нее прогу пришлось писать на скорую руку, и там все очень криво написано. Не хочу стыдиться. Но .hex выкладываю для обеих плат.
Теперь перейдем к моей самой нелюбимой части. Называется она
Итак, мы имеем:
Рис. 5. Печатная плата неподвижной части (слева — вид сверху, справа — вид снизу)
Рис. 6. Подвижная часть. Овалом обозначены участки со снятой маской
На обратной стороне стрелки видим посадочное место под фотодиод и площадки со снятой маской. Эти площадки сделаны для балансировки: на них наносим припой до тех пор, пока не пропадут биения при вращении. Стрелка вращается со скоростью 40 об/мин, так что очень важно хорошо ее сбалансировать.
В качестве мотора я использовал обычный кулер. На рис. 7 показаны 2 кулера: один с подшипником скольжения второй – качения.
Рис. 7. Кулеры, использованные в качестве моторов в моих конструкциях. Слева – с подшипником качения, справа – скольжения
Казалось бы – подшипник качения конечно же будет лучше, но… Да, он действительно более дорогой, долговечный, и сразу набирает нужные обороты, но подводный камень тут в том, что плата управления в кулере с подшипником качения проще, и похоже она питает мотор чистыми прямоугольными импульсами (а не синусом), что приводит к сильному гулу мотора. В кулере с подшипником скольжения иная ситуация, там похоже синус на обмотках мотора и он практически бесшумен!
Теперь сборка. У кулера выкусываем все лопасти, и откусываем моторчик от креплений (рис. 8).
Рис. 8. Перекусываем крепления по линиям
Напильником сглаживаем образовавшиеся неровности на роторе. Затем на нем наматываем вторичную катушку (она будет питать стрелку). Аккуратно наматываем 60 витков проводом 0,2 мм. Катушку заклеиваем, чтобы не разматывалась. Получаем что-то вроде этого:
Рис. 9. Стрелка, установленная на роторе с намотанной вторичной катушкой
Затем делаем каркасик чуть большего диаметра, чем получившаяся катушка. Зазор между катушками должен быть как можно меньше! Затем на каркас наматываем первичную обмотку – 35 витков провода 0,35 мм. Ее мы приклеиваем к бывшим креплениям статора. В итоге получим то что показано на рис. 10.
Рис. 10. Монтаж первичной обмотки
ВНИМАНИЕ!!! Мотор не разбирать! Разборка увеличит его уровень шума и снизит его долговечность.
Теперь корпус.
Тут уж дело вкуса и возможностей каждого. Я делал из оргстекла. Лучше всего конечно заказать в фирме, которая занимается лазерной резкой, гравировкой. В приложениях к статье есть чертеж, по которому я уже заказывал лазерную резку оргстекла. Полученные после лазерной резки элементы удобно склеивать, и в итоге получается красивый корпус.
Когда корпус собран, к центру приклеиваем моторчик со стрелкой, на стойках сзади ставим стационарную плату, вставляем ИК-диод, все соединяем и готово! Можно включать! Все должно заработать сразу. Единственное, если не пойдет передача данных на стрелку, то может потребоваться подбор резистора R28 на стрелке.
Рис. 11. Готовая конструкция
Рис. 12. Готовая конструкция. Вид сбоку
А пользоваться им просто: управление идет с пульта. Назначение кнопок показано на рисунке 13.
Рис. 13. Назначение кнопок пульта (кликабельно)
В нормальном режиме кнопки 0..9 выбирают режим индикации.
Любая кнопка настройки включает режим установки. При этом подсвечивается изменяемый параметр. Установка значения – кнопки 0…9, переход к другому значению: P+ и P-.
Ну, вроде всё рассказал))) Теперь немного фоток))
Рис. 14. Темы часов
Рис. 15. Вывод картинок
Рис. 16. Режим настроек
Рис. 17. Дневной (а) и ночной (б) режимы. Съемка велась при фиксированной выдержке
Кстати, по поводу ночного режима: яркость уменьшается за счет снижения мощности, подводимой к трансформатору (при этом трансформатор по-прежнему работает в мостовом режиме). Из-за понижения напряжения на стрелке, у нас просто начинают тускло светиться светодиоды, и никакого дополнительного ШИМа реализовывать не нужно))) Дешево и сердито!
Ну и напоследок – прототипы. С чего всё начиналось))
Рис. 18. Первая конструкция в работе
Рис. 19. Первая конструкция
Рис. 20. Как вариант корпуса (самодельный, сделан не лазерной резкой)
И, конечно же, видео: https://www.youtube.com/watch?v=aSexix0_GZM&feature=g-upl
Файлы: Схемы и печатные платы в формате P-CAD 2002Исходник и прошивка стрелкиПрошивка неподвижной частиЧертеж корпуса в формате CorelDraw
Все вопросы в Форум.
| Как вам эта статья? | Заработало ли это устройство у вас? |
Эти статьи вам тоже могут пригодиться:
Простейшые часы на AVRЭлектронные часы с наворотами.Chronulator 2.0 – часы на стрелочных вольтметрах с подсветкойВиртуальные часы-брелокЧасы из HDD: Русский ответПервичные часы 2 — микроконтроллер наносит ответный ударПростые часы-ночник2Часы — информатор для ПКЧасы на RGB матрицах + радио + BMP180+AM2321 +ПДУПервичные часы.Часы — будильник на микроконтроллере PIC16F628A.Часы + секундомер + будильник «МЕРКУРИЙ-401А». Начало.NTP LED Clock.Часы-термометр на микроконтроллере ATmega8. V 2.0Не очень простые часы на матричных индикаторах, зато с музыкойЧасы «Микроконтроллер и 7 светодиодов».BinT ver 1.00. ( От binary time)WaterClockЧасы на микросхеме КА1016ХЛ1 и светодиодных индикаторахGPS Мультичасы «МЕРКУРИЙ 402». Финал.Как я делал часы на ГРИГлупые часы с календаремЧасы, календарь, термометр.Часы на PIC.И снова говорящие — поющие часы. Суперсрочно!Часы из амперметровОдноламповые часыОчень маленькое, но очень полезное устройство.Миниатюрные часы на вакуумно-люминисцентном индикаторе ИВ-21
Источник: https://www.radiokot.ru/circuit/digital/home/141/
Часы-Термометр для гаража на больших индикаторах — Community «Электронные Поделки» on DRIVE2
Решил собрать ещё одни часы для гаража так как прошлые показались мне маленькими в моём большом гараже. Мне нужны часы побольше. Одни у меня уже забрал сосед по гаражу вторым на LCD1602 придумал другое применение.
Схема новых часов аналогична моим первым часам только добавлены драйвер и транзисторные ключи. В качестве драйвера индикации использовал UNL2804, a в качестве драверов индикаторов транзисторные ключи на NPN транзисторах.
Индикаторы применил с общим анодом SA15-11SRWA.
Zoom
индикаторы
Я уже пытался разработать часы на больших индикаторах разработка обсуждалась в статье Часы-Термометр в гараж версия с большими индикаторами (разработка). Но до практической реализации дошло только сейчас.Вот сама схема.
Zoom
схема
- Разработал плату согласно имеющимся компонентам.
Zoom
Сторона деталей
Zoom
Сторона проводников
- Ну и наконец готовое устройство.
Zoom
часы-термометр
Zoom
снял индикаторы
Zoom
Плата без индикаторов
Zoom
сторона дорожек
Так как у индикаторов тонкие ножки они держатся не очень надёжно. Я их слепил между собой двух сторонним скотчем.
Zoom
слепил вместе
И когда они все вместе из гнёзд уже не народят выпасть, держатся надёжно. И ещё для чёткости различения цифр обтянул тонирующей плёнкой. Получилось очень даже хорошо. Вот смотрите.
Zoom
время, точка мигает но сфотографировал когда точка погасла
Zoom
температура
Вся документация схема, плата прошивка в архиве.Скачать архив в архиве все мои разработки часов по этой схеме. И добавлю, плату можно использовать с любыми, самодельными индикаторами просто в разъёмы втыкаем штекера от своих индикаторов, допустим как сделано тут.Вот собственно и всё.
- Небольшое видео по работе часов.
Думаю эти часы в моём гараже обоснуются надолго.
Источник: https://www.drive2.com/c/452571356572156069/
Наружные часы-термометр с боем
Владимир Макаров
Как известно, в дачный период хозяева и гости много времени проводят вне помещения – за размеренной беседой под навесом или на качелях, за подвижной игрой на лужайке или садово-огородными работами по выращиванию сказочного урожая. В это время хочется одеть легкие одежды, оставить все гаджеты в доме и предаться свободному общению, отдыху или творчеству на приусадебном участке.
Но как бы глубоко мы не увлекались любимым занятием всегда будет интересовать вопрос: а который час? Не пора ли готовить обед, смотреть продолжение мыльной оперы, кормить ребенка и т.д.?
К чему я вас подвожу? Да к тому, что пора, пора во дворе установить большие часы, да еще с боем курантов, ну и термометр не помешал бы.
В данной статье описывается устройство, в котором в одном корпусе объединены наружные часы и термометр. Размер корпуса устройства — 36х28х7см, размер индикатора одной цифры часов или минут — 5х9см, размер индикатора одной цифры термометра — 3х5cм. При этих размерах цифры хорошо различимы на расстоянии до 25 метров. Часы показывают время в часах и минутах в формате Н24.
Начало каждого часа в период с 09.00 до 23:00 включительно обозначается звуком курантов Спасской башни Московского Кремля. На фонограмме записан перезвон колоколов и бой колокола по количеству наступивших часов суток в формате Н12. В 23:00 в алгоритме программы и прошивки исполняется мелодия «Спокойной ночи, малыши», звуковые файлы которой так же имеются в архиве.
Термометр показывает актуальные положительные и отрицательные значения температур воздуха, с точностью до десятых долей градуса.
Внешний вид часов показан на рисунке 1.
Рисунок 1.
Внешний вид часов-термометра.
Демонстрационный ролик:
Часы-термометр
Схема электрическая принципиальная контроллера часов-термометра показана на рисунке 2.
Рисунок 2.
Контроллер. Схема электрическая принципиальная.
Контроллер устройства разработан основе микроконтроллера ATmega8 (DD3). Микроконтроллер считывает значения часов и минут с микросхемы часов реального времени DS1307N (DD2).
Взаимодействие МК с DS1307N осуществляется по последовательному двухпроводному интерфейсу TWI (Two Wire Interface), являющемуся полным аналогом интерфейса I2C (Inter-Integrated Circuit).
Микроконтроллер ATmega8 имеет на борту аппаратную реализацию сигналов TWI (выводы SDA и SCL). В прикладную программу устройства включены функции взаимодействия с оборудованием TWI микроконтроллера и функции взаимодействия с микросхемой DS1307N.
Программой также обеспечивается возможность корректировки пользователем значений часов и минут в микросхеме DS1307N для чего предусмотрена обработка нажатий кнопок устройства «часы+» (SA1) и «минуты+» (SA2), так же возможна корректировка и показаний термометра. Блок кнопок выполнен в виде пульта.
Назначение кнопок управления следующее;
Кнопка «часы+» — установка часов (увеличение на 1), кнопка «минуты+» установка минут (увеличение на 1), «температура-» — корректировка температуры (уменьшения на 0.1 градуса), «температура+» корректировка температуры (увеличение на 0.1 градуса).
Далее в пульте следует выключатель питания звукового генератора и регулятор громкости. При удержании кнопки выполняется инкремент (+) или декремент (-) с отображением на индикаторах текущего времени или дельты, на которую отображаемая температура будет отличаться от температуры, измеренной датчиком DS18B20. Это для желающих выставить температуру по своему доверенному термометру.
Рисунок 3.
Внешний вид пульта управления.
Рисунок 4.
Обратная сторона пульта управления.
Включение DS1307N осуществлено по типовой схеме. Стабильный ход часов обеспечивается кварцевым резонатором на 32768Гц (Y1), включенным в цепь внутреннего генератора часов.
Непрерывный ход часов в периоды отключения основного питания (+5В) поддерживается резервным элементом питания (GB1) типа CR2032 напряжением 3В.
Выводы SDA и SCL через подтягивающие резисторы (R5 и R6) подключаются к шине TWI. Индикатор «разделительное двоеточие» (DS1), разделяющий на табло разряды часов и минут, отображает секундные импульсы, снимаемые с вывода SQW/OUT микросхемы DS1307N. Для управления индикатором DS1 используется транзистор КТ315Б (VT1), работающий в ключевом режиме.
Считанные значения часов и минут отображаются на табло семисегментными индикаторами часов (DS2, DS3) и минут (DS4, DS5). Значения (0,1) сегментов для всех четырех индикаторов часов передаются в регистры сдвига на микросхемах 74HC595 (DD4, DD5, DD6, DD7), включенных последовательно.
В каждом цикле передачи данных на табло микроконтроллер сбрасывает регистры сдвига по входу !MR, а затем последовательно бит за битом выдает данные о включении сегментов на вход DS микросхемы DD4 и продвигает биты по регистрам сдвига подачей сигнала такта SH_CP. Особенностью регистра сдвига 74HC595 является то, что значения битов регистра сдвига передаются на выходы Q0..
Q7 не сразу, а при поступлении импульса на вход «защелки» ST_CP. Это позволяет высвечивать разряд на табло после полного заполнения регистра сдвига, что исключает мерцание сегментов индикатора во время заполнения регистра сдвига. С выходов Q0..Q7 регистров сдвига сигналы поступают на входы транзисторов Дарлингтона в микросхемах ULN2803A (DD8, DD9, DD10, DD11).
Эти транзисторы обеспечивают согласование разных уровней питания регистров сдвига и индикаторов (5 и 12 Вольт соответственно) и позволяют подключать мощную индикаторную нагрузку вплоть до 500мА на один сегмент индикатора. При наступлении нового часа для исполнения звуковой имитации боя курантов звуковому генератору через разъем XP1 подается код мелодии (контакты L0, L1, L2, L3 и L4).
Через этот же разъем подается питание для звукового генератора (контакт VDD, GND).
С выхода BUSY («занят») разъем XP1 снимается сигнал занятости звукового генератора проигрыванием фонограммы, но в данной версии прикладной программы этот сигнал не обрабатывается. Описание звукового генератора представлено в отдельном разделе данной статьи.
Датчик температуры DS18B20 (DD2) обеспечивает измерение температуры окружающей среды и подачу кода температуры в микроконтроллер по его запросу.
Взаимодействие МК с DS18B20 осуществляется по однопроводному интерфейсу, задействующему только 1 порт МК (PINС3). Датчик подключен по классической схеме, взятой из описания DS18B20.
Обязательным дополнительным оборудованием является подтягивающий резистор 4.7кОм (R7).
Прикладная программа содержит необходимый набор функций для инициализации датчика, записи команд и чтения данных. Прочитанное микроконтроллером значение температуры приводится для отображения на индикаторы в формате S ХХ.Х T, где S – знак температуры (+ или -), XX.
Х – целая и дробная часть значения температуры, T – символ градусы по Цельсию.
Отображение температуры осуществляется с помощью регистров сдвига 74HC595 (DD12, DD13, DD14), транзисторов Дарлингтона в микросхемах ULN2803A (DD15, DD16, DD17) и индикаторов (DS7, DS8, DS9) аналогично описанному выше способу отображения часов и минут.
Индикатор «+/-» управляется через транзисторы Дарлингтона непосредственно микроконтроллером. Индикатор «°С» включен постоянно. В устройстве предусмотрена корректировка отображаемой температуры в диапазоне от минус 5.0 до плюс 5.0 градусов с шагом 0.1 градуса.
Установленное значение корректировки складывается с измеренным значением температуры и отображается на индикаторах.
Установленное значение корректировки постоянно храниться в энергонезависимой памяти МК (EEPROM) и каждый раз после подачи питания на устройство восстанавливается в прикладной программе.
Установка значения корректировки температуры осуществляется кнопками «температура-» (SA3) и «температура+» (SA4).
Цепочка R8-С5 выполняет начальный сброс МК при подаче питания.
Для внутрисхемного программирования МК предусмотрен разъем для подключения программатора (XP2).
Питание устройства осуществляется напряжением 12 Вольт. Для питания МК ATmega8, датчика часов DS1307N, датчика температуры DS18B20 и регистров сдвига 74HC595 осуществляется преобразование питания DC-DC в 5 Вольт с использованием микросхемы MC34063 (DA1), включенной по рекомендованной в описании схеме.
Для получения 5 Вольт на выходе DC-DC преобразователя значения резисторов R2 и R4 должны быть 1кОм и 3кОм соответственно.
Значения фьюзов микроконтроллера ATmega8: D9, E4 (HIGH, LOW).
Звуковой генератор
Схема электрическая принципиальная звукового генератора показана на рисунке 5.
Рисунок 5.
Звуковой генератор. Схема электрическая принципиальная.
Звуковой генератор построен на микроконтроллере ATtiny861 (DD1). В основу положено известное решение «255-Voice PCM Sound Generator» (Автор — ChaN, оригинал статьи здесь — http://elm-chan.org/works/sd20p/report.html). Устройство и программа адаптированы для использования в устройстве часов. Звуковой генератор обеспечивает проигрывание WAV файлов записанных на microSD Card в соответствии с кодами мелодий, выставленных на контактах L4..L0 разъема XP1.
С помощью преобразователя на линейном регуляторе LM1117-3.3 (DA2) подаваемое на устройство напряжение12 Вольт преобразуются в напряжение 3.3 Вольта, необходимое для питания microSD Card и микроконтроллера устройства. Для согласования уровней выходных сигналов от контроллера часов-термометра (5B) с уровнями входных сигналов звукового генератора (3.3В) служат делители напряжения на резисторах R9…R18.
Запуск звукового генератора осуществляется всякий раз, когда меняется состояние входной комбинации L4..L0 на разъеме XP1 при условии, что генератор в это время не занят проигрыванием звукового файла. Запуск осуществляется по прерыванию на ножках PINA3…PINA7. Функция обработки прерывания преобразовывает код L4..L0 в имя файла. Микроконтроллер читает файл с microSD Card и направляет поток на внутренний широтно-импульсный модулятор — на выходах OC1A и OC1B формируется звуковой сигнал фонограммы. Звуковой сигнал через цепочку R1, R2, R3, C2, C3 подается на вход усилителя низкой частоты TDA7056A (DA1), нагруженный динамиком SP1 (8Ом). Резистор R5 и потенциометр R4 обеспечивают регулировку громкости. Во время проигрывания фонограммы светится светодиод VD1, который также служит для индикации ошибок при работе звукового генератора с microSD Card. Перечень ошибок и количество соответствующих каждой ошибке вспышек VD1 приведен в исходном коде программы звукового генератора. Подключение microSD Card осуществлено через адаптер формата SD Card, который в свою очередь подключаен к устройству через разъем XS1.
Цепочка R7-С7 выполняет начальный сброс МК при подаче питания.
Для внутрисхемного программирования МК предусмотрен разъем для подключения программатора (XP2).
Значения фьюзов микроконтроллера ATtiny861: DF, C1, FF (HIGH, LOW, EXT)
Индикаторы
Питание всех индикаторов осуществляется напряжением 12 Вольт.
Индикаторы часов и минут выполнены из двух рядов светодиодов. Расположение светодиодов в сегментах показано на рисунке 6.
Рисунок 6.
Расположение сегментов часов.
Сегменты A,D состоят из 10 светодиодов на сегмент, сегменты B, C, E, F, G из 12 светодиодов на сегмент, разделительное двоеточие состоит из 8 светодиодов.
При таком расположении светодиодов в сегментах цифры на индикаторах будут высвечиваться как показано на рисунке 7.
Рисунок 7.
Свечение цифр на индикаторах часов.
Индикаторы термометра выполнены из одного ряда светодиодов. Расположение светодиодов в сегментах показано на рисунке 8.
Рисунок 8.
Расположение сегментов термометра.
При таком расположении светодиодов в сегментах цифры на индикаторах будут высвечиваться как показано на рисунке 9.
Рисунок 9.
Свечение цифр на индикаторах термометра.
При соединении светодиодов в сегменте они могут быть включены последовательно. Для расчета рекомендую воспользоваться LED-калькулятором http://cxem.net/calc/ledcalc.php.
Согласно расчетам при последовательном включении светодиодов должны быть использованы номиналы резисторов, указанных на рисунке 10.
Рисунок 10.
Схема последовательного включения светодиодов.
Обратите внимание, что для разных типов светодиодов схемы отличаются.
Конструкция
Самым трудоемкими элементами при изготовлении устройства являются индикаторы. Каждый разряд изготавливается на отдельной плате — удобно травить, паять, тестировать. Печатные платы разработаны в DipTrace. Макет печатной платы одного разряда часов показан на рисунке 11.
Рисунок 11.
Макет печатной платы разряда часов.
- Печатные платы всех элементов табло часов-термометра представлены в архиве.
- Печатная плата контроллера представлена на рисунке 12, а внешний вид платы на рисунке 13.
Рисунок 12.
Макет печатной платы контроллера.
Рисунок 13.
Внешний вид контроллера.
Печатная плата звукового генератора представлена на рисунке 14, а внешний вид платы на рисунке 15.
Рисунок 14.
Макет печатной платы звукового генератора.
Рисунок 15.
Внешний вид звукового генератора.
Устройство собрано в корпусе, спаянном из металлического оцинкованного профиля, используемого для монтажа гипсокартона.
В корпусе размещены промышленный блок питания (12В/2А), динамик, панель управления, табло с индикаторами, контроллер и звуковой генератор. Размещение блоков часов-термометра показано на рисунках 16 и 17.
Рисунок 16.
Размещение блоков устройства в корпусе.
Рисунок 17.
Размещение индикаторов устройства в корпусе.
В архиве размещены файлы:
ExternalClock.c – исходный код программы на Си контролера часов-термометра
ExternalClock.hex – прошивка контроллера часов термометра
SoundGenerator.rar – исходный код программы на Си звукового генератора
SoundGenerator.hex – прошивка звукового генератора
SoundFiles.
rar – звуковые файлы «Куранты»
SCH_ExternalClock.dch – схема контроллера в DipTrace
SCH_SoundGenerator.dch – схема звукового генератора в DipTrace
PCB_ExternalClock.dip – печатная плата контроллера в DipTrace
PCB_ExternalClockControl.dip – печатная плата пульта управления контроллера в DipTrace
PCB_SoundGenerator.
dip – печатная плата звукового генератора в DipTrace
PCB_DigitLarge.dip – печатная плата цифры часов в DipTrace
PCB_DigitLargeD.dip – печатная плата разделительного двоеточия в DipTrace
PCB_DigitSmallM.dip – печатная плата цифры термометра в DipTrace
PCB_DigitSmallS.dip – печатная плата знака «+/-» термометра в DipTrace
PCB_DigitSmallT.
dip – печатная плата символа «градус по Цельсию» термометра в DipTrace
- Архив, первая часть.
- Архив, вторая часть.
- Архив разбит на две части (из-за объёма), поэтому для нормальной его распаковки скачивайте (сохраняйте) обе части в одно место.
Источник: http://vprl.ru/publ/umnyj_dom/avtomatika_dlja_doma/naruzhnye_chasy_termometr_s_boem/20-1-0-89
Говорящие часы — термометр с календарем
Хочу представить новую схему говорящих часов. Основой данных часов является микроконтроллер ATmega8, микросхема часов используется DS1307, а микросхема термометра — LM75. И микросхема часов DS1307 и микросхема термометра LM75 общаются с микроконтроллером по протоколу I2C или по другому TWI — двухпроводный интерфейс.
Хранилищем звуковых файлов является micro SD карта памяти, соединяемая с микроконтроллером по SPI интерфейсу.
Аудио файлы на карте памяти хранятся в корне и имеют строго определенные имена для того, чтобы контроллер мог точно по имени найти аудио файл для воспроизведения по условиям именно в данный момент в зависимости от события — воспроизвести конкретное время или проиграть трек будильника.
На индикацию в данном устройстве выводится много информации — текущее время, дата, день недели, температура окружающей среды, индикация включенности будильника, а также выбранный профиль периодического оповещения. В связи с этим обилием информации в качестве дисплея выбран LCD-дисплей 2 строки по 16 символов.
Применение семисегментных индикаторов, считаю, не нужно, потому что время в любой момент времени можно озвучить и прослушать эту информацию, также семисегментников понадобится много, если все же их использовать. А меню настроек на семисегментных индикаторах выглядело бы как-то не очень хорошо.
Звуковой сигнал на выходе микроконтроллера сравнительно слабый, поэтому схема часов получила усилитель для полноценности. При воспроизведении звукового файла, загорается светодиод LED1. Также было принято решение не плодить прошивки устройства по частоте звукового сигнала, поэтому ниже будет представлена прошивка на частоту только 44 кГц.
Сама схема часов предоставлена ниже:
Пройдемся немного по схеме. Для питания схемы используется линейный стабилизатор напряжения L7805 для 5 вольтового питания и для питания карты памяти параметрический стабилизатор на стабилитроне 3,3 вольта. Микросхему линейного стабилизатора L7805 можно заменить на отечественный аналог КР142ЕН5А, стабилитрон можно заменить на любой другой на данное напряжение.
Если вам покажется не совсем удачным такая комбинация, в качестве стабилизатора напряжения можно использовать любые другие микросхемы (LM317, MC34063, LM2576, LM2596 и др.), настроенные на необходимое напряжение на выходе. Стабилитрон так же можно заменить на стабилизатор напряжения. Мною был подобран, наверно, самый экономичный вариант питания схемы.
Как было указано выше, микросхема часов DS1307 и микросхема термометра LM75 работают по протоколу I2C. Данный протокол требует подтягивающих pull-up резисторов (то есть подтягивают линию данных к плюсу питания) для корректной работы. Выводы SCL и SDA данных микросхем подтянуты к плюсу питания резисторами R10, R11.
Резисторы R9 и R12 также функционально выполняют функцию pull-up резисторов для возможности формирования сигнала на дополнительных выводах микросхем. Функционально данные выводы в схеме не используются — только для информации. В будущем при помощи дополнительного вывода микросхемы LM75 OS возможно организовать дополнительно термостат.
Этот вывод подает положительный сигнал при превышении заданного порога температуры и отрицательный сигнал при понижении температуры до заданного порога — этакий гистерезис. Обязательным является конденсатор C8, располагать его нужно как можно ближе к выводам микросхемы термометр. Это необходимо для того, чтобы она работала стабильно.
Питание микросхемы часов происходит через резистор R7 и диод VD2, необходимы для того, чтобы при отсутствии питания 5 вольт, когда микросхема работает от батарейки, не расходовать ее энергию на всю схему, запитанную от 5 вольт.
Далее в схеме используется LCD-дисплей SC1602. Дисплей использует внутри себя микроконтроллер HD44780, поэтому можно использовать любой другой дисплей на базе такого же контроллера. Резистор R1 подстроечный, он регулирует контрастность символов на дисплее.
Можно использовать любой подстроечный или переменный резистор для этих целей вместо указанного в списке элементов, а варьировать номинал резистора можно в разумных пределах.
Подсветку такого дисплея можно организовать как на самой плате LCD-дисплея подпаиванием перемычки и резистора (R9 и J3 — маркировка на плате дисплея SC1602) в предусмотренных местах или же через токоограничительный резистор подать напряжение питания на выводы «А» и «К».
Номинал токоограничительного резистора составляет порядка 22 — 27 Ом. В зависимости от требуемой яркости номинал можно варьировать, но не рекомендую ниже 22 Ом, больше можно пока не погаснет подсветка полностью. В схеме применен первый вариант включения подсветки, поэтому на схеме устройства это не обозначено.
Резистор R2 подтягивает положительное напряжение на вывод микроконтроллера Atmega8 PC6 или reset. это необходимо для предотвращения самопроизвольного перезапуска схемы часов. Номинал в пределах кОм можно варьировать при отсутствии заданного на схеме номинала.
Статусный светодиод LED1 подключен к микроконтроллеру через токоограничительный резистор для предотвращения порчи при превышении тока через светодиод. Номинал этого резистора можно изменять в соответствии с используемым светодиодом, а именно его параметров — падении напряжения.
Чем меньше падение напряжения на диоде, тем больший номинал резистора нужно использовать для фиксированного тока (в большинстве случаев нельзя превышать ток в 20 мА). Звуковой сигнал снимается с вывода микроконтроллера PB1. Для усиления сигнала используется усилительный каскад на двух транзисторах.
Транзисторы работают в ключевом режиме, поэтому компенсировать смещение базы не нужно. Конденсатор C6 ограничивает ток через динамик, когда ШИМ не работает. Номинал этого конденсатора можно изменять в широких пределах. Катушка L1 и конденсатор C7 образуют LC-фильтр, необходимый, чтобы убрать шумы.
В зависимости от необходимого уровня громкости, коллектор Т1 можно подключать или к 5 вольтам (воpможно потребуется более мощный стабилизатор VR1 в этом случае) или к источнику напряжения 12 вольт.
Аудио файлы хранятся и считываются с карты памяти micro SD. Объем карты можно использовать от стареньких на несколько десятков мегабайт до 32 Гб. Заостряю ваше внимание на то что качество звука может зависеть от качества самой карты памяти. При применении карты памяти на 8 Гб фирмы mirex почему-то было больше шумов по сравнению с картой памяти фирмы kingston.
Для воспроизведения звука можно использовать любые динамики. Управление настройками происходит при помощи тактовых кнопок. Их можно заменить на любые другие кнопки. Мощность всех резисторов 0,25 Вт. Номиналы всех конденсаторов можно варьировать в разумных пределах. В качестве резервного питания микросхемы часов используется батарейка типа CR2032.
Ее можно заменить на любой другой источник резервного питания. Если не применять резервное питание для микросхемы часов, то при выключении питания время и дата будет сбиваться. Для большей точности ходя часов кварц рекомендуется применять наиболее точный, например, можно использовать кварцы из материнских плат.
Нужно также отметить контакт RF — к нему подключается выход модуля переключения на радиобрелках http://cxem.net/review/review8.php. Необходимо использовать модуль на 12 вольт. При нажатии кнопки брелка произойдет замыкание вывода RF схемы говорящих часов на землю, при этом будет воспроизведено текущее время. Модуль переключения оптимальнее всего настроить в режим «Toggle» — кнопка брелка нажата, контакт RF замкнут на землю, кнопка брелка отжата, исходное положение.
Традиционно схема собиралась на макетной плате для контроллера Atmega8 собственного производства:
Устройство тестировалось в таком виде — проблем обнаружено не было. В качестве источника информации о времени был использован модуль «tiny RTC I2C module».
Этот модуль содержит микросхему часов реального времени DS1307z, кварц для этой микросхемы частотой 32,768 кГц и необходимую обвязку для питания от батарейки и линий I2C. Важной информацией может быть то, что микросхемы DS1307 стоят дешевле чем DS1307z.
В первом случае за дешевизну можем расплачиваться качеством хода часов, во втором случае более менее все хорошо.
Помимо качества микросхемы часов DS1307 на ход часов влияет кварц, а точнее его частота — погрешность никто не отменял. Если же у Вас не имеется очень хорошего кварца, то немного скорректировать частоту имеющегося можно при помощи подстроечного конденсатора, подсоединенного одним выводом к кварцу, а другим к земле схемы.
Вращая движок переменного конденсатора можно будет подстраивать точность хода времени. Вторым вариантом может быть все тоже самое, только поставить конденсатор постоянной емкости. В этом случае частота кварца будет скорректирована только на фиксированное значение.
Эти схемотехнические решения в схему не вносились, но имеют право на жизнь.
Характеристики устройства:
- отображение времени в формате hh:mm:ss
- воспроизведение времени при нажатии на кнопку или радиобрелок при условии его использования
- включение светодиода на время воспроизведения аудио файла
- отображение дня недели
- отображение даты в формате dd/mm/yy
- отображение температуры окружающей среды
- воспроизведение будильника
- отображение включенности будильника
- ежечасное воспроизведение сигнала по трем профилям
- отображение выбранного профиля
- сохранение настроек будильника при выключении питания (сохранение в eeprom)
- хранение текущего времени при выключении питания в микросхеме часов DS1307 за счет резервного питания
Назначение кнопок устройства и настройка:
- для вход в меню настроек необходимо нажать кнопку S5, перелистывание меню настроек осуществляется этой же кнопкой
- для изменения настроек необходимо нажать кнопку S4, например указатель стоит на меню изменения минут, нажатием этой кнопки минуты увеличатся на единицу, при длительном нажатии изменение пойдет быстрее, при достижении 59 минут, следующая цифра будет ноль, для всех настроек предусмотрена защита от переполнения
- находясь в любом уровне меню настроек при нажатии кнопки S1 сражу выйдем в главное меню
- в главном меню при нажатии кнопки S2 будет озвучено текущее время
- при сработке будильника, чтобы остановить сигнал нужно удерживать кнопку S1
- в случае, если трек для будильника очень длинный, можно сбросить сигнал кнопкой S3 — ресет (все потому что устройство при нажатии и удержании кнопки S1 ждет конца трека)
- кнопка S3 — reset всего устройства
В меню настроек будильника необходимо установить непосредственно само время будильника, разрешение на сигнал или просто включить будильник и установить профиль циклического сигнала (0 — не использовать, 1 — в начале каждого часа воспроизвести файл, 2 — воспроизводить в начале каждого часа с 7 утра до 9 вечера). В настройках времени и даты все стандартно — установка непосредственно этих параметров.
Для того чтобы устройство могло воспроизводить ваши собственные записи аудио, при создании нужно знать следующее:
- формат wav файла: 8 bit, mono, 44 khz (пережимать можно из МР3 в любом аудио редакторе, поддерживающим функции перекодирования в wav формат)
- названия файлов должны соответствовать следующим условиям: озвучка часов 1h.wav (1 соответствует номеру часа, h — индекс часов, .wav — формат файла), озвучка минут 1m.wav (1 соответствует номеру минуты, m — индекс минут, .wav — формат файла), циклический сигнал 1a.wav (1 соответствует номеру часа, a — индекс циклического сигнала, .wav — формат файла), сигнал будильника alarm.wav. В архиве с аудио файлами в приложениях к статье можно посмотреть полный перечень названий файлов.
Без соблюдения этих параметров при создании аудио файлов микроконтроллер просто не обнаружит их на флешке.
Для программирования микроконтроллера необходимо использовать программатор, а также задать конфигурацию фьюз битов:
К статье прилагается прошивка для микроконтроллера для схемы говорящих часов, проект proteus (для корректного моделирования необходимо иметь мощный компьютер, иначе симуляция будет тормозить), архив с аудио файлами для проекта, а также небольшое демонстрационное видео (в начале озвучено текущее время, далее сработало ежечасное оповещение — сколько сейчас часов для простоты, далее настраиваем будильник и через минуту активируется сигнал, он повторяется до тех пор пока не будет удержана кнопка S1 или пока не нажать ресет).
Скачать список элементов (PDF)
Прикрепленные файлы:
- 21.hex (23 Кб)
- proteus 4b.rar (28 Кб)
- алена 44 кГц.rar (1641 Кб)
Источник: https://cxem.net/mc/mc291.php
Часы, будильник, термометр на ATmega8, DS1307, DS18B20
Более четырех лет назад я собрал простые часы на ATmega8. Все это время они исправно работали и приносили пользу, особенно в темнее время суток. Но мне показалось, что такой микроконтроллер, как ATmega8 может делать намного больше, чем просто подсчитывать колебания кварца и выводить их в виде времени.
Захотел, чтобы новые часы информировали не только о текущем времени, но и о температуре в помещении, где они находятся.
Задался поиском подобных схем в интернете, отталкиваясь от уже имеющихся комплектующих, а именно: микроконтроллер ATmega8 и светодиодный индикатор с общим катодом.
Отличное решение нашлось на этой странице, которое предоставил пользователь Soir, за что ему большая благодарность.
Схема часов не сложная, плюс, я сделал в ней некоторые упрощения. Что получилось, я привожу ниже. Оригинальная и упрощенная схема, разведенная в Proteus, имеется в АРХИВЕ.
В данном архиве приведены также прошивки ATmega8, дающие разный функционал часам, пример выставления фьюзов, полная инструкция по настройке часов и их возможностях, а так же разведенная печатная плата в формате *.lay6.
Печатная плата разводилась мной под уже имеющийся корпус. В архиве представлены прошивки для индикаторов с общим анодом и катодом.
Хочу признать, что часы получились отлично. В часах есть будильник (как разовый, так и по дням недели), термометр. Для регулировки освещения индикатора в дневное и ночное время, могут использоваться как предустановки в часах, так и специальный датчик (фоторезистор). Есть возможность коррекции времени, если оно отстает или спешит; цифровая коррекция отображения температуры с градацией 0,1ºС.
Большим плюсом является наличие сохранения настроек в энергонезависимой памяти микроконтроллера. Помимо этого, применение микросхемы DS1307, в паре, с батарейкой, делают часы абсолютно энергонезависимыми.
Батарейка выполняет дежурное питание часов.
Теперь, сколько бы поставка электричества у Вас не обрывалась, при ее возобновлении, часы буду идти, без каких-либо изменений и отклонений, даже останется заведенным будильник(и).
В эстетическом плане, данные часы, также хороши. Есть более десяти видов визуальных эффектов смены отображения времени и температуры. Кстати, эти эффекты можно выбирать самостоятельно или выставить их отображение в случайном порядке.
Источник: http://best-chart.ru/samodelnye-elektronnye-chasy-budilniki/chasy-budilnik-termometr-na-atmega8-ds1307-ds18b20.html
dlinyj
30 августа 2021 в 12:00

Отладочный стенд.
Многие из вас на предприятиях и иных объектах бывшего СССР встречали зелёные сегментные часы. Были самостоятельные устройства, типа “Электроника-7”, но так же существовали и вторичные, как в предыдущем посте, только более сложного строения — часы семейства “Воронеж”. Они также включались в единую часовую сеть предприятия и показывали то время, которое передавалось от главных первичных часов по проводам.
Решил разобраться, как же это работало, и самостоятельно собрать первичные часы. Из-за отсутствия документации, информации по данной теме, а также живых первичных часов — это превратилось в настоящий квест, реверс-инжиниринг, навязчивую идею, боль страдание и бессонные ночи с кодом и осциллографом в обнимку.
Тем не менее, я смог их победить, и могу теперь рассказать, как же они работают и поделиться кодом своего проекта.
Как всё начиналось
Если вы помните, в моём посте “Охота на блошках 2.0 — Уделка” приводил фотографию разбитых вторичных часов. Меня поправили и сказали, что это обычные часы “Электроника-7”, и ценности они не представляют. Но хотелось приключений, и будучи в Санкт-Петербурге, я купил первичные часы и вторичные часы “Воронеж”, в надежде, что их можно будет поженить (как же сильно я ошибался).

Достаточно быстро я выяснил, что протоколы у них несовместимы и работать вместе они не будут. В результате, для начала разобрался как же работают первичные часы “старого типа”, что вылилось в пост “Разбираемся с работой часовых сетей в лабораторных условиях”, а потом приступил к часам “Воронеж”. И, как оказалось — это было верное решение. На ловца и зверь бежит!
Поиск информации и разъёмов

Шильдик
Если начать искать информацию по запросу “вторичные часы Воронеж” или по маркировке “ВЧЦ1-С2ПГ12К-80”, то, за исключением ЖЖ sfrolov, информации практически нет. Более того, встречаешь форумы, где Сергей спрашивает о протоколе часов, но без ответа.

В результате одним из кладезей информации стал его пост: “Вторичные часы «Воронеж”. Сергей, также позднее сделал собственный контроллер этих часов. Чисто из спортивного интереса, по максимуму я старался двигаться самостоятельно, не спрашивая Сергея. Также Сергей мне косвенно очень помог, своим постом, и тем, что в личной беседе сказал, что его посылки сигналов в посте отличаются от тех, что посылают оригинальные первичные часы.
Как я уже сказал, на ловца и зверь бежит. Для моего прошлого поста, уже в Москве я докупал вторичные часы. С продавцом разговорились, и оказалось, что у него есть первичные часы для “Воронежа”. К сожалению, мне не удалось уговорить продавца, чтобы я смог снять живые сигналы с его часов, предлагая деньги. Однако, продавец всё же, отфотографировал паспорт часов, где были бесценные эпюры и описание их работы

В общем, я разобрал все эти фотографии, немного обработал и сделал отдельную pdf, чтобы другие люди, которые пойдут по моим стопам, смогли её использовать в своих целях. Фактически, то что я делал дальше, основывалось только на этих данных.
Последнее, чего мне не хватало для полного счастья, чтобы начать работать с часами — это разъёма питания. Он оказался достаточно хитрым, хотя мне казалось что где-то я видел такие разъёмы, но на других приборах.

Не хотелось делать времянку из автомобильных клемм (да и опасно это с 220 вольтами). Поэтому долго искал варианты. Тут я просто кинул клич среди друзей, в том числе написал BootSector и он даже нашёл у себя в закромах таковой разъём, но что-то мы так и не состыковались. В одном из чатов, на помощь пришёл sfrolov, поняв, для чего я ищу. И дал ссылку на “Мешок”, где я и заказал жмень таких разъёмов.

Жмень разъёмов.
Внутри разъём оказался очень интересно устроен — сама прижимная клемма выполнена из нескольких наборных пластин, так что их нужно спаивать между собой. Если кому нужен такой разъём, у меня ещё есть в запасе.
В результате я получил вот такой аккуратный провод.

Пардон за жёлтую термоусадку, но чёрной не было, а дело было в ночи. В результате, всё готово, чтобы приступить к экспериментам.
Формат посылки
Располагая документацией, всё стало немного веселее. Если кому интересно, настоятельно рекомендую читать её всю (и по несколько раз, до просветления), но я приведу главные тезисы.

Перевожу с инженерно-советского на русский: каждые 20 мс у нас идут синхроимпульсы (СИ), между ними идут шесть пачек тактовых импульсов (ТИ), с интервалом 33,(3) мс и после них идёт двоичный код посылки десятков часов, единиц часов, десятков минут, единиц минут, десяток секунд, единиц минут. Единственное, что я не понял — это информационный импульс (ИИ). После 15 прочтений документации, яснее не стало. Проще взглянуть на картинку эпюр сигнала.

Если вы ещё ничего не поняли, не печальтесь, я тоже ничего не понимал долгое время.
Что из этого графика у нас есть: это формы сигналов, общая длительность посылки (20 мс), и то что сигнал у нас двухполярный (минус, ноль и плюс).
Что у нас нету: амплитуды сигнала, длительность одиночного импульса, и что же такое, ИИ? Будем честны, на последний вопрос у меня до сих пор нет толкового ответа.
Из графика выше, совершенно непонятно какое время выводится и документация, в сущности не даёт ответа на вопрос. Принципиальной электрической схемы устройства нет.
Поэтому придётся обратиться к посту sfrolov и взять оттуда картинку. Ниже процитирую информацию, которая оказалась мне полезной.

Сначала идёт длинный импульс сброса номера позиции отрицательной полярности (1). Такие же импульсы, но короткие (2) сбрасывают счетчик номера цифры.
Импульсы (3) как-то связаны с импульсами сброса (2) и должны идти друг за другом. Наверно чтобы отделить длинные импульсы от коротких. Номер цифры задается количеством счетных импульсов (4). Сколько импульсов придёт, такая цифра и отобразится. На осциллограмме можно увидеть, что закодировано время 22:09.Если импульсов (2) не ставить, то на следующей позиции номер цифры будет прибавляться к предыдущей. То есть если предыдущая цифра была „3“, а на следующую позицию пришло еще два импульса (4), то зажжется цифра 5.
После пачки импульсов необходимо выдержать паузу, по окончании которой предыдущая цифра сменится той, которая пришла. То есть пока обрабатывается текущая цифра, на экране отображается предыдущая.
Внимательный тот, кто заметит, что на картинке в посте одни тайминги, а на видео там же другие. Однако, буду лукавить, если скажу, что не пробовал повторить этот сигнал, и да, я его повторил, но результат мне не понравился. Поэтому мы пойдём другим путём.
Из картинки выше, самое ценное, что сигнал ИИ (по паспорту), он же (2) (по картинке) идёт перед посылкой импульсов. Дальше уже дело техники сформировать данную посылку.
Электрическая часть
Одна из самых сложных задач было сформировать сигнал трёх напряжений: отрицательной полярности, нуля и положительной. Плюс, мне было неизвестно рабочее напряжение посылки. Эмпирическим путём было установлено, что мои часы работают, начиная от шести вольт. Поэтому я выбрал рабочее напряжение 12 вольт.
Когда только принёс часы домой, очень хотелось проверить, работают ли они вообще, поэтому провёл весьма варварский эксперимент: поочерёдно подключал то плюс, то минус, и получил такую картину.

Из чего стало понятно, что мне не требуется хитрого многополярного питания, а достаточно, как и в прошлой статье использовать Н-мост, например, драйвер двигателя L9110S. И в начале отладки, я даже использовал ту же плату, которой тактировал часы “Стрела”. Единственное, что на плате драйвера надо снять конденсатор.

Если этого не сделать, то на выходе будет получаться очень забавная арабская вязь.

Арабская вязь.
Однако, после шести сгоревших драйверов (на каждой платке их два), я понял что нужно что-то делать. Они горели как свечки. Оторвался провод питания — сгораем. Подключаем по USB, вместе с внешним блоком питания — горим с пламенем (я ни разу до этого не видел таких фейерверков). Поэтому, я решил отказаться от китайских плат, и купил себе нормальные микросхемы IR4427 с адекватным током работы и потолком напряжения выше 12 вольт. И всё стало сильно стабильнее.

Жаль, что микросхема pin to pin несовместима с L9110S, так бы поставил прямо на ту же плату, но увы.

Макетка с IR4427.
В качестве часов я выбрал модуль часов реального времени DS3231, и для отображения готовый модуль дисплея для Arduino. За основу потом взял Arduino Uno, её же питал от 12 В, и с неё же брал эти 12 В для драйвера.
На самом деле, работать с часами и дисплеем просто, примеров в интернете вагон, эта часть кода совершенно неинтересна. А вот сделать правильный сигнал — это важно, и совершенно не принципиально на какой плате вы это реализуете.
Его величество код!
Код, радикально (полностью) я переделывал три раза. Это выстраданная глава. В первую очередь, расскажу то, что может быть полезно и в других задачах. Скажу сразу, что имел глупость использовать среду Arduino, где очень многое скрыто под капотом. В какой-то момент я даже думал плюнуть и переписать на тёплом ламповом си, где всё прозрачно, но пока сдержался, потому что сама отладка тоже отняла слишком много времени.
▍ Отладочный код
Итак, наша задача — это формировать сигнал, с заданными длительностями. В качестве отладки сделал такую структуру.
struct pulse_package {
uint8_t direction;
uint16_t delay_t;
}; Первая переменная — направление передачи, которое может принимать три значения:
#define POS_SIG 3
#define NEG_SIG 2
#define ZER_SIG 0 Где, 3 и 2 — соответствующие пины, нуль — отсутствие пина. delay_t — это переменная длительностей в микросекундах, соответственно она будет передана в функцию delayMicroseconds(), которая на вход принимает переменную типа uint16_t и со значением до 16383 (это важно, чтобы не выйти за рамки допустимых значений).Меня в этой структуре смущает, что она не выровнена в памяти (элемент занимает 3 байта), и занимает драгоценную оперативную память, но я прикинул, что её должно хватить. По хорошему, стоит подобные структуры делать константой и размещать в памяти программ.
Сама отправка сигнала осуществлялась функцией, которая на вход принимала указатель на массив структур.
void send_to_voronezh(struct pulse_package *to_send) {
for (int i = 0; to_send[i].delay_t != 0 ; i++) {
switch(to_send[i].direction) {
case POS_SIG:
set_posi_sig();
break;
case NEG_SIG:
set_nego_sig();
break;
case ZER_SIG:
set_zero_sig();
break;
default:
break;
}
delayMicroseconds(to_send[i].delay_t);
}
} О функциях set_posi_sig(), set_nego_sig(), set_zero_sig() я расскажу чуть позднее, но и так понятно что тут происходит.
Формирование самого массива структур делаю прямо в функции loop():
void loop() {
static struct pulse_package pulse_package_send [] = {
{NEG_SIG, LONG_NEG}, //Синхроимпульс №1
// {ZER_SIG, LONG_AFTER_LONG_NEG}, //нулевой импульс
{POS_SIG, SHORT_P}, //импульс №3
{NEG_SIG, SHORT_P}, //импульс №2
//1
{POS_SIG, SHORT_P}, //импульс №4
{ZER_SIG, LAST_LONG-SHORT_P}, //нулевой импульс между посылками
....
};
send_to_voronezh(pulse_package_send);
} Как видно, можно легко, в текстовом виде сделать сигнал с заданными таймингами, практически любой длительности (сколько позволит память вашего контроллера). Это не прям Real Time Output, но лучше, чем ничего.
В результате на выходных пинах контроллера 2 и 3 (простите меня за ардуиновские обозначения), мы получим, например, вот такой сигнал:

Могу сразу сказать, что это неработающая осциллограмма, но принцип уже хорошо виден. Жёлтый график — это сигналы отрицательной полярности, синей — положительной. Тут попытка вывести 22:09.
Вывод в порт осуществлялся следующими инлайновыми функциями (для экономии тактов процессора, они нам ещё пригодятся).
inline void set_zero_sig() __attribute__((always_inline));
inline void set_posi_sig() __attribute__((always_inline));
inline void set_nego_sig() __attribute__((always_inline));
void set_zero_sig() {
digitalWrite(POS_SIG, HIGH);
digitalWrite(NEG_SIG, HIGH);
}
void set_posi_sig() {
digitalWrite(POS_SIG, LOW);
}
void set_nego_sig() {
digitalWrite(NEG_SIG, LOW);
} Чем удобно вынести всё это в отдельные функции? А тем, что всё это можно заменить printf с печатью сигнала на экране, и получить готовый консольный осциллограф (берите на заметку те, у кого нет осциллографа). Для примера одна функция, остальные аналогичные:
void set_zero_sig() {
if ( -1 == signal_stage) {
printf("- n");
}
if ( 1 == signal_stage) {
printf(" -n");
}
signal_stage = 0;
} В результате можно получить такой симпатичный график, который удобно пролистать.

Смех, смехом, но именно таким образом я потом отлаживал реализацию с помощью таймеров. Оказалось очень удобно, и легко отлаживать. Всё проще, чем каждый раз компилировать, отключать контроллер, подключать его обратно и смотреть осциллографом.
Отлаживать удобнее всего оказалось на 00:00:00, что логично, так как нет лишних импульсов. Самая беда начинается на цифре восемь и девять. Ниже покажу видео.

Сформированный программой сигнал.
И да, этот сигнал оказался рабочим, хотя период между синхроимпульсами составляет всего 12 мс (вместо положенных 20).

Часы стабильно показывают время.
На фото видно, что ещё используется L9110S (он сгорел, буквально через пару часов), а также пока что не подключен дисплей и часы.
Очень важный момент, выше — это отладочный код, который не попал в основную программу, но дал понимание, куда надо идти.
▍ Подключаем дисплей, клавиатуру и часы
Подключение дисплея 1602, клавиатуры на АЦП и часов достаточно простое и примитивное занятие — это примеры из интернета, и я даже не буду заострять на них внимание. Но важно другое, что суммарно опрос клавиатуры, запись значения в дисплей, получение времени с DS3231 занимали 16 мс! Что, ну никак не укладывается в последовательное выполнение программы. Поэтому необходимо было создать отдельный “поток” программы, который бы выполнял код. Поток, здесь скорее в кавычках, так как это не полноценные потоки в понимании, с переключением контекста, хотя на AVR я такое реализовывал, и это вполне реально. В этом случае, одну из функций нужно вынести в отдельный таймер.
Долго думал, что же вынести, всё же решил вынести самое критичное по таймингам — это функцию вывода сигнала. И в результате код был полностью переписан. Это была уже третья итерация. Промежуточную можете посмотреть по коммитам на гите.
Как вы помните, во многопоточном программировании, если вы работаете с разделяемой переменной, вам необходимо её ограждать мьютексами, либо семафорами, либо другим иным способом синхронизации потоков. Тут полностью такая же ситуация. В данном случае, разделяемая переменная у нас — это структура содержащая дату и время. Разделение доступа к переменный осуществляется очень просто, в качестве мьютекса у нас выступает запрещение прерываний на время записи в переменную. Таким образом, пока идёт запись структуры, эта операция будет полностью атомарной. После разрешения прерываний, если прерывание поступило в этот момент, оно будет обработано.
int settime () {
tmElements_t l_time = {0};
...
RTC.read(l_time); //read time from DS3231
noInterrupts();
m_time = l_time; //send time to output function
interrupts();
Так делается в двух местах программы.
Функцию вывода сигнала отлаживал очень долго, и очень пригодился вариант с помощью printf. Вообще, в больших программах, можно сделать это всё дефайнами и делать универсальный код для отладки на компе и работе в контроллере.
Как выше было сказано, для вывода, я сделал отдельную функцию таймера. Она вышла просто монструозной, и кто сможет разобраться, что в ней происходит, тому дам конфетку. Приводить её сюда целиком не буду, однако обращу внимание на некоторые моменты. Таймер дёргается с интервалом 50 мкс (то есть, я могу делать импульсы не короче этого периода). Для того, чтобы минимизировать время выполнения функции, и не мешать основному коду программы, везде, где только было можно, использовал “запрещённый” оператор goto. Но если вы откроете код ядра линукс, особенно драйвера, то увидите, что он используется там постоянно. В общем, это можно делать, но с умом.
ISR(TIMER1_COMPA_vect) {
...
if (_delay >= TIMER_PERIOD) {
_delay-=TIMER_PERIOD;
goto exit_isr;
} else {
_delay = 0;
}
if (0 == pkg_stage) {
SET_BIT(pkg_stage, H_SYNC_PULSE); //h-sync pulse stage
numbers[0] = m_time.Hour / 10;
...
numbers[5] = m_time.Second % 10;
//first pulse
set_nego_sig();
_delay = PULSE_DURATION;
goto exit_isr;
} else {
set_zero_sig();
if (CHK_BIT (pkg_stage, H_SYNC_PULSE)) {
CLR_BIT(pkg_stage, H_SYNC_PULSE);
SET_BIT(pkg_stage, L_SYNC_PULSE); //l-sync pulse stage
set_posi_sig();
_delay = PULSE_DURATION;
goto exit_isr;
...
exit_isr:
return;
} Таким образом, функция таймера — это машина состояний, которая даёт нужный сигнал, в зависимости от того, каком состоянии сейчас находится. Могу честно сказать, что я треснул умом, пока сделал её.

Отладка.
Какая же форма сигнала правильная?
Скажу сразу, что я до сих пор не знаю ответа на этот вопрос. Ниже покажу, те формы, которые оказались рабочими.
Изначально, я использовал большие паузы между посылками, и в целом это было хорошим решением, но мне хотелось большего, и проверить в каких режимах будет работать, и может подобрать более подходящий.

Форма сигнала с большими паузами. Тут СИ, ТИ и ИИ.
В результате я решил добиваться формы эпюр, которые были изображены в паспорте. Как видно, что там сигналы переходят друг в друга, без нулевой паузы между ними. Изначально, все мои сигналы следовали друг за другом с определённой задержкой, но я отказался от такого решения, потому что работает и без неё. Плюс, изначально сигнал синхроимпульса был длиннее, чем остальные сигналы, как оказалось, что и это не важно. На данный момент начало сигнала выглядит таким образом (пока не смотрите на время развёртки — это не принципиально).

Начало посылки.
1 это синхроимпульс (СИ), один на каждую пачку посылок, далее он без паузы переходит в 3 тактовый импульс (ТИ), который, также без пауз, переходит в 2 — информационный импульс (ИИ). После чего, также без пауз идёт посылка часов, уже разделённая паузами (тут 2 десятка часов и 1 единица). В посылке единиц часов всё тоже самое, но без СИ.
Вот график, как выглядит такая посылка целиком.

Полная форма сигнала. Время: 16:49:38.
Теперь главный вопрос: какие длительности импульсов и нужна ли пауза после посылки каждой цифры? Если без паузы, то длительность импульса я взял 150 мкс, и следующий импульс начинал после истечения времени всех пульсов, но это привело к забавным артефактам. Проиллюстрирую в видео.
Как видно, такое решение нельзя назвать рабочим. В результате, на данный момент я остановился на предельном значении импульса, равное 50 мкс, и после посылки делаю паузу, равную 2700 мкс, за вычетом отправленных импульсов и пауз между ними. В результате сейчас всё выглядит следующим образом.
Да, работает не идеально, и есть ещё куда расти.
Резюмируя
Да, я смог докопаться и понять алгоритм работы часов. Практически каждый день, на протяжении месяца я ковырялся с этими часами, всё свободное время я думал, как улучшить код, как сделать его оптимальнее и элегантнее. В качестве награды — часы наконец-то показывают время.

На фото видно, что секунды светятся ярко, а остальные цифры имеют отдельные яркие точки, но остальные точки тусклые. Это не ошибка фотосъёмки, это так и выглядит.
Но, вы сами видите на видео, что в режим работы часов я так и не попал. Вам на фотографиях кажется, что яркость часов недостаточная — это не кажется, они в действительности светят странно, каждый отдельный сегмент имеет разную яркость. Я пробовал разные тайминги, разные режимы работы (даже те, о которых тут не рассказал), игрался с ними по-всякому — всё равно свечение сегментов неяркое и есть блики. Допускаю также, что конденсаторы внутри требуют замены, но, вероятнее всего, я делаю что-то не так. Пока рано делать выводы.
P.S.
Если у кого есть первичные часы ПЧЦ1-БИТ-М и есть возможность снять с них осциллограмму (в Москве могу сам приехать), буду очень признателен! Пока что я в тупике.
Громадное спасибо sfrolov — осциллограммы есть!
Ссылки:
- Паспорт первичных часов.
- Проект на гитхаб.
- Вторичные часы „Воронеж“
- Другой самодельный Контроллер вторичных часов „Воронеж“

Еще совсем недавно я и не подозревал о существовании сборок MOSFET транзисторов и зачем они нужны в жизни. Но вот попросили меня восстановить электро-механические часы «Стрела» 1962 года выпуска. И странные жизненные пути свели это антикварное изделие и современную микросборку китайского производства. Данный отчет для любителей DIY, а так же желающих понастольгировать об вещах, сделанных в СССР
Чтобы было ясно, почему мне нужна была именно эта сборка из двух MOSFET транзисторов P и N проводимости, начну сначала, а именно с часов.
Электро-механические часы выпускались предприятием «Электрические часы Ленинграда» (ЭЧЛ) с 1946 по 1966. Предприятие существует и по сей день под названием Хронотрон с тем же профилем. Мне достались часы «Стрела» с корпусом из крашенной фанеры и бумажным циферблатом.
Такие часы состояли из двух частей — вторичный блок с циферблатом и простейшим электро-магнитным механизмом и первичными часами, выдающими импульс на вторичные блоки раз в минуту. Первичных часов мне не досталось, да и вряд ли можно рассчитывать на работу полувековой электроники
Вторичные часы в огромном корпусе из фанеры содержали такой вот механизм, вполне рабочий на вид
Это вам не пластмассовые шестеренки современных механизмов. Такой, похоже, переживет и человечество и атомную войну )))
Управляется он подачей импульсов 24В разной полярности, сдвигая минутную стрелку на 1/60 круга. Вот тут и начинает вырисовываться необходимость чего-то современного и электронного. Чтобы не городить схему из реле или двухполярного блока питания на 24В, применяют транзисторы разной полярности, лучше полевые.

В Перми эти сборки продаются за 70р/шт Спешки не было и заказал на АЛИ 10шт больше чем вдвое дешевле
Можно было поставить в схему и более дешевые аналоги IRF7343 с более низким напряжением ± 30В. Как выяснилось, такие сборки активно применяются в мониторах и телевизорах. Кому нужны даташиты и ссылочки:
- P5003QVG — $3.46/10шт
- AF4502 — $2.57/10шт
- SP8M3 — $2.4/10шт
- FDS8958 — $3.42/10шт
- AO4600 — $3.1$/10шт
- AO4606 — $1.4/10шт
- IRF7309 — $4.53/10шт
- ITF7319 — $4.2/10шт
Итак заказал в интернете то что указано в схеме — IRF7343 на Али. Микросборки в миниатюрных SOP-8 пришли неожиданно в большой коробке
Внутри был пакетик, приклеенный скотчем к дну коробки, а там стандартная SMD-шная лента-упаковка с 10 элементами
А вот и сама сборка
Как проверить оригинальность, не знаю, на мой взгляд, маркировка нанесена немного небрежно. Но как говорил герой одного известного фильма чиня неработающий прибор сильным ударом — «Русская техника, американская техника — все сделано в Китае».
Лишь бы работало.
Упаковка для монтажа на автоматических линиях
Захотелось быстро собрать схему на макетке и проверить работоспособность. К сожалению, монтаж корпусов SOP-8 с шагом 1.27мм на 2.5мм монтажке — то еще удовольствие. Да и внешний вид изделия получился как у сумасшедшего изобретателя
Но для проверки годиться
Для питания использую отдельно купленный БП на 24В/1А.
В дальнейшем запитаю с него и электронную часть часов через преобразователь
Подключаю все это добро к Ардуино
Программа предельно проста. Поочередно подаем высокий уровень то на один, то на другой дискретный выход, к которому подключена схема
Код программы простейший
#include <arduino.h>
// Цифровые выходы к которым подключена схема
#define PIN1 2
#define PIN2 3
// Длительность импульса в мс
#define TM1 250
void setup() {
Serial.begin(9600);
pinMode(PIN1, OUTPUT);
pinMode(PIN2, OUTPUT);
digitalWrite(PIN1,LOW);
digitalWrite(PIN2,LOW);
}
void loop() {
// Подаем импульс прямой полярности
Serial.println("Polus 1");
digitalWrite(PIN1,HIGH);
delay(TM1);
digitalWrite(PIN1,LOW);
delay(250);
// Подаем импульс обратной полярности
Serial.println("Polus 2");
digitalWrite(PIN2,HIGH);
delay(TM2);
digitalWrite(PIN2,LOW);
delay(250);
}
И о чудо — стрелки часов начинают судорожно дергаться и антикварное изделие оживает.
Напряжение на обмотке часов ±21В. Видимо транзисторы открываются не полностью. Но для поворота стрелки вполне достаточно.
Ток через обмотку 8мА с небольшим хвостиком.
Эксперименты показали, что для нормального срабатывания часов нужен импульс длительностью не менее 250 мс и такая же пауза между импульсами. То есть при подводке времени можно двигать минутную стрелку на 2 минуты за секунду.
Ну чтож, микросборки пришли годные, схема работает, электромагнитное изделие времен СССР начинает оживать.
Как поется в одной песне: «Back in the U.S.S.R.»
Теперь можно изготавливать первичный блок, благо пришли высокоточные модули реального времени DS3231 которым я посвящу один из следующих обзоров. Да и печатную плату не плохо бы изготовить. Маленький ток в обмотке часов подсказал идею запитать часы с аккумулятора 3.7В через повышающий преобразователь. Если уводить МК в спящий режим и будить его часами 1 раз в минуту, то на полгода одного аккумулятора на 2000мА должно хватать. В общем просторов для творчества море.
Немного полезных ссылок
Даташит на IRF7343
Схема первичных часов на логических элементах
Схема первичных часов на ATMega8 — здесь много интересных идей.
Сайт завода Хронотрон, производящий много интересных часов
Ну и как же без помощника
О других моих поделках можно почитать в моем блоге
Например, про контроллер разряда батареи для колонки из моего предыдущего обзора.
За сим позвольте откланяться. Всем, кто дочитал до конца, творческих успехов!
ÐеÑвиÑнÑе ÑаÑÑ 2 — микÑоконÑÑÐ¾Ð»Ð»ÐµÑ Ð½Ð°Ð½Ð¾ÑÐ¸Ñ Ð¾ÑвеÑнÑй ÑдаÑ
пеÑвиÑнÑе ÑаÑÑ (ÑаÑÐ¾Ð²Ð°Ñ ÑÑанÑиÑ), коÑоÑÐ°Ñ ÑÐ¼ÐµÐµÑ ÑÑлиÑÑ Ð²ÑоÑиÑнÑми ÑаÑами и не боиÑÑÑ Ð¾ÑклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¸ÑаниÑ.
Â
Â
    ЧаÑÐ¾Ð²Ð°Ñ ÑÑанÑÐ¸Ñ Ð¿Ð¾ÑÑÑоена на I2C-ÑаÑÐ°Ñ ÑеалÑного вÑемени DS1307 и âнаÑодном“ микÑоконÑÑоллеÑе Atmel Atmega8. УпÑавление вÑоÑиÑнÑми ÑаÑами пÑоиÑÑ Ð¾Ð´Ð¸Ñ ÑеÑез клÑÑи IRF7343. ÐлагодаÑÑ ÑезеÑвной баÑаÑейке на DS1307 ÑаÑÑ Ð½Ðµ боÑÑÑÑ Ð¿ÑÐ¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ð¾Ñновного пиÑаниÑ.
Â

   ÐÑи ÑÑаÑÑе на вÑÑ Ð¾Ð´Ðµ SQW/OUT  DS1307 вклÑÑаеÑÑÑ 1 ÐÑ, коÑоÑÑй заведен на INT0 микÑоконÑÑоллеÑа. ÐаждÑÑ ÑекÑÐ½Ð´Ñ Ð¿Ð¾ пÑеÑÑÐ²Ð°Ð½Ð¸Ñ Ð¼Ð¸ÐºÑоконÑÑÐ¾Ð»Ð»ÐµÑ ÑÑиÑÑÐ²Ð°ÐµÑ Ð²ÑемÑÂ Ñ DS1307. ÐÑли ÑиÑло минÑÑ Ñавно 0, Ñо Ð¸Ð´ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° на оÑÑабоÑÐºÑ Ð¸Ð¼Ð¿ÑлÑÑа Ð´Ð»Ñ Ð²ÑоÑиÑнÑÑ ÑаÑов (импÑлÑÑ Ð½Ð° PB1 или PB2). СооÑвеÑÑÑвенно на вÑÑ Ð¾Ð´Ð°Ñ IRF7343 ÑоÑмиÑÑеÑÑÑ Ð¸Ð¼Ð¿ÑлÑÑ Ð½Ñжной полÑÑноÑÑи. IRF7343 по даÑаÑиÑÑ Ð´ÐµÑÐ¶Ð°Ñ Ð´Ð¾ 1 ампеÑа, ÑопÑоÑивление вÑоÑиÑнÑÑ ÑаÑов (Ð¼Ð¾Ð¸Ñ ) ~1 ком. ÐолÑÑаеÑÑÑ Ð±Ð¾Ð»ÑÑе 30 ÑÑÑк вÑоÑиÑнÑÑ ÑаÑов можно подклÑÑиÑÑ Ðº ÑÑой ÑаÑовой ÑÑанÑии, Ñ Ð²Ð°Ñило Ð±Ñ Ð¾Ñновного пиÑаниÑ. (колиÑеÑÑво вÑоÑиÑнÑÑ ÑаÑов не пÑовеÑÑлоÑÑ Ð½Ð° пÑакÑике, Ñ Ð¼ÐµÐ½Ñ Ð²ÐºÐ»ÑÑено 5 ÑÑÑк).


Â
    ÐÑи пÑопадании оÑновного пиÑÐ°Ð½Ð¸Ñ Ð² пеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð¿ÑÐ¾Ð¿Ð°Ð´Ð°ÐµÑ Ð¿Ð¸Ñание на вÑводе 1 Atmega8 (INT 1), ÑÑабаÑÑÐ²Ð°ÐµÑ Ð¿ÑеÑÑвание, микÑоконÑÑÐ¾Ð»Ð»ÐµÑ Ð±ÑоÑÐ°ÐµÑ Ð²Ñе дела и Ð±ÐµÐ¶Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ Ð² ÑÐ²Ð¾Ñ EEPROM ÑекÑÑее ÑоÑÑоÑние вÑоÑиÑнÑÑ ÑаÑов (ÑаÑÑ, минÑÑÑ, полÑÑноÑÑÑ Ð¿Ð¾Ñледнего импÑлÑÑа ÑпÑавлениÑ). Ðн ÑÑÐ¿ÐµÐ²Ð°ÐµÑ ÑÑо ÑделаÑÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°ÑÑ ÑепоÑке пиÑÐ°Ð½Ð¸Ñ VD2-C2. ÐоÑле ÑÑого пÑогÑамма оÑÑанавливаеÑÑÑ.
Â

   ÐÑи пеÑвом вклÑÑении и пÑи поÑледÑÑÑÐ¸Ñ Ð²ÐºÐ»ÑÑениÑÑ ÑаÑовой ÑÑанÑии в ÑеÑение пÑÑи ÑекÑнд можно ÑделаÑÑ Ð²ÑÐ±Ð¾Ñ â коÑÑекÑиÑоваÑÑ Ð²ÑоÑиÑнÑе ÑаÑÑ Ð¸Ð»Ð¸ неÑ. ÐÑли коÑÑекÑиÑоваÑÑ Ð½Ðµ ÑÑебÑеÑÑÑ, нÑжно нажаÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ S1. ÐнаÑе ÑеÑез пÑÑÑ ÑекÑнд пÑÐ¾Ð¸Ð·Ð¾Ð¹Ð´ÐµÑ ÐºÐ¾ÑÑекÑÐ¸Ñ Ð²ÑоÑиÑнÑÑ ÑаÑов, как поÑле оÑклÑÑÐµÐ½Ð¸Ñ Ð¾Ñновного пиÑаниÑ.
Â
   ÐÐ»Ñ ÑÑÑановки вÑемени на ÑаÑовой ÑÑанÑии нÑжно нажаÑÑ S1 из ÑабоÑего Ñежима. Ðнопками S2 и S3 коÑÑекÑиÑÑÑÑÑÑ ÑаÑÑ Ð¸ минÑÑÑ, S1 â вÑÑ Ð¾Ð´ в оÑновной Ñежим.

ÐоÑле ÑÑÑановки вÑемени вÑоÑиÑнÑе ÑаÑÑ Ð½Ðµ коÑÑекÑиÑÑÑÑÑÑ.
Â
  ÐÐ»Ñ ÑÑÑановки вÑемени на вÑоÑиÑнÑÑ ÑаÑÐ°Ñ Ð½Ñжно нажаÑÑ S4 из ÑабоÑего Ñежима.

Ðнопками S2 и S3 ÑÑÑанавливаÑÑÑÑ ÑаÑÑ Ð¸ минÑÑÑ (Ñо непÑавилÑное вÑемÑ, коÑоÑое показÑваÑÑ Ð²ÑоÑиÑнÑе ÑаÑÑ Ð² даннÑй моменÑ), S1 â запÑÑк коÑÑекÑии вÑоÑиÑнÑÑ ÑаÑов. СÑÐ°Ð·Ñ Ð¿Ð¾Ñле нажаÑÐ¸Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ S1 ÑаÑÑÑиÑÑваеÑÑÑ ÑазниÑа Ð¼ÐµÐ¶Ð´Ñ ÑекÑÑим вÑеменем и ÑÑÑановленнÑм Ð´Ð»Ñ Ð²ÑоÑиÑнÑÑ ÑаÑов и запÑÑкаеÑÑÑ ÐºÐ¾ÑÑекÑиÑ. ÐÑли вÑÐµÐ¼Ñ ÐºÐ¾ÑÑекÑии пÑодолжалоÑÑ Ð±Ð¾Ð»ÑÑе 59 ÑекÑнд, Ñо по оконÑании ее делаеÑÑÑ Ð¿Ð¾Ð¿Ñавка на вÑемÑ, коÑоÑое пÑоÑло Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа наÑала коÑÑекÑии. Таким обÑазом, вÑÐµÐ¼Ñ Ð½Ð° вÑоÑиÑнÑÑ ÑаÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ñавно вÑемени на ÑаÑовой ÑÑанÑии. Â
Â
   ÐÑи воÑÑÑановлении оÑновного пиÑÐ°Ð½Ð¸Ñ Ð¿ÑогÑамма ÑÑиÑÑÐ²Ð°ÐµÑ ÑекÑÑее вÑемÑ, ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ Ñ Ñем, ÑÑо запиÑано в EEPROM и вÑполнÑÐµÑ Ð¿Ð¾Ð´Ð³Ð¾Ð½ или ÑдеÑжание вÑоÑиÑнÑÑ ÑаÑов (ÑÑо из ÑÑого бÑÐ´ÐµÑ Ð±ÑÑÑÑее Ð´Ð»Ñ ÐºÐ¾ÑÑекÑии вÑемени) аналогиÑно ÑÑÑной коÑÑекÑии, опиÑанной вÑÑе. ÐмпÑлÑÑÑ ÐºÐ¾ÑÑекÑии ÑледÑÑÑ Ñаз в ÑекÑндÑ. Ðа диÑплее показано вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð³Ð¾Ð½Ð° или ÑдеÑÐ¶Ð°Ð½Ð¸Ñ Ð² ÑекÑÐ½Ð´Ð°Ñ . ÐÑи ÑдеÑжании импÑлÑÑÑ Ð½Ðµ подаÑÑÑÑ.


ÐÑе ÑобÑÑÐ¸Ñ Ð¸ нажаÑÐ¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº ÑадоÑÑно озвÑвÑиваÑÑÑÑ ÑпикеÑом Ñо вÑÑÑоеннÑм генеÑаÑоÑом.
 Â
  ÐвÑомаÑиÑеÑкий пеÑÐµÑ Ð¾Ð´ на леÑнее/зимнее вÑÐµÐ¼Ñ Ð¿Ð¾ÐºÐ° не делалÑÑ, но еÑÑÑ Ð² Ð¿Ð»Ð°Ð½Ð°Ñ .
РлÑбом ÑлÑÑае ÑÑÑÐ½Ð°Ñ ÐºÐ¾ÑÑекÑÐ¸Ñ Ð´ÐµÐ»Ð°ÐµÑ ÑÑÐ¾Ñ Ð¿ÑоÑеÑÑ Ð»ÐµÐ³ÐºÐ¸Ð¼. Ð Ñежиме ÑÑÑной коÑÑекÑии ÑвелиÑили/ÑменÑÑили ÑÐ°Ñ Ð¸  запÑÑÑили коÑÑекÑиÑ.

Ðа пеÑаÑной плаÑе Ñазведен ÑазÑем ISP Ð´Ð»Ñ Ð¿ÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑаÑпаÑного микÑоконÑÑоллеÑа.
Â
Ð ÑÑÑÐ·Ð°Ñ : микÑоконÑÑÐ¾Ð»Ð»ÐµÑ ÑакÑиÑÑеÑÑÑ Ð¾Ñ Ð²Ð½ÑÑÑеннего генеÑаÑоÑа 1мгÑ, обÑзаÑелÑно вклÑÑаем мониÑÐ¾Ñ Ð¿Ð¾Ñога пиÑÐ°Ð½Ð¸Ñ 2,7 волÑÑ.

Â
Ð Ð¿Ð»Ð°Ð½Ð°Ñ Ð½Ð° бÑдÑÑее:
Â
0. ÐÑли новÑй ÑÑководиÑÐµÐ»Ñ ÑÑÑÐ°Ð½Ñ Ð²ÐµÑÐ½ÐµÑ Ð·Ð¸Ð¼Ð½ÐµÐµ/леÑнее вÑемÑ, пÑидеÑÑÑ Ð¿Ð¾Ð´Ð½Ð°Ð¿ÑÑÑÑÑÑ Ð¸ ÑделаÑÑ Ð¿ÐµÑевод авÑомаÑиÑеÑки;
1. поÑикÑиÑÑ Ð²ÑÑвленнÑе глÑки;
2. добавиÑÑ Ð½Ð¾Ð²Ñе глÑки.
Â
PS: во вÑÐµÐ¼Ñ ÑкÑпеÑименÑов ни одного микÑоконÑÑоллеÑа не поÑÑÑадало!
ФайлÑ:
СÑ
ема, плаÑа, пÑоÑивка, иÑÑ
одники
ÐÑе вопÑоÑÑ Ð²
ФоÑÑм.
| Ðак вам ÑÑа ÑÑаÑÑÑ? | ÐаÑабоÑало ли ÑÑо ÑÑÑÑойÑÑво Ñ Ð²Ð°Ñ? |
ÐÑи ÑÑаÑÑи вам Ñоже могÑÑ Ð¿ÑигодиÑÑÑÑ:







































































