In sommige projekte is dit nodig om bewys te lewer van die tyd, die uur of die datum. As gevolg van die behoefte om sekere funksies op grond van tyd uit te voer, 'n kalender van gebeure of registrasie te onderhou, om die tyd in 'n stelsel te hou, of bloot 'n digitale klok te skep met Arduino. Met die DS3231 jy kan dit kry, nog een van die komponente wat ons by die lys voeg.
Die DS3231 is die module waarna u gesoek het, en hier sal u alles vind wat u benodig vir die beheer daarvan, en ek sal u ook 'n voorbeeld toon van hoe integreer dit met Arduino met 'n praktiese voorbeeld ...
Wat is die DS3231?
In die eerste plek moet u weet wat 'n RTC (intydse klok), of real-time klok. Hierdie skyfies kom baie gereeld voor in baie toepassings, en u rekenaar het een daarvan op u moederbord, en dit word ook aangedryf deur 'n CR2032 battery ook. Dit is die een wat die tyd en die konfigurasie in die BIOS / UEFI handhaaf en waaruit die bedryfstelsel dit neem wanneer dit op tyd begin (hoewel die sinchronisasie met bedieners nou met die internet vir groter presisie gebruik kan word, maar dit is 'n ander storie ...).
Wat die RTC doen, is om tydmetings te kry, so eenvoudig. Die verskil van ander soorte elektroniese horlosies is dat hulle eenvoudig meet die tyd, en dit doen deur klokseinpulse te tel, met die frekwensie en periodes daarvan. Behalwe vir die tyd, kan 'n RTC u ook boekhou van dae, weke, maande en jare. Dit wil sê die volledige datum ...
Om dit moontlik te maak, moet die RTC vergesel word van a Xtal of kwarts kristal wat as 'n resonator sal optree, die een wat die frekwensie verskaf. Verder het u elektroniese stroombane nodig om die datum in die geheue te kan tel en stoor. Die stroombane moet sekondes, minute, ure, dae, weke, maande en jare kan tel.
wat geheue is wisselvalligDaarom het dit die battery nodig om konstant krag te hê. As u nie 'n battery het nie, of dit leeg is, sal dit uitgevee word. Dit is wat met rekenaars gebeur as die battery leeg is, dit gee 'n verkeerde tyd. As u dit instel terwyl die rekenaar aan is, sal die tyd behou word, aangesien die RTC aangeskakel word, maar dit is gedurende die prosesse waartydens dit uit is wanneer die battery benodig word ...
Vir DIY-projekte gebruik vervaardigers gewoonlik twee gewone RTC-skyfies, dit is die DS1307 en DS3231. Albei is gemaak deur Maxim (voorheen Dallas Semiconductor), en die DS3231 is die akkurater van die twee, aangesien dit nie so beïnvloed word deur temperatuurvariasies soos die vorige nie. Dit wissel dus nie soveel afhangende van die temperatuur nie, en dit hou die tyd presieser.
Die DS3231 is nie dat dit nie deur variasies beïnvloed word nie, maar dat dit ingeboude temperatuurmetings- en vergoedingstelsels het om 'n akkuraatheid van 2 ppm te verseker, wat gelykstaande is aan 'n tydsverloop ongeveer 172ms per dag, dit wil sê hoogstens 'n bietjie meer as 1 sekonde per week. En in die praktyk wissel dit gewoonlik slegs 1 of 2 sekondes per maand.
Wat die manier betref kommunikeer met die RTC DS3131 om die datumwaardes te kry wat dit kry, word gedoen deur I2C bus. En vir krag kan u 2.3 tot 5.5 v gebruik vir die DS3231, wat ietwat laer is as die 4.5 tot 5.5 v vir die DS1307, sodat dit meer energie-doeltreffend kan wees en die battery langer laat hou.
U moet ook weet dat hierdie modules gewoonlik 'n EEPROM addisionele AT24C32 om 'n paar rekords en vorige afmetings op te slaan, wat baie prakties is.
aansoeke
Wat die toepassings betref, het ek al 'n paar genoem, soos om 'n horlosie met Arduino te implementeer, om 'n stelsel te skep wat gebaseer is op Die tyd Hoe dit ook al sy, om tyd te hou aan toerusting soos rekenaars en baie ander elektroniese toestelle en toestelle wat tyd het, ens.
Kan ook gebruik word in projekte om timers te skep vir beligting, besproeiingstelsels, datalogger, ens. Die toepassings kan die meeste ...
Koop 'n RTC DS3231
Die module DS3131 is goedkoop, en u kan dit vind in sommige gespesialiseerde elektronika-winkels of in groot winkels soos eBay, AliExpress, Amazon, ens. Hier is 'n paar aanbevelings as u belangstel om een te hê:
DS3231 Arduino-integrasie
As jy wil integreer u DS3231 met u Arduino-bord en begin om 'tydige' projekte te skep, moet u eers die toepaslike verbindings maak. Om dit te kan verbind, is dit so eenvoudig soos:
- Die SLC-pen van die DS3231-kaart moet op die A5 van u gekoppel wees Arduino UNO.
- SDA van die DS3231 is gekoppel aan A4 van Arduino.
- Vcc vanaf die module gaan na 5V vanaf Arduino.
- GND tot GND.
Nou het u die stelsel verbind, die volgende ding is om die skets bronkode om dit te programmeer. U kan die kodes wysig en aanpas volgens u behoeftes, maar u kan begin deur die datum van 'n RTC DS3231 aan Arduino te kry:
#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 }
En om die RTC-datum te gebruik om beplan 'n taak, soos om ligte aan of uit te skakel, vir outomatiese watermaak, of om alarm te laat hoor, ens. Onthou dat u transistors of om hoërspanningstoestelle te hanteer aflos:
#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); }
Wees die eerste om te kommentaar lewer