Robo Craft ->

Я сам еще новичек, совсем зеленый. Поэтому мой пост будет полезен таким же начинающим))

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

Решил собрать часы.

Сначала пришел LCD экран 1602 символов, стандартный экран, инстсрукций по подключению в интернете масса. www.dreamdealer.nl/tutorials/connecting_a_1602a_lcd_display_and_a_light_sensor_to_arduino_uno.html
Подключил-посмотрел, мдя, проводов много(( Запустил на нем простейшие софтовые часы, все ничего, но как только отключаешь питание — продавает и время( А так как кнопок еще нету — то установка происходит через комп по ком порту через Процессинг, вообщем тот еще геморой.

Потом пришел заранее заказанный модуль I2C — символьный LCD. Модуль этот основан на микрухе которая расширяет порты ввода вывода. тоесть по 2м проводам данные входят — а по 8 выводам расходятся на экран. Вещь дюже полезная, на ибээ их полно.

Стало совсем красиво.

Есть некоторая загвоздка. дело в том что в библиотеке с которой работает экран по i2c протоколу — нерабочие примеры((( Это у меня отняло какое-то время для понимания сути процессов))

Кратенько для тех кто купит переходник — в каждом переходнике зашит его адрес, адрес можно узнать с помощью сканера адресов или аналитическим методом. На платке есть перемычки — если ихзапаять, адрес будет 0x20, а если перемычки сводобные — адрес будет 0x27. Адресация нужна для правильной инициализации переходника и работы с LCD экраном.

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

Вообщем суть такая, по двум проводам можно подключить любое количество экранов! Главное чтобы у каждого был свой адрес, а менять адрес можно если менть перемычки на переходничке i2c lcd. Если экранчик один, то можно выяснить аэрес перебором или найти сканер и посмотреть все доступные адреса по протоколу i2c. Адрес зависит от типа переходника, про типы подробно вот тут arduino-info.wikispaces.com/LCD-Blue-I2C

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

А теперь важное.

Есть 2 рабочих варианта (может даже больше)

Перая библиотека с примерами качается по ссылке arduino-info.wikispaces.com/LCD-Blue-I2C
Сама библиотка https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
Примеры брать не из библиотки а из блога выше.

Второй вариант, arduino-info.wikispaces.com/file/detail/LiquidCrystal_I2C1602V1.zip/341635514
Мой пример работает на этой библиотеке. Она старее, но мне показалось достаточной использовать ее.

Обе эти библиотеки НЕ СОВМЕСТИМЫ!

Так что ставим второй вариант, если не заработает — ставим первый и переписываем пример под свою библиотеку, благо там не много.

Я честно уже не помню почему выбрал второй вариант и где взял примеры, главное, что все работает))

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

Рабочую библиотеку нашел не сразу, заработала вот эта https://github.com/adafruit/RTClib

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

Теперь при отключении питания, часы не сбрасываются)))

Итак, особенностью часов является отображение 3х чисел в виде столбиков, секундыи минуты слева -направо, часы — наоборот справа-налево.

Используется 8 собственных символов, которые создают индикацию. Сначала сдеал 9 — начали скакать символы, смотрел — думал — оказалось что максимальное количество собственных символов — 8. Поэтому в качестве полного закрашенного квадрата используется системный знак по коду, а процентное заполнение — нарисовано в массиве битами.

Я думаю что в коде все понятно.

Функция Map — «растягивает» отображаемый промежуток в 24 часа на то количество клеток, которое нужно. так же и с минутами и секундами, но там растягивается другой диапазон.

Сначала делал без мапа — не смог найти функцию округления, коэффициенты были целыми числами — и растягивался диапазон всегда то больше — то меньше чем нужно. А мап меня спас))

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

Источник:
http://robocraft.ru/blog/3069.html

Урок 19. RTC часы с будильником

В предыдущем уроке 18, мы подключили Trema RTC часы реального времени с Trema кнопками и LCD I2C дисплеем к arduino Uno, написали скетч, для установки времени при помощи кнопок.

Теперь расширим функционал получившихся часов, добавив к ним функцию будильника. А код, который будет выполняться при срабатывании будильника выведем в отдельную функцию «Func_alarm_action()», чтоб Вы смогли легко его найти и изменить. Например, при срабатывании будильника, открывать жалюзи, включать свет или музыку, включить через реле тостер или кофе-машину и т.д.

Нам понадобится:

  • Arduino х 1шт.
  • RTC модуль Trema на базе чипа DS1307 х 1шт.
  • LCD дисплей LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) х 1шт.
  • Trema Shield х 1шт.
  • Trema-модуль i2C Hub х 1шт.
  • Trema-модуль кнопка c проводами х 3шт.
  • Шлейф «мама-мама»для шины I2С х 2шт.
  • Trema-модуль зуммер х 1шт.
  • Trema-модуль светодиод х 1шт. (белый, синий, красный, оранжевый или зелёный)

Для реализации проекта нам необходимо установить библиотеки:

  • Библиотека iarduino_RTC (для подключения RTC часов реального времени DS1302, DS1307, DS3231)
  • Библиотека LiquidCrystal_I2C_V112 (для подключения дисплеев LCD1602 по шине I2C)

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .

Схема подключения:

Подключение модулей RTC и LCD, данного урока, осуществляется к аппаратным выводам SDA, и SCL.

Подключение кнопок: кнопка «SET» к выводу 2, кнопка «UP» к выводу 3 и копка «DOWN» к выводу 4.

Зуммер подключаем к выводу 5, а светодиод к выводу 13 (дублируя встроенный в arduino).

Алгоритм работы кнопок следующий:

  • В режиме вывода даты/времени/будильника (обычный режим):
    • Кратковременное нажатие на кнопку SET переключает режимы вывода: даты/времени/будильника
    • Удержание кнопки SET переводит часы в режим установки даты/времени/будильника (зависит от того, каким был режим вывода)
    • Кнопки UP и DOWN, в режиме вывода будильника, активируют/деактивируют будильник.
      Если будильник активен, то в правом верхнем углу экрана появляется значок будильника.
  • В режиме установки даты/времени/будильника:
    • Кратковременное нажатие на кнопку SET — переход между устанавливаемыми параметрами (сек, мин, час, дни, мес, год, д.н.)
    • Удержание кнопки SET выводит часы из режима установки
    • Каждое нажатие на кнопку UP увеличивает значение устанавливаемого параметра даты или времени
    • Каждое нажатие на кнопку DOWN уменьшает значение устанавливаемого параметра даты или времени
  • Во время работы сигнализации будильника:
    • Удержание любой кнопки в течении 1 секунды, отключает сигнализацию (без выполнения их действий, в любом режиме)

Код программы:

Работа кнопок, вывод и установка времени, описывались в уроке 18, в этом уроке рассмотрим работу будильника:

В начале кода добавляем две константы: PIN_alarm_TONE и PIN_alarm_LED, указывающие номера выводов зуммера и светодиода.
А также добавляем четыре переменные: VAR_alarm_MIN , VAR_alarm_HOUR , VAR_alarm_FLAG1 и VAR_alarm_FLAG2 .

  • VAR_alarm_MIN — переменная в которой хранится значение минут, при котором сработает будильник (по умолчанию 0 минут)
  • VAR_alarm_HOUR — переменная в которой хранится значение часов, при котором сработает будильник (по умолчанию 0 часов)
  • VAR_alarm_FLAG1 — флаг разрешения работы будильника, false — не активен, true — активен (по умолчанию true — активен)
  • VAR_alarm_FLAG2 — флаг указывающий на то, что будильник сработал «сигнализация» (по умолчанию false — не сработал)

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

В функции loop, после вывода информации на дисплей, добавляем проверку: не пора ли включить будильник?

  • если будильник включён (установлен флаг VAR_alarm_FLAG1)
  • если в текущем времени 0 секунд (time.seconds==00)
  • если количество минут текущего времени (time.minutes) равно количеству минут установленных в будильнике (VAR_alarm_MIN)
  • если количество часов текущего времени (time.Hours) равно количеству часов установленных в будильнике (VAR_alarm_HOUR)
    то устанавливаем флаг VAR_alarm_FLAG2 (указывающий на то, что будильник сработал)
  • если установлен флаг VAR_alarm_FLAG2, то запускаем действия будильника (действия описаны в функции Func_alarm_action)
    Так как проверка будильника и запуск функции Func_alarm_action() находится внутри условия if(millis()%1000==0)<. >, то действия будильника будут выполняться один раз в секунду.

Теперь всё готово для создания полного кода:

Разберемся в коде действий будильника:

Действия будильника описаны в функции Func_alarm_action().

В этой функции мы включаем светодиод, далее подаём три коротких звуковых сигнала (с частотой 2000Гц, длительностью и паузой 100мс), после чего выключаем светодиод.

Если Вам необходимо выполнить действие будильника однократно, а не каждую секунду после его срабатывания, то начните выполнение действий со сброса флага VAR_alarm_FLAG2, присвоив ему значение false.

Источник:
http://lesson.iarduino.ru/page/urok-19-rtc-chasy-s-budilnikom/

Самые простые цифровые часы на Ардуино Уно

Самые простые часы на основе 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, которую вы можете скачать в разделе Библиотеки на нашем сайте.

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

Источник:
http://arduinoplus.ru/prostie-chasi-arduino-uno/

Мир микроконтроллеров

Популярное

  • Устройство и программирование микроконтроллеров AVR для начинающих — 143
  • Трехканальный термостат, терморегулятор, таймер на ATmega8 — 71
  • Двухканальный термостат, терморегулятор на ATmega8 — 67

Навигация по записям

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

Рассматриваемые в данной статье часы реального времени на основе платы Arduino представляют собой цифровые часы, которые показывают реальное (истинное) время на основе использования RTC IC DS1307 (микросхема часов истинного времени), которая работает по протоколу I2C. Часы реального (истинного) времени означают что они будут работать (считать время) даже если возникнет проблема с электропитанием. Когда подача питания возобновится, часы будут показывать правильное (реальное) время независимо от того сколько времени они были без питания.

В этом проекте мы будем использовать ЖК дисплей 16×2 для отображения значения времени на нем в формате: час, минута, секунда, дата, месяц и год. Также в наш проект часов реального времени добавлена опция будильника – мы можем устанавливать время «пробуждения». Время будильника будет записываться в энергонезависимую память EEPROM платы Arduino, поэтому оно будет сохраняться там даже при отключении питания. Подобные часы реального времени часто используются в наших компьютерах чтобы они могли обновляться в режиме реального времени.

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

Необходимые шаги для записи данных от ведущего (master) к ведомому (slave) в протоколе I2C (slave receiving mode — режим приема для ведомого):
1. Передать состояние (команду) START к ведомому.
2. Передать адрес ведомого к ведомому устройству.
3. Передать бит (0) к ведомому.
4. Принять бит ACK (подтверждения) от ведомого.
5. Передать адрес слова (words address) ведомому.
6. Принять бит ACK (подтверждения) от ведомого.
7. Передать данные ведомому.
8. Принять бит ACK (подтверждения) от ведомого.
9. Передать команду STOP ведомому.

Шаги для чтения данных от ведомого (slave) к ведущему (master) в протоколе I2C (slave transmitting mode – режим передачи для ведомого):
1. Передать команду START ведомому.
2. Передать адрес ведомого к ведомому устройству.
3. Передать бит чтения (1) к ведомому.
4. Принять бит ACK (подтверждения) от ведомого.
5. Принять данные отведомого.
6. Принять бит ACK (подтверждения) от ведомого.
7. Передать команду STOP ведомому.

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема построена на основе трех главных компонентов: микросхемы DS1307, платы Arduino Pro Mini и ЖК дисплея 16×2.

Плата Arduino используется для чтения времени от ds1307 и отображения его на ЖК дисплее 16×2. Микросхема DS1307 передает время/дату на Arduino используя 2 провода. Звонок (буззер) используется для подачи сигнала будильника. Структурная схема работы устройства приведена на следующем рисунке.

Как можно видеть из представленной схемы, контакты микросхемы DS1307 SDA и SCL соединены с контактами платы Arduino SDA и SCL с помощью подтягивающих резисторов которые поддерживают состояние высокого напряжения на этих линиях. Кварцевый генератор на 32.768 кГц подсоединен к микросхеме DS1307 для генерации точной 1-секундной задержки. Также батарейка на 3 В подсоединена к контакту 3 (BAT) микросхемы DS1307 чтобы обеспечивать подсчет времени во время отключения питания устройства.

ЖК дисплей 16×2 подключен к плате Arduino в 4-битном режиме. Его контакты управления RS, RW и En подключены к контактам Arduino 2, GND и 3. Контакты данных ЖК дисплея D0-D7 подключены к контактам 4, 5, 6, 7 платы Arduino. Звонок (буззер) подключен к контакту 13 Arduino при помощи NPN транзистора BC547 и резистора 1 кОм.

Три кнопки под названиями set, INC и Next используются для установки времени будильника и подключены к контактам 12, 11 и 10 платы Arduino. Когда мы будем нажимать кнопку set, будет включаться режим установки времени срабатывания будильника, в котором можно будет установить это время с помощью кнопок INC и Next.

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

Исходный код программы

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

#include
#include
#include
#include

Затем в функции setup необходимо произвести инициализацию RTC (часов реального времени), ЖК дисплея, задать режимы работы ряда контактов.

Остальные необходимые функции, такие как считывание времени, установка времени срабатывания будильника и другие будут выполняться в функции void loop .

Источник:
http://microkontroller.ru/arduino-projects/chasy-realnogo-vremeni-s-budilnikom-na-osnove-arduino/

Урок 7.2 Часы на Ардуино и RTS DS1302 п.2- пишем подпрограммы для дисплея и звука

Подключение дисплея.

На прошлом уроке мы придумали как будут технически реализованы подключения модулей к Ардуино и установили две библиотеки на RTC и I2C для LCD. Теперь пришла пора сделать так чтобы эти блоки у нас заработали по отдельности. Т.е. LCD что нибудь отображал, контроллер корректно срабатывал на нажатия кнопок, звук выводился и т.д.

Как вы помните я решил использовать I2C для LCD. В принципе можно использовать без I2C но я хочу попробовать данную библиотеку. Поэтому я сначала приведу пример и код для тех кто будет использовать I2C, код подключения дисплея напрямую будет ниже. Если вы не хотите использовать I2C то подключите библиотеку LCD как написано в уроке. У вас должно получится что то типа этого:

# include // подключаем библиотеку

LiquidCrystal_I2C lcd(0x27,16,2); // объявляем дисплей, указываем адрес, затем количество знаков- 16, и количество рядов-2

Далее в секции setup

void setup ()
<

lcd. init (); // инициализируем дисплей

lcd. backlight ();// Включаем подсветку дисплея
>

Вообще набор для LCD может отличаться от тех что я привожу здесь. Это зависит в первую очередь от подключаемой библиотеки. Т.е. если ваша библиотека для LCD не поддерживает указанных команд то вероятнее всего компиляция скетча выдаст ошибку. Узнать, какие команды поддерживает библиотека, можно перейдя в папку с установленной оболочкой программы Arduino- Libraries- (Папка подключаемого модуля)- keywords.txt. Обычно в данном файле и выкладываются ключевые команды для использования библиотеки.

Далее по нашей программе часов. В секции Setup вы можете указать уже что будет отображаться при загрузке и инициализации ваших часов. Т.е. например ваш e-mail, имя и вообще любую информацию которая появится только один раз при загрузке.

void setup ()

lcd . init ();

lcd . backlight (); // Включаем подсветку дисплея

lcd . print ( «www.samosdel.ru» ); // пишем в первой строке с самого начала

lcd . setCursor ( 5 , 1 ); // устанавливаем курсор на 5 позицию второй строки

lcd . print ( «Test LCD» ); // пишем с указанной выше позиции

delay (3000); //отображаем 3 секунды

lcd. clear ; //очищает экран

При загрузке текст отображается 3 секунды и затем переходит к исполнению основной программы в секции loop().

Для работы без модуля I2C листинг программы будет выглядеть следующим образом:

# include // подключаем библиотеку

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);// объявляем дисплей

void setup ()

lcd. begin (16, 2); // указываем какой дисплей будем использовать

lcd . print ( «www.samosdel.ru» ); // пишем в первой строке с самого начала

lcd . setCursor ( 5 , 1 ); // устанавливаем курсор на 5 позицию второй строки

lcd . print ( «Test LCD» ); // пишем с указанной выше позиции

delay (3000); //отображаем 3 секунды

lcd. clear ; //очищает экран

Разница лишь в первых строках секции setup. Далее работаем так же как и с модулем I2C.

Секция вывода звука.

Т.к. договорились с самого начала выводить прерывистый звук на буззер частотой 1 кГц то и для этой подпрограммы можно использовать просто несколько строк кода но можно пойти дальше и написать функцию которая будет работать по заданным параметрам. Рассмотрим оба варианта.

Первый- простой. Просто добавляем в место где будет использоваться вызов звукового сигнала следующие строки:

tone (8, 1000); //включаем на 8 цифровом пине частоту 1000 Гц

delay (500); //ждем 500 мс или полсекунды

noTone (8); //выключаем на 8 цифровом пине частоту

delay (500); //ждем 500 мс или полсекунды

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

Добавление вкладок для функции в Ардуино

Для начала давайте выведем функцию в отдельную вкладку типа браузеров Mozzila, Opera и т.д. что бы не прыгать по коду в поисках нужной функции и не искать ее постоянно. Делаем следующее: под кнопкой «Монитор порта» в оболочке Ардуино кликаем на флажок в форме треугольника отмеченный на картинке красным прямоугольником, затем кликаем на Новая вкладка или нажимаем Ctrl+Shift+N как и написано на картинке. Почти в самом низу появится панель с предложением задать имя для нового файла.

Вкладки в оболочке Ардуино

Программа создаст еще один файл с указанным именем и включит его в ваш текущий проект. Теперь весь код, который вы напишете будет использоваться в вашей программе. На данном рисунке предоставлена как раз функция вывода звука в моем делающемся проекте паяльной станции. К названиям нет никаких ограничений но я предпочитаю использовать в названиях первые буквы от используемых данных как написано ЗДЕСЬ. Т.е. в данном случае написано fSound что в моем понимании сразу расшифровывается как Function Sound, иначе говоря функция звука. Как видите в моей программе уже 4 вкладки не считая самой первой, которая собственно содержит все рабочие секции, и используются они для более удобного чтения и анализа кода.

Затем во вкладке идет объявление функции которая будет использоваться в вашей программе.

void Sound ( int x, int y)
<
tone (8, x); //включаем на частоту х Гц
delay (y); //ждем y Мс
noTone (8);
delay (y); //ждем y Мс
>

Теперь при вызове функции Sound указываем в скобках 2 параметра типа integer как и написано в параметрах функции. Т.е. если мы напишем Sound (1521,10000); то на 8 выводе, используемом для вывода звука мы получим звуковой сигнал частотой 1521 Гц и длительностью 10 сек. Вы можете ввести еще множество аргументов функций (это то что написано в скобках при объявлении функции) и использовать их как вам удобно. Заметьте что после отключения звука по программе управление и вообще доступ к микроконтроллеру будет закрыт на те же 10 сек оператором delay(10000). В этом случае можете добавить еще один аргумент или жестко прописать время в функции например вот так:

void Sound ( int x, int y, int z)
<
tone (8, x); //включаем на частоту х Гц
delay (y); //ждем y Мс
noTone (8);
delay (z); //ждем z Мс
>

Теперь функции требуется уже 3 параметра и при её вызове в формате Sound (1521,10000,100); микроконтроллер будет доступен к управлению через 0,1 секунды! Это равносильно такому коду:

void Sound ( int x, int y)
<
tone (8, x); //включаем на частоту х Гц
delay (y); //ждем y Мс
noTone (8);
delay (100); //ждем 100 Мс
>

Опять же вы должны исходить из того что вы хотите получить в итоге и отталкиваться уже от требуемых условий. В итоге мы избегаем написания здоровенной кучи кода для вывода звука и заменяем весь этот индийский код буквально одной строкой! Кстати, не забудьте объявить 8 цифровой вывод как выход.

Источник:
http://samosdel.ru/arduino/urok-7-2-podprogramms-lcd-zvuk/

Подключение часов реального времени DS1302 к Arduino и дисплея 1602 i2C — часы на ардуино !

  • Отличительные особенности:
  • Подсчет реального времени в секундах, минутах, часах, датах месяца, месяцах, днях недели и годах с учетом высокосности текущего года вплоть до 2100 г.
  • Дополнительное ОЗУ 31 x 8 для хранения данных
  • Последовательный ввод – вывод информации для сокращения выводов микросхемы
  • Выполнение всех функций при напряжении питания 2.0-5.5 В
    — выполнение всех функций при напряжении 2.0-5.5 В на дополнительном выводе питания
  • Потребление не более 300 нA при 2.5 В питания
  • Чтение и запись информации по одному байту или потоком
  • Исполнение в 8-ми выводном корпусе DIP, а также по заказу в 8-ми выводном SOIC корпусе для поверхностного монтажа
  • Простой 3-проводной интерфейс
  • Совместимость с TTL-микросхемами (Vcc= 5V)
  • Возможность поставки в промышленном диапазоне температур: от -40°C до+85°C
  • Совместимость с DS1202
  • Отличия от DS1202:
    возможность подключения встроенной цепи подзарядки к выводу Vcc1
    два вывода питания для подключения основного и резервного источника питания
    увеличено ОЗУ на 7 байт

Структурная схема DS1302:

Расположение выводов DS1302:

Микросхема DS1302 содержит часы реального времени с календарем и 31 байт статического ОЗУ. Она общается с микропроцессором через простой последовательный интерфейс. Информация о реальном времени и календаре представляется в секундах минутах, часах, дне, дате, месяце и годе. Если текущий месяц содержит менее 31 дня, то микросхема автоматически определит количество дней в месяце с учетом высокосности текущего года. Часы работают или в 24-часовом или 12-часовом формате с индикатором AM/PM (до полудня/ после полудня). Подключение DS1302 к микропроцессу упрощено за счет синхронной последовательной связи. Для этого требуется только 3 провода: (1) RST (сброс), (2) I/O (линия данных) и (3) SCLK (синхронизация последовательной связи). Данные могут передаваться по одному байту или последовательностью байтов до 31. DS1302 разработан, чтобы потреблять малую мощность и сохранять данные и информацию часов при потреблении менее 1 мкВт. DS1302 — преемник DS1202. В дополнение к основным функциям хранения времени DS1202, DS1302 имеет два вывода питания для подключения основного и резервного источника питания, возможность подключения программируемой цепи заряда к выводу VCC1 и семь дополнительных байтов ОЗУ.

Подключение:

Подключение DS1307 к Arduino :

Подключение DS1302 к Arduino :

(Можно изменить на другие в скетче)

Подключение DS3231 к Arduino :

Модуль DS1302 часы реального времени на Алиэкспресс http://ali.pub/1br52w

Код программы для модуля 1302 и дисплей 1602 I2C

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

Для DS1302 :

virtuabotixRTC myRTC(6, 7, 8); //CLK, DAT, RST

LiquidCrystal_I2C lcd(0x3F ,2,1,0,4,5,6,7,3, POSITIVE);

//myRTC.setDS1302Time(00,04, 12, 06, 18, 04, 2017);

Так же не забываем о экономии при покупке товаров на Алиєкспресс с помощью кэшбэка

Для веб администраторов и владельцев пабликов главная страница ePN

Для пользователей покупающих на Алиэкспресс с быстрым выводом % главная страница ePN Cashback

Преимущества библиотеки:

— библиотека имеет внутренние функции аппаратной обработки протоколов передачи данных I2C и SPI, а следовательно не требует подключения дополнительных библиотек, но и не конфликтует с ними, если таковые всё же подключены.

— библиотека имеет внутренние функции программой обработки протокола передачи данных 3-Wire

— для инициализации модуля необходимо вызвать функцию begin с названием модуля.

— подключение модулей осуществляется к аппаратным выводам arduino используемой шины (за исключением 3-Wire)

— простота установки и чтения времени функциями settime и gettime

функция settime может устанавливать дату и время, как полностью, так и частично (например только минуты, или только день, и т.д.)

функция gettime работает как функция date в php, возвращая строку со временем, но если её вызвать без параметра, то функция ничего не вернёт, а время можно прочитать из переменных в виде чисел.

— библиотека расширяемая, то есть для того, чтоб она работала с новым модулем, нужно указать параметры этого модуля в уже существующих массивах файла RTC.h (тип шины, частота шины в кГц, режимы работы, адреса регистров и т.д.), как всё это сделать, описано в файле extension.txt

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

36 байт, при этом не затронув область памяти программ.

— при вызове функции begin, библиотека читает флаги регистров модуля и при необходимости устанавливает или сбрасывает их так, чтоб модуль мог работать от аккумуляторной батареи, а на программируемом выводе меандра (если таковой у модуля есть) установилась частота 1Гц, тогда этот вывод можно использовать в качестве внешнего посекундного прерывания.

— при работе с модулем DS1302 не нужны никакие резисторы на выводе GND (которые нужны для его работы с другими библиотеками этого модуля), это достигнуто тем, что для шины 3-Wire указана конкретная частота 10кГц, не зависимо от частоты CPU arduino.

— в библиотеке реализована еще одна не обязательная функция period, принимающая в качестве единственного аргумента — количество минут (от 1 до 255)

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

Функцию period достаточно вызвать один раз.

Подробное описание:

> // ОПИСАНИЯ ПАРАМЕТРОВ ФУНКЦИЙ: // // Подключение библиотеки: // #include // iarduino_RTC time(название модуля [, вывод SS/RST [, вывод CLK [, вывод DAT]]]); // если модуль работает на шине I2C или SPI, то достаточно указать 1 параметр, например: iarduino_RTC time(RTC_DS3231); // если модуль работает на шине SPI, а аппаратный вывод SS занят, то номер назначенного вывода SS для модуля указывается вторым параметром, например: iarduino_RTC time(RTC_DS1305,22); // если модуль работает на трехпроводной шине, то указываются номера всех выводов, например: iarduino_RTC time(RTC_DS1302, 1, 2, 3); // RST, CLK, DAT // // Для работы с модулями, в библиотеке реализованы 5 функции: // инициировать модуль begin(); // указать время settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]); // получить время gettime(«строка с параметрами»); // мигать времем blinktime(0-не_мигать / 1-мигают_сек / 2-мигают_мин / 3-мигают_час / 4-мигают_дни / 5-мигают_мес / 6-мигает_год / 7-мигают_дни_недели / 8-мигает_полдень) // разгрузить шину period (минуты); // // Функция begin(): // функция инициирует модуль: проверяет регистры модуля, запускает генератор модуля и т.д. // // Функция settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]): // записывает время в модуль // год указывается без учёта века, в формате 0-99 // часы указываются в 24-часовом формате, от 0 до 23 // день недели указывается в виде числа от 0-воскресенье до 6-суббота // если предыдущий параметр надо оставить без изменений, то можно указать отрицательное или заведомо большее значение // пример: settime(-1, 10); установит 10 минут, а секунды, часы и дату, оставит без изменений // пример: settime(0, 5, 13); установит 13 часов, 5 минут, 0 секунд, а дату оставит без изменений // пример: settime(-1, -1, -1, 1, 10, 15); установит дату 01.10.2015 , а время и день недели оставит без изменений // // Функция gettime(«строка с параметрами»): // функция получает и выводит строку заменяя описанные ниже символы на текущее время // пример: gettime(«d-m-Y, H:i:s, D»); ответит строкой «01-10-2015, 14:00:05, Thu» // пример: gettime(«s»); ответит строкой «05» // указанные символы идентичны символам для функции date() в PHP // s секунды от 00 до 59 (два знака) // i минуты от 00 до 59 (два знака) // h часы в 12-часовом формате от 01 до 12 (два знака) // H часы в 24-часовом формате от 00 до 23 (два знака) // d день месяца от 01 до 31 (два знака) // w день недели от 0 до 6 (один знак: 0-воскресенье, 6-суббота) // D день недели наименование от Mon до Sun (три знака: Mon Tue Wed Thu Fri Sat Sun) // m месяц от 01 до 12 (два знака) // M месяц наименование от Jan до Dec (три знака: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) // Y год от 2000 до 2099 (четыре знака) // y год от 00 до 99 (два знака) // a полдень am или pm (два знака, в нижнем регистре) // A полдень AM или PM (два знака, в верхнем регистре) // строка не должна превышать 50 символов // // если требуется получить время в виде цифр, то можно вызвать функцию gettime() без параметра, после чего получить время из переменных // seconds секунды 0-59 // minutes минуты 0-59 // hours часы 1-12 // Hours часы 0-23

Похожие статьи

Подключение к ардуино датчика вращения енкодер KY-040

Енкодер вращения KY-040 — это поворотный датчик, который индицирует степень поворота оси и в каком направлении она вращается.

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

Подключение 7-сегментного индикатора к Ардуино

Сегодня я расскажу о подключении светодиодного индикатора АЛС334Б к Ардуино.
Для своих часов-будильника я решил выбрать индикацию вполне привычными светодиодными семисегментными индикаторами .

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

Поворотный стол с фоторезисторами на Arduino

В статье приведена пошаговая инструкция по разработке вращающегося стола на Arduino с реализацией обратной связи по положению с помощью фоторезисторов.

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

Источник:
http://www.electronica52.in.ua/proekty-arduino/podkluchenie-chasov-realnogo-vremeni-ds1302—k-arduino-i-displeya-1602-i2c—chasy-na-arduino—