DS3231: რეალური დრო და კალენდარი თქვენი Arduino– სთვის

DS3231

ზოგიერთ პროექტში აუცილებელია დროის, საათის ან თარიღის მტკიცებულება. ან იმის გამო, რომ საჭიროა გარკვეული ფუნქციების შესრულება დროზე დაყრდნობით, მოვლენების კალენდრის შენარჩუნება ან რეგისტრაცია, სისტემაში დროის შენარჩუნება, ან უბრალოდ ციფრული საათის შექმნა არდუინოსთან ერთად. თან DS3231 შეგიძლიათ მიიღოთ ეს, კიდევ ერთი კომპონენტები რომ სიას დავუმატებთ.

DS3231 არის ის მოდული, რომელსაც ეძებდით და აქ ნახავთ ყველაფერს, რაც გჭირდებათ მისი კონტროლისთვის და ასევე გაჩვენებთ მაგალითს, თუ როგორ ინტეგრირება Arduino- სთან პრაქტიკული მაგალითით ...

რა არის DS3231?

DS3231

პირველ რიგში, თქვენ უნდა იცოდეთ რა RTC (საათი რეალურ დროში), ან რეალურ დროში. ეს ჩიპები ძალიან ხშირად გვხვდება მრავალრიცხოვან პროგრამებში, სინამდვილეში, თქვენს კომპიუტერში ერთ-ერთი მათგანი დედაპლატაზეა CR2032 ბატარეა ასევე ეს არის ის, რომელიც ინარჩუნებს დროს და კონფიგურაციას BIOS / UEFI– ში და საიდანაც ოპერაციული სისტემა იღებს მას ჩატვირთვისას, რომ დროულად იყოს (თუმცა ახლა ინტერნეტით, სერვერებთან სინქრონიზაცია შეიძლება უფრო დიდი სიზუსტისთვის გამოიყენოთ, მაგრამ ეს სხვა ამბავია…).

RTC აკეთებს დროის გაზომვას, მარტივად. სხვაობა სხვა ტიპის ელექტრონული საათებისგან იმაშია, რომ ისინი უბრალოდ გავზომოთ დრო, და ამას აკეთებს საათის სიგნალის იმპულსების დათვლით, იცის მისი სიხშირე და პერიოდები. დროის გარდა, RTC ასევე საშუალებას გაძლევთ აწარმოოთ აღრიცხვა დღეების, კვირების, თვეებისა და წლების შესახებ. ეს არის სრული თარიღი ...

ამის შესაძლებლობისთვის RTC- ს უნდა ახლდეს ა Xtal ან კვარცის ბროლი რომელიც შეასრულებს რეზონატორის როლს, რომელიც უზრუნველყოფს სიხშირეს. გარდა ამისა, გჭირდებათ ელექტრონული სქემები, რომელსაც შეუძლია დათვალოს და ჩაწეროს მეხსიერებაში თარიღი. სქემებს უნდა ჰქონდეს წამების, წუთების, საათების, დღეების, კვირების, თვეების და წლების დათვლა.

Esa მეხსიერება არასტაბილურიაამიტომ მას სჭირდება აკუმულატორი, რომ მუდმივი ენერგია ჰქონდეს. თუ თქვენ არ გაქვთ ბატარეა ან ის ამოიწურება, ის წაიშლება ... ასე ხდება კომპიუტერით ბატარეის ამოწურვის შემთხვევაში, ისინი არასწორი დროთ გამოდიან. თუ მას კონფიგურაციას უკეთებთ, სანამ კომპიუტერი ჩართულია, დრო შენარჩუნდება, რადგან RTC იკვებება, მაგრამ ეს არის პროცესების განმავლობაში, როდესაც ის გამორთულია, როდესაც ეს აკუმულატორი გჭირდებათ.

წვრილმანი პროექტებისთვის, მწარმოებლები, როგორც წესი, იყენებენ ორ ჩვეულებრივ RTC ჩიპს DS1307 და DS3231. ორივე დამზადებულია მაქსიმის (ყოფილი Dallas Semiconductor) მიერ და DS3231 უფრო ზუსტია ამ ორიდან, რადგან მასზე ტემპერატურის ვარიაციები ისე არ მოქმედებს, როგორც ეს პირველზე. ამიტომ, ეს ტემპერატურაზე ამდენი არ იცვლება და დროს უფრო ზუსტად ინარჩუნებს.

ზოგჯერ, ტემპერატურის შესამჩნევი სხვაობებით, DS1307 შეიძლება იყოს 1 ან 2 წთ დღეში. რაღაც გაუსაძლისია ზოგიერთი პროგრამისთვის.

DS3231 არ ნიშნავს, რომ მასზე გავლენას არ ახდენს ვარიაციები, მაგრამ მას აქვს ჩაშენებული ტემპერატურის გაზომვისა და კომპენსაციის სისტემები, რათა უზრუნველყოს 2 ppm სიზუსტე, რაც ექვივალენტური იქნება დროის შუალედი დღეში დაახლოებით 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 ინტეგრაცია

Arduino IDE- ს სკრინშოტი

თუ გსურთ ინტეგრირება თქვენი DS3231 თქვენს Arduino დაფაზე და დაიწყეთ "დროული" პროექტების შექმნა, ჯერ უნდა გააკეთოთ შესაბამისი კავშირები. იმისათვის, რომ შეძლოთ მისი დაკავშირება, მარტივია:

  • DS3231 დაფის SLC pin უნდა იყოს დაკავშირებული თქვენი A5- სთან Arduino UNO.
  • DS3231- ის SDA დაკავშირებულია Arduino- ს A4- თან.
  • მოდულიდან Vcc გადავა Arduino– დან 5V– ზე.
  • GND– დან GND– დან.
გახსოვდეთ, რომ დააინსტალირეთ ბიბლიოთეკა, რომ გამოიყენოთ RTC DS3231 თქვენს Arduino IDE– ში, თორემ კოდი არ იმუშავებს ...

ახლა სისტემა გაქვთ დაკავშირებული, შემდეგია დაწეროთ ესკიზის საწყისი კოდი რომ დაპროგრამდეს. შეგიძლიათ შეცვალოთ კოდები და მოირგოთ ისინი თქვენს საჭიროებებზე, მაგრამ თქვენ შეგიძლიათ დაიწყოთ თარიღის მარტივად მიღება 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);
}


სტატიის შინაარსი იცავს ჩვენს პრინციპებს სარედაქციო ეთიკა. შეცდომის შესატყობინებლად დააჭირეთ ღილაკს აქ.

იყავი პირველი კომენტარი

დატოვე კომენტარი

თქვენი ელფოსტის მისამართი გამოქვეყნებული არ იყო. აუცილებელი ველები აღნიშნულია *

*

*

  1. მონაცემებზე პასუხისმგებელი: მიგელ ანგელ გატონი
  2. მონაცემთა მიზანი: სპამის კონტროლი, კომენტარების მართვა.
  3. ლეგიტიმაცია: თქვენი თანხმობა
  4. მონაცემთა კომუნიკაცია: მონაცემები არ გადაეცემა მესამე პირებს, გარდა სამართლებრივი ვალდებულებისა.
  5. მონაცემთა შენახვა: მონაცემთა ბაზა, რომელსაც უმასპინძლა Occentus Networks (EU)
  6. უფლებები: ნებისმიერ დროს შეგიძლიათ შეზღუდოთ, აღადგინოთ და წაშალოთ თქვენი ინფორმაცია.