러너, 운동 선수 및 스포츠맨을위한 자동 스톱워치 만들기

문제를 제거하기 위해 도구를 사용해보십시오





이 포스트에서는 러너가 뛰기 시작하면 자동으로 타이머를 시작하고 러너가 끝에 도달하면 타이머가 중지되는 스톱워치를 구성 할 것입니다. 시작점과 끝점 사이의 경과 시간이 16 x 2 LCD에 표시됩니다.

먼저 간단하고 매우 정확한 Arduino 스톱워치 회로를 구성하는 방법을 배우는 것으로 시작하겠습니다.



스톱워치는 활성화 된 특정 시점부터 마지막으로 비활성화 된 시간까지 경과했을 수있는 시간을 측정하기 위해 설계된 수동 제어 시간 시계 장치입니다. 동일한 장치의 더 큰 변형이라고합니다. 원거리에서 동작을 모니터링하는 데 사용되며 일반적으로 스포츠 경기장 등에서 볼 수있는 정지 시계입니다.

기계식 대 전자식 스톱워치

이전에는 전통적인 기계식 핸드 헬드 스톱워치가 더 일반적이었으며 모든 사람들이 목적으로 사용했습니다.



기계 시스템에는 스톱워치 기능을 실행하기위한 두 개의 누르기 버튼이 있습니다. 하나는 한 번 눌러 중지 시계를 시작하고 경과 시간을 기록하기 위해 동일한 버튼을 다시 한 번 눌러 시간을 중지하는 데 사용됩니다. 두 번째 버튼은 시계를 다시 0으로 재설정하는 데 사용되었습니다.

기계식 스톱 시계는 기본적으로 스프링 파워를 통해 작동했으며, 시계 장치 상단에있는 주어진 널링 손잡이를 돌려 수동으로 감는 시간이 필요했습니다.

그러나 현대 디지털 스톱워치에 비해 기계식 유형은 밀리 초 범위에서 상당히 원시적이고 부정확 한 것으로 간주 될 수 있습니다.

Arduino 사용

그리고 오늘날 마이크로 컨트롤러의 출현으로 이러한 스톱워치는 마이크로 초 범위까지 매우 정확하고 신뢰할 수있게되었습니다.

여기에 제시된 Arduino 스톱워치 회로는 가장 정확한 최신 마이크로 컨트롤러 구동 설계 중 하나이며 상용 현대 스톱워치 장치와 동등 할 것으로 예상 할 수 있습니다.

제안 된 Arduino 스톱 클럭 회로를 구축하는 방법을 알아 보겠습니다.

건설을 위해 다음과 같은 BOM이 필요합니다.

필요한 하드웨어

Arduino LCD KeyPad Shield (SKU : DFR0009)

Arduino LCD KeyPad Shield (SKU : DFR0009)

Arduino ONE 보드

Arduino UNO

Arduino USB 케이블

arduino usb 케이블

위의 자료를 획득하고 서로 연결하면 다음과 같은 스케치 코드를 Arduino 보드에 구성하고 스톱 클럭 기능의 마법을 확인하는 것입니다.

코드

/*
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 ')
}
}
}

7 세그먼트 디스플레이 추가

이제 7 세그먼트 LED 디스플레이와 아두 이노를 이용한 스톱워치 회로 구성에 대해 자세히 알아 보겠습니다. 이 프로젝트를 이해하는 데 중요한 인터럽트 및 디스플레이 드라이버 IC와 관련된 개념을 탐색 할 것입니다. 이 프로젝트는이 웹 사이트의 열렬한 독자 중 한 명인 Mr Abu-Hafss가 제안했습니다.

이미 알고 있듯이 스톱워치는 몇 시간에서 밀리 초 범위 (대부분)의 짧은 시간을 추적하는 데 도움이되는 장치입니다. 스톱워치 기능을 갖춘 거의 모든 값싼 디지털 손목 시계이지만, 어느 시계도 우리 자신을 위해 하나를 만드는 열정을 줄 수 없으며 7 세그먼트 LED 디스플레이가있는 스톱워치를 찾는 것은 예외적입니다.

Abu-Hafss는 4 개의 디스플레이, 2 개는 분, 2 개는 초 (MM : SS) 구성으로 구성된 스톱워치를 설계 할 것을 제안했습니다. 그러나 우리 대부분에게는 실현 가능한 설계가 아닐 수 있으므로 밀리 초 범위에 대해 두 개의 디스플레이를 더 추가 했으므로 이제 제안 된 설계는 MM : SS : mS 구성이됩니다.

어떤 이유로 MM : SS 구성 만 필요한 경우 밀리 초 범위의 7 세그먼트 디스플레이와 해당 드라이버 IC를 연결할 필요가없는 경우 회로의 전체 기능은 여전히 ​​영향을받지 않습니다.

회로 :

제안 된 스톱워치는 7 세그먼트 디스플레이 드라이버 인 6 개의 IC 4026, 6 개의 7 세그먼트 LED 디스플레이, 1 개의 Arduino 보드, 2 개의 푸시 버튼 및 2 개의 10K 저항으로 구성됩니다.

이제 IC 4026을 7 세그먼트 디스플레이에 연결하는 방법을 이해하겠습니다.

7 세그먼트 디스플레이는 모든 색상의 일반적인 음극 디스플레이가 될 수 있습니다. 7 세그먼트 디스플레이는 5V 공급으로 쉽게 죽을 수 있으므로 디스플레이의 각 세그먼트에 330 옴 저항이 필수입니다.

이제 IC 4026의 핀 다이어그램을 보겠습니다.

  • 핀 # 1은 클럭 입력입니다.
  • 핀 # 2는 클럭 비활성화이며이 핀이 높으면 디스플레이에 카운트를 비활성화합니다.
  • 핀 # 3은이 핀이 낮 으면 디스플레이가 꺼지고 그 반대의 경우도 마찬가지입니다.
  • 핀 # 5는 캐리 아웃되며 IC가 10을 카운트 할 때 높아집니다.
  • 핀 6, 7, 9, 10, 11, 12, 13은 디스플레이 출력입니다.
  • 핀 # 8은 GND입니다.
  • 16 번 핀은 Vcc입니다.
  • 15 번 핀이 리셋되고,이 핀을 높이면 카운트가 0으로 바뀝니다.
  • 핀 # 4 및 # 14는 사용되지 않습니다.

디스플레이 연결 다이어그램 :

LCD 디스플레이 연결 다이어그램 :

7 세그먼트 디스플레이의 GND 핀 중 하나를 접지에 연결할 수 있습니다. IC는 5V 전원 또는 Arduino의 5V 출력 핀에서 전원을 공급 받아야합니다.

하나의 디스플레이에 대한 위의 회로도는 5 개의 다른 디스플레이에 대해서도 동일하게 반복합니다.

나머지 회로도는 다음과 같습니다.

7 세그먼트 디스플레이가있는 Arduino를 사용하는 스톱워치

회로는 9V 배터리로 전원을 공급받을 수 있습니다. 여기에는 시간을 시작하기위한 것과 중지를위한 두 개의 버튼이 있습니다. 아두 이노의 리셋 버튼을 누르면 시간 카운트가 0으로 리셋됩니다.

두 개의 푸시 버튼은 Arduino / Atmega328P 마이크로 컨트롤러의 하드웨어 인터럽트 인 핀 # 2와 # 3에 연결됩니다.

인터럽트가 무엇인지 이해합시다.

인터럽트에는 하드웨어 인터럽트와 소프트웨어 인터럽트의 두 가지 유형이 있습니다. 여기서는 하드웨어 인터럽트 만 사용합니다.

인터럽트는 마이크로 컨트롤러에 대한 신호로, 마이크로 컨트롤러가 이벤트에 즉시 응답하도록합니다.

ATmega328P 마이크로 컨트롤러 핀 # 2 및 # 3이있는 Arduino 보드에는 하드웨어 인터럽트 핀이 두 개뿐입니다. Arduino mega에는 두 개 이상의 하드웨어 인터럽트 핀이 있습니다.

마이크로 컨트롤러는 동시에 두 가지 기능을 수행 할 수 없습니다. 예를 들어 버튼 누름 확인 및 숫자 계산.

마이크로 컨트롤러는 동시에 두 개의 이벤트를 실행할 수 없습니다. 버튼 누름을 확인하고 숫자를 계산하는 코드를 작성하면 마이크로 컨트롤러가 버튼 누름 감지 코드를 읽을 때만 버튼 누름이 감지되며 나머지 시간 (숫자 계산) 버튼이 작동하지 않습니다.

따라서 버튼 누름 감지가 지연되고 어떤 이유로 코드가 일시적으로 중지되면 버튼 누름이 감지되지 않을 수 있습니다. 이러한 종류의 문제를 피하기 위해 인터럽트가 도입되었습니다.

인터럽트 신호에는 항상 가장 높은 우선 순위가 주어지며, 주요 기능 (코드의 주요 라인)이 중지되고 해당 특정 인터럽트에 할당 된 (다른 코드 부분) 기능을 실행합니다.

이는 프로세서가 이벤트에 응답하여 즉각적인 조치를 취해야하는 스톱워치 또는 보안 시스템 등과 같이 시간이 중요한 애플리케이션에 매우 중요합니다.

Arduino에서는 하드웨어 인터럽트를 다음과 같이 할당합니다.

attachInterrupt (0, 시작, 상승)

  • “0”은 핀 # 2 인 인터럽트 번호 0 (마이크로 컨트롤러에서는 모든 것이 0부터 시작)을 의미합니다.
  • 'start'는 인터럽트 기능의 이름이며 여기에서 이름을 지정할 수 있습니다.
  • 'RISING'핀 # 2 (인터럽트 제로)가 하이가되면 인터럽트 기능이 실행됩니다.

attachInterrupt (1, 중지, 상승)

  • “1”은 핀 # 3 인 인터럽트 번호 1을 의미합니다.
  • 'Stop'은 인터럽트의 이름입니다.

또한 'RISING'을 'FALLING'으로 대체 할 수 있습니다. 이제 인터럽트 핀이 LOW가되면 인터럽트 기능이 실행됩니다.

'RISING'을 'CHANGE'로 대체 할 수도 있습니다. 이제 인터럽트 핀이 하이에서 로우로 또는 로우에서 하이로 갈 때마다 인터럽트 기능이 실행됩니다.

인터럽트 기능은 다음과 같이 할당 할 수 있습니다.

void start () // start는 인터럽트의 이름입니다.

{

// 여기에서 프로그램

}

인터럽트 함수는 가능한 짧아야하며 delay () 함수는 사용할 수 없습니다.

이것으로 Arduino와 관련된 하드웨어 인터럽트 소프트웨어 인터럽트는 향후 기사에서 설명 될 것입니다.

이제 시작 및 중지 푸시 버튼을 연결하여 핀을 차단하는 이유를 알았습니다.

다이어그램에 따라 회로를 연결하십시오. 나머지 회로는 설명이 필요하지 않습니다.

프로그램:

//----------------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---------------//

이제 코드를 마칩니다.

운동 선수를 위해 특별히 개발 된 스톱워치

마지막으로, 타이머 / 스톱워치를 시작하고 중지하기 위해 다른 사람에게 의존하지 않고 달리기 기술을 개발하려는 운동 선수를 위해 위의 컨셉 캠을 실제로 업그레이드하는 방법을 알아 보겠습니다. 누군가가 스톱워치를 시작 / 중지하는 것보다 움직임을 감지하여 타이머를 자동으로 시작하는 것이 더 낫습니다.이 경우 반응 시간도 추가 될 수 있습니다.

참고 :이 프로젝트는 한 번에 한 명의 사용자가 다루는 'A'지점에서 'B'지점까지의 시간을 측정하도록 설계되었습니다.

설정은 시작점과 끝점에 배치 된 두 개의 레이저로 구성되며 두 개의 LDR도 두 개의 레이저 모듈 반대쪽에 배치됩니다. 선수가 '시작'레이저를 중단하면 시간이 계산되기 시작하고 선수가 끝에 도달하면 '종료'레이저를 중단하고 타이머가 중지되고 두 지점 사이의 경과 시간을 표시합니다. 제안 된 아이디어에서 경과 시간을 측정하는 방법입니다.

회로의 모든 구성 요소를 자세히 살펴 보겠습니다.

구성 요소 작업 세부 정보

회로는 매우 간단하게 유지되며 16 x 2 LCD 모듈, 몇 개의 저항, 두 개의 LDR 및 푸시 버튼으로 구성됩니다.

LCD와 arduino 간의 인터페이스는 표준이며 다른 많은 LCD 기반 프로젝트에서 유사한 연결을 찾을 수 있습니다.

두 개의 아날로그 핀 A0 및 A1은 레이저 중단을 감지하는 데 사용됩니다. 아날로그 핀 A2는 스톱워치를 작동시키는 데 사용되는 푸시 버튼과 연결됩니다.

3 개의 저항, 2 개의 4.7K 및 1 개의 10K는 입력 핀을 로우 상태로 유지하는 데 도움이되는 풀다운 저항입니다.

최적의 가시성을 위해 LCD 모듈의 대비를 조정하기 위해 10K 전위차계가 제공됩니다.

제안 된 회로는 레이저에 대한 결함 감지 메커니즘으로 설계되었습니다. 레이저 중 하나에 결함이 있거나 LDR과 올바르게 정렬되지 않은 경우 LCD 디스플레이에 오류 메시지가 표시됩니다.

· START 레이저가 작동하지 않으면“ '시작'레이저가 작동하지 않습니다.”라고 표시됩니다.

· STOP 레이저가 작동하지 않는 경우“ 'stop'laser is not working”이 표시됩니다.

· 두 레이저가 모두 작동하지 않으면 '두 레이저가 모두 작동하지 않습니다'라고 표시됩니다.

· 두 레이저가 모두 제대로 작동하는 경우 '두 레이저가 모두 정상적으로 작동하고 있습니다.'라고 표시됩니다.

레이저 모듈이 고정되거나 LDR로 올바르게 정렬 될 때까지 오류 메시지가 나타납니다.

이 단계에서 문제가 해결되면 시스템이 대기 모드로 전환되고 '-시스템 대기-'가 표시됩니다. 이 시점에서 사용자는 언제든지 푸시 버튼을 눌러 설정을 준비 할 수 있습니다.

누름 버튼을 누르면 시스템이 사용자의 움직임을 감지 할 준비가되고 '시스템 준비 완료'가 표시됩니다.

러너는 '시작'레이저에서 몇 인치 떨어져있을 수 있습니다.

'시작'레이저가 중단되면 시간이 계산되기 시작하고 표시됩니다. '시간을 계산 중입니다 ……'시간은 배경에서 계산됩니다.

러너가 '정지'레이저에 도달 / 중단 할 때까지 경과 시간이 표시되지 않습니다. 기존 스톱워치처럼 LCD에 경과 시간을 표시하려면 마이크로 컨트롤러에서 몇 가지 추가 명령을 실행해야하므로 설정의 정확도가 크게 저하됩니다.

참고 : 판독 값을 지우려면 arduino의 재설정 버튼을 누르십시오.

달리기 트랙에 서킷을 설정하는 방법 :

LDR과 arduino 회로 사이의 거리는 몇 미터 떨어져있을 수 있으며 전압이 크게 떨어지지 않아야하므로 두꺼운 와이어를 사용하여 LDR과 arduino 회로를 연결하십시오. LDR1과 LDR2 사이의 거리는 최대 수백 미터가 될 수 있습니다.

LDR을 마운트하는 방법 :

LDR은 중공 불투명 튜브 내부에 장착해야하며 전면 부분도 덮어야하며 레이저 빔이 들어갈 수 있도록 직경이 몇 밀리미터 인 구멍 만 만들어집니다.

LDR은 레이저 빔 및 기타 광원과 구별 할 수없고 사용자의 움직임을 등록하지 못할 수 있으므로 직사광선으로부터 보호해야합니다.

프로그램 코드 :

//-------- 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-------//

저자의 프로토 타입 :

분할 타이머 기능으로 업그레이드

스플릿 타이머가있는 제안 된 자동 스톱워치 회로는 자동 스톱워치 회로의 확장으로, 솔로 러너가 시작 지점을 떠나고 타이머가 중지되면 스톱워치가 자동으로 시간을 추적하고 러너가 종료 지점에 도달 할 때 경과 된 시간을 표시합니다.

소개

이 프로젝트는이 웹 사이트의 열렬한 독자 중 한 명이 Andrew Walker 씨에 의해 제안되었습니다.

이 프로젝트에서는 솔로 러너의 스플릿 타임을 측정하기 위해 4 개의 LDR을 더 도입합니다. 총 6 개의 LDR이 있으며, 그들 사이의 거리가 일정하거나 상황과 사용자의 선택에 따라 모두 달리기 트랙에 배치 될 수 있습니다.

4 개의 LDR 추가를 제외하고 대부분의 하드웨어는 변경되지 않은 상태로 유지되지만 코드는 크게 수정되었습니다.

분할 시간을 보여주는 개략도 :

스플릿 타임이있는 자동 스톱워치

위의 회로는 몇 가지 구성 요소로 구성되어 있으며 초보자에게 친숙합니다. 추가 설명은 필요하지 않으며 회로도에 따라 배선 만하면됩니다.

LDR 연결 방법 :

LDR 2는 주 회로 다이어그램에 표시되어 있으며 위 다이어그램과 같이 4 개의 LDR을 더 병렬로 연결합니다.

레이아웃 다이어그램 :

위는 레이저 배치 방법에 대한 기본 배열입니다. LDR 간의 거리는 트랙 길이에 따라 사용자가 선택할 수 있습니다.

프로그램:

//------------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-------//

이 자동 스톱워치를 작동하는 방법 :

• 설정이 완료되면 먼저 레이저 전원을 켠 다음 Arduino 회로를 켭니다.
• 모든 레이저가 LDR과 올바르게 정렬되면 디스플레이에 오류 메시지가 표시되지 않습니다. 있는 경우 올바르게 정렬하십시오.
• 이제 회로에 'System is standby'가 표시됩니다. 이제 '시작'버튼을 누르면 '시스템 준비 완료'가 표시됩니다.
•이 시점에서 솔로 플레이어가 LDR 1 광선을 차단하면 타이머가 시작되고 '시간을 계산 중입니다…'가 표시됩니다.
• 플레이어가 종료 지점 (예 : LDR 6)에 도달하자마자 타이머가 중지되고 서킷에서 기록한 5 분할 시간을 표시합니다.
• 사용자는 타이머를 재설정하려면 arduino의 재설정 버튼을 눌러야합니다.
이 자동 스톱워치가 기존 스톱워치처럼 디스플레이에 실시간 타이밍을 표시 할 수없는 이유는 무엇입니까 (그러나 '시간을 계산 중입니다…'라는 정적 텍스트를 표시 함)?
실시간으로 타이밍을 표시하기 위해 Arduino는 LCD 디스플레이에 추가 명령을 실행해야합니다. 이렇게하면 코드의 주요 시간 추적 부분에 몇 마이크로 초에서 몇 밀리 초의 지연이 추가되어 부정확 한 결과가 발생합니다.

추가 문의 사항이 있으시면 댓글 섹션을 통해 알려주십시오.




Previous : Arduino LCD KeyPad Shield (SKU : DFR0009) 데이터 시트 다음 : Arduino Random RGB Light Generator 회로