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… (или по нашему) Продолжение следует…


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

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение