Мазмұны:

Arduino көмегімен нақты уақыт сағаты: 3 қадам
Arduino көмегімен нақты уақыт сағаты: 3 қадам

Бейне: Arduino көмегімен нақты уақыт сағаты: 3 қадам

Бейне: Arduino көмегімен нақты уақыт сағаты: 3 қадам
Бейне: Using Micro SD Card and Data logging with Arduino | Arduino Step by Step Course Lesson 106 2024, Қараша
Anonim
Arduino көмегімен нақты уақыт сағаты
Arduino көмегімен нақты уақыт сағаты

Бұл жобада біз Arduino мен RTC модулінің көмегімен сағат жасаймыз. Біз білетіндей, Arduino нақты уақытты көрсете алмайды, сондықтан СКД -де дұрыс уақытты көрсету үшін RTC модулін қолданамыз. Барлық қадамдарды мұқият оқып шығыңыз, ол сізге сағатты жасауға көмектеседі.

DS3231 Arduino коды DS1307 коды сияқты және ол екі RTC чипімен жұмыс істейді.

Астындағы Arduino коды DS3231 RTC үшін ешқандай кітапхананы пайдаланбайды, Wire кітапханасы I2C конвенциясын қолдана отырып Arduino мен DS3231 арасындағы хат алмасуға арналған.

Иә! Көптеген электроника инженерлері олардың уақытқа негізделген жобаларына тәуелді, бірақ RTC толық сенімді емес. Ол аккумулятормен жұмыс істейді, оны тез арада ауыстыру керек. IoT жобаларына келер болсақ, ол SPI (сериялық перифериялық интерфейс) бағалы түйреуіштерін алады және айналасында оралған сымдармен араласады. Шешім…. Міне біздің кейіпкеріміз NTP (желідегі уақыт протоколы). NTP дәл, себебі ол интернеттен уақыт алады. Біз бұл протоколды клиент-сервер режимі арқылы басқарамыз. процесс соншалықты қарапайым, біздің Nodemcu клиент ретінде әрекет етеді және UDP арқылы серверден NTP пакетін сұрайды. Өз кезегінде, сервер клиентке деректерді талдайтын пакет жібереді. NTP - әмбебап уақыт синхрондау хаттамасы. Енді зертхананың жұмыс орнын жарықтандырайық

1 -қадам: Қажетті компоненттер

  • Arduino тақтасы
  • DS3231 RTC тақтасы
  • 16x2 СКД экраны
  • 2 x түймесі
  • 10К Ом ауыспалы резистор (немесе потенциометр)
  • 330 Ом резисторы
  • 3В монеталық батарея
  • Нан тақтасы
  • Өткізгіш сымдар

RTC модемесі DS3231

Уақыт-бұл адамзаттың тез дамып келе жатқан әлемінде қажет маңызды сезім. Нақты уақыттағы жобада

Біз RTC (A. K. A нақты уақыт сағаты) қолданамыз

RTC Real-time-clock (RTC)-бұл ағымдағы уақытты бақылайтын интегралды схема. RTC әдетте компьютерлік аналық платалар мен кіріктірілген жүйелерде уақытылы кіруді талап етеді.

2 -қадам: Arduino сағатын қосу

Arduino сағаттарының қосылуы
Arduino сағаттарының қосылуы
  • SCL түйреуішін RTC модуліне Arduino A5 -ке қосыңыз
  • SDA түйреуішін RTC модуліне Arduino A4 жалғаңыз
  • VCC -ты 5v -ке және GND -ден GND -ге қосыңыз
  • 8 түйреуішіне түймені жалғаңыз
  • Басқа түймені түйреуішке 9 жалғаңыз
  • СКД RS -ті Arduino 2 -ші істігіне қосыңыз
  • LCD E -ді Arduino 3 -ші істігіне қосыңыз
  • LCD D7 -ді Arduino -ның 7 -пиніне қосыңыз
  • LCD D6 -ны Arduino 6 -шы істігіне қосыңыз
  • LCD D5 -ті Arduino 5 -ші істігіне қосыңыз
  • LCD D4 -ті Arduino 4 -ші істігіне қосыңыз
  • VSS & K -ті GND -ге қосыңыз
  • VDD & A 5V желісіне қосыңыз
  • Во потенциометрдің шығыс түйреуішіне қосыңыз

3 -қадам: RTC бар Arduino сағаттарының коды

RTC бар Arduino сағаттарының коды
RTC бар Arduino сағаттарының коды

DS3231 тек BCD форматында жұмыс істейді және BCD -ді ондыққа және керісінше түрлендіру үшін мен төмендегі 2 жолды қолдандым (минут үшін мысал): // BCD -ді ондық минутқа түрлендіру = (минут >> 4) * 10 + (минут & 0x0F);

// Ондықты BCDminute -ге түрлендіру = ((минут / 10) << 4) + (минут % 10); void DS3231_display (): уақыт пен күнтізбені көрсетеді, уақыт пен күнтізбе деректері BCD -ден ондық форматқа көшірілмес бұрын. void blink_parameter ():

// DS3231 және Arduino көмегімен батырмалары бар нақты уақыт сағаты мен күнтізбе // СКД кітапханасының кодын қосады #қосу // Сымды кітапхана кодын қосады (I2C протокол құрылғыларына қажет) #қосу // СКД модулінің қосылымдары (RS, E, D4, D5), D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); void setup () {pinMode (8, INPUT_PULLUP); // button1 8 pinMode (9, INPUT_PULLUP) түйреуішіне қосылған; // түйме2 түйреуіш 9 -ға қосылған // СКД lcd.begin бағандары мен жолдарының санын орнату (16, 2); Wire.begin (); // Қосылу i2c bus} char Time = «УАҚЫТ:::»; char Calendar = «DATE: / / 20»; байт i, секунд, минут, сағат, күн, ай, жыл; void DS3231_display () {// BCD ондық секундқа түрлендіру = (секунд >> 4) * 10 + (екінші & 0x0F); минут = (минут >> 4) * 10 + (минут & 0x0F); сағат = (сағат >> 4) * 10 + (сағат & 0x0F); дата = (күн >> 4) * 10 + (күн & 0x0F); ай = (ай >> 4) * 10 + (ай & 0x0F); жыл = (жыл >> 4) * 10 + (жыл & 0x0F); // Аяқталу уақыты [12] = екінші % 10 + 48; Уақыт [11] = секунд / 10 + 48; Уақыт [9] = минут % 10 + 48; Уақыт [8] = минут / 10 + 48; Уақыт [6] = сағат % 10 + 48; Уақыт [5] = сағат / 10 + 48; Күнтізбе [14] = жыл % 10 + 48; Күнтізбе [13] = жыл / 10 + 48; Күнтізбе [9] = ай % 10 + 48; Күнтізбе [8] = ай / 10 + 48; Күнтізбе [6] = күн % 10 + 48; Күнтізбе [5] = күн / 10 + 48; lcd.setCursor (0, 0); lcd.print (Уақыт); // Уақытты көрсету lcd.setCursor (0, 1); lcd.print (күнтізбе); // Күнтізбені көрсету} void blink_parameter () {байт j = 0; while (j 23) // Егер сағат> 23 ==> сағат = 0 параметр = 0 болса; if (i == 1 && parameter> 59) // If minutes> 59 ==> minutes = 0 parameter = 0; if (i == 2 && parameter> 31) // If date> 31 ==> date = 1 параметр = 1; if (i == 3 && параметрі> 12) // Егер ай> 12 ==> ай = 1 параметр = 1; if (i == 4 && параметрі> 99) // Егер жыл> 99 ==> жыл = 0 параметр = 0; sprintf (мәтін, «%02u», параметр); lcd.setCursor (x, y); lcd.print (мәтін); кешіктіру (200); // 200ms күтіңіз} lcd.setCursor (x, y); lcd.print («»); // Екі бос орынды көрсету blink_parameter (); sprintf (мәтін, «%02u», параметр); lcd.setCursor (x, y); lcd.print (мәтін); blink_parameter (); if (! digitalRead (8)) {// If (8 -түйреуіш) түймесі i ++ басылса; // Келесі параметр қайтару параметрі үшін 'i' ұлғайтылуы; // Параметр мәнін қайтарыңыз және}}} void loop () {if (! DigitalRead (8)) {// If (түйреуіш #8) түймесі басылса i = 0; сағат = өңдеу (5, 0, сағат); минут = өңдеу (8, 0, минут); дата = өңдеу (5, 1, күн); ай = өңдеу (8, 1, ай); жыл = өңдеу (13, 1, жыл); // Ондық бөлшекті BCD минутына түрлендіру = ((минут / 10) << 4) + (минут % 10); сағат = ((сағат / 10) << 4) + (сағат % 10); дата = ((дата / 10) << 4) + (күн % 10); ай = ((ай / 10) << 4) + (ай % 10); жыл = ((жыл / 10) << 4) + (жыл % 10); // Түрлендіруді аяқтау // Деректерді DS3231 RTC Wire.beginTransmission (0x68) жазыңыз; // Wire.write (0) DS3231 адресі бар I2C хаттамасын іске қосыңыз; // Wire.write регистрінің мекенжайын жіберу (0); // Сезондтарды қалпына келтіріп, Wire.write осцилляторын іске қосыңыз (минут); // Wire.write минут жазу (сағат); // Жазу сағаты Wire.write (1); // Жазу күні (қолданылмайды) Wire.write (күн); // Жазу күні Wire.write (ай); // Жазу айы Wire.write (жыл); // Wire.endTransmission жылын жазыңыз (); // Беруді тоқтатыңыз және I2C шинасының кешігуін босатыңыз (200); // 200ms күтіңіз} Wire.beginTransmission (0x68); // Wire.write (0) DS3231 адресімен I2C протоколын іске қосыңыз; // Wire.endTransmission регистрлік мекенжайды жіберу (жалған); // I2C қайта іске қосу Wire.requestFrom (0x68, 7); // DS3231 -ден 7 байтты сұраңыз және I2C шинасын екінші секундтың соңында шығарыңыз = Wire.read (); // Регистрден секундтарды оқу 0 минут = Wire.read (); // регистрден минуттарды оқу 1 сағат = Wire.read (); // 2 Wire.read () регистрінен оқу сағаты; // Оқу күні регистрден 3 (қолданылмайды) күн = Wire.read (); // Тіркеуден оқу күні 4 ай = Wire.read (); // Тіркеуден айды оқу 5 жыл = Wire.read (); // 6 DS3231_display () регистрінен оқу жылы. // Диаплей уақыты мен күнтізбелік кідіріс (50); // 50 минут күтіңіз}

Ұсынылған: