Простые бинарные часы с будильником на Arduino



Почитав интересные статьи о том, как люди придумывают и реализуют полезные и просто забавные проекты на платформе Arduino, мне тоже захотелось сделать простую, интересную и одновременно приносящую хоть какую-то пользу конструкцию.

Но надо было придумать что-то не очень сложное, так как у меня пока еще не было ни опыта, ни более серьезной электроники типа сенсоров и моторов, ни плат расширения. Поэтому походив денек в раздумьях, решил поискать вдохновенье в интернете. Не долго блуждая по просторам сети, я нашел в одном буржуйском блоге реализацию бинарных часов. Вот это и было нужно, никакой сложной электроники, для начала самое оно.

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

Первые шаги


Саму плату Arduino проще всего купить, но зачем в очередной раз тратиться, если можно и изготовить вручную. Поэтому я попросил человека, для которого это пустяк, помочь мне. Благо инструкций и примеров в интернете предостаточно.
И уже через пару дней платка была у меня.

Еще понадобится breadboard и провода для соединения, вот их, пришлось заказать. Доставка много времени не заняла.

Также мелочевка, в виде резисторов, светодиодов, кнопочек, пьезопищалок и то, что можно найти, разобрав старый модем или привод CD-ROM. У меня еще были запасы старых советских радиодеталей.

Для начала этого более чем достаточно. Теперь можно начать тренироваться, для начала поморгать светодиодами, разобраться как работать с аналоговыми разъемами и с ШИМ.

Возврат к первоначальной идее. Подготовка


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

  • arduino;
  • breadboard (не обязательно, можно сразу припаивать все на макетную плату);
  • провода. Для перемычек я вообще использовал из витой пары, они там медные, замечательно паяются, а для подключения к arduino из корпусов старых системников, т.к. на самодельной arduino у меня штырьки, а не разъемы, в отличие от заводской;
  • 13 светодиодов;
  • 4 кнопочки (одна с фиксацией);
  • 14 резисторов 220 Ом, можно и 360 Ом (для светодиодов и пищалки);
  • 4 резистора примерно по 2.2 кОм (для кнопок);
  • пьезопишалка.

Как они будут работать




Для обозначения часов и минут используется два ряда светодиодов, один для первой цифры, другой для второй, сложив которые мы и получаем нужное значение. Из картинки все сразу должно быть понятно.

Схемы


Светодиоды подключаются очень просто, только их обязательно через резисторы надо втыкать, одну ногу на землю, другую в arduino, к пинам от 0 до 8 и от 10 до 13. Резистор можно подключать хоть со стороны земли, хоть со стороны платы.

Все как на следующей схеме, все выводы расписаны.


Для подключения пищалки как раз и оставил свободный 9 пин, так как нам нужен пин поддерживающий ШИМ. Резистор к пищалке я прицепил на 220 Ом, но можно и поменьше, громче будет пищать. Что такое ШИМ можно прочитать здесь.


Так как на arduino моего типа больше нет свободных цифровых пинов(если приобрести Arduino Mega, то там их еще много), под кнопки придется использовать аналоговые. Один выход выводим на землю, другой через резистор к arduino. Разница подключения к аналоговым пинам в том, что мы уже будем считывать не цифровой сигнал HIGH или LOW, а уровень входного напряжения, преобразованный в целочисленное значение. Поэтому определять нажата кнопка или нет, придется путем проверки значения с АЦП. Займут они аналоговые пины с 0 по 3.

Две кнопки для задания минут и часов. Одна для переключения режимов. И еще одна, которая с фиксацией, для включения/выключения подсветки светодиодов.

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


Общий вид:


Ее можно легко собрать на breadboard. Но хочется же законченное устройство, хоть и подключенное к arduino.

Прикинем, как будет работать и выглядеть


Поэтому, сначала все – таки набросаем наш скетч, в которой пока сделаем переключение минут, и соберем все это на breadboard, для проверки.

Собрали, подключили:



Работает. Отлично.

Теперь посмотрим, как это будет выглядеть уже на плате.


Выглядит опять же не плохо, еще куча свободного места для кнопочек и пищалки.

Будем паять


Прежде всего, надо проверить то, что у нас работало на breadboard.


И убедившись, что я еще на что-то способен, в плане припаять и не спалить, можно продолжать.

В итоге получается следующая конструкция, которая хоть и выглядит достаточно топорно, но работает вполне стабильно.


Код


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

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


Скетч получился достаточно простой, хотя и объемный. Приводить реализацию подпрограмм смысла не вижу, так как все предельно ясно и понятно из кода (и комментариев в нем), который можно посмотреть по этой ссылке. Так как это мой первый опыт разработки для arduino, я уверен, что можно было бы сделать и лучше. Поэтому рад буду услышать советы.

Заключение


В целом я очень доволен. Буду и дальше изучать платформу arduino.

Видео реализации:

Спасибо за внимание!

Ссылки


Самодельный Arduino — robocraft.ru/blog/arduino/19.html
Что такое ШИМ — arduino.ru/Tutorial/PWM
Исходники — github.com/proshik/binary_clock
Share post

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 19

    +8
    Моргание светодиодом 2.0
      0
      главное прогресс на лицо :)
      Я сейчас тоже готовлю статейку, а может даже 2 (одну для Ардуино, вторую для STM32).
      так что как карма набежит и когда допишу. тоже внесу свой вклад :)
      А вообще я прорабатываю идею умного дома
      +1
      Поздравляю с первым опытом :)
      Теперь попробуйте уменьшить количество проводов, а то жгуты получились монструозные. Пока придумал, как повесить ваши 13 светодиодов + 4 кнопки + пищалку на 5 выводов.
        +3
        Чтобы не быть голословным, приведу свое решение:

        Само собой, без динамической индикации не обойтись. Для того, чтобы зажечь диод HL1, например, выводим '1' на первый пин и '0' — на второй, остальные в Z-состоянии. Чтобы зажечь HL2 — '1' на второй пин и '0' на первый, и т.д.
        Опрос кнопок тоже довольно прост. Переводим пин 1 в режим входа, включаем внутреннюю подтяжку к плюсу питания. На пин 4 выводим '0'. Если замкнута кнопка S1, с первого пина будет считан '0'. Чтобы проверить состояние S2, пин 4 переключаем на вход, а на пин 1 выводим '0', и т.д.
        Для управления пищалкой есть два варианта:
        1. (топорный) Гасить всю индикацию на время звучания ноты.
        2. Один раз за цикл подавать импульс на динамик, а высоту звука менять изменением частоты динамической индикации.
        Данное решение относится скорее к извращениям, и на практике его следует применять только в условиях жесткого недостатка портов (и то, три раза подумав).
          0
          «Данное решение относится скорее к извращениям» — это уж точно, но вполне жизнеспособно.
        +1
        Да ё маё. А может лучше было это все собрать из простых деталей и сделать например на триггерах?
          +1
          Конечно можно, но для начала так же проще.
            0
            А потом миниатюризируйте и запускайте собственную линию часов
          +1
          В статье поправьте, пожалуйста, «что — то» на «что-то» и подобные случаи. Части слова пишутся через дефис без пробелов с обеих сторон, а не через тире. А то в глаза бросается сразу.

          Успехов в изучении!
            0
            Спасибо, поправил.
            +1
            Хорошее начало. Спасибо за статью.

            «Буду и дальше изучать платформу arduino» — а что, собственно, изучать-то в ардуино? Обычная плата на AVR с несколькими готовыми плюшками и отладчиком. Но дело в том, что многие из этих плюшек часто в готовых устройствах просто не используются. Поэтому, мне кажется, что лучше уж изучать не Arduino, а саму электронику, чтобы научиться использовать ресурсы в соответствии с потребностями, понимая где, зачем и какой элемент нужен.

            Но для первых опытов, конечно, подойдет.

            Еще Arduino полезно использовать, когда вам требуется определенный функционал в компактном решении, а запаять резистор 0402 или микросхему в TQFP корпусе в домашних условиях непросто(хотя возможно), и тут приходит на помощь arduino nano. Так что паять ардуино на выводных компонентах смысла тем более нет(разве что, вновь, для первого опыта).
              0
              В Arduino отладчика нет, нужно AVRDragon брать — и то, JTAG доступен на жирных AVR вроде ATmega1280, а на ATmega168 и ATmega328 есть только тормозной и закрытый Debug wire.
              +1
              Хоть бы какую-нибудь DS1307 присобачили, статья б вышла пооригинальнее :)
                +2
                Все, блин, умные гуру. А мне вот статья была вполне интересна. Тоже собираюсь купить ардуино и поморгать светодиодами…
                  0
                  Я бы светодиоды по следующей схеме подключал для экономии портов. Я когда-то на Delphi такой проект для виндузного рабочего стола себе делал, типа виджет. Могу выложить exe'шник. :)
                    +1
                    Упс. Не дочитал все комментарии, оказывается Orcelot даже картинку привел.
                      0
                      Кому мега виджет с bcd-часиками? Писан еще на Delphi 5 в Win2000. Ссылка.
                      0
                      А что с часовым кварцем? Что-то его не видно.
                        0
                        Время вычисляется программно, с помощью функции millis(), она возвращает количество миллисекунд с начала выполнения программы.

                      Only users with full accounts can post comments. Log in, please.