Mục lục:

Morning Buddy: 8 bước
Morning Buddy: 8 bước

Video: Morning Buddy: 8 bước

Video: Morning Buddy: 8 bước
Video: #10 Đứng ngồi không yên trước các gương mặt tiến bước vào đại chiến quốc tế | SIÊU TRÍ TUỆ VIỆT NAM 2024, Tháng bảy
Anonim
Image
Image

Một số người có lịch trình rất bận rộn, điều này khiến bạn dễ dàng quên một hoặc hai việc. Với đồng hồ báo thức này, bạn có thể đặt nhiều báo thức để giữ cho bạn đúng lịch trình. Đồng hồ chạy 24 giờ và tất cả những gì bạn phải làm là lập trình để đồng hồ hoạt động vào các thời điểm khác nhau trong ngày phù hợp với lịch trình của bạn. Khi bạn làm điều này, thời gian mà bạn đã thiết lập sẽ bật lên trên màn hình LCD để bạn có thể kiểm tra để đảm bảo rằng chúng đúng và dùng như một lời nhắc nhở bổ sung.

Bước 1: Lên ý tưởng

Phác thảo và Vật liệu
Phác thảo và Vật liệu

Khi chúng tôi cố gắng giải quyết vấn đề, chúng tôi đã sử dụng phương pháp xương cá để đưa ra ý tưởng và kết quả là đồng hồ báo thức của chúng tôi.

Bước 2: Phác thảo và Vật liệu

Phác thảo và Vật liệu
Phác thảo và Vật liệu

Trong bước này, chúng tôi đã cố gắng lập danh sách tất cả những thứ chúng tôi nghĩ rằng chúng tôi sẽ cần cho thiết bị điện tử và vỏ ngoài. Sau đó, chúng tôi đưa ra một bản phác thảo về những gì chúng tôi muốn đồng hồ báo thức trông như thế nào và cách chúng tôi lắp ráp vỏ bên ngoài của nó.

Bước 3: Tạo vỏ ngoài

Tạo vỏ bọc ngoài
Tạo vỏ bọc ngoài
Tạo vỏ ngoài
Tạo vỏ ngoài

Đối với nguyên mẫu đầu tiên, tôi chỉ muốn xem các khớp ngón tay sẽ khớp với nhau như thế nào, vì vậy tôi đã sử dụng một hộp đựng giày và không sử dụng các phép đo chính xác.

Bước 4: Cắt Laser Vỏ ngoài

Cắt bằng laze vỏ ngoài
Cắt bằng laze vỏ ngoài

Đối với nguyên mẫu thứ hai, tôi muốn có được các phép đo chính xác và phải tạo một bản pdf để gửi tới máy cắt laser. Để làm điều này, tôi đã sử dụng trang web ứng dụng của nhà sản xuất hộp, https://boxdesigner.connectionlab.org. Trên trang web đó, sau đó tôi nhập kích thước 3-D của hộp, độ dày của vật liệu của chúng tôi, đơn vị đo lường và loại tệp tôi muốn nó tạo. Kích thước hộp là 7,5 in x 3 x 5 in và tôi sử dụng chất liệu acrylic dày 1/8 in. Các phép đo rãnh khớp ngón tay sau đó được tự động định cấu hình là 0,46875 inch. Tôi đã chọn phiên bản pdf vì đó là loại tệp mà máy cắt laser đọc và tôi muốn thực hiện một số thay đổi trong adobe đối với tệp. Tôi đã thay đổi màu đường kẻ thành màu đỏ, để máy cắt laser có thể biết để cắt chúng ra thay vì khắc hình dạng và tôi đã thêm một hộp hình chữ nhật có kích thước 3,92 inch x 1,56 inch trên những gì sẽ là mảnh trước của hộp. Tôi cũng thêm một hình chữ nhật được cắt ra với kích thước 1 inch x 0,5 inch ở phần bên phải ở phía dưới để làm lỗ mở cho dây kết nối với đồng hồ báo thức. Cuối cùng, tôi đã thêm ba lỗ tròn ở trên cùng cho hai bộ rung và nút. Các lỗ của bộ rung có đường kính 0,5 inch và độ mở của nút là 0,375 inch.

Bước 5: Kết hợp nó lại với nhau

Kết hợp nó lại với nhau
Kết hợp nó lại với nhau

Khi tất cả các mảnh đã được cắt ra, tôi sử dụng một ống tiêm và keo acrylic để dán chúng lại với nhau. Tôi giữ các mảnh lại với nhau và nhỏ keo vào giữa các rãnh để tạo các cạnh với nhau, nhưng phần trên không được dán xuống.

Bước 6: Mã

Giới thiệu:

Dự án này được viết mã bằng ngôn ngữ c ++ trên phần mềm Arduino IDE. Bộ điều khiển vi mô được sử dụng là NodeMCU với ESP8266. Đối với dự án này, chúng tôi cần một cách để giữ thời gian một cách chính xác, còi để phát ra âm thanh, một hệ thống báo động để làm cho báo thức kêu và một màn hình để hiển thị tất cả thời gian và thời gian báo thức. Để biết mã đầy đủ, hãy tham khảo liên kết này

Nhập thư viện

Điều đầu tiên, chúng ta cần nhập các thư viện cần thiết.

#include "RTClib.h"

#include "Wire.h" #include #include #include #include

Khởi tạo các biến

Tiếp theo, chúng ta cần khởi tạo các biến cho sau này, chỉ định bố cục chân cho các nút buzzer, thiết lập RTC và đặt địa chỉ I2C của màn hình LCD.

Màn hình LCD LiquidCrystal_I2C (0x27, 20, 4);

const int buzzer1 = 12; const int buzzer2 = 0; nút const int = 2; RTC_DS3231 rtc; char daysOfTheWeek [7] [12] = {"Chủ Nhật", "Thứ Hai", "Thứ Ba", "Thứ Tư", "Thứ Năm", "Thứ Sáu", "Thứ Bảy"} int starttime; int thời gian hoạt động; int prevoustime = 0; char ahours1 [3]; char amins1 [3]; int giờ1 = 0; int min1 = 0; char ahours2 [3]; char amins2 [3]; int giờ2 = 0; int min2 = 0; char ahours3 [3]; char amins3 [3]; int giờ3 = 0; int min3 = 0; int báo động = 0; int ByteReceive; ký tự nhận đượcChar; const byte numChars = 32; char ReceivedChars [numChars];

Cài đặt

Tiếp theo, chúng ta cần có một chức năng khởi động tất cả các quy trình cần thiết. Trong chức năng này, chúng ta cần khởi động màn hình LCD và in thời gian ban đầu, tạo một chức năng nhỏ hơn cung cấp thời gian thực cho RTC nếu nó chưa có và khởi động màn hình nối tiếp.

void setup () {

#ifndef ESP8266 while (! Serial); #endif if (! rtc.begin ()) {Serial.println ("Không tìm thấy RTC"); trong khi (1); } if (rtc.lostPower ()) {Serial.println ("RTC bị mất nguồn, hãy đặt thời gian!"); rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))))} lcd.init (); LCD đèn nền(); // làm cho Baklight ON. lcd.clear (); // Xóa màn hình LCD lcd.print ("00:00"); // hiển thị trên màn hình LCD sau khi tải lên mã lcd.setCursor (10, 0); lcd.print ("00:00"); lcd.setCursor (0, 1); lcd.print ("Thời gian"); lcd.setCursor (10, 1); lcd.print ("Báo thức 1"); lcd.setCursor (0, 3); lcd.print ("Báo thức 2"); lcd.setCursor (0, 2); lcd.print ("00:00"); lcd.setCursor (10, 3); lcd.print ("Báo thức 3"); lcd.setCursor (10, 2); lcd.print ("00:00"); rtc.begin (); pinMode (nút, INPUT); // Đặt chân cho nút im lặng pinMode (buzzer1, OUTPUT); // đặt chân cho đầu ra buzzer pinMode (buzzer2, OUTPUT); // đặt chân cho đầu ra của bộ rung Serial.begin (9600); Serial.println ("Thời gian đầu vào của các cảnh báo ở định dạng HHMM không có khoảng trắng ở giữa các cảnh báo"); starttime = millis () / 1000; }

Nhận dữ liệu

Bây giờ, chúng ta cần có thể nhận được thời gian báo thức. Để làm điều đó, chúng tôi đã tạo một hàm để nhận dữ liệu từ màn hình nối tiếp và lưu trữ nó trong một mảng.

void recvWithEndMarker () {

static int ndx = 0; Chuỗi timein = Serial.readString (); for (ndx = 0; timein [ndx]; ndx ++) {gotChars [ndx] = timein [ndx]; } gotChars [ndx] = '\ 0'; Serial.print (gotChars); }

Đặt báo thức

Bước tiếp theo là có thể đặt báo thức. Đây là mã cho cảnh báo 1. Đối với cảnh báo 2 và 3, quy trình tương tự được lặp lại với một vài thay đổi số.

/ * Báo động 1 * /

recvWithEndMarker (); int h, m; for (h = 0; h <2; h ++) {ahours1 [h] = gotChars [h]; } for (m = 2; m <4; m ++) {amins1 [m-2] = gotChars [m]; } ahours1 [h] = '\ 0'; amins1 [m-2] = '\ 0'; Serial.print (ahours1); Serial.print (amins1); giờ1 = atoi (ahours1); min1 = atoi (amins1); Serial.print (giờ1); Serial.print (min1);

Buzzer / Nút

Sau khi hoàn thành, chúng ta cần phải tắt chuông khi thời gian thực và thời gian báo thức bằng nhau. Cũng trong bước này, chúng tôi tạo nút thích báo lại để dừng bộ rung khi bạn giữ nó.

/ * Nút im lặng * /

int im lặng; int b; b = digitalRead (2); if (b == LOW) {im lặng = 1; } else {im lặng = 0; } / * Bắt đầu báo thức * / if (giờ == giờ1 && phút == phút1) {báo thức = 1; } else if (giờ == giờ2 && phút == phút2) {báo thức = 1; } else if (giờ == giờ3 && phút == phút3) {báo thức = 1; } else {báo động = 0; im lặng = 0; } if (báo thức == 1 && im lặng == 0) {tone (buzzer1, 4000, 1000); âm báo (buzzer2, 4000, 1000); chậm trễ (1000); noTone (buzzer1); noTone (buzzer2); chậm trễ (1000); }

Thời gian in

Cuối cùng, chúng ta cần in thời gian báo thức và thời gian thực ra màn hình LCD.

DateTime now = rtc.now ();

int giờ = (now.hour ()); int mins = (now.minute ()); / * Thời gian báo thức ở định dạng 00:00 * / lcd.setCursor (10, 0); lcd.print (ahours1); lcd.setCursor (13, 0); lcd.print (amins1); lcd.setCursor (0, 2); lcd.print (ahours2); lcd.setCursor (3, 2); lcd.print (amins2); lcd.setCursor (10, 2); lcd.print (ahours3); lcd.setCursor (13, 2); lcd.print (amins3); / * Thời gian hiển thị từ RTC * / lcd.setCursor (0, 0); lcd.print (giờ); lcd.print (":"); lcd.print (phút);

Bước 7: Điện tử

Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử

Có nhiều phần đối với thiết bị điện tử của dự án này, như đã thấy trong hóa đơn vật liệu. Hình ảnh đầu tiên là một sơ đồ của các thiết bị điện tử cuối cùng của dự án. Hình ảnh thứ hai là thiết kế điện tử cuối cùng của chúng tôi. Hình ảnh thứ ba là dự án của chúng tôi ở giữa nguyên mẫu thứ hai.

Để bắt đầu gắn NodeMCU của bạn vào đầu xa của breadboard. Sau đó, bạn sẽ cần kết nối tất cả các thiết bị điện tử khác của mình với NodeMCU và breadboard. Bắt đầu bằng cách kết nối màn hình LCD của bạn với chân D1 cho SCL và D2 cho SDA. Màn hình LCD sẽ cho phép người dùng xem thời gian hiện tại và thời gian báo thức đã đặt. Bây giờ có một dây kết nối bộ rung của bạn với chân D3 và D6. Bộ rung sẽ cho phép cảnh báo để cảnh báo người dùng khi đạt đến thời gian đã đặt. Bây giờ bạn phải đính kèm một nút để cho phép dừng báo thức. Gắn nút này vào chốt D4. Bây giờ bạn sẽ gắn Đồng hồ thời gian thực của mình vào breadboard. Lên dây cho Đồng hồ thời gian thực để nó sử dụng cùng các chân SDA và SCL được sử dụng cho màn hình LCD.

Bước 8: Cuối cùng

Cuối cùng
Cuối cùng

Nếu bạn đã làm theo thông tin được cung cấp, dự án của bạn có thể giống như hình trên. Chúng tôi chúc bạn may mắn trong nỗ lực tạo lại dự án này và khi bạn đã hoàn thành dự án của mình, chúng tôi khuyến khích bạn chia sẻ hình ảnh và nhận xét với chúng tôi trong phần bình luận. Cảm ơn bạn và chúc may mắn các nhà sản xuất đồng nghiệp.

Đề xuất: