Arduino Đồng hồ 7 đoạn

Trong hướng dẫn này, chúng ta sẽ học cách làm đồng hồ hiển thị 7 đoạn bằng Arduino. Cụ thể, chúng ta sẽ học hai trường hợp:

Bạn cũng có thể sử dụng mô-đun RTC DS1307 thay cho mô-đun RTC DS3231 bằng cách thay đổi một dòng mã. Xem DS3231 so với DS1307

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×TM1637 4-digit 7-segment Display
1×Real-Time Clock DS3231 Module
1×Alternatively, Real-Time Clock DS1307 Module
1×CR2032 battery
1×breadboard
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về các mô-đun màn hình TM1637, DS3231 và DS1307 RTC

Nếu bạn chưa biết về màn hình 7 đoạn TM1637, DS3231 và DS1307 (các chân cắm, cách hoạt động, cách lập trình ...), hãy tìm hiểu về chúng trong các bài hướng dẫn sau:

Cài đặt các thư viện TM1637 và RTC

  • Đi tới biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
  • Tìm kiếm “TM1637”, sau đó tìm thư viện TM1637Display của Avishay Orpaz.
  • Nhấp vào nút Cài đặt.
thư viện hiển thị 7 đoạn 4 chữ số tm1637 cho Arduino
  • Tìm kiếm “RTClib”, sau đó tìm thư viện RTC của Adafruit. Thư viện này hoạt động với cả DS3231 và DS1307.
  • Nhấn nút Cài đặt để cài đặt thư viện RTC.
thư viện rtc cho Arduino
  • Bạn có thể được yêu cầu cài đặt thêm một số phụ thuộc thư viện khác.
  • Nhấn nút Cài đặt Tất cả để cài đặt toàn bộ các phụ thuộc thư viện.
thư viện phụ thuộc rtc cho Arduino

Sơ đồ đấu dây

  • Sơ đồ kết nối giữa Arduino, màn hình hiển thị 4 chữ số 7 đoạn TM1637 và mô-đun DS3231 RTC.
sơ đồ nối dây Arduino ds3231 và hiển thị 7 đoạn

This image is created using Fritzing. Click to enlarge image

  • Sơ đồ nối giữa Arduino, màn hình 7-segment TM1637 4 chữ số và mô-đun DS1307 RTC.
sơ đồ nối dây Arduino ds1307 với màn hình hiển thị 7 đoạn

This image is created using Fritzing. Click to enlarge image

Mã Arduino - Hiển thị phút và giây trên màn hình 7 đoạn

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-7-segment-clock */ #include <TM1637Display.h> #include <RTClib.h> // define the connections pins #define CLK 9 #define DIO 10 // create a display object of type TM1637Display TM1637Display display = TM1637Display(CLK, DIO); RTC_DS1307 rtc; // RTC_DS3231 rtc; // uncomment this line and comment the above line if using DS3231 module unsigned long time_m = 0; // the variable to store minute unsigned long time_s = 0; // the variable to store second unsigned long last_s = 0; // the variable to store the last updated second void setup() { Serial.begin(9600); display.clear(); display.setBrightness(7); // set the brightness to 7 (0:dimmest, 7:brightest) // SETUP RTC MODULE if (!rtc.begin()) { Serial.println("Couldn't find RTC"); Serial.flush(); while (true) ; } // automatically sets the RTC to the date & time on PC this sketch was compiled rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } void loop() { DateTime now = rtc.now(); time_m = now.minute(); time_s = now.second(); if (time_s != last_s) { // only update if changed unsigned long time = time_m * 100 + time_s; display.showNumberDecEx(time, 0b11100000, false, 4, 0); Serial.print(time_m); Serial.print(":"); Serial.println(time_s); last_s = time_s; } }

Hướng dẫn từng bước

  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấp nút Tải lên trên Arduino IDE để tải mã lên Arduino
  • Kiểm tra kết quả trên Serial Monitor và màn hình TM1637.

Giải thích mã nguồn

Đọc lời giải thích theo từng dòng trong các chú thích của mã nguồn!

Nếu bạn muốn sử dụng mô-đun DS1307 RTC thay cho mô-đun DS3231 RTC, bạn chỉ cần bỏ chú thích một dòng được chỉ định trong mã nguồn.

Mã Arduino - Hiển thị giờ và phút trên màn hình 7-segment

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-7-segment-clock */ #include <TM1637Display.h> #include <RTClib.h> // define the connections pins #define CLK 9 #define DIO 10 // create a display object of type TM1637Display TM1637Display display = TM1637Display(CLK, DIO); RTC_DS1307 rtc; // RTC_DS3231 rtc; // uncomment this line and comment the above line if using DS3231 module unsigned long time_h = 0; // the variable to store hour unsigned long time_m = 0; // the variable to store minute unsigned long last_m = 0; // the variable to store the last updated hour void setup() { Serial.begin(9600); display.clear(); display.setBrightness(7); // set the brightness to 7 (0:dimmest, 7:brightest) // SETUP RTC MODULE if (!rtc.begin()) { Serial.println("Couldn't find RTC"); Serial.flush(); while (true) ; } // automatically sets the RTC to the date & time on PC this sketch was compiled rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } void loop() { DateTime now = rtc.now(); time_h = now.hour(); time_m = now.minute(); if (time_m != last_m) { // only update if changed unsigned long time = time_h * 100 + time_m; display.showNumberDecEx(time, 0b11100000, false, 4, 0); Serial.print(time_h); Serial.print(":"); Serial.println(time_m); last_m = time_m; } }

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.