ДС3231: сат и календар у реалном времену за ваш Ардуино

ДСКСНУМКС

У неким пројектима потребно је имати доказ о времену, сату или датуму. Било због потребе за обављањем одређених функција заснованих на времену, одржавањем календара догађаја или регистрације, задржавањем времена у систему или једноставно стварањем дигиталног сата са Ардуином. Са ДС3231 можете га добити, још један од компоненте које додајемо на листу.

ДС3231 је модул који сте тражили и овде ћете пронаћи све што вам је потребно за његову контролу, а такође ћу вам показати пример како интегришите га са Ардуином са практичним примером ...

Шта је ДС3231?

ДСКСНУМКС

Пре свега, требали бисте знати шта је а РТЦ (сат у реалном времену)или сат у реалном времену. Ови чипови су врло чести у мноштву апликација, заправо ваш рачунар има један од њих на вашој матичној плочи, а напаја га и ЦР2032 батерија такође. Она је та која одржава време и конфигурацију у БИОС-у / УЕФИ-у и од које јој оперативни систем узима приликом покретања да буде на време (мада се сада, са Интернетом, синхронизација са серверима може користити за већу прецизност, али ово је друга прича ...).

Оно што РТЦ ради је добијање мерења времена, тако једноставно. Разлика од осталих врста електронских сатова је у томе што они једноставно измери време, а то чини бројећи импулсе такта, знајући његову фреквенцију и периоде. Поред времена, РТЦ вам такође омогућава да водите рачуноводство дана, недеља, месеци и година. Односно, пуни датум ...

Да би то било могуће, РТЦ мора бити праћен а Кстал или кварцни кристал који ће деловати као резонатор, онај који даје фреквенцију. Поред тога, требају вам електронска кола способна за бројање и чување датума у ​​меморији. Круг мора бити способан да броји секунде, минуте, сате, дане, недеље, месеце и године.

еса памћење је нестабилноЗбог тога му је потребна батерија, да би имала константну снагу. Ако немате батерију или се она испразни, она ће бити избрисана ... То се дешава са рачунарима кад се батерија испразни, дају нетачно време. Ако га конфигуришете док је рачунар укључен, време ће се задржати, јер се РТЦ напаја, али током процеса током којих је искључен када је потребна та батерија ...

За самосталне пројекте произвођачи обично користе два уобичајена РТЦ чипа, а то су ДС1307 и ДС3231. Обоје је направио Маким (раније Даллас Семицондуцтор), а ДС3231 је тачнији од њих двоје, јер на њега температурне разлике не утичу толико као први. Због тога не флуктуира толико у зависности од температуре, а прецизније задржава време.

Понекад, са приметним температурним разликама, ДС1307 може да заостаје за 1 или 2 мин дневно. Нешто неподношљиво за неке апликације.

ДС3231 не значи да на њега не утичу варијације, већ да има уграђене системе за мерење температуре и компензацију како би се обезбедила тачност од 2 странице у минути, што би било еквивалентно касњење од око 172мс дневно, односно највише нешто више од 1 секунде недељно. А у пракси се обично разликују само 1 или 2 секунде месечно.

Што се тиче начина комуницирају са РТЦ-ом ДС3131 да би добио вредности датума које добија, то врши до И2Ц аутобус. А за напајање можете користити 2.3 до 5.5 в за ДС3231, што је нешто ниже од 4.5 до 5.5 в за ДС1307, тако да може да буде енергетски ефикаснији и да батерија траје дуже.

Такође, требали бисте знати да ови модули обично имају ЕЕПРОМ додатни АТ24Ц32 за чување неких записа и претходних мерења, што је сасвим практично.

апликације

Што се тиче апликација, већ сам поменуо неке, попут примене сата са Ардуином, како бих створио систем који делује на основу Време Шта год, задржати време на опреми као што су рачунари и многи други електронски уређаји и уређаји који имају времена итд.

Може се користити и у пројектима за стварање тајмера за осветљење, системе за наводњавање, даталогер итд. Апликације могу бити најбројније ...

Купите РТЦ ДС3231

Модул ДС3131 је јефтин, а можете га пронаћи у неким специјализованим продавницама електронике или у великим продавницама као што су еБаи, АлиЕкпресс, Амазон итд. Ако сте заинтересовани за једно, ево неколико препорука:

ДС3231 Ардуино интеграција

Снимак екрана за Ардуино ИДЕ

Ако желите интегришите свој ДС3231 са Ардуино плочом и започните са креирањем „временских“ пројеката, прво морате да направите одговарајуће везе. Да бисте могли да га повежете, једноставно је као:

  • СЛЦ пин ДС3231 плоче мора бити повезан са А5 вашег Arduino UNO.
  • СДА ДС3231 је повезан на А4 Ардуино.
  • Вцц из модула ће ићи на 5 В из Ардуина.
  • ГНД до ГНД.
Не заборавите да инсталирате библиотеку да бисте користили РТЦ ДС3231 у вашем Ардуино ИДЕ-у, иначе код неће радити ...

Сада сте повезани систем, следећа ствар је да напишете скица изворног кода да га програмира. Можете да измените кодове и прилагодите их својим потребама, али можете започети једноставним добијањем датума са РТЦ ДС3231 повезаног на Ардуино:

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

А да би се РТЦ датум искористио за закажите неки задатак, на пример за укључивање или искључивање светла, за аутоматско заливање или за оглашавање аларма итд. Запамтите да за руковање уређајима вишег напона можете користити транзисторе или релеј:

#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. Похрана података: База података коју хостује Оццентус Нетворкс (ЕУ)
  6. Права: У било ком тренутку можете ограничити, опоравити и избрисати своје податке.