У некаторых праектах неабходна мець доказ часу, гадзіны альбо даты. Альбо з-за неабходнасці выконваць пэўныя функцыі з улікам часу, весці каляндар падзей або рэгістрацыі, захоўваць час у сістэме альбо проста ствараць лічбавыя гадзіны з Arduino. З DS3231 вы можаце атрымаць яго, яшчэ адзін з Кампаненты што мы дадаем у спіс.
DS3231 - гэта модуль, які вы шукалі, і тут вы знойдзеце ўсё неабходнае для яго кіравання, і я таксама пакажу вам прыклад таго, як інтэграваць яго з Arduino на практычным прыкладзе ...
Што такое DS3231?
Перш за ўсё, вы павінны ведаць, што такое RTC (гадзіннік у рэжыме рэальнага часу), альбо гадзіннік рэальнага часу. Гэтыя мікрасхемы вельмі часта сустракаюцца ў мностве прыкладанняў, на самай справе ваш ПК мае адзін з іх на матчынай плаце, і ён таксама працуе ад Батарэя CR2032 таксама. Гэта той, які падтрымлівае час і канфігурацыю ў BIOS / UEFI і з якога аперацыйная сістэма бярэ час пры загрузцы, каб паспець (хаця зараз, з Інтэрнэтам, сінхранізацыя з серверамі можа выкарыстоўвацца для большай дакладнасці, але гэта гэта іншая гісторыя ...).
RTC - гэта простае вымярэнне часу. Адрозненне ад іншых тыпаў электронных гадзін у тым, што яны проста вымерайце час, і гэта робіцца шляхам падліку імпульсаў сігналу такта, ведаючы частату і перыяды гэтага. У дадатак да часу RTC таксама дазваляе весці ўлік дзён, тыдняў, месяцаў і гадоў. Гэта значыць, поўная дата ...
Каб гэта было магчыма, RTC павінен суправаджацца а Хстал альбо крышталь кварца які будзе выконваць ролю рэзанатара, які забяспечвае частату. Акрамя таго, вам патрэбныя электронныя схемы, здольныя лічыць і захоўваць дату ў памяці. Схема павінна мець магчымасць лічыць секунды, хвіліны, гадзіны, дні, тыдні, месяцы і гады.
што памяць няўстойліваяМенавіта таму яму патрэбна батарэя, каб мець пастаянную магутнасць. Калі ў вас няма батарэі альбо яна скончыцца, яна будзе сцёртая ... Вось што адбываецца з ПК, калі батарэя разраджаецца, яны даюць няправільны час. Калі вы наладжваеце яго, пакуль ПК уключаны, час будзе захоўвацца, паколькі RTC падключаецца, але падчас працэсаў, падчас якіх ён выключаецца, калі неабходная батарэя ...
Для самаробных праектаў вытворцы звычайна выкарыстоўваюць два распаўсюджаныя RTC-чыпы, якія з'яўляюцца DS1307 і DS3231. Абодва яны зроблены Maxim (раней Dallas Semiconductor), і DS3231 з'яўляецца больш дакладным з іх, бо на яго не так моцна ўплываюць перапады тэмператур, як у першага. Такім чынам, ён не так моцна вагаецца ў залежнасці ад тэмпературы, і дакладна захоўвае час.
DS3231 не ў тым, што на яго не ўплываюць змены, а ў тым, што ён мае ўбудаваныя сістэмы вымярэння тэмпературы і кампенсацыі, каб забяспечыць дакладнасць 2ppm, што было б эквівалентна адставанне ў часе каля 172 мс у дзень, гэта значыць не больш за 1 секунду на тыдзень. І на практыцы яны звычайна мяняюцца толькі на 1 ці 2 секунды ў месяц.
Што да спосабу мець зносіны з RTC DS3131 для атрымання значэнняў даты, якія ён атрымлівае, гэта робіцца па Аўтобус I2C. А для харчавання вы можаце выкарыстоўваць ад 2.3 да 5.5 у для DS3231, што некалькі ніжэй, чым ад 4.5 да 5.5 у для DS1307, таму ён можа быць больш энергаэфектыўным і зрабіць батарэю даўжэй.
Акрамя таго, вы павінны ведаць, што гэтыя модулі звычайна маюць EEPROM дадатковы AT24C32 для захоўвання некаторых запісаў і папярэдніх вымярэнняў, што з'яўляецца цалкам практычным.
прыкладанняў
Што тычыцца прыкладанняў, я ўжо згадваў некаторыя, напрыклад, рэалізаваць гадзіннік з Arduino, стварыць сістэму, якая дзейнічае на аснове Час Як бы там ні было, каб не пакідаць час на такім абсталяванні, як ПК і шмат іншых электронных прылад і прыбораў, якія маюць час і г.д.
Можа таксама выкарыстоўвацца ў праекты для стварэння таймераў для асвятлення, ірыгацыйных сістэм, рэгістратара дадзеных і г.д. Прыкладання могуць быць самымі шматлікімі ...
Купіце RTC DS3231
Модуль DS3131 танны, і вы можаце знайсці яго ў некаторых спецыялізаваных крамах электронікі альбо ў буйных крамах, такіх як eBay, AliExpress, Amazon і г.д. Калі вы зацікаўлены ў наяўнасці, вось некалькі рэкамендацый:
DS3231 Інтэграцыя Arduino
Калі вы хочаце, інтэгруйце DS3231 з платай Arduino і пачаць ствараць "прымеркаваныя" праекты, спачатку неабходна ўсталяваць адпаведныя сувязі. Каб мець магчымасць падключыць яго, проста:
- Штыфт SLC платы DS3231 павінен быць падлучаны да A5 вашага Arduino UNO.
- SDA DS3231 падлучаны да A4 Arduino.
- Vcc ад модуля пойдзе на 5V ад Arduino.
- GND ў GND.
Цяпер у вас падключана сістэма, наступнае - напісаць эскіз зыходнага кода каб запраграмаваць яго. Вы можаце змяніць коды і адаптаваць іх пад свае патрэбы, але для пачатку можна проста атрымаць дату з RTC DS3231, падлучанага да Arduino:
#include <Wire.h> #include "RTClib.h" // RTC_DS1307 rtc; RTC_DS3231 rtc; String daysOfTheWeek[7] = { "Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado" }; String monthsNames[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre" }; void setup() { Serial.begin(9600); delay(1000); if (!rtc.begin()) { Serial.println(F("No se encuentra el RTC")); while (1); } // Si se ha perdido el suministro eléctrico, fijar fecha y hora if (rtc.lostPower()) { // Fijar a fecha y hora (poner la de compilación del sketch) rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Fijar a fecha y hora específica. En este ejemplo el 2021-01-01 a las 00:00:00 // rtc.adjust(DateTime(2020, 1, 1, 0, 0, 0)); } } //Imprimir completa obtenida la fecha en decimal void printDate(DateTime date) { Serial.print(date.year(), DEC); Serial.print('/'); Serial.print(date.month(), DEC); Serial.print('/'); Serial.print(date.day(), DEC); Serial.print(" ("); Serial.print(daysOfTheWeek[date.dayOfTheWeek()]); Serial.print(") "); Serial.print(date.hour(), DEC); Serial.print(':'); Serial.print(date.minute(), DEC); Serial.print(':'); Serial.print(date.second(), DEC); Serial.println(); } void loop() { // Obtener fecha actual y mostrar por Serial DateTime now = rtc.now(); printDate(now); delay(3000); //Espera 3 segundos }
І для таго, каб выкарыстоўваць дату RTC да заплануйце нейкае заданне, напрыклад, для ўключэння і выключэння святла, для аўтаматычнага паліву альбо для падачы сігналу трывогі і г.д. Памятаеце, што для працы з прыладамі больш высокага напружання можна выкарыстоўваць транзістары альбо рэле:
#include <Wire.h> #include "RTClib.h" const int outputPin = LED_BUILTIN; bool state = false; // RTC_DS1307 rtc; RTC_DS3231 rtc; void setup() { Serial.begin(9600); delay(1000); if (!rtc.begin()) { Serial.println(F("Couldn't find RTC")); while (1); } if (rtc.lostPower()) { rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } } // Se comprueba si está programado el encendido bool isScheduledON(DateTime date) { int weekDay = date.dayOfTheWeek(); float hours = date.hour() + date.minute() / 60.0; // Configuración de horas de 08:30 a 9:30 y de 22:00 a 23:00 (usando decimal) bool hourCondition = (hours > 8.50 && hours < 9.50) || (hours > 22.00 && hours < 23.00); // Configuración del día Lunes, Sábado y Domingo con números (recuerda que en inglés comienza la semana en Domingo=0, Lunes=1,... bool dayCondition = (weekDay == 1 || weekDay == 6 || weekDay == 0); if (hourCondition && dayCondition) { return true; } return false; } void loop() { DateTime now = rtc.now(); if (state == false && isScheduledON(now)) // Apagado { digitalWrite(outputPin, HIGH); state = true; Serial.print("Activado"); } else if (state == true && !isScheduledON(now)) // Encendido { digitalWrite(outputPin, LOW); state = false; Serial.print("Desactivado"); } delay(3000); }
Будзьце першым, каб каментаваць