Làm đồng hồ bấm giờ tự động cho người chạy bộ, vận động viên và vận động viên thể thao

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Trong bài đăng này, chúng tôi sẽ xây dựng một đồng hồ bấm giờ tự động bắt đầu hẹn giờ khi người chạy bắt đầu chạy và đồng hồ dừng khi người chạy về cuối. Thời gian trôi qua giữa điểm bắt đầu và điểm kết thúc được hiển thị trên màn hình LCD 16 x 2.

Trước tiên, hãy bắt đầu bằng cách học cách cấu hình một mạch dừng Arduino đơn giản và cực kỳ chính xác.



Đồng hồ bấm giờ là một thiết bị đồng hồ thời gian được điều khiển thủ công được thiết kế để đo khoảng thời gian có thể đã trôi qua bắt đầu từ một thời điểm cụ thể khi nó được kích hoạt và đến thời điểm cuối cùng nó được ngừng hoạt động. Một biến thể lớn hơn của cùng một thiết bị được gọi là đồng hồ dừng được sử dụng để theo dõi hành động từ xa và thường được tìm thấy trong sân vận động thể thao, v.v.

Đồng hồ bấm giờ cơ và điện tử

Trước đó, đồng hồ bấm giờ cầm tay cơ học truyền thống phổ biến hơn và được mọi người sử dụng cho mục đích này.



Trong hệ thống cơ khí, chúng tôi có hai nút bấm để thực hiện các chức năng đồng hồ bấm giờ. Một để bắt đầu đồng hồ dừng bằng cách nhấn một lần và dừng thời gian bằng cách nhấn lại cùng một nút để ghi lại thời gian đã trôi qua .... nút thứ hai được sử dụng để đặt lại đồng hồ về 0.

Đồng hồ bấm giờ cơ học về cơ bản hoạt động thông qua sức mạnh của lò xo, đòi hỏi chu kỳ lên dây bằng tay bằng cách xoay núm có khía đã cho ở trên cùng của thiết bị đồng hồ.

Tuy nhiên, so với đồng hồ bấm giờ kỹ thuật số hiện đại, các loại đồng hồ cơ có thể được coi là thô sơ đáng kể và không chính xác trong phạm vi mili giây.

Sử dụng Arduino

Và ngày nay với sự ra đời của vi điều khiển, những chiếc đồng hồ dừng này đã trở nên cực kỳ chính xác và đáng tin cậy đến phạm vi micro giây.

Mạch đồng hồ dừng Arduino được trình bày ở đây là một trong những thiết kế hỗ trợ vi điều khiển hiện đại này có độ chính xác cao nhất có thể được mong đợi ngang bằng với các tiện ích đồng hồ dừng hiện đại thương mại.

Hãy cùng tìm hiểu cách xây dựng mạch đồng hồ dừng Arduino được đề xuất:

Bạn sẽ cần Hóa đơn vật liệu xây dựng sau:

Yêu cầu phần cứng

Tấm chắn bàn phím LCD Arduino (Mã hàng: DFR0009)

Tấm chắn bàn phím LCD Arduino (Mã hàng: DFR0009)

Một bảng Arduino ONE

Arduino UNO

Cáp USB Arduino

cáp usb arduino

Khi bạn đã có được tài liệu trên và kết nối chúng với nhau, bạn chỉ cần định cấu hình mã phác thảo nhất định sau vào bảng Arduino của mình và xem sự kỳ diệu của các chức năng đồng hồ dừng.

Mật mã

/*
Standalone Arduino StopWatch
By Conor M - 11/05/15
Modified by Elac - 12/05/15
*/
// call the necessary libraries
#include
#include
// these are the pins used on the shield for this sketch
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7)
// variables used on more than 1 function need to be declared here
unsigned long start, finished, elapsed
boolean r = false
// Variables for button debounce time
long lastButtonPressTime = 0 // the last time the button was pressed
long debounceDelay = 50 // the debounce time keep this as low as possible
void setup()
{
lcd.begin(16, 2) // inicialize the lcd (16 chars, 2 lines)
// a little introduction :)
lcd.setCursor(4, 0) // set the cursor to first character on line 1 - NOT needed (it sets automatically on lcd.begin()
lcd.print('Arduino')
lcd.setCursor(3, 1) // set the cursor to 4th character on line 2
lcd.print('StopWatch')
delay(2000) // wait 2 seconds
lcd.clear() // clear the display
lcd.print('Press select for')
lcd.setCursor(2, 1) // set the cursor to 3rd character on line 2
lcd.print('Start & Stop')
}
void loop()
{
CheckStartStop()
DisplayResult()
}
void CheckStartStop()
{
int x = analogRead (0) // assign 'x' to the Arduino's AnalogueInputs (Shield's buttons)
if (x 600 ) // if the button is SELECT
{
if ((millis() - lastButtonPressTime) > debounceDelay)
{
if (r == false)
{
lcd.clear()
lcd.setCursor(2, 0) // needed
lcd.print('Elapsed Time')
start = millis() // saves start time to calculate the elapsed time
}
else if (r == true)
{
lcd.setCursor(2, 0) // needed
lcd.print(' Final Time ')
}
r = !r
}
lastButtonPressTime = millis()
}
}
void DisplayResult()
{
if (r == true)
{
finished = millis() // saves stop time to calculate the elapsed time
// declare variables
float h, m, s, ms
unsigned long over
// MATH time!!!
elapsed = finished - start
h = int(elapsed / 3600000)
over = elapsed % 3600000
m = int(over / 60000)
over = over % 60000
s = int(over / 1000)
ms = over % 1000
// display the results
lcd.setCursor(0, 1)
lcd.print(h, 0) // display variable 'h' - the 0 after it is the
number of algorithms after a comma (ex: lcd.print(h, 2) would print
0,00
lcd.print('h ') // and the letter 'h' after it
lcd.print(m, 0)
lcd.print('m ')
lcd.print(s, 0)
lcd.print('s ')
if (h <10)
{
lcd.print(ms, 0)
lcd.print('ms ')
}
}
}

Thêm hiển thị 7 phân đoạn

Bây giờ chúng ta hãy tiến hành các chi tiết liên quan đến việc xây dựng mạch đồng hồ bấm giờ sử dụng màn hình LED 7 đoạn và Arduino. Chúng ta sẽ khám phá các khái niệm liên quan đến ngắt và IC trình điều khiển hiển thị, những điều này rất quan trọng để hiểu dự án này. Dự án này được gợi ý bởi ông Abu-Hafss, một trong những độc giả cuồng nhiệt của trang web này.

Như chúng ta đã biết Đồng hồ bấm giờ là một thiết bị giúp theo dõi khoảng thời gian ngắn từ phạm vi giờ đến mili giây (chủ yếu). Hầu hết tất cả các đồng hồ đeo tay kỹ thuật số giá rẻ đều được trang bị chức năng đồng hồ bấm giờ, nhưng không có đồng hồ nào có thể mang đến cho chúng ta niềm đam mê tự chế tạo và việc tìm kiếm một chiếc đồng hồ bấm giờ có màn hình LED 7 đoạn là điều đặc biệt.

Ông Abu-Hafss đề nghị chúng tôi thiết kế một chiếc đồng hồ bấm giờ với 4 màn hình, hai hiển thị phút và hai hiển thị giây (MM: SS). Nhưng đối với hầu hết chúng ta, nó có thể không phải là một thiết kế khả thi, vì vậy chúng tôi đã thêm hai màn hình nữa cho phạm vi mili giây để bây giờ thiết kế được đề xuất sẽ ở cấu hình MM: SS: mS.

Nếu bạn chỉ cần cấu hình MM: SS vì một lý do nào đó, bạn không cần kết nối các màn hình mili giây dải 7 và các IC điều khiển của nó, toàn bộ chức năng của mạch vẫn không bị ảnh hưởng.

Mạch:

Đồng hồ bấm giờ được đề xuất bao gồm sáu IC 4026 là trình điều khiển hiển thị bảy đoạn, sáu màn hình LED 7 đoạn, một bảng Arduino, một vài nút nhấn và một vài điện trở 10K.

Bây giờ chúng ta hãy hiểu cách kết nối IC 4026 với màn hình 7 đoạn.

Màn hình 7 đoạn có thể là màn hình cực âm phổ biến với bất kỳ màu nào. Màn hình 7 đoạn có thể dễ dàng bị ngắt bởi nguồn 5V, vì vậy điện trở 330 ohm là bắt buộc trên mỗi đoạn của màn hình.

Bây giờ chúng ta hãy xem sơ đồ chân của IC 4026:

  • Chân số 1 là đầu vào đồng hồ.
  • Chân số 2 là vô hiệu hóa đồng hồ, nó vô hiệu hóa số đếm trên màn hình nếu chân này cao.
  • Chân số 3 là cho phép hiển thị nếu chân này ở mức thấp, màn hình sẽ bị tắt và ngược lại.
  • Chân số 5 được thực hiện, trở nên cao khi IC đếm 10.
  • Các chân 6, 7, 9, 10, 11, 12, 13 là đầu ra màn hình.
  • Chân # 8 là GND.
  • Chân # 16 là Vcc.
  • Chân số 15 được đặt lại, nếu chúng ta nâng cao chân này thì số đếm sẽ chuyển thành không.
  • Các chân # 4 và # 14 không được sử dụng.

Hiển thị sơ đồ kết nối:

Sơ đồ kết nối màn hình LCD:

Bất kỳ một trong các chân GND của màn hình 7 đoạn đều có thể được kết nối với đất. IC phải được cấp nguồn từ nguồn 5V hoặc chân đầu ra 5V của Arduino.

Sơ đồ trên chỉ cho một màn hình, lặp lại tương tự cho năm màn hình khác.

Đây là phần còn lại của giản đồ:

Đồng hồ bấm giờ sử dụng Arduino với hiển thị 7 đoạn

Mạch có thể được cấp nguồn từ pin 9V. Đây là hai nút được cung cấp ở đây, một để bắt đầu thời gian và một nút khác để dừng. Bằng cách nhấn nút đặt lại trên Arduino, số lượng thời gian sẽ được đặt lại về 0 trên màn hình.

Hai nút nhấn được kết nối với chân số 2 và số 3 là chân ngắt phần cứng của vi điều khiển Arduino / Atmega328P.

Hãy hiểu ngắt là gì:

Có hai loại ngắt: ngắt phần cứng và ngắt phần mềm. Ở đây chúng tôi chỉ sử dụng ngắt phần cứng.

Ngắt là một tín hiệu đến bộ vi điều khiển, nó sẽ làm cho bộ vi điều khiển phản hồi ngay lập tức với một sự kiện.

Chỉ có hai chân ngắt phần cứng trong bảng Arduino với chân vi điều khiển ATmega328P # 2 và # 3. Arduino mega có nhiều hơn hai chân ngắt phần cứng.

Các bộ vi điều khiển không thể thực hiện hai chức năng cùng một lúc. Ví dụ kiểm tra số lần nhấn nút và đếm.

Bộ vi điều khiển không thể thực hiện đồng thời hai sự kiện, nếu chúng ta viết mã để kiểm tra việc nhấn nút và đếm số, hành động nhấn nút sẽ chỉ được phát hiện khi bộ vi điều khiển đọc đoạn mã phát hiện nhấn nút, phần còn lại (đếm số) nút không hoạt động.

Vì vậy, sẽ có độ trễ trong việc phát hiện thao tác nhấn nút và vì một số lý do nếu mã tạm thời bị dừng lại, thao tác nhấn nút có thể không bao giờ được phát hiện. Để tránh những loại vấn đề làm gián đoạn được giới thiệu.

Tín hiệu ngắt luôn được ưu tiên cao nhất, chức năng chính (các dòng mã chính) sẽ bị tạm dừng và thực hiện chức năng (một đoạn mã khác) được gán cho ngắt cụ thể đó.

Điều này rất quan trọng đối với các ứng dụng quan trọng về thời gian như đồng hồ bấm giờ hoặc hệ thống bảo mật, v.v. nơi bộ xử lý cần phải hành động ngay lập tức để phản ứng với một sự kiện.

Trong Arduino, chúng tôi chỉ định ngắt phần cứng là:

mountInterrupt (0, bắt đầu, RISING)

  • “0” có nghĩa là số ngắt 0 (trong vi điều khiển, mọi thứ đều bắt đầu từ số 0) là chân số 2.
  • “Start” là tên của hàm ngắt, bạn có thể đặt tên cho bất kỳ thứ gì ở đây.
  • “RISING” nếu chân số 2 (là chân 0) tăng cao, chức năng ngắt sẽ thực thi.

mountInterrupt (1, Stop, RISING)

  • “1” có nghĩa là số ngắt một là chân số 3.
  • 'Dừng' là tên của ngắt.

Chúng ta cũng có thể thay thế “RISING” bằng “FALLING”, bây giờ khi chân ngắt ở mức THẤP thì hàm ngắt sẽ thực thi.

Chúng ta cũng có thể thay thế “RISING” bằng “CHANGE”, bây giờ bất cứ khi nào chân ngắt đi từ cao xuống thấp hoặc thấp lên cao, chức năng ngắt sẽ thực thi.

Chức năng ngắt có thể được gán như sau:

void start () // start là tên của ngắt.

{

// chương trình ở đây

}

Hàm ngắt phải càng ngắn càng tốt và không thể sử dụng hàm delay ().

Điều đó kết luận phần cứng ngắt phần mềm liên quan đến Arduino sẽ được giải thích trong bài viết tương lai.

Bây giờ bạn biết lý do tại sao chúng tôi kết nối nút nhấn bắt đầu và dừng với các chân ngắt.

Kết nối mạch theo sơ đồ phần còn lại của mạch là tự giải thích.

Chương trình:

//----------------Program Developed by R.GIRISH---------------//
int vmin = 0
int vsec = 0
int vms = 0
boolean Run = false
const int Min = 7
const int sec = 6
const int ms = 5
const int reset_pin = 4
void setup()
{
pinMode(Min, OUTPUT)
pinMode(sec, OUTPUT)
pinMode(ms, OUTPUT)
pinMode(reset_pin, OUTPUT)
digitalWrite(Min, LOW)
digitalWrite(sec, LOW)
digitalWrite(ms, LOW)
digitalWrite(reset_pin, HIGH)
digitalWrite(reset_pin, LOW)
attachInterrupt(0, start, RISING)
attachInterrupt(1, Stop, RISING)
}
void loop()
{
if (Run)
{
vms = vms + 1
digitalWrite(ms, HIGH)
delay(5)
digitalWrite(ms, LOW)
delay(5)
if (vms == 100)
{
vsec = vsec + 1
digitalWrite(sec, HIGH)
digitalWrite(sec, LOW)
vms = 0
}
if (vsec == 60)
{
vmin = vmin + 1
digitalWrite(Min, HIGH)
digitalWrite(Min, LOW)
digitalWrite(reset_pin, HIGH)
digitalWrite(reset_pin, LOW)
vsec = 0
}
}
}
void start()
{
Run = true
}
void Stop()
{
Run = false
}
//----------------Program Developed by R.GIRISH---------------//

Bây giờ điều đó kết thúc mã.

Đồng hồ bấm giờ được phát triển đặc biệt cho vận động viên

Cuối cùng, hãy cùng tìm hiểu cách mà các khái niệm trên thực sự được nâng cấp cho các vận động viên muốn phát triển kỹ năng chạy của mình mà không phụ thuộc vào người khác để khởi động và dừng đồng hồ bấm giờ / bấm giờ cần thiết. Tốt hơn là bạn nên tự động bắt đầu đồng hồ bấm giờ bằng cách phát hiện chuyển động của bạn hơn là ai đó khởi động / dừng đồng hồ bấm giờ, điều này cũng có thể thêm thời gian phản ứng của họ.

LƯU Ý: Dự án này được thiết kế để đo thời gian từ điểm ‘A’ đến điểm ‘B’ được bao phủ bởi MỘT người dùng tại một thời điểm.

Thiết lập bao gồm hai laser được đặt ở điểm bắt đầu và điểm kết thúc, hai LDR cũng được đặt đối diện với hai mô-đun laser. Khi vận động viên ngắt tia laser ‘bắt đầu’, thời gian bắt đầu được tính toán và khi vận động viên về đích, ngắt tia laser ‘kết thúc’ và bộ đếm thời gian dừng lại và hiển thị thời gian trôi qua giữa hai điểm. Đây là phương pháp được sử dụng để đo thời gian trôi qua trong ý tưởng đề xuất.

Hãy xem xét chi tiết từng thành phần của mạch.

Các thành phần chi tiết làm việc

Mạch được giữ khá đơn giản, nó bao gồm mô-đun LCD 16 x 2, vài điện trở, hai LDR và ​​một nút nhấn.

Giao diện giữa LCD và arduino là tiêu chuẩn, chúng ta có thể tìm thấy kết nối tương tự trong nhiều dự án dựa trên LCD khác.

Hai chân tương tự A0 và A1 được sử dụng để phát hiện ngắt laser. Chân tương tự A2 được kết nối với nút nhấn được sử dụng để gắn đồng hồ bấm giờ.

Ba điện trở, hai 4,7K và một 10K là điện trở kéo xuống giúp các chân đầu vào luôn ở mức thấp.

Chiết áp 10K được cung cấp để điều chỉnh độ tương phản trong mô-đun LCD để có khả năng hiển thị tối ưu.

Mạch đề xuất đã được thiết kế với cơ chế phát hiện lỗi cho laser. Nếu bất kỳ một tia laser nào bị lỗi hoặc không được căn chỉnh đúng với LDR, nó sẽ hiển thị thông báo lỗi trên màn hình LCD.

· Nếu laser START không hoạt động, nó sẽ hiển thị “laser‘ start ’không hoạt động”

· Nếu STOP laser không hoạt động, nó sẽ hiển thị '' stop 'laser không hoạt động'

· Nếu cả hai tia laser đều không hoạt động, nó sẽ hiển thị 'Cả hai tia laser đều không hoạt động'

· Nếu cả hai tia laser đều hoạt động bình thường, nó sẽ hiển thị 'Cả hai tia laser đều hoạt động tốt'

Thông báo lỗi xuất hiện cho đến khi việc cố định hoặc căn chỉnh mô-đun laser được thực hiện đúng với LDR.

Khi bước này không có vấn đề gì, hệ thống sẽ chuyển sang chế độ chờ và hiển thị “-system standby-“. Tại thời điểm này, người dùng có thể cài đặt bằng cách nhấn nút nhấn bất kỳ lúc nào.

Một nút nhấn được nhấn, hệ thống đã sẵn sàng phát hiện chuyển động từ người dùng và hiển thị “Hệ thống đã sẵn sàng”.

Người chạy có thể cách tia laser ‘bắt đầu’ vài inch.

Nếu tia laser “bắt đầu” bị ngắt, thời gian bắt đầu được đếm và hiển thị “Thời gian đang được tính ……” Thời gian được tính ở mặt sau.

Thời gian đã trôi qua sẽ không được hiển thị cho đến khi người chạy đạt / ngắt tia laser “dừng”. Điều này là do việc hiển thị thời gian trôi qua trên màn hình LCD như đồng hồ bấm giờ truyền thống, yêu cầu một số hướng dẫn bổ sung được thực hiện trong bộ vi điều khiển, điều này làm giảm đáng kể độ chính xác của thiết lập.

LƯU Ý: Nhấn nút reset trên arduino để xóa các kết quả đọc.

Cách đặt mạch trên đường chạy:

Vui lòng sử dụng dây dày để kết nối giữa các LDR và ​​mạch arduino vì khoảng cách giữa hai mạch này có thể cách nhau vài mét và điện áp không được giảm đáng kể. Khoảng cách giữa LDR1 và LDR2 có thể tối đa là vài trăm mét.

Cách gắn LDR:

LDR phải được gắn bên trong ống đục rỗng và phần phía trước cũng phải được che phủ và chỉ tạo một lỗ có đường kính vài mm để cho phép chùm tia laze đi vào.

LDR phải được bảo vệ khỏi ánh sáng mặt trời trực tiếp vì nó không thể phân biệt với chùm tia laze và nguồn ánh sáng khác và có thể không ghi nhận chuyển động từ người dùng.

Mã chương trình:

//-------- Program developed by R.GIRISH-------//
#include
LiquidCrystal lcd(12,11,5,4,3,2)
int strt = A0
int stp = A1
int btn = A2
int M = 0
int S = 0
int mS = 0
float dly = 10.0
void setup()
{
lcd.begin(16,2)
pinMode(strt,INPUT)
pinMode(stp,INPUT)
pinMode(btn,INPUT)
}
void loop()
{
if(digitalRead(strt)==HIGH && digitalRead(stp)==HIGH)
{
lcd.setCursor(0,0)
lcd.print('Both lasers are')
lcd.setCursor(0,1)
lcd.print(' working fine')
delay(4000)
{
while(digitalRead(btn)==LOW)
{
lcd.clear()
lcd.print('-System Standby-')
lcd.setCursor(0,1)
lcd.print('Press Start btn')
delay(100)
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('System is ready')
lcd.setCursor(0,1)
lcd.print('----------------')
while(digitalRead(strt)==HIGH)
{
delay(1)
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Time is being')
lcd.setCursor(0,1)
lcd.print('Calculated......')
while(digitalRead(stp)==HIGH)
{
delay(dly)
mS = mS+1
if(mS==100)
{
mS=0
S = S+1
}
if(S==60)
{
S=0
M = M+1
}
}
while(true)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print(M)
lcd.print(':')
lcd.print(S)
lcd.print(':')
lcd.print(mS)
lcd.print(' (M:S:mS)')
lcd.setCursor(0,1)
lcd.print('Press Reset')
delay(1000)
}
}
}
if(digitalRead(strt)==HIGH && digitalRead(stp)==LOW)
{
lcd.setCursor(0,0)
lcd.print(''Stop' laser is')
lcd.setCursor(0,1)
lcd.print(' not working')
delay(100)
}
if(digitalRead(strt)==LOW && digitalRead(stp)==HIGH)
{
lcd.setCursor(0,0)
lcd.print(''Start' laser is')
lcd.setCursor(0,1)
lcd.print(' not working')
delay(100)
}
if(digitalRead(strt)==LOW && digitalRead(stp)==LOW)
{
lcd.setCursor(0,0)
lcd.print('Both lasers are')
lcd.setCursor(0,1)
lcd.print(' not working')
delay(100)
}
lcd.clear()
}
//-------- Program developed by R.GIRISH-------//

Nguyên mẫu của tác giả:

Nâng cấp với Tiện ích hẹn giờ tách

Mạch đồng hồ bấm giờ tự động được đề xuất với bộ đếm thời gian phân tách là một phần mở rộng của mạch Đồng hồ bấm giờ tự động, trong đó đồng hồ bấm giờ theo dõi thời gian tự động ngay khi người chạy một mình rời điểm bắt đầu và bộ đếm thời gian dừng lại và hiển thị thời gian đã trôi qua khi người chạy đến điểm kết thúc.

Giới thiệu

Dự án này được gợi ý bởi một trong những độc giả cuồng nhiệt của trang web này, ông Andrew Walker.

Trong dự án này, chúng tôi sẽ giới thiệu thêm 4 LDR để đo thời gian tách nhóm của người chạy đơn. Tổng cộng có 6 LDR, tất cả chúng có thể được đặt trong đường chạy với khoảng cách đồng đều giữa chúng hoặc tùy thuộc vào hoàn cảnh và sự lựa chọn của người dùng.

Hầu hết phần cứng được giữ nguyên ngoại trừ việc bổ sung 4 LDR, nhưng mã đã được sửa đổi rất nhiều.

Sơ đồ Sơ đồ Hiển thị Thời gian Phân chia:

Đồng hồ bấm giờ tự động với thời gian phân chia

Mạch trên bao gồm ít thành phần và thân thiện với người mới bắt đầu. Không cần giải thích gì thêm, chỉ cần đấu dây theo sơ đồ mạch.

Cách đấu dây LDR:

LDR 2 được hiển thị trên sơ đồ mạch chính kết nối thêm 4 LDR song song như trong sơ đồ trên.

Sơ đồ bố trí:

Trên đây là cách sắp xếp cơ bản về cách đặt tia laser. Xin lưu ý rằng khoảng cách giữa các LDR có thể được người dùng lựa chọn tùy thuộc vào độ dài đường ray.

Chương trình:

//------------Developed By R.Girish-------//
#include
LiquidCrystal lcd(12,11,5,4,3,2)
const int start = A2
const int strt = A0
const int END = A1
boolean y = true
boolean x = true
unsigned int s1 = 0
unsigned int s2 = 0
unsigned int s3 = 0
unsigned int s4 = 0
unsigned int s5 = 0
unsigned int m1 = 0
unsigned int m2 = 0
unsigned int m3 = 0
unsigned int m4 = 0
unsigned int m5 = 0
unsigned int ms1 = 0
unsigned int ms2 = 0
unsigned int ms3 = 0
unsigned int ms4 = 0
unsigned int ms5 = 0
unsigned int S = 0
unsigned int M = 0
unsigned int mS = 0
unsigned int count = 0
void setup()
{
lcd.begin(16,2)
pinMode(start, INPUT)
pinMode(strt, INPUT)
pinMode(END, INPUT)
if(digitalRead(strt) == LOW)
{
while(true)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Start Laser is')
lcd.setCursor(0,1)
lcd.print(' not working')
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Please align the')
lcd.setCursor(0,1)
lcd.print('lasers properly')
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('and press reset.')
delay(2500)
}
}
if(digitalRead(END) == LOW)
{
while(true)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('All 5 lasers')
lcd.setCursor(0,1)
lcd.print('are misaligned')
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Please align the')
lcd.setCursor(0,1)
lcd.print('lasers properly')
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('and press reset.')
delay(2500)
}
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('-System Standby-')
lcd.setCursor(0,1)
lcd.print('Press Start btn')
if(digitalRead(start) == LOW)
{
while(x)
{
if(digitalRead(start) == HIGH)
{
x = false
}
}
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('System is ready')
lcd.setCursor(0,1)
lcd.print('----------------')
while(y)
{
if(digitalRead(strt) == LOW)
{
y = false
}
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Time is being')
lcd.setCursor(0,1)
lcd.print('Calculated....')
mS = 12
}
void loop()
{
delay(1)
mS = mS + 1
if(mS==1000)
{
mS=0
S = S+1
}
if(S==60)
{
S=0
M = M+1
}
if(digitalRead(END) == LOW)
{
count = count + 1
if(count == 1)
{
ms1 = mS
s1 = S
m1 = M
delay(500)
}
if(count == 2)
{
ms2 = mS
s2 = S
m2 = M
delay(500)
}
if(count == 3)
{
ms3 = mS
s3 = S
m3 = M
delay(500)
}
if(count == 4)
{
ms4 = mS
s4 = S
m4 = M
delay(500)
}
if(count == 5)
{
ms5 = mS
s5 = S
m5 = M
Display()
}
}
}
void Display()
{
ms1 = ms1 + 500
ms2 = ms2 + 500
ms3 = ms3 + 500
ms4 = ms4 + 500
ms5 = ms5 + 500
if(ms1 >= 1000)
{
ms1 = ms1 - 1000
s1 = s1 + 1
if(s1 >= 60)
{
m1 = m1 + 1
}
}
if(ms2 >= 1000)
{
ms2 = ms2 - 1000
s2 = s2 + 1
if(s2 >= 60)
{
m2 = m2 + 1
}
}
if(ms3 >= 1000)
{
ms3 = ms3 - 1000
s3 = s3 + 1
if(s3 >= 60)
{
m3 = m3 + 1
}
}
if(ms4 >= 1000)
{
ms4 = ms4 - 1000
s4 = s4 + 1
if(s4 >= 60)
{
m4 = m4 + 1
}
}
if(ms5 >= 1000)
{
ms5 = ms5 - 1000
s5 = s5 + 1
if(s5 >= 60)
{
m5 = m5 + 1
}
}
while(true)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Spilt 1)')
lcd.print(m1)
lcd.print(':')
lcd.print(s1)
lcd.print(':')
lcd.print(ms1)
lcd.setCursor(0,1)
lcd.print('Split 2)')
lcd.print(m2)
lcd.print(':')
lcd.print(s2)
lcd.print(':')
lcd.print(ms2)
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Split 3)')
lcd.print(m3)
lcd.print(':')
lcd.print(s3)
lcd.print(':')
lcd.print(ms3)
lcd.setCursor(0,1)
lcd.print('Split 4)')
lcd.print(m4)
lcd.print(':')
lcd.print(s4)
lcd.print(':')
lcd.print(ms4)
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Split 5)')
lcd.print(m5)
lcd.print(':')
lcd.print(s5)
lcd.print(':')
lcd.print(ms5)
lcd.setCursor(0,1)
lcd.print('---Press Reset--')
delay(2500)
}
}
//------------Developed By R.Girish-------//

Cách vận hành Đồng hồ bấm giờ tự động này:

• Sau khi thiết lập hoàn tất, bật nguồn laser trước rồi bật mạch Arduino tiếp theo.
• Nếu tất cả các tia laser được căn chỉnh chính xác với LDR, màn hình sẽ không hiển thị thông báo lỗi. Nếu có, hãy căn chỉnh chúng đúng cách.
• Bây giờ mạch hiển thị “Hệ thống ở chế độ chờ”. Bây giờ nhấn nút “bắt đầu” và nó sẽ hiển thị “Hệ thống đã sẵn sàng”.
• Tại thời điểm này khi người chơi solo ngắt chùm ánh sáng LDR 1, bộ đếm thời gian bắt đầu và nó hiển thị “Thời gian đang được tính….”
• Ngay sau khi người chơi đạt đến điểm kết thúc, tức là LDR 6, bộ đếm thời gian dừng lại và nó hiển thị thời gian ngắt 5 được ghi lại bởi mạch.
• Người dùng phải nhấn nút reset trên arduino để đặt lại bộ đếm thời gian.
Tại sao Đồng hồ bấm giờ tự động này không thể hiển thị thời gian trực tiếp trên màn hình như đồng hồ bấm giờ truyền thống (mà lại hiển thị văn bản tĩnh “Thời gian đang được tính….”)?
Để hiển thị thời gian trong thời gian thực, Arduino phải thực hiện các hướng dẫn bổ sung cho màn hình LCD. Điều này sẽ tạo thêm độ trễ vài micro giây đến vài mili giây cho đoạn mã theo dõi thời gian chính, dẫn đến kết quả không chính xác.

Nếu có thắc mắc gì thêm vui lòng bày tỏ qua phần bình luận.




Trước: Bảng dữ liệu Arduino LCD KeyPad Shield (Mã hàng: DFR0009) Tiếp theo: Mạch tạo ánh sáng RGB ngẫu nhiên Arduino