នៅក្នុងគម្រោងមួយចំនួនវាចាំបាច់ត្រូវមានភស្តុតាងអំពីពេលវេលាម៉ោងឬកាលបរិច្ឆេទ។ ដោយសារតម្រូវការដើម្បីអនុវត្តមុខងារជាក់លាក់ដោយផ្អែកលើពេលវេលារក្សាប្រតិទិនព្រឹត្តិការណ៍ឬការចុះឈ្មោះរក្សាពេលវេលានៅក្នុងប្រព័ន្ធឬគ្រាន់តែបង្កើតនាឡិកាឌីជីថល។ ជាមួយ Arduino។ ជាមួយ DS3231 អ្នកអាចយកវាបានហើយ សមាសភាគ ដែលយើងបន្ថែមទៅក្នុងបញ្ជី។
DS3231 គឺជាម៉ូឌុលដែលអ្នកកំពុងស្វែងរកហើយនៅទីនេះអ្នកនឹងឃើញអ្វីគ្រប់យ៉ាងដែលអ្នកត្រូវការសម្រាប់ការគ្រប់គ្រងរបស់វាហើយខ្ញុំក៏នឹងបង្ហាញអ្នកពីឧទាហរណ៍នៃរបៀប រួមបញ្ចូលវាជាមួយ Arduino ជាមួយឧទាហរណ៍ជាក់ស្តែង ...
តើ DS3231 គឺជាអ្វី?
ដំបូងអ្នកគួរតែដឹងថាតើក RTC (ម៉ោងពិត), ឬពេលវេលាពិតប្រាកដ។ បន្ទះឈីបទាំងនេះមានភាពញឹកញាប់ណាស់នៅក្នុងកម្មវិធីជាច្រើនដែលតាមពិតកុំព្យូទ័ររបស់អ្នកមានមួយនៅលើ motherboard របស់អ្នកហើយវាក៏ត្រូវបានបំពាក់ដោយ ថ្ម CR2032 ផងដែរ។ វាគឺជាផ្នែកមួយដែលរក្សាពេលវេលានិងការកំណត់រចនាសម្ព័ន្ធនៅក្នុង BIOS / UEFI ហើយពីប្រព័ន្ធប្រតិបត្តិការយកវានៅពេលចាប់ផ្ដើមដំណើរការទាន់ពេល (ទោះបីជាឥឡូវនេះជាមួយនឹងអ៊ិនធឺរណែតការធ្វើសមកាលកម្មជាមួយម៉ាស៊ីនមេអាចត្រូវបានប្រើសម្រាប់ភាពជាក់លាក់កាន់តែច្រើនប៉ុន្តែនេះ គឺជារឿងមួយទៀត…) ។
អ្វីដែល RTC ធ្វើគឺទទួលបានការវាស់ពេលវេលាដែលសាមញ្ញ។ ភាពខុសគ្នាពីប្រភេទនាឡិកាអេឡិចត្រូនិចផ្សេងទៀតគឺថាវាសាមញ្ញ វាស់ពេលវេលាហើយវាធ្វើដូច្នេះដោយរាប់ជីពចរសញ្ញានាឡិកាដោយដឹងពីប្រេកង់និងរយៈពេលរបស់វា។ បន្ថែមពីលើពេលវេលា RTC ក៏អនុញ្ញាតឱ្យអ្នករក្សាគណនេយ្យថ្ងៃសប្តាហ៍ខែនិងឆ្នាំ។ នោះគឺកាលបរិច្ឆេទពេញលេញ ...
ដើម្បីធ្វើដូចនេះ RTC ត្រូវតែអមដោយក គ្រីស្តាល់ Xtal ឬរ៉ែថ្មខៀវ ដែលនឹងដើរតួជាឧបករណ៍រំonកមួយដែលផ្តល់ប្រេកង់។ លើសពីនេះទៀតអ្នកត្រូវការសៀគ្វីអេឡិចត្រូនិចដែលមានសមត្ថភាពរាប់និងរក្សាទុកកាលបរិច្ឆេទនៅក្នុងសតិ។ សៀគ្វីអគ្គីសនីត្រូវតែមានសមត្ថភាពរាប់វិនាទីនាទីម៉ោងម៉ោងថ្ងៃសប្តាហ៍ខែនិងឆ្នាំ។
អ៊ីសា ការចងចាំគឺងាយនឹងបង្កជាហេតុនោះហើយជាមូលហេតុដែលវាត្រូវការថ្មដើម្បីឱ្យមានថាមពលថេរ។ ប្រសិនបើអ្នកមិនមានថ្មឬវាអស់ថ្មវានឹងត្រូវបានលុបចោល ... នោះហើយជាអ្វីដែលកើតឡើងចំពោះកុំព្យូទ័រនៅពេលដែលថ្មអស់ហើយពួកគេផ្តល់ពេលវេលាមិនត្រឹមត្រូវ។ ប្រសិនបើអ្នកតំឡើងវានៅពេលកុំព្យូទ័រកំពុងបើកពេលវេលានឹងត្រូវបានរក្សាទុកពីព្រោះ RTC កំពុងត្រូវបានដំណើរការប៉ុន្តែវាស្ថិតនៅក្នុងអំឡុងពេលដំណើរការកំឡុងពេលដែលវាត្រូវបានបិទនៅពេលដែលថ្មត្រូវការ ...
សម្រាប់គម្រោង DIY អ្នកផលិតជាធម្មតាប្រើបន្ទះឈីប RTC ធម្មតាពីរដែលជារបស់ DS1307 និង DS3231។ ឧបករណ៍ទាំងពីរត្រូវបានផលិតដោយម៉ិមមីម (ពីមុនដាឡាសស៊ីលីខនឌ័រ) ហើយអេស .៣២៣១ កាន់តែមានភាពត្រឹមត្រូវជាងមុនពីព្រោះវាមិនរងឥទ្ធិពលពីការប្រែប្រួលសីតុណ្ហភាពដូចគ្នានឹងអតីតកាលដែរ។ ដូច្នេះវាមិនប្រែប្រួលច្រើនទេអាស្រ័យលើសីតុណ្ហភាពហើយវារក្សាពេលវេលាឱ្យកាន់តែច្បាស់។
DS3231 មិនមែនថាវាមិនត្រូវបានប៉ះពាល់ដោយបំរែបំរួលនោះទេប៉ុន្តែវាមានប្រព័ន្ធវាស់សីតុណ្ហភាពនិងប្រព័ន្ធសំណងដែលភ្ជាប់មកជាមួយដើម្បីធានានូវភាពត្រឹមត្រូវនៃ 2ppm ដែលអាចស្មើនឹង យឺតយ៉ាវពេលវេលា ប្រហែល ១៧២ មក្នុងមួយថ្ងៃដែលច្រើនជាង ១ វិនាទីក្នុងមួយសប្តាហ៍។ ហើយនៅក្នុងការអនុវត្តជាក់ស្តែងពួកគេច្រើនតែប្រែប្រួលត្រឹមតែ ១ ឬ ២ វិនាទីក្នុងមួយខែ។
ដូចជាសម្រាប់វិធីនេះ ទាក់ទងជាមួយ RTC DS3131 ដើម្បីទទួលបានតម្លៃកាលបរិច្ឆេទដែលទទួលបានវាត្រូវបានធ្វើឡើងដោយ ឡានក្រុង I2C។ ហើយសម្រាប់ថាមពលអ្នកអាចប្រើថាមពលពី ២.៣ ទៅ ៥.៥ វ៉សម្រាប់អេស .៣២៣១ ដែលទាបជាង ៤.៥ ទៅ ៥.៥ វ៉សម្រាប់អេស .១៣០៧ ដូច្នេះវាអាចមានថាមពលកាន់តែច្រើននិងធ្វើឱ្យថ្មកាន់បានយូរ។
ដូចគ្នានេះផងដែរអ្នកគួរតែដឹងថាម៉ូឌុលទាំងនេះជាធម្មតាមាន EEPROM AT24C32 បន្ថែម ដើម្បីរក្សាទុកកំណត់ត្រាខ្លះនិងការវាស់វែងពីមុនដែលជាការអនុវត្តជាក់ស្តែង។
Aplicaciones
សម្រាប់កម្មវិធីខ្ញុំបានលើកឡើងរួចមកហើយដូចជាដើម្បីអនុវត្តនាឡិកាជាមួយអារីដូណូដើម្បីបង្កើតប្រព័ន្ធដែលដើរតួផ្អែកលើ ពេលវេលា ទោះយ៉ាងណាក៏ដោយដើម្បីទុកពេលវេលានៅលើឧបករណ៍ដូចជាកុំព្យូទ័រនិងឧបករណ៍អេឡិចត្រូនិកនិងឧបករណ៍អេឡិចត្រូនិចជាច្រើនដែលមានពេលវេលា។ ល។
ក៏អាចត្រូវបានប្រើនៅក្នុង គម្រោង ដើម្បីបង្កើតកម្មវិធីកំណត់ពេលវេលាសម្រាប់ភ្លើងបំភ្លឺប្រព័ន្ធធារាសាស្ត្រឌីជីថលទិន្នន័យ។ ល។ កម្មវិធីអាចមានច្រើនបំផុត ...
ទិញ RTC DS3231
ម៉ូឌុល DS3131 គឺថោកហើយអ្នកអាចរកវាបាននៅតាមហាងលក់គ្រឿងអេឡិចត្រូនិចឯកទេសមួយចំនួនឬហាងធំ ៗ ដូចជា eBay, AliExpress, Amazon ជាដើម។ ប្រសិនបើអ្នកចាប់អារម្មណ៍ចង់មានវានេះគឺជាអនុសាសន៍មួយចំនួន៖
DS3231 សមាហរណកម្ម Arduino
ប្រសិនបើអ្នកចង់ បញ្ចូល DS3231 របស់អ្នកជាមួយក្តារ Arduino របស់អ្នក ហើយចាប់ផ្តើមបង្កើតគំរោង“ ពេលវេលា” អ្នកត្រូវភ្ជាប់បណ្តាញដែលសមរម្យជាមុនសិន។ ដើម្បីអាចភ្ជាប់វាបានវាមានលក្ខណៈសាមញ្ញដូចជាៈ
- ម្ជុល SLC នៃបន្ទះ DS3231 ត្រូវតែភ្ជាប់ទៅនឹងអេហ្វ ៥ របស់អ្នក Arduino UNO.
- SDA នៃ DS3231 ត្រូវបានភ្ជាប់ទៅនឹង A4 នៃ Arduino ។
- វីស៊ីពីម៉ូឌុលនឹងទៅ 5 វីពីអ័រឌូណូ។
- 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); }
ធ្វើជាយោបល់ដំបូង