⏰ ماژول ساعت RTC (DS3231)
ماژول RTC DS3231 چیست؟ ساعت دقیقی که تاریخ و زمان را حتی وقتی آردوینو خاموش است با باتری سکهای نگه میدارد. فرق DS3231 و DS1307، سیمبندی I2C، کتابخانهی RTClib، تنظیم ساعت و کد کامل.
RTC چیست؟
RTC یعنی Real-Time Clock یا «ساعت واقعی». آردوینو خودش ساعت ندارد: تابع millis فقط میگوید از روشن شدن چند میلیثانیه گذشته، و با هر بار خاموش شدن صفر میشود. ماژول RTC یک تراشهی ساعت با یک باتری سکهای است که تاریخ و ساعت را همیشه نگه میدارد، حتی وقتی آردوینو خاموش است. هر وقت بپرسی، میگوید الان چه سال و ماه و روز و ساعتی است.
| DS3231 | DS1307 | |
|---|---|---|
| دقت | خیلی خوب — حدود ۱ دقیقه در سال | معمولی — چند ثانیه در روز |
| دماسنج داخلی | دارد | ندارد |
| ولتاژ | ۳.۳ تا ۵ ولت | ۵ ولت |
| پیشنهاد | همین را بخر | فقط اگر ارزانتر بود |
سیمبندی (I2C)
| مشخصه | مقدار |
|---|---|
| VCC | ۵ ولت |
| GND | GND |
| SDA | A4 در آردوینو Uno |
| SCL | A5 در آردوینو Uno |
ارتباط از نوع I2C است: فقط دو سیم داده، و میشود چند ماژول (مثلاً RTC و LCD با I2C) را روی همان دو سیم گذاشت.
کد کامل با RTClib
کتابخانهی RTClib (از Adafruit) را نصب کن. این کد در شبیهساز تینکرکد فارسی هم اجرا میشود:
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
char days[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup() {
Serial.begin(9600);
rtc.begin();
if (rtc.lostPower()) {
// set the clock to the moment this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now();
Serial.print(now.year()); Serial.print('/');
Serial.print(now.month()); Serial.print('/');
Serial.print(now.day()); Serial.print(" ");
Serial.print(days[now.dayOfTheWeek()]); Serial.print(" ");
Serial.print(now.hour()); Serial.print(':');
Serial.print(now.minute()); Serial.print(':');
Serial.println(now.second());
delay(1000);
}
تنظیم ساعت: یک بار، نه هر بار
خط rtc.adjust(DateTime(F(__DATE__), F(__TIME__))) ساعت را روی لحظهی کامپایل برنامه میگذارد. آن را داخل if (rtc.lostPower()) بگذار تا فقط وقتی باتری تمام شده اجرا شود. اگر بیرون از if باشد، هر بار که آردوینو ریست شود، ساعت به عقب (به لحظهی کامپایل) برمیگردد! برای تنظیم دستی: rtc.adjust(DateTime(2026, 10, 4, 8, 30, 0)).
در شبیهساز
در مود آردوینوی شبیه ساز مدار، ماژول RTC را از جعبهابزار بیاور و SDA را به A4 و SCL را به A5 وصل کن. ساعت شبیهساز از ساعت کامپیوتر خودت شروع میشود و ثانیهبهثانیه جلو میرود؛ با adjust هم میتوانی هر تاریخی بخواهی بگذاری (مثلاً امتحان کن ساعت زنگ مدرسه درست کار میکند یا نه، بدون اینکه تا فردا صبح صبر کنی!).
اشتباههای رایج
- جابهجا بستن SDA و SCL: ماژول پیدا نمیشود. SDA ← A4، SCL ← A5.
- باتری سکهای نگذاشتن: ساعت با هر قطع برق از اول شروع میشود.
- روز هفته:
dayOfTheWeek()عدد ۰ تا ۶ میدهد و ۰ یعنی یکشنبه، نه شنبه. برای نام فارسی، آرایه را از یکشنبه شروع کن.
ایدهی پروژه
- ساعت دیجیتال با LCD یا سونسگمنت
- زنگ مدرسه یا یادآور دارو با بازر
- آبیاری خودکار گلدان در ساعت مشخص با رله
- ثبت دما و رطوبت با زمان، کنار سنسور DHT
🛒 قبل از خرید، لیست خرید قطعات الکترونیک را ببین و قطعه را اول در شبیه ساز مدار امتحان کن.
پروژههایی که از این قطعه استفاده میکنند
یاد بگیر، امتحان کن، بعد بخر
- ⚡ ماژول ساعت RTC (DS3231) را در شبیه ساز مدار آنلاین رایگان امتحان کن
- 🛒 راهنمای خرید ماژول ساعت RTC (DS3231) و قطعات الکترونیک