DS3231: jam nyata lan tanggalan kanggo Arduino sampeyan

DS3231

Ing sawetara proyek, sampeyan kudu duwe bukti wektu, jam, utawa tanggal kasebut. Apa amarga kudu nindakake fungsi tartamtu adhedhasar wektu, kanggo njaga tanggalan acara utawa registrasi, supaya wektu tetep tetep ing sistem, utawa mung kanggo nggawe jam digital karo Arduino. Kanthi DS3231 sampeyan bisa entuk, liyane saka komponen sing ditambahake menyang dhaptar.

DS3231 minangka modul sing sampeyan goleki, lan ing kene sampeyan bakal nemokake kabeh sing dibutuhake kanggo ngontrol lan aku uga bakal nuduhake conto kepiye nggabungake karo Arduino nganggo conto praktis ...

Apa DS3231 kasebut?

DS3231

Kaping pisanan, sampeyan kudu ngerti apa a RTC (Jam Wektu Nyata), utawa jam nyata. Kripik kasebut asring banget digunakake ing pirang-pirang aplikasi, nyatane, PC sampeyan duwe salah siji ing motherboard, lan uga didukung Batere CR2032 uga Iki minangka sing njaga wektu lan konfigurasi ing BIOS / UEFI lan sistem operasi njupuk nalika boot dadi tepat waktu (sanajan saiki, kanthi Internet, sinkronisasi karo server bisa digunakake kanthi tliti sing luwih tliti, nanging iki crita liyane…).

Apa sing ditindakake RTC yaiku entuk pangukuran wektu, gampang. Bedane saka jinis jam tangan elektronik yaiku kanthi gampang ngukur wektu, lan ditindakake kanthi ngetung pulsa sinyal jam, ngerti frekuensi lan periode apa. Saliyane wektu, RTC uga ngidini sampeyan nggawe akun dina, minggu, wulan lan taun. Yaiku, tanggal lengkap ...

Supaya bisa ditindakake, RTC kudu diiringi a Xtal utawa kristal kuarsa sing bakal dadi resonator, sing menehi frekuensi. Kajaba iku, sampeyan butuh sirkuit elektronik sing bisa ngetung lan nyimpen tanggal kasebut ing memori. Sirkuit kasebut kudu bisa ngetung detik, menit, jam, dina, minggu, wulan lan taun.

Esa memori molah malihMakane butuh batere, kanggo duwe tenaga terus. Yen sampeyan ora duwe batere utawa entek, bathi bakal terhapus ... Mangkene kedadeyan PC nalika batere wis entek, mula bakal menehi wektu sing ora bener. Yen sampeyan ngonfigurasi nalika PC urip, wektu bakal tetep, amarga RTC diaktifake, nanging sajrone proses mati nalika batere dibutuhake ...

Kanggo proyek DIY, produsen biasane nggunakake rong chip RTC umum, yaiku DS1307 lan DS3231. Loro-lorone digawe dening Maxim (biyen Dallas Semiconductor), lan DS3231 luwih akurat saka kalorone, amarga ora kena pengaruh variasi suhu kaya sing sadurunge. Mula, ora fluktuasi gumantung saka suhu, lan njaga wektu luwih tepat.

Kadhangkala, kanthi beda suhu sing ketara, DS1307 bisa uga ketinggalan 1 utawa 2 menit saben dinane. Ana sing ora bisa ditoleransi kanggo sawetara aplikasi.

DS3231 ora kena pengaruh variasi, nanging duwe sistem pangukuran suhu lan kompensasi internal kanggo njamin akurasi 2ppm, sing padha karo wektu tundha udakara 172ms saben dina, yaiku paling sethithik luwih saka 1 detik seminggu. Lan ing prakteke, umume beda-beda mung 1 utawa 2 detik sewulan.

Dene cara komunikasi karo RTC DS3131 kanggo entuk angka tanggal sing ditindakake, ditindakake kanthi Bis I2C. Lan kanggo tenaga, sampeyan bisa nggunakake 2.3 nganti 5.5v kanggo DS3231, sing luwih murah tinimbang 4.5 nganti 5.5v kanggo DS1307, saengga bisa dadi luwih hemat energi lan batere luwih awet.

Sampeyan uga kudu ngerti yen modul iki biasane duwe EEPROM tambahan AT24C32 kanggo nyimpen sawetara cathetan lan pangukuran sadurunge, sing cukup praktis.

Aplikasi

Kanggo aplikasi, aku wis nyebutake sawetara, kayata ngetrapake jam karo Arduino, kanggo nggawe sistem sing tumindak adhedhasar Wayahe Punapa mawon, supados tetep ngginakaken peralatan kayata PC lan piranti elektronik liyane lan piranti sing duwe wektu, lsp.

Uga bisa digunakake ing proyek kanggo nggawe timer kanggo cahya, sistem irigasi, datalogger, lsp. Aplikasi kasebut bisa dadi paling akeh ...

Tuku RTC DS3231

Modul DS3131 murah, lan sampeyan bisa nemokake ing sawetara toko elektronik khusus utawa ing toko gedhe kayata eBay, AliExpress, Amazon, lsp. Yen sampeyan kepengin duwe, ing ngisor iki sawetara rekomendasi:

DS3231 Integrasi Arduino

Screenshot saka Arduino IDE

Yen sampeyan pengin nggabungake DS3231 karo papan Arduino lan wiwiti nggawe proyek "wektu", sampeyan luwih dhisik kudu nggawe sambungan sing cocog. Supaya bisa nyambung, iku gampang kaya:

  • PIN SLC papan DS3231 kudu disambungake menyang A5 saka Arduino UNO.
  • SDA saka DS3231 disambungake menyang A4 saka Arduino.
  • Vcc saka modul bakal pindhah menyang 5V saka Arduino.
  • GND menyang GND.
Elinga nginstal perpustakaan kanggo nggunakake RTC DS3231 ing Arduino IDE utawa kode ora bisa digunakake ...

Saiki sampeyan duwe sistem sing gegandhengan, sing sabanjure nulis kode sumber sketsa kanggo program kasebut. Sampeyan bisa ngowahi kode lan adaptasi karo kabutuhan, nanging sampeyan bisa miwiti kanthi njupuk tanggal saka RTC DS3231 sing nyambung karo 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
}

Lan kanggo nggunakake tanggal RTC menyang gawe jadwal sawetara tugas, kayata kanggo mateni utawa mateni lampu, kanggo mbanyoni kanthi otomatis, utawa kanggo weker muni, lsp. Elinga yen kanggo ngatasi piranti voltase sing luwih dhuwur, sampeyan bisa nggunakake transistor utawa mlayu susul-susulan:

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


Konten artikel kasebut sesuai karo prinsip kita yaiku etika editorial. Kanggo nglaporake klik kesalahan Kene.

Dadi pisanan komentar

Ninggalake komentar sampeyan

Panjenengan alamat email ora bisa diterbitake. Perangkat kothak ditandhani karo *

*

*

  1. Tanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Kontrol SPAM, manajemen komentar.
  3. Legitimasi: idin sampeyan
  4. Komunikasi data: Data kasebut ora bakal dikomunikasikake karo pihak katelu kajaba kanthi kewajiban ukum.
  5. Panyimpenan data: Database sing dianakake dening Occentus Networks (EU)
  6. Hak: Kapan wae sampeyan bisa matesi, mulihake lan mbusak informasi sampeyan.