Mục lục:

Dự án đồng hồ báo thức Arduino: 14 bước
Dự án đồng hồ báo thức Arduino: 14 bước

Video: Dự án đồng hồ báo thức Arduino: 14 bước

Video: Dự án đồng hồ báo thức Arduino: 14 bước
Video: Arduino | Đồng Hồ Thời Gian Thực DS3231 | Cài đặt Ngày/Giờ + Báo Thức 2024, Tháng mười một
Anonim
Dự án đồng hồ báo thức Arduino
Dự án đồng hồ báo thức Arduino

Trong dự án này, chúng tôi sẽ sử dụng Arduino Uno để điều khiển màn hình LCD để hiển thị thời gian hiện tại và thời gian mà báo thức được đặt. Chúng tôi sẽ sử dụng các nút để đặt mỗi lần.

Vật liệu:

  • Arduino Uno -
  • Breadboard -
  • Jumper Wires (x13 +) -
  • Điện trở 10 kohm (x4) -
  • Màn hình LCD -
  • 7 Nút -
  • Loa Piezo -

Bước 1: Hướng dẫn kết nối

Hướng dẫn kết nối
Hướng dẫn kết nối

1. Kết nối dây jumper từ chân 5V trên Arduino với một trong các + đường ray trên breadboard.

Bước 2:

Hình ảnh
Hình ảnh

2. Kết nối dây jumper từ chân GND trên Arduino với - rail bên cạnh + rail mà bạn đã chọn trên breadboard.

Bước 3:

Hình ảnh
Hình ảnh

3. Kết nối màn hình LCD với nguồn, nối đất và chân TX (chân 1).

Bước 4:

Hình ảnh
Hình ảnh

4. Đặt 7 nút trên breadboard với các chân ngang qua khoảng trống trên breadboard.

Bước 5:

Hình ảnh
Hình ảnh

5. Đặt các điện trở 10 kohm từ thanh - có chân GND được kết nối với nó vào các chân dưới cùng bên trái của các nút.

Bước 6:

Hình ảnh
Hình ảnh

6. Đặt dây nhảy giữa chốt dưới cùng bên phải của các nút và đường ray 5V trên bảng mạch của bạn.

Bước 7:

Hình ảnh
Hình ảnh

7. Đặt các dây jumper giữa các chân 6, rồi đến 8-13 và chân trên nút mà điện trở được kết nối.

Bước 8:

Hình ảnh
Hình ảnh

8. Tiếp theo, đặt loa Piezo của bạn trên breadboard và kết nối chân 7 với chân nguồn, sau đó nối đất một điện trở 100 ohm.

Bước 9: Hướng dẫn lập trình

1. Tổng quan: Dự án này sẽ yêu cầu người dùng đặt thời gian hiện tại khi bật nguồn ban đầu trên màn hình là thời gian hiện tại và thời gian báo thức được đặt. Các nút được kết nối ở trên sẽ được sử dụng để thiết lập mỗi lần. Từ trái sang phải, chúng được đặt giờ hiện tại, đặt phút hiện tại, đặt SA hoặc CH hiện tại, đặt giờ báo thức, đặt phút báo thức, đặt báo thức SA hoặc CH. Nút cuối cùng được sử dụng để tắt tiếng báo thức khi nó phát ra.

Bước 10:

2. Điều đầu tiên chúng ta cần làm là khởi tạo biến mà chúng ta sẽ sử dụng.

// Khởi tạo các biến được sử dụngint hour = 0; // Giờ cho thời gian hiện tại int phút = 0; //

Phút cho thời gian hiện tại int second = 0; // Giây cho thời gian hiện tại

int giờ_a = 0; int // Giờ cho thời gian báo thức

phút_a = 0; // Phút cho thời gian báo thức

bool am_pm = false; // Cờ chuyển đổi AM / PM. Sai là SA, Đúng là CH

bool am_pm_a = false; // Cờ chuyển đổi AM / PM để báo thức. Sai là SA, Đúng là CH

int set_hr = 13; // Sử dụng chân 13 để đặt giờ

int set_min = 12; // Sử dụng pin 12 để đặt số nguyên phút

set_am_pm = 11; // Sử dụng pin 11 để đặt am / pm

int set_hr_a = 10; // Sử dụng chân 10 để đặt giờ cho báo thức int set_min_a = 9; // Sử dụng chân 9 để đặt phút cho báo thức int set_am_pm_a = 8; // Sử dụng pin 8 để đặt giờ sáng / chiều cho báo thức

int loa = 7; // Ghim để sử dụng cho speakerint im lặng = 6; // Ghim để dừng loa

báo động bool = sai; // Gắn cờ chuyển đổi để tiếp tục báo động

bool yên lặng = false; // Cờ hiển thị im lặng chưa được nhấn

int cur_time = 0; // Biến cho thời gian hiện tại

int etime = 0; // Biến cho thời gian đã trôi qua

Bước 11:

3. Tiếp theo, chúng ta cần thiết lập màn hình LCD và yêu cầu người dùng thiết lập thời gian hiện tại. Vì việc này chỉ cần thực hiện một lần nên chúng tôi sẽ thực hiện theo quy trình thiết lập.

void setup () {

// Thiết lập màn hình LCD

Serial.begin (9600); // Khởi tạo Serial ở 9600 baud

Serial.write (17); // Bật đèn sau

Serial.write (24); // Bật màn hình với con trỏ và không nhấp nháy

Serial.write (12); // Xóa màn hình

Serial.write (128); // Di chuyển con trỏ lên góc trên cùng bên trái // Đặt pinModes pinMode (set_hr, ĐẦU VÀO); pinMode (set_min, INPUT);

pinMode (set_am_pm, INPUT);

pinMode (set_hr_a, INPUT);

pinMode (set_min_a, INPUT);

pinMode (set_am_pm_a, INPUT);

pinMode (loa, OUTPUT);

pinMode (yên tĩnh, INPUT);

// Trên nguồn ban đầu, người dùng đặt thời gian hiện tại. Serial.print ("Đặt giờ hiện tại"); chậm trễ (2000);

Serial.write (12);

printTimes ();

cur_time = millis (); // Lưu trữ thời gian hiện tại}

Bước 12:

4. Sau đó, trong quy trình lặp lại, chúng tôi theo dõi thời gian và đọc trạng thái của nút để xem liệu người dùng có đang đặt một trong hai thời điểm hay không.

void loop () {

// Giữ thời gian

keepTime ();

// Kiểm tra xem đã đến lúc báo thức chưa!

if ((giờ == giờ_a && phút == phút_a &&! im lặng) || báo thức) {tone (loa, 2000, 500); // Phát ra âm thanh 2000 Hz ra loa trong 500 mili giây

chậm trễ (500); // Trì hoãn 500 mili giây if (! Alert) {// Nếu báo thức đang tắt, hãy bật

}

}

// Nếu người dùng tắt chuông báo thức bằng cách nhấn nút yên lặng, hãy dừng báo thức nếu (báo thức &&! Im lặng && digitalRead (im lặng)) {

báo động = false;

yên lặng = true; }

// Đặt lại báo thức nếu (! Báo thức && im lặng && phút! = Phút_a) {yên lặng = false;

}

// Kiểm tra xem các chân đặt có tăng cao hay không và nếu có, hãy tăng giá trị tương ứng nếu (digitalRead (set_hr) && giờ <12) {

giờ ++;

printTimes ();

debounce ();

}

else if (digitalRead (set_hr) && hour == 12) {giờ = 1;

printTimes ();

debounce ();

}

khác{}

if (digitalRead (set_min) && minutes <59) {

phút ++; printTimes ();

debounce ();

}

else if (digitalRead (set_min) && minutes == 59) {minutes = 0;

printTimes ();

debounce ();

}

else {} if (digitalRead (set_am_pm) && am_pm) {

am_pm = false;

printTimes ();

debounce ();

}

else if (digitalRead (set_am_pm) &&! am_pm) {am_pm = true; printTimes ();

debounce ();

}

else {} if (digitalRead (set_hr_a) && hour_a <12) {

giờ_a ++;

printTimes ();

debounce ();

}

else if (digitalRead (set_hr_a) && hour_a == 12) {giờ_a = 1;

printTimes ();

debounce ();

}

else {} if (digitalRead (set_min_a) && minutes_a <59) {

phút_a ++;

printTimes ();

debounce ();

}

else if (digitalRead (set_min) && minutes_a == 59) {minutes_a = 0;

printTimes ();

debounce ();

}

else {} if (digitalRead (set_am_pm_a) && am_pm_a) {

am_pm_a = false;

printTimes ();

debounce ();

}

else if (digitalRead (set_am_pm_a) &&! am_pm_a) {am_pm_a = true;

printTimes ();

debounce ();

}

khác{}

}

Bước 13:

5. Tại đây, bạn sẽ nhận thấy một vài chương trình con mà tôi đã tạo - debounce () và printTimes (). Debounce () được sử dụng để đảm bảo rằng chúng ta chỉ đọc các nút một lần. Vì Arduino quét hàng nghìn lần mỗi giây, nó có thể nghĩ rằng nút đã được nhấn nhiều lần khi bạn chỉ định đọc nó một lần. Debounce () sẽ đóng băng chương trình cho đến khi nút được phát hành. printTimes () cập nhật màn hình LCD, nhưng vì đó là một số lệnh, tôi đã nhập chúng một lần và sau đó có thể gọi chương trình con bất kỳ lúc nào giá trị thời gian thay đổi.

// Trong khi bất kỳ nút nào đang được nhấn, giữ nguyên chức năng này sau đó trì hoãn 250 ms.

void debounce () {

while (digitalRead (set_hr) || digitalRead (set_min) ||

digitalRead (set_am_pm) || digitalRead (set_hr_a) ||

digitalRead (set_min_a) || digitalRead (set_am_pm_a)) {} delay (250);

}

// In thời gian cập nhật nếu có bất kỳ thay đổi nào

void printTimes () {

Serial.write (12);

Serial.print ("Giờ hiện tại:");

Serial.write (148);

nếu (giờ <10) {

Serial.print ("0");

}

Serial.print (giờ);

Serial.print (":");

nếu (phút <10) {

Serial.print ("0");

}

Serial.print (phút); Serial.print (":");

if (giây <10) {

Serial.print ("0");

}

Serial.print (thứ hai);

nếu (am_pm) {

Serial.print ("PM");

}

khác{

Serial.print ("AM");

}

Serial.write (168);

Serial.print ("Đặt báo thức cho:");

Serial.write (188);

nếu (giờ_a <10) {

Serial.print ("0");

}

Serial.print (giờ_a);

Serial.print (":");

nếu (phút_a <10) {

Serial.print ("0");

}

Serial.print (phút_a);

nếu (am_pm_a) {

Serial.print ("PM");

}

khác{

Serial.print ("AM");

}

}

// Tăng các tham số thời gian void

keepTime () {

etime = millis () - cur_time;

if (etime> = 1000 && giây <59) {

thứ hai ++;

cur_time = millis ();

printTimes ();

}

else if (etime> = 1000 && giây == 59 && phút <59) {giây = 0;

phút ++;

cur_time = millis ();

printTimes ();

}

khác nếu (etime> = 1000 && giây == 59 && phút == 59 && giờ <12) {

giây = 0; phút =

0; giờ ++; cur_time =

mili (); printTimes ();

}

khác nếu (etime> = 1000 && giây == 59 && phút == 59 && giờ == 12) {

giây = 0; phút =

0; giờ = 1; am_pm =

! am_pm;

cur_time = millis ();

printTimes ();

}

khác{}

}

Bước 14:

6. Thế là xong!

Biên dịch và tải lên và bạn đã hoàn tất!

Đề xuất: