Ang pagtatayo ng isang orasan na may isang Arduino, isang display ng OLED, at ang module ng DS1307 Real-Time Clock (RTC) ay isang masaya at praktikal na proyekto. Ang module ng DS1307 RTC ay nagpapanatili ng tumpak na oras kahit na ang Arduino ay pinapagana, habang ang OLED ay nagbibigay ng isang makinis na interface para sa pagpapakita ng kasalukuyang oras. Ang tutorial na ito ay gagabay sa iyo sa pamamagitan ng proseso ng hakbang -hakbang.
Ano ang kakailanganin mo
- Lupon ng Arduino (hal., uno, mega, nano)
- 0.91 "OLED display (Interface ng I2C)
- DS1307 RTC Module
- Mga wire ng tinapay at jumper
- Isang computer na may naka -install na Arduino IDE
- Mga Aklatan: Adafruit SSD1306, ADAFRUIT GFX, at RTCLIB
Hakbang 1: Ang mga kable ng mga sangkap
OLED Display Wiring (I2C)
OLED PIN | Arduino Pin |
---|---|
VCC | 5v |
Gnd | Gnd |
SDA | A4 |
SCL | A5 |
DS1307 RTC Module Wiring (I2C)
RTC PIN | Arduino Pin |
---|---|
VCC | 5v |
Gnd | Gnd |
SDA | A4 |
SCL | A5 |
Tandaan: Kung gumagamit ng isang Arduino board na may nakalaang SDA at SCL pin (e.g., mega), ikonekta ang OLED at RTC SDA/SCL pin sa mga iyon.
Hakbang 2: Pag -install ng mga kinakailangang aklatan
Upang gumana sa OLED display at DS1307 RTC, kailangan mo ang mga sumusunod na aklatan:
- Adafruit SSD1306 (Para kay Oled)
- Adafruit GFX (Graphics Library para sa OLED)
- Rtclib (para sa pag -andar ng RTC)
Pag -install ng mga aklatan
- Buksan ang Arduino IDE.
- Pumunta sa Sketch> Isama ang Library> Pamahalaan ang mga aklatan.
- Maghanap at mag -install:
- "Adafruit SSD1306"
- "Adafruit GFX Library"
- "Rtclib"
Hakbang 3: Pag -upload ng code
Narito ang code upang ipakita ang kasalukuyang oras sa OLED gamit ang DS1307 RTC module:
Halimbawa ng code
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
// OLED display width and height
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
// Create an instance of the display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Create an instance of the RTC
RTC_DS1307 rtc;
void setup() {
Serial.begin(9600);
// Initialize the OLED display
if (!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
// Initialize the RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Check if the RTC is running
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running! Setting the time...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now(); // Get the current time
// Clear the display
display.clearDisplay();
// Display the time
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print(now.hour(), DEC);
display.print(":");
if (now.minute() < 10) {
display.print("0");
}
display.print(now.minute(), DEC);
// Display the date
display.setTextSize(1);
display.setCursor(0, 20);
display.print(now.day(), DEC);
display.print("/");
display.print(now.month(), DEC);
display.print("/");
display.print(now.year(), DEC);
// Show the display buffer
display.display();
delay(1000); // Update every second
}
Hakbang 4: Pag -aayos ng oras
Kung ang RTC ay hindi tumatakbo o ang oras ay kailangang ma -update, ang sumusunod na linya sa setup()
Ang pag -andar ay nagtatakda ng RTC sa kasalukuyang oras:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
-
F(__DATE__)
atF(__TIME__)
ay macros na awtomatikong itinakda ang petsa at oras mula sa iyong computer kapag nai -upload ang code.
Upang manu -manong magtakda ng isang tukoy na oras, gamitin:
rtc.adjust(DateTime(2025, 1, 1, 12, 0, 0)); // YYYY, MM, DD, HH, MM, SS
Hakbang 5: Pagpapasadya ng display
Maaari mong ipasadya ang pagpapakita ng orasan sa pamamagitan ng:
-
Pagbabago ng laki ng teksto: Gumamit
display.setTextSize()
Upang ayusin ang laki ng font. - Pagdaragdag ng mga graphic: Gamitin ang Adafruit GFX Library upang gumuhit ng mga hugis tulad ng mga linya o mga parihaba.
- Oras ng pag -format: Magdagdag ng AM/PM o 24 na oras na format kung kinakailangan.
Halimbawa: Pagdaragdag ng AM/PM
int hour = now.hour();
String period = "AM";
if (hour >= 12) {
period = "PM";
if (hour > 12) hour -= 12;
}
if (hour == 0) hour = 12;
display.print(hour);
display.print(":");
if (now.minute() < 10) {
display.print("0");
}
display.print(now.minute());
display.print(" ");
display.print(period);
Pag -aayos
-
Hindi ipinapakita si Oled:
- Tiyakin ang mga tugma ng address ng I2C (karaniwang
0x3C
o0x3D
). - Suriin ang mga koneksyon sa mga kable.
- Tiyakin ang mga tugma ng address ng I2C (karaniwang
-
Hindi natagpuan ang RTC:
- Patunayan ang mga koneksyon sa SDA at SCL.
- Tiyakin na ang baterya ng RTC ay ipinasok nang tama.
-
Maling Oras:
- Gumamit
rtc.adjust()
upang itakda ang tamang oras.
- Gumamit
Mga Aplikasyon
- DIY desk orasan
- Timers at alarma
- Ang orasan na pinagana ng IoT na may karagdagang mga sensor
- Mga proyektong pang -edukasyon
Konklusyon
Sa pamamagitan ng pagsasama ng Arduino, isang 0.91 "OLED, at ang DS1307 RTC, maaari kang lumikha ng isang tumpak at biswal na nakakaakit na orasan. Sa ilang mga pag -tweak, maaari mong ipasadya ang orasan upang umangkop sa iyong mga pangangailangan o isama ito sa mas malaking proyekto. Eksperimento sa mga karagdagang tampok Tulad ng mga alarma o pag -synchronise ng internet upang dalhin ang iyong proyekto sa susunod na antas!