Wall-E Clock Shield. Своими руками. Часть 1. "Железо"

Идея появилась (примерно в начале апреля), после очередной ревизии неисправных материнских плат. На одной из таких плат был обнаружен сдвоенный семисегментный индикатор. Такие индикаторы (с общим катодом), как выяснилось позже, весьма распространены. И когда друзья подогнали целую плату (бог знает от чего), на которой таких индикаторов была целая россыпь, естественно возникло желание о их применении. Первое, что пришло на ум — ЧАСЫ.
Хм, часы?!?! Вроде как и банально, а с другой стороны, почему бы и нет?


Прикинул, всяческие "ЗА" и "ПРОТИВ".
Самые веские "ЗА":
1) Не пропадать же выпаянным деталькам впустую :)
2) Этот шилд, по моему мнению, может стать неплохим подарком. (я в некоторой степени «курирую» ардуиновское направление у одного знакомого подростка, и у него, кстати, в начале мая ДР).
3) Часы относятся к «вечным» ценностям и являются очень полезным и всегда актуальным прибором!
4) Процесс изготовления — хороший материал для статьи на конкурс "Кибервесна 2014" :)
5) Полученный код я планирую использовать в следующих проектах (это будут часы на блинкерных индикаторах).
6) Данный проект просто обязан поднять мой собственный LEVEL в части программирования.

Как корабль не может быть без имени, так и проект должен как-то называться. Проект я назвал WALL-E Clock Arduino Shield. Почему так? Ну, во первых, большинство деталей — взяты с мусора (мат. платы, списанные принтера и т.д.). А во вторых, что бы хоть как-то оправдать нахождение этого проекта на ресурсе, посвященному роботам :)

Итак, сформированные требования к будущему шилду-часам (как говорят, «ХОТЕЛКИ»):
1) это должны быть часы реального времени, не зависящие от пропадания электроэнергии, фазы луны, приливов на Марсе (т.е., обязательно с использованием микросхем RTC)
2) как минимум, 2 семисегментных индикатора
3) пусть это будет еще и будильник
4) размер готовой платы не должен превышать размеры стандартного шилда для Arduino
5) предусмотрим кнопки для НОРМАЛЬНОЙ установки времени/будильника/задания режима работы (а не через Serial port и тому подобные извраты)
7) «полуавтономный» вариант. (Клевая штука, для людей, у которых Ардуиновские платы просто валяются без дела.)
8) готовая плата должна быть односторонней, чтобы можно было бы изготовить в домашних условиях.
9) Готовый шилд должен выглядеть более-менее красиво :)


Итак, с этой же материнской платы дополнительно были извлечены: часовой кварц (32.768 kHz), буззер (пищалка) и батарейный отсек (для батарейки CR2032).

Собираем схему на макетке. Причем, сборка проходила покаскадно :)
«Оп-Оп! Ардуино-стайл!!!»


Не знаю почему, но в мире Arduino, самой ходовой микросхемой RTC (Real Time Clock) является DS1307. Не будем оригинальничать и отступать от традиционного. (Тем более, что эта микросхема еще и легкодоступна. Даже наш минский завод «Интеграл» выпускает ее аналог, с названием IN1307).
Итак, основа наших часов — микросхема DS1307 (в качестве «обвеса» установлены: кварц на 32,768Кгц, батарейка и 2-а подтягивающих резистора на линиях SDA и SCL). Благодаря батарейке они продолжают идти при отключении внешнего питания. Также у DS1307 есть свободные 56 байт энергозависимого статического ОЗУ, которые можно использовать в своих целях (например, хранить настройки будильника).


По поводу этой микросхемы и Arduino, интернет просто кишит материалом и примерами работы. Так, что сильно расписывать не буду. Отмечу только важные моменты.


Регистры микросхемы DS1307.


— Для включения часов следует установить бит CH в ноль, это следует сделать принудительно, т.к. часы после включения по умолчанию выключены.
— Часы хранят информацию в двоично-десятичном виде – для получения данных достаточно прочитать соответствующий им регистр. (Пример, 25 минут хранятся по адресу 1. И записаны в виде: «0010 0101»=37 или HEX=25. Для перевода в нормальный вид нужно (37/16)*10+остаток от деления на 16 => 2*10+(37-32)=25).
— 7 регистр отвечает за выходной тактовый генератор часов, SQW вывод. Бит OUT инвертирует выходной сигнал, бит SQWE включает тактовый генератор, а биты RS0 и RS1 устанавливают частоту тактовых импульсов.

Для работы с клавиатурой на скорую руку была сделана такая вот платка

Такой вариант клавиатуры нужно подключать к пину, с поддержкой АЦП (читай, «аналоговые» входы).

После долгих изысканий, приходим к некому консенсусу в распределении ресурсов и основных элементов будущего шилда, и окончательно наша схема стала выглядеть так:


DS1307 подключается по протоколу I2С Bus, а это значит, что уже задействованы пины А4 и А5.
Тактирующий выход DS1307 мы подключим к одному из пинов Arduino, которые поддерживают внешние прерывания.


Подключение индикаторов достаточно простое. Все аноды индикаторов (8 штук у каждого) соединяются параллельно и подключаются к выводам сдвигового регистра 74HC595, а выводы катодов (по два на каждый индикатор) — в нужный момент «садятся на землю» с помощью транзисторных ключей. Очень хорошо подошла для этого сборка Дарлингтона MP4020 (коих я навыпаивал с принтеров в большом количестве).
Цифровые пины Arduino №3,4,5,6 — подключение баз транзисторной сборки. (Из-за нюансов при разводке печатной платы, подключение немного не логичное. В плане, 6 пин управляет первым сегментом и т.д.)
Как говорят знающие люди: «Что не допаяно паяльником — скорректируем софтом!»

Окончательно распределение пинов Arduino выглядит следующим образом:


Схема готова.
Следующим этапом — разводка печатной платы.

(Огромное спасибо Александру, за неоценимую помощь в этом процессе! Особенно мне понравился «финт» с кнопками).


Обратите внимание!!!
->Кнопки должны быть с 4-мя выводами (Дело в том, что попарно замкнутые выводы кнопки используются как перемычки на плате)!!!
->Холдер батарейки накрывает DS1307!!! Примерьте заранее!!!
-> Номиналы деталей можно узнать при наведении курсора в SprintLayout.
->Я использовал в SprintLayout возможность заполнения медью неиспользуемой площади (Темно-зеленые участки). Без всяких замыслов, банально, чтобы быстрее вытравливалась плата.

Однако, я РЕАЛЬНО не понимаю, как указать, что это площадь — «земля». Поэтому, при запайке я объединил их с помощью перемычки (резистор 0R).

ЛУТ, традиционный ЛУТ. Хороший утюг Вам в помощь :)
(Честно говоря, мелкие дорожки под индикаторами заставили меня переутюживать плату несколько раз. Так, что не говорю, что процедура простая. Запасайтесь терпением).



Собственно, лицевая сторона платы — тоже ЛУТ. Со слоями в SprintLayout надеюсь разберетесь :)
Собираем до кучи все необходимое.

А именно:

--------- Bill Of Materials (BOM)  -----------
- микросхема DS1307 -1шт
- микросхема 74HC595+ колодка -1шт
- часовой кварц на 32768 kHz  -1шт
- сдвоенный 7-сегментный индикатор(с общим катодом. LTD322P, С-362G или аналогичные)-2шт
- сборка MP4020 -1шт
- SMD резистор 270 Om (маркировка 271) -9шт
- SMD резистор 1 kOm (маркировка 102) -4шт
- SMD резистор 4.7 kOm (маркировка 472) -4шт
- SMD резистор 10 kOm (маркировка 103) -4шт
- SMD конденсатор 0.1 (маркировка 104)  -2шт
- электролит. конденсатор 100x10V  -1шт
- кнопка (четыре вывода!!!)  -3шт
- светодиод 3мм (цвет по вкусу) -1шт
- буззер  -1шт
- холдер для батарейки  -1шт
- стандартная полоска штырьков
--------- End Bill Of Materials (BOM) -----------


Ну и пару часов уходит на запайку деталек…
Маленький нюанс. Чтобы изображение (на лицевой стороне) не испортилось, я покрыл его прозрачным лаком для печатных плат. Однако, это лак портится от воздействия спирта. А без спирта — очень тяжело отмыть плату от разводов канифоли. В этот раз (по совету друзей) я паял с помощью глицерина, который ОЧЕНЬ замечательно отмывается простой водой. Приобретается глицерин в аптеке, без всяких проблем.

Личные ощущения. Процесс пайки с помощью глицерина менее «комфортный», чем с флюсом, но вполне приемлем.

Нижняя сторона платы:


Лицевая сторона:


Если добрались до этого момента — мои поздравления!!! С «железячной» частью закончили :)

К этому моменту написания статьи, я понял, что опус получается очень «громоздким» и решил разбить его на две части. В следующей части, внимательно рассмотрим программную составляющую проекта.
Так, что чуть-чуть терпения…

To be continued… (или по нашему) Продолжение следует…

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.