Как сделать часы на ардуино уно: Arduino RTC » Digitrode.ru

Содержание

Часы реального времени | Статья в журнале «Молодой ученый»

Библиографическое описание:

Еремеев, Д. В. Часы реального времени / Д. В. Еремеев. — Текст : непосредственный // Молодой ученый. — 2019. — № 13 (251). — С. 36-38. — URL: https://moluch.ru/archive/251/57696/ (дата обращения: 31.05.2021).



В данной статье рассмотрена модель часов реального времени.

Результатом является разработка электрической принципиальной схемы микропроцессорного устройства на аппаратной платформе Arduino Uno R3.

Ключевые слова: ардуино уно, часы реального времени.

Целью моей работы является моделирование процесса управления железнодорожным переездом.

Для выполнения поставленной задачи необходимы компоненты:

– Контроллер Arduino UNO R3;

– Малая макетная плата для прототипирования;

– ЖК-дисплей 16×2;

– 2 кнопки;

– Резистор 10 КОм — 2 шт;

– Потенциометр 10 КОм;

– Провода.

Одним из первых проектов, которые новички собирают на основе платы Arduino, являются простые часы, ведущие отсчет времени. В основном такие часы основаны на подключаемом к Arduino модуле RTC (Real Time Clock). Сегодня на рынке электронных компонентов доступны разные модели RTC, различающиеся точностью и ценой. Среди распространенных моделей можно назвать DS1302, DS1307, DS3231.

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

Arduino — аппаратная вычислительная платформа, основными компонентами которой являются простая плата ввода-вывода и среда разработки на языке Processing/Wiring. Arduino может использоваться как для создания автономных интерактивных объектов, так и подключаться к программному обеспечению, выполняемому на компьютере (например, Adob Flash, Processing, Max (англ.

), Pure Data,SuperCollider. Рассылаемые в настоящее время версии могут быть заказаны уже распаянными. Информация об устройстве платы (рисунокпечатной платы) находится в открытом доступе и может быть использована теми, кто предпочитает собирать платы самостоятельно.

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

Данные часы можно собрать на обычной макетной плате, поскольку здесь не потребуется много компонентов. Основным звеном здесь будет плата Arduino Uno. Для отображения времени используем ЖК-дисплей 16×2. Для изменения настроек времени следует подключить две кнопки (для часов и минут). Кнопки подключаются к Arduino через резисторы 10 КОм. Чтобы изменять яркость дисплея потребуется потенциометр на 10 КОм. Схема подключения всех этих компонентов к плате Arduino Uno представлена ниже.

Ниже представлен скриншот собранной модели (рис. 1).

Рис. 1. Макетная сборка устройства часов реального времени в программной среде Tinkercad

Ниже представлены скриншоты работы модели в определенных ситуациях, описанных выше (рис. 2, рис. 3).

Рис. 2. Работа часов до полудня (AM)

Рис. 3. Работа часов после полудня (PM)

Ниже представлен листинг программы.

Заключение

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

Литература:

  1. Момот, М. В. Мобильные роботы на базе Arduino. 2-е издание. — СПб.: БХВ-Петербург, 2018. — 336 с. ил.
  2. Блум Джереми, Изучаем Arduino: инструменты и методы технического волшебства: Пер. с англ. — СПб.:БХВ-Петербург, 2015 г.-336 с.: ил.
  3. Англоязычный ресурс производителя Arduino [Электронный ресурс], офиц.сайт. URL: https://www.arduino.cc/.
  4. Видео-уроки интернет магазина [Электронный ресурс], URL: http://www.youtube.com/user/AmperkaRu.
  5. Электронная энциклопедия интернет магазина [Электронный ресурс], офиц.сайт, Москва. URL: http://wiki.amperka.ru/.

Основные термины (генерируются автоматически): RTC, реальное время, час, UNO, компонент, отсчет времени, программная часть, работа часов.

DS3231 подключение

Сегодня я расскажу, как подключить модуль часов реального времени RTC DS3231 и вывести результат на экран дисплея NOKIA 5110. Это второй урок про этот дисплей и если вы не смотрели первый, то вам будет труднее разобраться.
Модуль часов точного времени RTC DS3231.

Аббревиатура RTC означает — Часы Реального Времени от английского Real Time Clock.
В этом уроке мы познакомимся.
С самим модулем.
Научимся устанавливать и записывать в него, время, день, месяц и год.
Считывать данные из памяти и разбивать их на значения, чтобы можно было выводить их на экран дисплея.
Покажу как вывести свой шрифт на экран.

Как это сделать я рассказывал в прошлом уроке.
Посмотрим, что получилось.
Видео я ускорил в 5 раз, чтобы был лучше виден результат, так что двоеточия мигают быстрее чем на самом деле.

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

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

Во многих проектах Ардуино требуется отслеживать и фиксировать время. 
Модуль часов реального времени RTC DS3231 лучше всего подходит для этой работы.
Он оснащён дополнительной батареей которая, позволяет хранить текущую дату, не завися от наличия питания на самом устройстве.
Так как модуль работает от автономного питания – батареек, аккумуляторов, и продолжают проводить отсчёт, даже если на Ардуино отключилось питание. 

Модуль часов реального времени RTC DS3231 позволяет устанавливать и считывать: 

  • Секунды, 
  • минуты, 
  • часы, 
  • дни,
  • недели,
  • месяцы и годы,
  • а также температуру.

Дата, по окончании месяца, автоматически подстраивается для месяцев, у которых дней меньше 31, включая учёт февраля и коррекцию дней для високосного года.


Модуль часов может работать в 24-чaсoвoм, или в 12-чaсoвoм формате с индикатором AM/PM.
Есть два программируемых по времени будильника, и программируемый выход прямоугольного сигнала. 
Адрес и данные передаются последовательно через двунаправленную шину I2C или по-другому она называется TWI.

Что может модуль. 

  • Установить календарь до 2100 года с учётом високосных лет
  • Выбор режимов 12(AM/PM) или 24-часового режима
  • Возможность настроить 2 будильника
  • Использовать в качестве генератора прямоугольных импульсов
  • Измерять температуру микросхемы. Она практически не нагревается поэтому можно сказать, что она равна температуре окружающей среды.


На основе этого модуля можно построить .

  • Часы,
  • будильник,
  • секундомер,
  • таймер,
  • генератор прямоугольных импульсов,
  • термометр,
  • включать/выключать внешние устройства по расписанию.

Для удобного использования контакты расположены с двух сторон платы.

Если вам интересно, то можно посмотреть моё видео, где я делал часы с кукушкой. Там был использован индикатор TM1637, а для вывода звуков кукушки я использовал мп3 плеер.

Если модуль питается от платы Arduino, то он не использует батарею на модуле. При питании от батарейки модуль отслеживает дату и время, но не работает с шиной I2C.
При отсутствии обоих источников питания модуль прекращает работать и сбрасывает все данные в заводские настройки.
С резервной батарейкой часы способны проработать несколько лет.

Группы контактов 

Группы контактов — J1

  • 32K:   выход генератора, частота 32 кГц
  • SQW: Выход прямоугольного(Square-Wave) сигнала.
  • SCL:   Serial CLock — шина тактовых импульсов интерфейса I2C
  • SDA:  Serial Data — шина данных интерфейса I2C;
  • VCC:  «+» питание модуля
  • GND: «-» питание модуля

Группы контактов — J2

  • SCL:   линия тактирования (Serial CLock)
  • SDA:  линия данных (Serial Data)
  • VCC:  «+» питание модуля
  • GND: «-» питание модуля

Подключение модуля DS3231 RTC Arduino к шине I2C(например, для Arduino UNO, Nano, Pro Mini):
SCL → A5
SDA → A4
VCC → +5 В
GND → земля

Подключение происходит по двухпроводной шине I2C(TWI)
Выводы SDA и SCL подключаются к аналогичным выводам на Arduino 
Питание VCC к +5 Вольт, а GND к GND на плате Arduino

Характеристики

  • Микросхема: DS3231
  • Рабочее напряжение: 3,3 В — 5 В.
  • Потребляемый ток (в режиме ожидания): до 170 мкА.
  • Потребляемый ток (во время передачи данных): до 300 мкА.
  • Потребляемый ток (во время резервного питания, без передачи данных): до 3,5 мкА.
  • Тактовая частота шины I2C: до 400 кГц.
  • Рабочая температура: 0 … 70 °C.
  • Точность хода: ±2 ppm (примерно ± 1 минута в год) при температуре от 0 до 40C
  • внутренний термометр с диапазоном от −40…+85°C.
  • Размер: мм 38 мм (длина) мм * 22 мм (Ш) мм * 14 мм (высота)
  • Вес: 8 г

Для работы необходимо установить библиотеку DS3231. Скачать можно по ссылке в описании к видео.

В видео я подробно рассказываю как подключить этот модуль часов, объясняю что делает каждая строчка кода в скетче.
 

Arduino часы на LCD TFT 3,5′


Сегодня я хочу поделится инструкцией по изготовления оригинальных часов с датчиком температуры. В качестве контролера Arduino Uno. Для отображения часов, даты и температуры я буду использовать цветной LCD TFT экран. Экран использует много контактов Arduino, поэтому мы обойдемся без модуля RTC.

Для реализации данного проекта нам понадобится:
— Arduino Uno
— LCD TFT 3.5” Shield для подключения к Arduino Uno
— Датчик температуры ds18b20
— Резистор 4.7 Ком 0.25 Вт
— Резистор 62 Ом 2 шт
— Аккумулятор Ni-Mn, 1.2V, 1000mA 6 шт
— Синий светодиод 5мм 4 шт
— Фанера толщиной 10 мм
— Немного тонкого пластика или картона
— Наждачная бумага
— Электролобзик
— Термоклей
— Паяльник
— Припой, канифоль
— Изолента
— Двусторонний скотч
— Соединительные провода
— Акриловая краска
— Красители для акриловой краски
— Дрель
— Сверла по дереву 5 мм и 3 мм
— Саморезы по дереву 3 х 30 мм


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

У вас он может немного отличаться, их много разновидностей. Подсветка экрана запитана через стабилизатор на 3.3 вольта и резистор от 5 вольт с Arduino. Это хорошо видно на фото:

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

Теперь экран готов к установке

Шаг 2 Подготовка Arduino Uno.
Экран использует много контактов Arduino, кроме этого на плате с экраном часто размещают слот под SD карту. Еще одна проблема заключается в том, что при соединении экрана и Arduino оставшиеся выводы Arduino становятся не доступны. Поэтому надо выбирать аналог Arduino Uno с подготовленными дополнительными посадочными гнездами для выводов. Таким образом мы сможем припаять гребенку к свободным выводам в обратную сторону. Итак, мы откажемся от слота SD карты в пользу свободных выводов. Распаиваем в обратную сторону следующие выводы: D0, D1, D10, D11, D12, D13, A5. Также с обратной стороны нам понадобятся выводы +5 вольт, GND, RES. Для питания будем использовать Ni-Mn аккумуляторы, и будет необходимо их заряжать, для этих целей припаиваем провода к разъему питания Arduino, таким образом мы сможет и заряжать аккумуляторы и питать Arduino во время зарядки. В конечном итоге получаем следующее:



Можно перейти к корпусу.

Шаг 3 Изготовление корпуса.
Начнем с изготовления корпуса для наших часов. За основу возьмем фанеру толщиной 10 мм. Форма может быть разной и, если вам не понравилась выбранная мною форма, вы можете изготовить шаблон и вырезать своей формой. Но если вы решили сделать такой же, как и у меня, тогда распечатываем следующую картинку на любом принтере в масштабе 100%:

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

Далее необходимо соединить экран и Arduino Uno. Прикладываем к нашей заготовке и отмечаем на фанере места вырезов под USB порт и разъем питания Arduino. Используя нож прорезаем по отмеченным линиям, но не до конца, а на только на нужную глубину:

Кладем заготовку из фанеры на ровную поверхность, внутрь кладем экран. Ровная поверхность нужна чтобы экран и передняя часть заготовки находилась в одной плоскости. Обратите внимание чтобы вырезы под USB и разъем питания Arduino совпадали с их фактическим расположением. Используя термоклеевой пистолет приклеиваем экран к фанере, заодно можно приклеить и провода подсветки, чтобы их случайно не выдрать:

С лицевой стороны будет выглядеть так:

Покрываем нашу заготовку акриловой краской. Я выбрал акриловою краску так как она не пахнет и быстро сохнет. Используя колер придаем белой краске нужный нам цвет. Мне нравится фиолетовый. Вы можете покрасить в любой понравившийся вам цвет:

Теперь переходим ко второй заготовке, в ней необходимо вырезать прямоугольник размером 75 мм на 35 мм, для доступа к выводам Arduino. А также надо сделать пять отверстия диаметром 5 мм для светодиодов. И прорезь для выключателя. И отверстия 3 мм под саморезы. Также, как и первую заготовку красим вторую:

Для соединения этих частей из фанеры той же толщины изготовим два прямоугольники размером 20 мм на 40 мм и один квадрат со стороной 20 мм. И просверливаем в них отверстия 3 мм под саморезы:

Шаг 4 Электрика.
Ставим Arduino на место:

Прикручиваем наши соединительные прямоугольники как показано на фото:

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

Переходим к задней части. В проделанные отверстия вставляем светодиоды и фиксируем их термоклеем. Спаиваем их параллельно по два светодиода и не забываем про резисторы на плясовой провод. Минус от светодиодов подключаем к GND, плюс к D11 Arduino.

В верхнее отверстие вставляем датчик температуры ds18b20. Он обладает высокой точностью измерения, погрешность не более 0,5 °C. Датчик откалиброван при изготовлении, какой-либо дополнительной настройки не требуется. Диапазон измерения температуры -55 … + 125 °C. Есть два режима работы: с внешним источником питания и «паразитного питания». Мы будем использовать внешнее питание, так как при этом он работает стабильнее. Подключение следующее:

Так же фиксируем его термоклеем. В конечном итоге должно получится следующее:

Контакт DQ датчика температуры подключаем к D10 Arduino. Не забудьте припаять подтягивающий резистор между DQ и +5(VDD).
Перед окончательной сборкой еще раз проверьте чтобы все было припаяно и подключено:

Шаг 5 Собираем все вместе.
Аккуратно, чтобы не порвать провода, переворачивает заднюю часть и кладем ее на лицевую часть. В местах крепления соединительных прямоугольников проделываем отверстия и вкручиваем саморезы, соединяя таким образом обе части:

Теперь из тонкого пластика вырезаем полости толщиной 35 мм. На двусторонний скотч клеим эти полости по кругу на боковины наших часов:


Также из тонкого пластика вырезаем внутренние элементы бумажного шаблона и наклеиваем их на лицевую сторону часов:

Для зарядки аккумуляторов и работы часов во время зарядки необходим блок питания напряжением 7. 2 – 8 V, с ограничение тока в 600 mA. Если у вас будут другие аккумуляторы, то и блок питания нужно подбирать другой, главное чтобы ток зарядки не превышал 10% от емкости аккумуляторов.

На этом сборка закончена, осталось только отредактировать и записать скетч.

Шаг 6 Подготовка среды и заливка скетча.
Для редактирования и заливки скетча вначале надо установить Arduino IDE с официального сайта:
www.Arduino.cc.

Затем установить следующие библиотеки. Для работы с экраном библиотека UTFT:

utft.rar [2.39 Mb] (скачиваний: 851)

Для подключения датчика температуры библиотека OneWire:

Для установки этих библиотек распакуйте архивы и поместите распакованные файлы в папку «libraries», находящуюся в папке с установленной Arduino IDE. Или не распаковывая скачанные архивы, в среде Arduino IDE выберите меню Скетч – Подключить библиотеку. В самом верху выпадающего списка выберите пункт «Добавить .Zip библиотеку». Не забудьте после всего этого перезагрузить Arduino IDE. Скетч для часов:

Датчик температуры работает по протоколу One Wire и имеет уникальный адрес для каждого устройства — 64-разрядный код. Чтобы каждый раз не искать этот адрес, подключаем датчик к Arduino, заливаем в нее скетч находящийся в меню Файл – Примеры – Dallas Temperature – OneWireSearch. Далее запускаем Инструменты — Монитор порта. Arduino должна найти наш датчик, написать его адрес и текущие показания температуры. Копируем или просто записываем адрес вашего датчика. Открываем скетч Ard_LCD_TFT_Term, ищем строку:

byte addr[8]={0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97};//адрес моего датчика

Записываем адрес вашего датчика между фигурными скобками, заменяя адрес моего датчика. Осталось только залит отредактированный скетч. Хочу еще сказать, что просто часы возможно скучновато, но вы можете написать свой собственный скетч. Я по мере написания других скетчев для этих часов буду их выкладывать.

Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Ардуино часы без модуля

Проект на Arduino: часы на основе 7-сегментных индикаторов без использования модуля реального времени.

Для сборки данного проекта нам понадобится:
1) Arduino (либо другие аналоги)
2) 4 семисегментных индикатора (AliExpress: http://ali.pub/1armbe)
3) 4 драйвера CD4026 (AliExpress: http://ali.pub/24rkfv)
4) Две кнопки
5) Два светодиода
6) И куча резисторов…

Собираем всё по схеме и заливаем на ардуино следующий скетч:

Основа часов delay(100) – задержка на 100 миллисекунд. Почему именно на 100мс, а не на 1 секунду? Всё просто: чтобы сымитировать миганием светодиодов секунды. 200мс светодиод горит, 800мс – не горит.

Самые простые часы на основе Arduino и LCD (ЖК дисплей) из тех что мы когда-то делали. Нам потребуются только Arduino UNO, 16×2 ЖК-дисплей и две кнопки. Никаких резисторов, никаких потенциометров.

Комплектующие

Начинаем с деталей, которые нам понадобятся для проекта цифровых часов на Ардуино Уно:

  • Arduino UNO & Genuino UNO x 1
  • Стандартный ЖК-дисплей Adafruit — 16×2 (белый на синем) x 1
  • Кнопочный переключатель SparkFun 12 мм × 2
  • Макетная плата половинного размера × 1
  • Провода перемычки (на выбор)

Что за идея

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

По факту — сделать правильную секунду в цифровых часах не так просто. Нужно правильно работать с циклами. Мы нашли много комментариев на англоязычных сайтах:

На скриншоте выше видно, что код реализован таким образом, что теперь инкремент s будет выполняться каждую 1 секунду и не больше, в зависимости от времени выполнения цикла loop<>.

В связи с этим резисторы и потенциометры мы полностью удалили.

Кнопки настройки времени вы можете использовать встроенные в микросхему ATmega328P.

pinMode(hs, INPUT_PULLUP) избегает использования внешнего Pullup. Подробнее о INPUT_PULLUP читайте в нашем Справочнике программиста Ардуино.

Избегайте потенциометра ЖК-дисплея.

Контрастность ЖК-дисплея может быть установлена с помощью сигнала PWM (Широтно-импульсная модуляция (ШИМ, англ. pulse-width modulation (PWM))) Arduino.

То же самое для подсветки, которая питается сигналом ШИМ (PWM) Arduino, поэтому её можно установить как вкл/выкл с помощью Arduino.

Схема проекта

Принципиальная схема нашего проекта выглядит таким образом:

Схема соединения всех комплектующих для наших цифровых часов Ардуино выглядит так:

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

Также не забываем, что мы в самом начале подключаем библиотеку LiquidCrystal, которую вы можете скачать в разделе Библиотеки на нашем сайте.

Результат

На этом пока всё, надеемся, что ваши цифровые часы Ардуино идут точно секунда в секунду.

цифровая электроника вычислительная техника встраиваемые системы

Часы на Arduino без использования модуля RTC

Одним из первых проектов, которые новички собирают на основе платы Arduino, являются простые часы, ведущие отсчет времени. В основном такие часы основаны на подключаемом к Arduino модуле RTC (Real Time Clock или Часы реального времени). Сегодня на рынке электронных компонентов доступны разные модели RTC, различающиеся точностью и ценой. Среди распространенных моделей можно назвать DS1302, DS1307, DS3231.

Но часы на Arduino можно сделать и без использования RTC, особенно если не получается достать такие модули. Конечно, точность в данном случае будет невелика, поэтому проект скорее должен рассматриваться как учебный.

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

Данные часы можно собрать на обычной макетной плате, поскольку здесь не потребуется много компонентов. Основным нашим звеном здесь будет плата Arduino Uno. Для отображения времени можно взять ЖК-дисплей 16×2. Для изменения настроек времени следует подключить две кнопки (для часов и минут). Кнопки подключаются к Aduino через резисторы 10 КОм. Чтобы изменять яркость дисплея потребуется потенциометр на 10 КОм. Схема подключения всех этих компонентов к плате Arduino Uno представлена ниже.

Теперь следует запрограммировать Arduino. Простой код (скетч), позволяющий выводить время на экран LCD-дисплея приведен ниже.

Электронные часы-будильник | Проекты | Центр Инноваторов

С целью совершенствования навыков работы с микроконтроллерами появилась необходимость создания технического решения для мониторинга времени при малой профессиональной подготовке. Проект является вариантом решения конкурсной задачи соревнований JuniorSkills в компетенции Электроника 14+.

«Задачи проекта: • изучить историю развития часов; • рассмотреть существующие микроконтроллеры; • освоить базовые навыки программирования на языке C++ для микроконтроллера; • продумать конструкцию часов; • сделать структурную схему устройства; • сделать принципиальную схему устройства; • собрать часы-будильник; • составить алгоритм прошивки микроконтроллера; • написать программу прошивки микроконтроллера.»

«Деловой человек сегодня успешен при условии строгого учета времени. Люди встречаются друг с другом, работают и даже спят по расписанию. Существуют выражения: «Жить по графику» и «Время – деньги». Нам, школьникам, тоже следует четко организовывать свою деятельность во времени и пространстве. Таким образом, появилась идея создания простых часов своими руками в целях повышения профессиональных навыков в работе с микроконтроллерами. Микроконтроллеры позволяют повысить точность измерения времени»

«В ходе работы: • изучена история развития часов. • рассмотрены существующие микроконтроллеры. • изучены образцы существующих часов. • освоены базовые навыки программирования на языке C++ для микроконтроллера. • продумана конструкция часов. • сделана структурная схема устройства. • сделана принципиальная схема устройства. • собраны часы-будильник. • составлен алгоритм прошивки микроконтроллера. • написана программа прошивки микроконтроллера. Задачи проекта выполнены. Цель работы достигнута. Фото изделия https://photos.google.com/photo/AF1QipMrQbquK52fvOdZ-qfM8b0kAlOvCO335g3J_bLu

«В результате работы получено действующее устройство, в основе которого лежит микроконтроллер Atmega 328. Устройство может: • Измерять определённые промежутки времени. • Подавать сигнал в определённое время. Данное устройство можно применять в быту людей, на производствах, где важно измерение времени, в автоматизированных системах управления, например для полива растений, корма животных, и во многих других областях. В дальнейшем, предполагается поставить на изделие более мощный полифонический динамик, регулировку яркости дисплея, регулировку громкости будильника.»

«В изделии использован микроконтроллер Atmega328, размещённый на плате Arduino Uno и модуль клавиатуры и светодиодной индикации TM1638 LED&KEY. Модуль клавиатуры и светодиодной индикации выводит информацию в понятном для пользователя виде и позволяет пользователю изменять настройки устройства. 8 кнопок клавиатуры позволяют удовлетворить требования к управлению данным изделием. Данный тип модуля обладает приемлемыми характеристиками и хорошо подходит для взаимодействия с микроконтроллером Atmega 328. В изделии использован простой пьезодинамик, подключённый к плате Arduino Uno. Запитывает устройство батарея Крона. Для программирования устройства был использован персональный компьютер Acer.»

Часы реального времени — модуль для Arduino

Для корректной работы многих электронных устройств необходимо знать точное время и дату. К таким устройствам можно отнести не только всем известные «часы на микроконтроллере», которые существуют в бесчисленном множестве вариантов, но и различные схемы автоматизации от простой системы автоматического цветополива, до полноценного умного дома. Разумеется, в продаже имеется достаточное количество различных специализированных микросхем реального времени [1]. Данный модуль был приобретен на Aliexpress.

Модуль поставляется в запаянном антистатическом пакете, габариты 45 х 23 х 15 мм, масса 8,8 г вместе с элементом питания CR2032.

На печатной плате устройства имеется три крепежных отверстия диаметром 2 мм. Для автономной работы часов на плате имеется колодка для установки элемента питания типоразмера CR2032. На плате модуля имеется светодиод для индикации внешнего питания.


Всего модуль имеет шесть основных выводов. VCC и GND питание +5 В (допустимо +3,3 В) и общий провод соответственно. SCL и SDA – контакты интерфейса I2C. Этот последовательный интерфейс позволяет организовать обмен информацией между 128 устройствами по двухпроводной линии [2-4]. Для платы Arduino UNO следует подключать SCL к А5, а SDA к А4.
SQW – программированный выход который можно использовать для генерации прерываний или генерации меандра с частотой 1 Гц, 1024 Гц, 4096 Гц или 8192 Гц. 32K – меандр с фиксированной частотой импульсов 32768 Гц [5-6]

Ток, потребляемый модулем от платы Arduino UNO, составляет 5,3 мА при напряжении 5В и 2 мА при 3.3 В.

Для работы с данным модулем можно использовать стандартные библиотеки «DS1307RTC» и «TimeLib» [7]. При первом включении необходимо установить текущее время и дату. Это можно сделать, например, с помощью программы time_set [8-9]. Визуализировать информацию о дате и времени, можно с помощью, к примеру, TimeRTCSet — стандартного примера из библиотеки «TimeLib».

В целом сравнительно простой в программировании модуль, с помощью которого можно заставить ваше устройство ориентироваться во времени. Приятным бонусом является возможность осуществлять измерение температуры с помощью данного модуля [10].

Полезные ссылки

  1. https://arduinomaster.ru/datchiki-arduino/arduino-chasy-rtc-ds1307-ds1302-ds3231/
  2. Д. Изучаем Arduino: инструменты и методы технического волшебства: Пер. с англ. — СПб.: БХВ-Петербург, 2015. — 336 с.
  3. http://robocraft.ru/blog/communication/780.html
  4. http://cxem.net/mc/mc316.php
  5. http://radiolaba.ru/microcotrollers/ds3231-podklyuchenie-chasov-realnogo-vremeni.html
  6. http://www.avrki.ru/articles/content/ds3231/
  7. http://blog.rchip.ru/podklyuchenie-chasov-realnogo-vremeni-rtc-ds3231-k-arduino/
  8. https://voltiq.ru/connecting-ds3231-to-arduino/
  9. http://radiolis.pp.ua/arduino/24-chasy-realnogo-vremeni-ds3231sn-zs-042-podkljuchenie-k-arduino
  10. http://blog.rchip.ru/oled-chasy-termometr-na-arduino-i-ds3231/

Все файлы в архиве. Обзор подготовлен для 2Схемы.ру — Denev


Создание часов и календаря с использованием Arduino, клавиатуры 4×4 и ЖК-дисплея 16×2

В сообщении объясняется, как сделать часы и календарь, используя внутренние таймеры arduino uno. В проекте не используются внешние RTC (часы реального времени). Только внутренний тиковый таймер Arduino (функция задержки) используется для построения системы часов и календаря с помощью arduino uno. Часы и календарь с Arduino — сложный проект, так как код слишком длинный, будет сложно понять поток кода. Прежде чем начать, я предполагаю, что у вас есть базовые знания о количестве дней в неделе, количестве недель в месяце, количестве месяцев в году, количестве дней в месяцах, количестве дней в году и о високосном году.Часы и календарь проекта с Arduino разработаны с учетом всех ключевых функций часов и календаря. Если вы знаете обо всех ключевых функциях часов и календаря, то вам будет легко понять приведенный ниже код.

Часы и календарь Arduino

Часы и календарь Arduino — требования проекта

  • Arduino Uno.
  • 16 × 2 жк.
  • Потенциометр для регулировки контрастности ЖК-дисплея.
  • Клавиатура 4 × 4 для настройки времени и даты.

Часы Arduino, принцип работы календаря и схема

Время и дата отображаются на ЖК-дисплее размером 16 × 2 символа. Чтобы установить время и дату, используйте клавиатуру 4 × 4, подключенную к Arduino, для ввода даты и времени. Символьный ЖК-дисплей 16 × 2 взаимодействует с Arduino (платой микроконтроллера) в 4-битном режиме. Кулоны клавиатуры подключены к контактам 0,1,2,3 Arduino, а ряды подключены к контактам 4,5,6 и 7. Принципиальная схема проекта представлена ​​ниже. Контакты данных ЖК-дисплея подключены к контактам Arduino # 8,9,10,11.Вывод lcd rs (выбор регистра) подключен к выводу № 13 Arduino. Вывод Lcd E (enable) подключен к выводу №12 Arduino. Вывод Lcd r / w (чтение / запись) заземлен напрямую, чтобы выполнять только операцию записи, без операции чтения.

Часы и календарь с клавиатурой Arduino 4 × 4 и ЖК-экраном 16 × 2 — принципиальная схема

Как работает система календаря часов Arduino

При первой загрузке кода / скетча в arduino uno. На ЖК-дисплее размером 16 × 2 символов появится сообщение с просьбой ввести дату (год, месяц, день) и время (час, минута).Вы должны ввести текущую дату и время. После ввода даты и времени часы начнут работать автоматически.

После ввода времени секунды будут отображаться на ЖК-дисплее и увеличиваться одна за другой. Когда количество секунд достигнет 60, значение минуты будет увеличено, и секунды снова начнут отсчет с 0. Когда часы достигнут 24, дата будет увеличена. Когда дата достигает конца месяца, месяц будет увеличиваться, а когда его конец декабря года будет увеличиваться. В код включены все дни месяца и года.Код имеет возможность распознавать високосный год и увеличивать календарные дни, такие как високосный год.

Настройка времени часов Arduino и календарной даты

Если вы хотите настроить время и дату в любое время, просто нажмите 1 на клавиатуре. На ЖК-дисплее размером 16 × 2 появится сообщение с просьбой ввести время и дату. Если вы введете неверную информацию, например, секунд = 70 или минут = 63, система примет это как ошибку и сообщит вам, что вы ввели неверные данные. Все необходимые проверки включены в код.

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

Примечание: Я использую в своем проекте клавиатуру 4 × 4. Поскольку их 16 кнопок в клавиатуре 4 × 4, 4 × 4 = 16, и мне нужно только 10 кнопок для цифр. Итак, я использовал первые десять кнопок клавиатуры. Остальные шесть недействительны. На них ничего нет, если вы нажмете на них, ничего не произойдет.

Функции кнопок календаря часов Arduino

  • КНОПКА 1 — сканирование 1 (первый ряд, первый кулон)
  • КНОПКА 2 — сканирование 2 (первый ряд, второй кулон)
  • КНОПКА 3 — сканирование 3 (первый ряд третий кулон)
  • КНОПКА 4 — сканирование 4 (первый ряд четвертый кулон)
  • КНОПКА 5 — сканирование 5 (второй ряд первый кулон)
  • КНОПКА 6 — сканирование 6 (второй ряд, второй кулон)
  • КНОПКА 7 — сканирование 7 (второй ряд третий кулон)
  • КНОПКА 8 — сканирование 8 (второй ряд четвертый кулон)
  • КНОПКА 9 — сканирование 9 (третий ряд, первый кулон)
  • КНОПКА 10 — сканирование 0 (третий ряд, второй кулон)
  • КНОПКА 11 — пусто-ничего-пусто (третий ряд третий кулон)
  • КНОПКА 12 — пусто-ничего-пусто (третий ряд четвертый кулон)
  • КНОПКА 13 — пусто-ничего-пусто (четвертый ряд, первый кулон)
  • КНОПКА 14 — пусто-ничего-пусто (четвертый ряд, второй кулон)
  • КНОПКА 15 — пусто-ничего-пусто (четвертый ряд третий кулон)
  • КНОПКА 16 — пусто-ничего-пусто (четвертый ряд четвертый кулон)

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

Загрузите код проекта и файл .ino скетча Arduino. Пожалуйста, поделитесь с нами своим мнением о проекте. Если у вас есть какие-либо вопросы относительно публикации, напишите их ниже в разделе комментариев.

Посмотреть видео проекта Здесь

Файлы часов-календаря

12-Multi национальные цифровые часы на Arduino UNO

Комментируйте ошибки или исправления, найденные для этой схемы, и получите шанс на крупный выигрыш!

Наличие 12 многонациональных цифровых часов очень распространено в лобби / на стойке регистрации звездных отелей, показывая время и даты нескольких стран, из которых большинство гостей прибывают, чтобы остановиться в отеле.Общей чертой этих часов является то, что они выглядят величественно и с элегантным циферблатом!

Я попытался реализовать эту функцию, используя дешевый микроконтроллер Arduino UNO под псевдонимом ATMega-328 [который вряд ли стоит 3 доллара за штуку], несколько дешевых 128 * 128 TFT-дисплеев и RTU DS3231.

Принцип работы:

DS3231 — это очень точный RTU, который имеет встроенный датчик температуры для настройки тактовых частот для температурных поправок. Он поддерживает очень точное время в течение длительного времени.DS3231 подключается к шине I2C.

Каждый TFT ILI9163 представляет собой цветной дисплей 128 * 128 точек, работающий на шине SPI вместе с выводом Reset и AO, и ему требуется только один дополнительный вывод GPIO на дисплей, чтобы завершить его соединение с Arduino. В этом суть этих дешевых, но универсальных цифровых часов для разных стран, а стоимость системы с 12 дисплеями составляет 46 долларов.

Посмотрим, как?

Каждый TFT ILI9163 работает от 5 В / 3,3 В и имеет следующие контакты — VCC, GND, LED, CS, RST, AO, SDK и SCK.Из этих VCC, GND, LED — общие контакты. Остальные булавки могут быть общими в зависимости от выбора.

ILI9163 Штифты Тип штифта Штифты UNO
Дисп-1 Дисп-2 Дисп-3 Дисп-4
VCC 5 В / 3,3 В 5 В / 3,3 В
ЗЕМЛЯ Только земля Земля
Светодиод 5 Вольт / 3.3 Вольт 5 В / 3,3 В
CS Должны быть разные контакты для каждого дисплея A1 A2 A3 Цифровой контакт 2
Сброс Может быть общим или RES выводом UNO RES штырь UNO
АО Могут быть общие или разные штифты. A0
SDA Фиксированный контакт для всех дисплеев Цифровой вывод 11
SCK Фиксированный контакт для всех дисплеев Цифровой вывод 13

Штыри DS3231 Контакты UNO
VCC 5 Вольт
ЗЕМЛЯ Земля
SCL A5
SDA A4

Используя приведенные выше таблицы, можно увидеть, что помимо 5 фиксированных / определенных контактов, для каждого контакта UNO можно создать один экран для конкретной страны.Нравится — A1, A2, A3, D2, D3, D4, D5, D6, D7, D8, D9, D10

Всего на одном UNO можно создать 12 различных национальных часов!

* D0, D1 и D12 использовать нельзя, так как они являются штырями специального назначения.

Схема: [для 4 дисплеев многонациональных часов]

12-Multi National Digital Clock Schematics

Чтобы добавить больше дисплеев, просто повторите соединения.

Билль о материалах и ценах для 4-х дисплеев с многонациональными часами

1 * DS3231 — 1
1 * ATMEGA328 / UNO — 3
4 * 128 * 128 TFT [ILI9163] — 14 долларов [3 доллара.5 шт.]
————————————————–
Для многонациональных часов с 4 дисплеями = 18 долларов США; Для 12-отображаемых многонациональных часов = $ 46
——————————————————

Схема показана для 4-х дисплеев многонациональных часов. Чтобы перейти на 12 дисплеев, просто добавьте столько дисплеев, повторите соединения и внесите необходимые изменения в эскиз.

Программное обеспечение

Опытный образец

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

Загрузить

исходную папку

Точность тактовой частоты Arduino

Каждый Arduino имеет встроенный источник тактовой частоты, обычно работающий на частоте 8 МГц или 16 МГц. Большинство Arduinos используют кварцевый кристалл для генерации тактового сигнала, но в некоторых моделях вместо него используется керамический резонатор.

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

Я измерил частоту Arduino Duemilanove с кристаллическим резонатором и частоту Arduino Pro Mini с керамическим резонатором. Вкратце, кристалл действительно намного точнее керамического резонатора, хотя точность керамического резонатора достаточна для большинства приложений, включая последовательную связь. Длинная история написана ниже.

Испытательная установка

Ингредиенты:

  • Arduino Duemilanove с ATmega328 и кварцевым резонатором 16 МГц
  • Arduino Pro Mini 5V с ATmega328 и керамическим резонатором 16 МГц
  • Adafruit GPS щит [4]
  • EM-406A GPS-приемник

Экран GPS установлен на Duemilanove, а выход PPS (импульс в секунду) GPS-приемника подключен к входным контактам на обоих Arduinos.Функция захвата ввода ATmega328 используется для считывания значения счетчиков 16 МГц на обоих Arduinos ровно один раз в секунду. Кроме того, данные внутреннего датчика температуры ATmega считываются раз в секунду.

Скетч Arduino доступен здесь: arduinofreq.pde

К сожалению, прием GPS через мое окно не очень хороший. Бывают периоды, когда видно менее 4 спутников. Приемнику GPS требуется как минимум 4 спутника для точного расчета времени, в противном случае его сигнал PPS будет медленно отклоняться от точного времени.Эта проблема была решена путем удаления измерений с менее чем 4 спутниками из набора данных перед анализом.

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

Несоответствие частот

Осцилляторов никогда не бывает ровно 16 МГц. У каждого компонента своя небольшая частотная рассогласованность. Оказывается, мой кристалл на 0,011% быстрее, чем 16 МГц, а мой керамический резонатор на 0,077% медленнее, чем 16 МГц.

Ни один из осцилляторов не годится для создания будильника. Часы, разработанные для работы на частоте 16 МГц, будут набирать 9 секунд в день с кварцевым генератором или терять 67 секунд в день с керамическим генератором.Точность можно повысить, измерив фактическую частоту генератора и откалибровав программу Arduino для этой частоты вместо 16 МГц. Это эффективно устраняет статическое рассогласование частот.

Оба генератора достаточно хороши для последовательной связи. Последовательный канал в стиле RS-232 обычно допускает несоответствие скорости передачи не менее 1%. По этому стандарту керамический резонатор все еще в 10 раз лучше, чем нужно.

Модель Arduino Duemilanove ATmega328 Pro Mini 5 В ATmega328
Источник тактовой частоты кристалл 16 МГц Керамический резонатор 16 МГц
Продолжительность измерения 18 часов
Диапазон частот 16001672… 16001677 Гц 15987746 … 15987918 Гц
Средняя частота 16001674,7 Гц 159878 21,8 Гц
Несоответствие от 16 МГц +105 стр. / Мин. −761 частей на миллион
Стандартное отклонение 0,7 Гц среднеквадр. 43,9 Гц (среднекв.)
Температура АРН 70 … 73 ° С 65… 67 ° C

Стабильность частоты

Частота осциллятора не совсем постоянна; он все время меняется. Колебания частоты частично вызваны внешними факторами, такими как температура, а частично внутренним шумом генератора.

Стандартное отклонение частоты — это первый показатель стабильности. Кристалл довольно стабилен со стандартным отклонением всего 0,7 Гц, в то время как керамический резонатор гораздо более вариабельный.

Стабильность часов зависит от отрезка времени, в течение которого они измеряются. Например, атомные часы чрезвычайно стабильны в течение нескольких дней и недель, но кристаллы более стабильны, чем атомные часы, в течение очень коротких периодов. Отклонение Аллана — распространенный способ выразить стабильность часов при различных длительностях измерения. [5] [6]

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

Температурная чувствительность

Частота осциллятора меняется с температурой. Я измерял частоту генератора и внутреннюю температуру AVR в течение нескольких дней.Поскольку на платах Arduino резонатор находится рядом с AVR, я предполагаю, что они претерпевают примерно одинаковые колебания температуры.

Результат показывает сильную связь между температурой и частотой. Кристалл на моем Duemilanove сдвигается почти на 1 Гц на градус Цельсия, в то время как керамический резонатор на Pro Mini примерно в 100 раз чувствительнее к температуре.

Модель Arduino Duemilanove ATmega328 Pro Mini 5 В ATmega328
Источник тактовой частоты кристалл 16 МГц Керамический резонатор 16 МГц
Продолжительность измерения 158 часов
Диапазон частот 16001671… 16001730 Гц 15983561 … 15988135 Гц
Средняя частота 16001679 Гц 15987508 Гц
Стандартное отклонение 7,4 Гц среднеквадратичное значение 720 Гц (среднекв.)
Температура АРН 68 … 110 ° С 64 … 96 ° С
Температурный коэффициент +0,97 Гц / ° C −139 Гц / ° C
Остаток пригонки по температуре 2.4 Гц среднеквадратичное значение 91,4 Гц (среднеквадр.)

Чувствительность к напряжению питания

Большинство генераторов чувствительны к изменениям напряжения питания. Напряжение питания цифровых плат, таких как Arduino, не всегда очень стабильно, особенно при использовании переменного тока.

Чтобы проверить чувствительность к напряжению, я запрограммировал оба Arduinos на переключение цифрового выходного вывода один раз в секунду в случайном порядке. При включении выходной контакт посылает ток ~ 30 мА на резистор 120 Ом.Дополнительный ток вызывает падение напряжения питания 5 В на Arduino на ~ 50 мВ. Если генератор чувствителен к изменению напряжения, его частота будет меняться в зависимости от состояния включения / выключения цифрового выхода.

Коэффициент напряжения питания определяется путем сопоставления состояния включения / выключения выходного контакта с измерениями частоты. Частота кристалла Duemilanove падает в среднем на 1,6 Гц, когда выходной контакт включен. Опять же, керамический резонатор Pro Mini намного более чувствителен.

Модель Arduino Duemilanove ATmega328 Pro Mini 5 В ATmega328
Источник тактовой частоты кристалл 16 МГц Керамический резонатор 16 МГц
Продолжительность измерения 33 часа
Диапазон частот 16001672 … 16001709 Гц 15984765 … 15988044 Гц
Средняя частота 16001680 Гц 15987434 Гц
Переменный выходной ток 33 мА размах 34 мА размах
Изменение напряжения питания 5 В 50 мВ размах 30 мВ размах
Изменение частоты
, коррелированное с выходным током
-1.6 Гц −76,2 Гц
Коэффициент напряжения питания +0,03 Гц / мВ +2,5 Гц / мВ

Выводы

(Обратите внимание, что эти выводы основаны на очень ограниченном тесте с одним кристаллом и одним керамическим резонатором.)

  • Кварцевый генератор на Duemilanove намного точнее керамического резонатора на Pro Mini.
  • Оба генератора достаточно точны для большинства приложений, включая высокоскоростную последовательную связь.
  • Ни один из осцилляторов не годится для использования в будильнике без калибровки. Кварцевый генератор может быть достаточно хорошим, если программа Arduino откалибрована для компенсации несоответствия частот конкретного кристалла, на котором он работает. Керамический генератор все равно будет недостаточно хорош даже после калибровки.
  • Ардуино нагреваются под прямыми солнечными лучами.

Список литературы

Контакты

Комментарии, предложения, исправления приветствуются по адресу joris (a) vjorisvr.нл

Время счета с Arduino (без RTC) · Один транзистор

Простой код для часов Arduino без модуля RTC. Подсчитайте время и дату с помощью простой функции.

Когда дело доходит до подсчета времени с использованием Arduino или другой платформы MCU, настоятельно рекомендуется использовать схему RTC (часы реального времени). Эти устройства дешевы, обладают хорошей точностью и продолжают отсчитывать время, даже когда основной MCU не запитан. Они работают от маленькой батарейки и потребляют слабый ток.Существует довольно много библиотек Arduino, которые имеют дело со временем и упрощают взаимодействие с источником времени. Одна из них — библиотека Time Пола Стоффрегена. Это хорошо написанная библиотека с внутренним временем, основанным на стандартном времени Unix time_t (количество секунд, прошедших с 1 января 1970 года).

Но хотелось чего-то более простого. Я написал функцию из 50 строк кода, которая увеличивает переменную в секундах при каждом ее вызове. Когда секунды переполняются (достигают 60), он увеличивает переменную минут и сбрасывает секунды.И так далее. Только когда переменная времени изменяется, она печатается на устройстве вывода (в данном случае ЖК-дисплей 16×2). Вокруг этой функции я добавил код, который превращает Arduino в обычные часы. В качестве прототипа использовались ЖК-экран и экран клавиатуры, установленные на плате, совместимой с Arduino Uno. Код должен компилироваться на любой другой плате разработки, потому что он не использует определенные функции или библиотеки. Вам нужно будет настроить конфигурацию выводов ЖК-дисплея и кнопки клавиатуры (требуется изменение при использовании кнопок, подключенных к выводам цифрового входа, вместо аналоговой клавиатуры).

Временные переменные являются глобальными, определены в начале скетча. Также определены короткие строковые массивы месяцев и дней недели.

 байт чч, мм, сс;
байт dd, MM, YY;
byte wd;

byte daysOfMonth [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const char * months [12] = {«Янв», «Фев», «Мар», «Апр», «Май», «Июнь», «Июль», «Авг», «Сен», «Октябрь», « Ноя "," дек "};
const char * wdays [7] = {«Пн», «Вт», «Ср», «Чт», «Пт», «Сб», «Вс»};
 

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

 void countTime () {
 // подсчитываем секунды
 ss ++;
 if (ss <60) {
 dispSec ();
 возвращаться;
 }
 сс = 0;
 dispSec ();

 // считать минуты
 мм ++;
 if (мм <60) {
 dispMin ();
 возвращаться;
 }
 мм = 0;
 dispMin ();

 // подсчитываем часы
 чч ++;
 if (hh <24) {
 dispHour ();
 возвращаться;
 }
 чч = 0;
 dispHour ();

 dd ++; wd ++;
 если (wd == 7) wd = 0;
 if (dd 

Первые строки кода функции увеличивают секунды.Пока они не достигают 60, функция обновляет отображение и возвращается. Когда секунды достигают 60, их значение по умолчанию равно 0, и функция больше не возвращается в этот момент. Пора увеличивать минуты. Как и в случае с секундами, если минуты не достигли 60, функция отображает их и возвращается. Когда минуты достигают 60, они очищаются, и функция переходит на час. То же самое происходит с часами, если они меньше 24. Когда часы достигают 24, пора увеличивать не только день, но и переменную дня недели.Переменная дня недели рассчитывается от 0 до 6, а максимальное значение дней зависит от текущего месяца (взятого из массива). Месяц увеличивается до 12, а затем увеличивается год. Год не имеет предела. Но на этом этапе мы должны позаботиться о високосных годах. Если год кратен четырем, в нем 366 дней. Из этого правила есть исключение: если год кратен 100, но не делится на 400, то это не високосный год и состоит из 365 дней. Нет необходимости иметь дело с делимостью 400, потому что мой код не готов к достижению 2400 года.К тому времени я, вероятно, выпущу новую версию 😉 Для любого високосного года количество дней в феврале необходимо скорректировать в массиве.

Это почти все, что нужно для правильной работы этой функции. Но есть кое-что, что необходимо принять во внимание: пользователь должен иметь возможность редактировать переменные времени и даты. Я придумал простой интерфейс с двумя кнопками, который является обычным для цифровых часов. Вы нажимаете одну кнопку для переключения между минутами, часами, днем, месяцем и годом, а другую кнопку - для увеличения выбранной переменной.Выбранная переменная мигает на ЖК-дисплее. Когда он переполняется, он должен вернуться к исходному значению (0 для часа и минуты, 1 для дня и месяца, 2000 для года).

Переполнение дня и увеличение месяца и года требует настройки дня недели. При переполнении дней день недели должен вернуться к значению, которое было в первый день текущего месяца. Если количество дней в месяце делится на 7, это произойдет. Но поскольку это не так, мы вычисляем остаток от ближайшего кратного 7 к дням текущего месяца и корректируем с ним текущий день недели (т.е. 35-31 = 4 для 31-дневного месяца).

 случай 3: дд = (дд + 1)% daysOfMonth [MM];
 wd = (wd + 1)% 7;
 если (dd == 0) wd = (wd + 35 - daysOfMonth [MM])% 7;
 

Код приращения месяца добавляет дни текущего месяца к переменной рабочих дней. После этого он может выполнять приращение. Переполнение месяцев требует того же подхода, что и переполнение дней. Мы вычисляем остаток от ближайшего кратного 7 к дням текущего года и добавляем его к дням недели (т.е. 371 - 365 = 6, для невисокосного года).

 случай 4: wd = (wd + daysOfMonth [MM])% 7;
 ММ = (ММ + 1)% 12;
 if (MM == 0) {
 вд = (ср + 6)% 7;
 если ((YY% 4) == 0) wd = (wd + 5)% 7;
 }
 

Увеличение на год проще. Мы корректируем дни недели в зависимости от количества дней в году. Но что происходит при переполнении? Чтобы упростить ситуацию, я выбрал переполнение в 56 лет. Почему 56? Что ж, с 2000 по 2055 год 14 високосных лет.Важно то, что общее количество дней между 1 января 2000 г. и 31 декабря 2055 г. делится на 7. Поэтому, если первый день приходится на субботу, последний должен быть в пятницу, а дни недели могут увеличиваться без корректировки.

 беззнаковых int дней = 365;
 если ((ГГ% 4) == 0) дней = 366;
 если ((ГГ% 100) == 0) дней = 365;
 wd = (wd + days)% 7;
 ГГ = (ГГ + 1)% 56;
 

Полный скетч содержит около 300 строк кода и доступен на GitHub.Для моего следующего проекта часов я получил модуль RTC и добавил функцию будильника. Проверить это.

ЖК-будильник - Arduino - Робо Индия || Учебники || Изучите Arduino |

В этом руководстве Robo India объясняет, как сделать будильник на ЖК-дисплее с помощью Arduino.
1. Введение:

В этом уроке мы сделали будильник на LCD.

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

2. Необходимое оборудование

Для выполнения этой схемы потребуется следующее оборудование.

3. Строительный контур

Сделайте следующие соединения с Arduino:

4. Программирование

Вы можете скачать этот скетч Arduino отсюда.

// Учебник Robo India по ЖК-будильнику
// Требуемое оборудование: ЖК-дисплей и Arduino
//  https: // www.roboindia.com/tutorials 

#include 
#include < LiquidCrystal_I2C  .h>
#include 
#include 

  LiquidCrystal_I2C  дисплей (0x3F, 20, 4); // УСТАНОВКА адреса I2C

/ * --------- Объявление переменных ----------- * /
int starttime;
int activetime;
int prevoustime = 0;

int часов = 0;
int mins = 0;

int часы = 0;
int amins = 0;
/ * --------- Объявленные переменные ----------- * /

установка void ()
{
 lcd.init ();
 lcd.backlight (); // включает подсветку.lcd.clear (); // Очищает ЖК-дисплей
 lcd.print ("00:00"); // отображение на ЖК-дисплее после загрузки кода
 lcd.setCursor (10, 0);
 lcd.print ("00:00");
 lcd.setCursor (0, 1);
 lcd.print («Время»);
 lcd.setCursor (10, 1);
 lcd.print («Тревога»);
 
 pinMode (8, ВХОД);
 pinMode (9, ВХОД);
 pinMode (10, ВХОД);
 pinMode (11, ВХОД);
 pinMode (3, ВЫХОД);
 
 digitalWrite (8, ВЫСОКИЙ);
 digitalWrite (9, ВЫСОКИЙ);
 digitalWrite (10, ВЫСОКИЙ);
 digitalWrite (11, ВЫСОКИЙ);
 digitalWrite (3, LOW);
 
 время начала = миллис () / 1000;
}

пустой цикл ()
{
 / * ------------------------------------------------
 --------------------------------------------------
 ------------------ Код начинает установку будильника --------
 --------------------------------------------------
 -------------------------------------------------- * /
 в то время как (digitalRead (8) == LOW)
 {
 ЖКsetCursor (10,1);
 lcd.print («Тревога»);
 lcd.setCursor (10,0);
 if (digitalRead (11) == LOW) // при нажатии кнопки подключенной к D8
 {
 амины ++;
 }
 иначе, если (digitalRead (10) == LOW)
 {
 часы ++;
 }
 lcd.setCursor (10,0);

 / * ----- Код для отображения времени будильника в формате 00:00 ------ * /
 если (часов <10)
 {
 lcd.print («0»);
 lcd.print (час);
 }
 еще
 {
 lcd.print (час);
 }
 
 lcd.print (":");
 
 если (amins <10)
 {
 lcd.print («0»);
 ЖКпечать (амины);
 }
 еще
 {
 lcd.print (амины);
 }

 / * ---- Проверка в течение 24 часов ------ * /
 если (amins> 59)
 {
 часы ++;
 amins = 0;
 }
 если (часы> 23)
 {
 часы = 0;
 }
 задержка (500);

}
 / * ------------------------------------------------
 --------------------------------------------------
 ------------------ Код начинает устанавливать время --------
 --------------------------------------------------
 -------------------------------------------------- * /
 если (digitalRead (9) == НИЗКИЙ)
 {
 ЖКsetCursor (0,1);
 lcd.print («Время»);
 lcd.setCursor (0,0);
 if (digitalRead (11) == LOW) // при нажатии кнопки подключенной к D9
 {
 mins ++;
 }
 иначе, если (digitalRead (10) == LOW)
 {
 часы ++;
 }
 }
 / * -------- Проверка 24-часового значения часов ---------- * /
 activetime = (millis () / 1000) - время начала;
 если (предыдущее время <(активное время - 59))
 {
 mins ++;
 prevoustime = активное время;
 }
 
 если (минут> 59)
 {
 часы ++;
 мин = 0;
 }
 
 если (часы> 23)
 {
 часов = 0;
 }
 
 / * -------- код для отображения времени в формате 00:00 ---------- * /
 ЖКsetCursor (0,0);
 
 если (часов <10)
 {
 lcd.print («0»);
 lcd.print (часы);
 }
 еще
 {
 lcd.print (часы);
 }
 lcd.print (":");
 если (мин <10)
 {
 lcd.print («0»);
 lcd.print (мин);
 }
 еще
 {
 lcd.print (мин);
 }



если (часы == часы && amins == минут && amins! = 0)
 {
 digitalWrite (3, ВЫСОКИЙ);
 задержка (200);
 digitalWrite (3, LOW);
 задержка (200);
 }

}


 
5. Выход

Допустим, кнопка подключена к выводу D8 Arduino - Кнопка 1.

Кнопка, подключенная к выводу D9 Arduino - Кнопка 2.

Кнопка, подключенная к выводу D10 Arduino - Кнопка 3.

Кнопка, подключенная к выводу D11 Arduino - Кнопка 4.

Кнопка 1 предназначена для установки времени будильника, а кнопка 2 - для отображения времени на ЖК-дисплее. Кнопка 3 используется для установки часов, а кнопка 4 - для установки минут в соответствии с кодом Arduino IDE.

Для установки ВРЕМЕНИ нажмите кнопку 3 и кнопку 4, удерживая нажатой кнопку 2.

Аналогично, чтобы установить время БУДИЛЬНИКА, нажмите кнопку 3 и кнопку 4, удерживая кнопку 1.Над кодом отображается время в 24-часовом формате. Вы можете изменить код в соответствии с форматом часов.

Если у вас есть какие-либо вопросы, напишите нам по адресу [email protected]

С уважением и уважением
Команда разработки контента
Robo India
https://roboindia.com

Часы реального времени Arduino с использованием DS3231 RTC и SSD1306 OLED

// Часы реального времени Arduino и монитор температуры с DS3231 и SSD1306 OLED

#include // Включить библиотеку Wire (требуется для устройств I2C)

#include // Включить графическую библиотеку Adafruit

#include // Включить драйвер Adafruit SSD1306 OLED

#define OLED_RESET 4

Дисплей Adafruit_SSD1306 (OLED_RESET);

#define button1 9 // Кнопка B1 подключена к контакту 9 Arduino

#define button2 8 // Кнопка B2 подключена к контакту 8 Arduino

void setup (void) {

pinMode (button1, INPUT_PULLUP);

pinMode (button2, INPUT_PULLUP);

задержка (1000);

// по умолчанию мы генерируем высокое напряжение из 3.Линия 3в внутри! (аккуратно!)

display.begin (SSD1306_SWITCHCAPVCC, 0x3D); // инициализация с адресом I2C 0x3D (для 128x64)

// инициализация выполнена

// Очистить буфер дисплея.

display.clearDisplay ();

display.display ();

display.setTextColor (БЕЛЫЙ, ЧЕРНЫЙ);

display.drawRect (117, 56, 3, 3, БЕЛЫЙ); // Поместите символ градуса (°)

draw_text (0, 56, "TEMPERATURE =", 1);

draw_text (122, 56, «C», 1);

}

char Time [] = "::";

char Calendar [] = "/ / 20";

char temperature [] = "00.00 ";

char temperature_msb;

байт i, секунда, минута, час, день, дата, месяц, год, temperature_lsb;

void display_day () {

switch (day) {

case 1: draw_text (40, 0, «ВОСКРЕСЕНЬЕ», 1); перерыв;

случай 2: draw_text (40, 0, «ПОНЕДЕЛЬНИК», 1); перерыв;

случай 3: draw_text (40, 0, «ВТОРНИК», 1); break;

case 4: draw_text (40, 0, «WEDNESDAY», 1); break;

case 5: draw_text (40, 0, «THURSDAY», 1); break;

case 6: draw_text (40, 0, «ПЯТНИЦА», 1); break;

по умолчанию: draw_text (40, 0, «СУББОТА», 1);

}

}

void DS3231_display () {

/ / Преобразовать двоично-десятичный код в десятичный

секунда = (секунда >> 4) * 10 + (секунда >> 4);

минута = (минута >> 4) * 10 + (минута & 0x0F);

час = (час> > 4) * 10 + (час & 0x0F);

дата = (дата >> 4) * 10 + (дата & 0x0F);

месяц = ​​(месяц >> 4) * 10 + (месяц & 0x0F);

год = (год >> 4) * 10 + (год & 0x0F);

// Завершить преобразование

Время [7] = секунда% 10 + 48;

Время [6] = секунда / 10 + 48;

Время [4] = минута% 10 + 48;

Время [3] = минута / 10 + 48;

Время [1] = час% 10 + 48;

Время [0] = час / 10 + 48;

Календарь [9] = год% 10 + 48;

Календарь [8] = год / 10 + 48;

Календарь [4] = месяц% 10 + 48;

Календарь [3] = месяц / 10 + 48;

Календарь [1] = дата% 10 + 48;

Календарь [0] = дата / 10 + 48;

if (temperature_msb <0) {

temperature_msb = abs (temperature_msb);

температура [0] = '-';

}

else

температура [0] = '';

temperature_lsb >> = 6;

температура [2] = temperature_msb% 10 + 48;

температура [1] = temperature_msb / 10 + 48;

if (temperature_lsb == 0 || temperature_lsb == 2) {

temperature [5] = '0';

если (temperature_lsb == 0) temperature [4] = '0';

else temperature [4] = '5';

}

if (temperature_lsb == 1 || temperature_lsb == 3) {

temperature [5] = '5';

если (temperature_lsb == 1) temperature [4] = '2';

else temperature [4] = '7';

}

draw_text (4, 14, Calendar, 2); // Отображение даты (формат: дд / мм / гггг)

draw_text (16, 35, Time, 2); // Отображаем время

draw_text (80, 56, temperature, 1); // Отображение температуры

}

void blink_parameter () {

byte j = 0;

while (j <10 && digitalRead (button1) && digitalRead (button2)) {

j ++;

задержка (25);

}

}

байтов редактирования (байт x_pos, байт y_pos, параметр байта) {

символьный текст [3];

sprintf (текст, "% 02u", параметр);

при этом (! DigitalRead (button1)); // Ждем, пока кнопка B1 не отпустит

while (true) {

while (! DigitalRead (button2)) {// Если кнопка B2 нажата

parameter ++;

if (i == 0 && параметр> 31) // Если дата> 31 ==> дата = 1

параметр = 1;

if (i == 1 && параметр> 12) // Если месяц> 12 ==> месяц = ​​1

parameter = 1;

if (i == 2 && параметр> 99) // Если год> 99 ==> год = 0

параметр = 0;

if (i == 3 && parameter> 23) // Если часы> 23 ==> hours = 0

parameter = 0;

if (i == 4 && параметр> 59) // Если минуты> 59 ==> минут = 0

parameter = 0;

sprintf (текст, "% 02u", параметр);

draw_text (x_pos, y_pos, текст, 2);

задержка (200); // Ждем 200 мс

}

draw_text (x_pos, y_pos, "", 2);

blink_parameter ();

draw_text (x_pos, y_pos, текст, 2);

blink_parameter ();

if (! DigitalRead (button1)) {// Если нажата кнопка B1

i ++; // Увеличение 'i' для следующего параметра

return parameter; // Возвращаем значение параметра и выходим

}

}

}

void draw_text (byte x_pos, byte y_pos, char * text, byte text_size) {

display.setCursor (x_pos, y_pos);

display.setTextSize (размер_текст);

display.print (текст);

display.display ();

}

void loop () {

if (! DigitalRead (button1)) {// Если кнопка B1 нажата

i = 0;

при этом (! DigitalRead (button1)); // Ждем, пока кнопка B1 не будет выпущена

while (true) {

while (! DigitalRead (button2)) {// Пока кнопка B2 нажата

day ++; // Увеличиваем день

на

if (day> 7) day = 1;

display_day (); // Вызов функции display_day

delay (200); // Ждем 200 мс

}

draw_text (40, 0, "", 1);

blink_parameter (); // Вызов функции blink_parameter

display_day (); // Вызов функции display_day

blink_parameter (); // Вызов функции blink_parameter

if (! DigitalRead (button1)) // Если кнопка B1 нажата

break;

}

дата = редактировать (4, 14, дата); // Редактировать дату

month = edit (40, 14, month); // Редактировать месяц

year = edit (100, 14, year); // Редактировать год

hour = edit (16, 35, hour); // Редактируем часы

минута = редактировать (52, 35, минута); // Редактировать минуты

// Преобразовать десятичную дробь в двоично-десятичный

минута = ((минута / 10) << 4) + (минута% 10);

час = ((час / 10) << 4) + (час% 10);

дата = ((дата / 10) << 4) + (дата% 10);

месяц = ​​((месяц / 10) << 4) + (месяц% 10);

год = ((год / 10) << 4) + (год% 10);

// Завершить преобразование

// Записать данные в DS3231 RTC

Wire.beginTransmission (0x68); // Запуск протокола I2C с адресом DS3231

Wire.write (0); // Отправляем адрес регистра

Wire.write (0); // Сброс сезонов и запуск генератора

Wire.write (minute); // Записываем минуты

Wire.write (час); // Записываем час

Wire.write (день); // Записываем день

Wire.написать (дата); // Записываем дату

Wire.write (месяц); // Записываем месяц

Wire.write (год); // Записываем год

Wire.endTransmission (); // Остановка передачи и освобождение шины I2C

delay (200); // Ждем 200 мс

}

Wire.beginTransmission (0x68); // Запуск протокола I2C с адресом DS3231

Wire.написать (0); // Отправляем адрес регистра

Wire.endTransmission (false); // перезапуск I2C

Wire.requestFrom (0x68, 7); // Запрос 7 байтов от DS3231 и освобождение шины I2C в конце чтения

second = Wire.read (); // Считываем секунды из регистра 0

minute = Wire.read (); // Считываем минуты из регистра 1

hour = Wire.read (); // Считываем час из регистра 2

day = Wire.читать(); // Считываем день из регистра 3

date = Wire.read (); // Считываем дату из регистра 4

month = Wire.read (); // Считываем месяц из регистра 5

year = Wire.read (); // Считываем год из регистра 6

Wire.beginTransmission (0x68); // Запуск протокола I2C с адресом DS3231

Wire.write (0x11); // Отправляем адрес регистра

Wire.endTransmission (ложь); // перезапуск I2C

Wire.requestFrom (0x68, 2); // Запрос 2 байта от DS3231 и освобождение шины I2C в конце чтения

temperature_msb = Wire.read (); // Считываем MSB температуры

temperature_lsb = Wire.read (); // Считываем младший бит температуры

display_day ();

DS3231_display (); // Время отображения и календарь

delay (50); // Ожидание 50 мс

}

// Конец кода.

Arduino POV отображает текст часов


0. ВВЕДЕНИЕ

Привет, ребята. С возвращением к новому классному руководству. POV или постоянство зрения относится к оптической иллюзии, которая возникает, когда визуальное восприятие объекта не прекращается в течение некоторого времени после того, как лучи света, исходящие от него, перестают попадать в глаз. Иллюзия также описывается как «стойкость сетчатки», «стойкость впечатлений», просто «стойкость» и другие варианты.
В этом проекте мы узнаем, как использовать датчик Холла для обнаружения вращения.Мы посчитаем время, необходимое для полного вращения винта POV, и разделив измеренное значение на 360, мы получим время на градус. Затем с помощью интеллектуального кода мы решаем, когда включать и выключать линию светодиодов, чтобы рисовать фигуры в воздухе. Пропеллер будет вращаться достаточно быстро, поэтому человеческий глаз не сможет различить разницу, и мы увидим воображаемую фиксированную форму. Итак, приступим.

1. Список компонентов

Хорошо, ребята, наш проект ограничен количеством цифровых выходов, которые есть у Arduino NANO или promini.В этом случае мы будем использовать контакты D2 - D13 Arduino, поскольку контакты D0 и D1 являются контактами Tx и Rx, и мы не можем припаять к ним что-либо и после этого иметь возможность загружать код. Если мы посмотрим на приведенную ниже карту портов Arduino с чипом ATMEGA328p, мы увидим порты для каждого контакта.

portB (цифровые контакты с 8 по 13)
portC (контакты аналогового входа)
portD (цифровые выводы от 0 до 7)

Всего мы будем использовать 11 светодиодов. Я использовал 8 зеленых светодиодов для линий часов / минут. Два красных светодиода для часов и синий светодиод для граничного круга.Для каждого светодиода нам понадобится резистор 100 Ом. Мы также будем использовать переключатель датчика Холла A3144 с подтяжкой резистора 10 кОм. Вы можете использовать как Arduino NANO, так и Arduino proMini со скоростью 4 В и 16 МГц. Наконец, нам понадобится просверленная печатная плата, провода, литий-полимерная батарея 2S 7,4 В, ползунковый переключатель и трехмерный корпус, который я разработал. Воспользуйтесь ссылкой ниже, чтобы увидеть полный список деталей, а также ссылку для загрузки 3D-печатного корпуса для этого проекта.


Полный список деталей здесь

2. Схема

Проверьте схему ниже.Загрузите его и держите перед собой во время пайки. Как мы видим, у нас есть датчик Холла, подключенный к подтяжке на 5 В от Arduino. Сигнальный контакт датчика (контакт 3 A314) подключен к цифровому контакту D13 Arduino. На этом выводе мы будем генерировать прерывания смены вывода. Затем у нас есть 11 светодиодов, подключенных к контактам D2 - D12, каждый с резистором 100 Ом для ограничения тока. Для питания всей схемы я использовал батарею LiPo 7,4 В и ползунковый переключатель для включения всего. Используйте несколько штыревых контактов для батареи, если вы хотите вынуть ее позже для внешнего заряда.


Вы можете припаять все на печатной плате сверла, как я впервые сделал для своего первого прототипа, вы можете увидеть ниже или загрузить 3D-корпус, который я спроектировал, и разместить все внутри него.


Напечатанный на 3D-принтере корпус здесь

3.1 Создание опоры

У вас есть файлы для 3D-печатных деталей в формате STL по ссылке выше. Эти файлы включают в себя основной корпус, заднюю крышку, опору двигателя, две ножки подшипника и верхние опоры подшипника. Это должна быть окончательная форма всего проекта.Используйте винты и гайки M3 и закрепите все на месте.
Поместите две распечатанные на 3D-принтере ножки с помощью винтов M3 на деревянную пластину. На большой винт M8 поместите основной корпус с гайками и шайбами.


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

3.2 Паять все

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


Теперь приклейте небольшую плату со светодиодами к внутренней части корпуса и припаяйте каждый из проводов к контактам D2 - D12 Arduino.Alos припаяйте провод GND от всех светодиодов к контакту GND Arduino. Не используйте слишком большие провода, поэтому укоротите каждый провод светодиода, чтобы он подходил почти точно.
С другой стороны припаяйте резистор 1 кОм между 5 В и сигнальным контактом датчика Холла A3144. Также разделяйте GND между средним контактом A3144 и контактом GND Arduino. Наконец, припаяйте сигнальный контакт к цифровому контакту D13, и все готово.


Последний пункт - приклеить ползунковый переключатель к крышке, напечатанной на 3D-принтере, и припаять два провода.Один от LiPo к первому контакту переключателя, а другой от контакта Vin Arduino к среднему контакту переключателя. Я добавил два дополнительных штыря, чтобы можно было отсоединить аккумулятор для внешней зарядки.
Также не забудьте приклеить магнит samll к нижней опоре, чтобы он всегда находился перед датчиком Холла во время вращения. Я использовал для этого горячий клей, как вы можете видеть ниже.


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


.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *