Керування часом з Arduino за допомогою DS1307

Застосування для вимірюванння температури, схеми інкубаторів, метеомстанцій, визначення та відображення вологості, в тому числі вологості грунту та наявності опадів. Термопари і термоелементи. Модулі точного часу та їх використання
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 100
З нами з: 16 травня 2017 18:18

Керування часом з Arduino за допомогою DS1307

Повідомлення Arduino »

Модуль точного часу DS1307 (RTC) можна використовувати як годинник з Ардуіно. RTC або годинник реального часу - це пристрій хронометражу, зазвичай у формі інтегральної схеми (IC). RTC працює від батареї і відстежує поточний час, навіть якщо немає живлення.
IC-модулі в режимі реального часу присутні в комп'ютерах, серверах, в багатьох вбудованих системах, і насправді вони використовуються там, де потрібно зберігати точний час.
Незважаючи на те, що у Arduino та майже всіх мікроконтролерів є вбудовані таймери та хронометри (у мілліс (у випадку Arduino), вони залежать від енергії, тобто вони працюють до тих пір, поки є джерело живлення. Після вимкнення живлення (вручну або внаслідок відключення живлення) всі таймери скидаються до 0.

Хоча хронометризація з використанням внутрішніх таймерів прийнятна для простих проектів, нам потрібна альтернатива в таких проектах, як реєстратори даних, годинники, сигнали тривоги тощо, де таймер працює незалежно від зовнішньої потужності або якщо програмується мікроконтроллер (або Arduino).

Тут приходить використання IC-годин для реального часу. Майже всі RTC IC є пристроями з низьким рівнем струму, які протягом багатьох років працюють на одній літієвій батареї (як правило, CR2032). Одним з популярних і найчастіше використовуваних RTC IC є годинник реального часу DS1307.
В магазин за Модулем точного часу DS1307 (RTC)

DS1307 RTC - це низькочастотний, низькочастотний IC-годинник у режимі реального часу, який може підтримувати повний годинник і календар, тобто години, хвилини, секунди, а також рік, місяць і день. Нижче наведено деякі з відомих особливостей популярного DS1307 RTC.

Повна функція Timekeeping тобто години, хвилини, секунди, рік з високосного року, місяця, дати місяця та дня тижня.
Термін дії до 2100 року.
Низьке енергоспоживання: споживається менше 500 нА під час роботи від акумулятора.
Автоматичне перемикання на джерело живлення в разі відключення живлення.
24-годинний або 12-годинний годинник з індикатором AM / PM.
DS1307 RTC доступний у вигляді модулів, який складається з усіх необхідних компонентів, таких як батарея, з'єднувачі, підтягуючі резистори та кришталь. Один такий модуль використовується в цьому проекті і показаний нижче.
rtcds1307.jpg
rtcds1307-2.jpg
Наступне зображення показує контактну діаграму DS1307 RTC IC. Щоб зменшити споживання енергії, кількість штифтів на IC має бути зменшена. Отже, DS1307 RTC використовував I2C Communication
Зєднання DS1307 RTC
  • X1 і X2 : це шпильки для підключення кристала частотою 32,768 кГц для включення внутрішнього генератора. Якщо зовнішній генератор підключений до X1, то X2 може залишатися плаваючою.
  • VBAT : PIN- код для живлення акумулятора. Необхідно підключити до літієвої батареї 3 В для резервного живлення.
  • GND : Ground Pin.
  • SDA : серійні дані Pin. Це вхідний / вихідний штирьовий інтерфейс I2C. Потрібно зовнішнє підключення 5 В, зазвичай через резистор 10 КОм.
  • SCL : вхідний PIN- код для серійних годинників. Це вхідний PIN-код годинника інтерфейсу I2C. Він також повинен бути витягнутий до 5 В через резистор 10 КОм.
  • SQW / OUT : вихідний штифт квадратної хвилі. Якщо не використовується, його можна залишити плаваючою.
  • VCC : основний контактний штифт.
Real-Time-Clock-DS1307-Tutorial-Image-4.jpg
Як згадувалося раніше, модуль DS1307 RTC використовує I2C Communication.

У інтерфейсі I2C в режимі реального часу Arduino, мікроконтроллер Arduino завжди працює як Master, а DS1307 діє як Slave. Майстер зв'язку I2C, тобто Arduino в цьому випадку, несе відповідальність за синхронізацію сигналів, доступу до шин, сигналів запуску та зупинки.
Наступне зображення показує схему інтерфейсу Real Time Clock DS1307 Arduino. Ця схема пояснює лише основні з'єднання по відношенню до модуля DS1307 (плата, яка містить DS1307 IC разом з кристалом, батареєю та pullup резисторами).
Real-Time-Clock-DS1307-Tutorial-Circuit-3.png
Щоб краще зрозуміти модуль RTC DS1307, наступне зображення допоможе вам, оскільки він містить схему типового модуля реального часу DS1307.
Real-Time-Clock-DS1307-Tutorial-Circuit-2.jpg
У програмуванні використовується спеціальна бібліотека під назвою "RTClib", яку можна завантажити з цього посилання. Переконайтеся, що він завантажений першим і додано до бази даних бібліотеки Arduino.

Для того, щоб завантажити дані та час в IC DS1307 RTC, ми використали функцію, доступну в бібліотеці RTClib, де Arduino завантажуватиме дату та час із комп'ютера під час завантаження коду.

Код програми підключення RTC DS1307

Код: Виділити все

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include <LiquidCrystal.h>
#include "RTClib.h"

RTC_DS1307 rtc;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (rs, e, d4, d5, d6, d7)

char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

void setup () 
{
  Serial.begin(9600);
  lcd.begin(16, 2);
  
  if (! rtc.begin()) 
  {
    lcd.print("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) 
  {
    lcd.print("RTC is NOT running!");
  }
  
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));//auto update from computer time
    //rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));// to set the time manualy 
  
}

void loop () 
{
    DateTime now = rtc.now();
    
    lcd.setCursor(0, 1);
    lcd.print(now.hour());
    lcd.print(':');
    lcd.print(now.minute());
    lcd.print(':');
    lcd.print(now.second());
    lcd.print("   ");

    lcd.setCursor(0, 0);
    lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
    lcd.print(" ,");
    lcd.print(now.day());
    lcd.print('/');
    lcd.print(now.month());
    lcd.print('/');
    lcd.print(now.year());
   
}
Аватар користувача
lDoberMannl
Повідомлень: 30
З нами з: 12 жовтня 2017 14:50
Звідки: Боярка

Re: Керування часом з Arduino за допомогою DS1307

Повідомлення lDoberMannl »

у меня что то на таком модуле не получилось настроить дату\время... не помню что за ошибки были - заберу у друга модуль, попробую еще раз.
Відповісти

Повернутись до “Температура та вологість, час і відлік”