DS3231: Arduino үчүн реалдуу убакыт сааты жана календарь

DS3231

Айрым долбоорлордо убакытты, саатты же датаны далилдөө керек. Же убакыттын негизинде белгилүү бир функцияларды аткаруу, окуялардын календарын жүргүзүү же каттоодон өткөрүү, убакытты тутумда кармоо же жөн эле санариптик саат түзүү зарылдыгы Arduino менен. Менен DS3231 сиз аны, дагы бир алат компоненттери биз тизмеге кошобуз.

DS3231 - сиз издеген модуль, жана сиз аны көзөмөлдөө үчүн керектүү нерселердин бардыгын таба аласыз, ошондой эле сизге кантип мисал келтирем аны Arduino менен интеграциялоо практикалык мисал менен ...

DS3231 деген эмне?

DS3231

Биринчиден, эмне экендигин билишиңиз керек а RTC (Чыныгы убакыт сааты), же чыныгы убакыт сааты. Бул микросхемалар көптөгөн тиркемелерде көп кездешет, чындыгында, сиздин компьютерде алардын бири энеңиздин платасында бар, жана ал ошондой эле CR2032 батарея ошондой эле. Бул BIOS / UEFIдеги убакытты жана конфигурацияны сактап, жүктөө учурунда оперативдик система аны өз убагында алат (азыр болсо, Интернет менен, серверлер менен синхрондоштуруу кыйла так колдонулушу мүмкүн, бирок бул дагы бир окуя ...).

RTC эмне убакытты өлчөө, бул жөнөкөй. Электрондук сааттардын башка түрлөрүнөн айырмасы жөнөкөй убакытты өлчөө, жана муну саат жыштыгынын импульстарын эсептөө менен, анын жыштыгын жана мезгилдерин билүү менен жасайт. Убакыттан тышкары, RTC, күндөрдү, жумаларды, айларды жана жылдарды эсепке алууга мүмкүндүк берет. Башкача айтканда, толук датасы ...

Бул мүмкүн болушу үчүн, РТК а менен коштолушу керек Xtal же кварцтык кристалл резонатор катары иштей турган, жыштыгын камсыз кылган. Андан тышкары, датаны эсептеп, эс тутумга сактай алган электрондук схемалар керек. Схемалар секунддарды, мүнөттөрдү, сааттарды, күндөрдү, жумаларды, айларды жана жылды эсептөөгө жөндөмдүү болушу керек.

Еса эс тутуму туруксузОшол себептен ал туруктуу кубаттуулукта болуш үчүн, батарейканы талап кылат. Эгер сизде батарейка жок болсо же ал түгөнүп калса, ал өчүрүлөт ... Батарейка түгөнгөндө компьютерлерде ушундай болот, алар туура эмес убакыт беришет. Эгер сиз компьютер күйүп турганда аны конфигурациялап койсоңуз, анда убакыт сакталат, анткени РТК иштелип жатат, бирок батарейка керек болгон учурда өчүп турган мезгилде ...

DIY долбоорлор үчүн, өндүрүүчүлөр, адатта, эки жалпы RTC чиптерин колдонушат, алар DS1307 жана DS3231. Экөө тең Максим тарабынан жасалган (мурунку Даллас Semiconductor), жана DS3231 экөөнүн тактыгы, анткени ага температуранын өзгөрүшү мурдагыдай таасир этпейт. Демек, ал температурага жараша анчалык өзгөрбөйт жана убакытты тагыраак кармайт.

Кээде, байкалган температуранын айырмачылыгы менен, DS1307 күнүнө 1 же 2 мин эле артта калышы мүмкүн. Айрым тиркемелер үчүн чыдагыс нерсе.

DS3231 ага өзгөрүүлөр таасир этпейт, бирок температураны өлчөө жана компенсация тутумдары орнотулуп, 2ppm тактыгын камсыз кылат, бул эквивалентке барабар убакыттын артта калуусу күнүнө болжол менен 172 мс, башкача айтканда, жумасына 1 секунддан бир аз көбүрөөк. Ал эми иш жүзүндө алар адатта айына 1 же 2 секундага гана өзгөрүп турушат.

Жолго келсек RTC менен байланышуу DS3131 дата маанисин алуу үчүн, аны жасайт I2C автобус. Ал эми кубаттуулук үчүн DS2.3 үчүн 5.5-3231v колдонсоңуз болот, бул DS4.5 үчүн 5.5-1307v караганда бир аз төмөн, андыктан ал энергияны үнөмдөп, батарейканы узак убакытка чейин иштетет.

Ошондой эле, сиз билишиңиз керек, бул модулдарда а EEPROM кошумча AT24C32 кээ бир жазууларды жана мурунку өлчөөлөрдү сактоо үчүн, бул иш жүзүндө пайдалуу.

өтүнмөлөр

Колдонмолор жөнүндө айта турган болсок, мен буга чейин Arduino менен саатты жүзөгө ашыруу, анын негизинде иштей турган тутум түзүү сыяктуу айрымдарын айткан элем. Убакыт Кандай болбосун, компьютерлерге жана башка көптөгөн электрондук шаймандарга, убактысы бар шаймандарга убакыт бөлүп туруу ж.б.

Ошондой эле колдонсо болот долбоорлор жарыктандыруу, ирригациялык тутумдар, даталогер ж.б.у.с. таймерлерин түзүү. Тиркемелер эң көп санда болушу мүмкүн ...

RTC DS3231 сатып алыңыз

модулу DS3131 арзан, жана аны айрым электрондук дүкөндөрдөн же eBay, AliExpress, Amazon ж.б. сыяктуу ири дүкөндөрдөн таба аласыз. Эгер сизге ээ болгуңуз келсе, анда бир нече сунуштар келтирилген:

DS3231 Arduino интеграциясы

Arduino IDE скриншоту

Эгер сиз каалаган DS3231ни Arduino тактаңыз менен интеграциялаңыз жана "убакыт" долбоорлорун түзүүнү баштаңыз, адегенде тиешелүү байланыштарды түзүшүңүз керек. Аны туташтыруу үчүн, ал төмөнкүдөй жөнөкөй:

  • DS3231 тактасынын SLC төөнөгүчү сиздин A5 менен туташтырылышы керек Arduino UNO.
  • DS3231 SDA Arduino A4 туташкан.
  • Модулдагы Vcc Arduinoдон 5Vге өтөт.
  • GND - GND.
Arduino IDE'де RTC DS3231 колдонуу үчүн китепкананы орнотууну унутпаңыз, болбосо код иштебей калат ...

Эми сизде тутум туташып турат, кийинки нерсе эскиз булагы аны программалоо. Сиз коддорду өзгөртүп, аларды өз муктаждыктарыңызга ылайыкташтыра аласыз, бирок жөн гана Arduino менен байланышкан RTC DS3231ден күндү алуу менен баштасаңыз болот:

#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);
}


Макаланын мазмуну биздин принциптерге карманат редакциялык этика. Ката жөнүндө кабарлоо үчүн чыкылдатыңыз бул жерде.

Комментарий биринчи болуп

Комментарий калтырыңыз

Сиздин электрондук почта дареги жарыяланбайт. Милдеттүү талаалар менен белгиленет *

*

*

  1. Маалыматтар үчүн жооптуу: Мигель Анхель Гатан
  2. Маалыматтын максаты: СПАМды көзөмөлдөө, комментарийлерди башкаруу.
  3. Мыйзамдуулук: Сиздин макулдугуңуз
  4. Маалыматтарды берүү: Маалыматтар үчүнчү жактарга юридикалык милдеттенмелерден тышкары билдирилбейт.
  5. Маалыматтарды сактоо: Occentus Networks (ЕС) тарабынан уюштурулган маалыматтар базасы
  6. Укуктар: Каалаган убакта маалыматыңызды чектеп, калыбына келтирип жана жок кыла аласыз.