ランナー、アスリート、スポーツ選手のための自動ストップウォッチの作成

問題を排除するために楽器を試してください





この投稿では、ランナーが走り始めるとタイマーを自動的に開始し、ランナーが終わりに達するとタイマーを停止するストップウォッチを作成します。開始点と終了点の間の経過時間は、16 x 2LCDに表示されます。

まず、シンプルで非常に正確なArduinoストップウォッチ回路を構成する方法を学ぶことから始めましょう。



ストップウォッチは、手動で制御されるタイムレコーダーデバイスであり、アクティブ化された特定の時点から開始して、最終的に非アクティブ化されるまでに経過した可能性のある時間の長さを測定するために設計されています。同じデバイスのより大きなバリアントは、遠くから行動を監視するために使用され、通常はスポーツスタジアムなどで見られるストップクロック。

機械式ストップウォッチと電子式ストップウォッチ

以前は、従来の機械式ハンドヘルドストップウォッチがより一般的であり、すべての人がその目的で使用していました。



機械システムでは、ストップウォッチ機能を実行するための2つのプレスボタンがありました。 1つは1回押すとストップクロックを開始し、もう一度同じボタンを押して時間を停止して経過時間を記録するためのものです。2つ目のボタンはクロックをゼロにリセットするために使用しました。

機械式ストップクロックは基本的にバネ式で機能し、時計装置の上部にある所定の刻み付きノブを回して手動で巻き上げる必要がありました。

ただし、最新のデジタルストップウォッチと比較すると、機械式タイプはミリ秒の範囲で非常に原始的で不正確であると見なすことができます。

Arduinoの使用

そして今日、マイクロコントローラーの出現により、これらのストップウォッチはマイクロ秒の範囲で非常に正確で信頼できるものになりました。

ここで紹介するArduinoストップウォッチ回路は、これらの最新のマイクロコントローラー駆動設計の1つであり、最も正確であり、市販の最新のストップウォッチガジェットと同等であると期待できます。

提案されたArduinoストップクロック回路を構築する方法を学びましょう:

建設には次の部品表が必要です。

必要なハードウェア

Arduino LCDキーパッドシールド(SKU:DFR0009)

Arduino LCDキーパッドシールド(SKU:DFR0009)

ArduinoONEボード

Arduino UNO

ArduinoUSBケーブル

arduinoUSBケーブル

上記の資料を入手して相互に接続したら、次のスケッチコードを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ディスプレイとArduinoを使用したスト​​ップウォッチ回路の構築に関する詳細に進みましょう。このプロジェクトを理解するために重要な割り込みとディスプレイドライバICに関連する概念を探求します。このプロジェクトは、このウェブサイトの熱心な読者の一人であるアブハフス氏によって提案されました。

ストップウォッチは、(ほとんどの場合)数時間から数ミリ秒の範囲の短い期間を追跡するのに役立つデバイスであることはすでに知っています。ストップウォッチ機能を備えたほとんどすべての安価なデジタル腕時計ですが、どの時計も私たち自身のためにそれを作る熱意を与えることはできず、7セグメントLEDディスプレイを備えたストップウォッチを見つけることも例外的です。

Abu-Hafss氏は、4つのディスプレイ(2つは分用、2つは秒用(MM:SS)構成)を備えたストップウォッチを設計することを提案しました。しかし、私たちのほとんどにとって、それは実現可能な設計ではないかもしれないので、ミリ秒の範囲でさらに2つのディスプレイを追加したので、提案された設計はMM:SS:mS構成になります。

何らかの理由でMM:SS構成が必要な場合は、ミリ秒範囲の7セグメントディスプレイとそのドライバICを接続する必要はなく、回路の機能全体に影響はありません。

回路:

提案されているストップウォッチは、7セグメントディスプレイドライバである6つのIC 4026、6つの7セグメントLEDディスプレイ、1つのArduinoボード、2つのプッシュボタンおよび2つの10K抵抗で構成されています。

それでは、IC4026を7セグメントディスプレイに接続する方法を理解しましょう。

7セグメントディスプレイは、任意の色の任意の一般的なカソードディスプレイにすることができます。 7セグメントディスプレイは5V電源で簡単に停止する可能性があるため、ディスプレイの各セグメントに330オームの抵抗が必須です。

次に、IC4026のピン配列を見てみましょう。

  • ピン#1はクロック入力です。
  • ピン#2はクロック無効であり、このピンがハイの場合、ディスプレイ上のカウントを無効にします。
  • ピン#3はディスプレイイネーブルです。このピンがローの場合、ディスプレイはオフになり、その逆も同様です。
  • ピン#5はキャリーアウトであり、ICが10をカウントするとハイになります。
  • ピン6、7、9、10、11、12、13はディスプレイ出力です。
  • ピン#8はGNDです。
  • ピン#16はVccです。
  • ピン#15がリセットされ、このピンをハイにするとカウントがゼロになります。
  • ピン#4と#14は使用されません。

接続図の表示:

LCDディスプレイ接続図:

7セグメントディスプレイのGNDピンのいずれか1つをグランドに接続できます。 ICは、5V電源またはArduinoの5V出力ピンから電力を供給される必要があります。

上記の回路図は1つのディスプレイのみで、他の5つのディスプレイでも同じことを繰り返します。

回路図の残りの部分は次のとおりです。

7セグメントディスプレイでArduinoを使用したスト​​ップウォッチ

回路は9V電池から電力を供給できます。ここにある2つのボタンは、時刻を開始するためのものと停止するためのものです。 Arduinoのリセットボタンを押すと、時間カウントがディスプレイ上でゼロにリセットされます。

2つのプッシュボタンは、Arduino / Atmega328Pマイクロコントローラーのハードウェア割り込みであるピン#2と#3に接続されています。

割り込みとは何かを理解しましょう。

割り込みには、ハードウェア割り込みとソフトウェア割り込みの2種類があります。ここでは、ハードウェア割り込みのみを使用しています。

割り込みはマイクロコントローラへの信号であり、マイクロコントローラがイベントに即座に応答するようにします。

ArduinoボードにはATmega328Pマイクロコントローラーのピン#2と#3を備えたハードウェア割り込みピンが2つしかありません。 Arduinoメガには3つ以上のハードウェア割り込みピンがあります。

マイクロコントローラは、2つの機能を同時に実行することはできません。たとえば、ボタンの押下をチェックし、数を数えます。

マイクロコントローラーは2つのイベントを同時に実行することはできません。ボタンの押下をチェックして数値をカウントするコードを記述すると、マイクロコントローラーがボタンの押下検出コードを読み取ったときにのみボタンの押下が検出され、残りの時間(数値をカウント)はボタンが機能しません。

そのため、ボタンの押下の検出が遅れ、何らかの理由でコードが一時的に停止した場合、ボタンの押下が検出されない場合があります。この種の問題を回避するために、割り込みが導入されています。

割り込み信号には常に最高の優先順位が与えられ、メイン関数(コードのメイン行)が停止され、その特定の割り込みに割り当てられた(別のコード)関数が実行されます。

これは、ストップウォッチやセキュリティシステムなど、プロセッサがイベントに応答して即座にアクションを実行する必要があるタイムクリティカルなアプリケーションにとって非常に重要です。

Arduinoでは、ハードウェア割り込みを次のように割り当てます。

attachInterrupt(0、start、RISING)

  • 「0」は、ピン#2である割り込み番号ゼロ(マイクロコントローラーではすべてがゼロから始まる)を意味します。
  • 「start」は割り込み関数の名前です。ここでは何でも名前を付けることができます。
  • ピン#2(割り込みゼロ)がハイになると「RISING」、割り込み機能が実行されます。

attachInterrupt(1、Stop、RISING)

  • 「1」は、ピン#3である割り込み番号1を意味します。
  • 「停止」は割り込みの名前です。

「RISING」を「FALLING」に置き換えることもできます。これで、割り込みピンがLOWになると、割り込み機能が実行されます。

「RISING」を「CHANGE」に置き換えることもできます。これにより、割り込みピンがHighからLowまたはLowからHighになるたびに、割り込み機能が実行されます。

割り込み機能は次のように割り当てることができます。

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

これでコードは終わりです。

アスリートのために特別に開発されたストップウォッチ

最後に、タイマー/ストップウォッチの開始と停止を他の人に頼らずにランニングスキルを伸ばしたいアスリートのために、上記の概念を実際にアップグレードする方法を学びましょう。誰かがストップウォッチを開始/停止するよりも、あなたの動きを検出してタイマーを自動的に開始する方が良いです。これにより、反応時間が増える可能性があります。

注:このプロジェクトは、一度に1人のユーザーがカバーするポイント「A」からポイント「B」までの時間を測定するように設計されています。

セットアップは、開始点と終了点に配置された2つのレーザーで構成され、2つのLDRも2つのレーザーモジュールの反対側に配置されます。アスリートが「開始」レーザーを中断すると、時間が計算を開始し、アスリートが終了に達すると、「終了」レーザーを中断し、タイマーが停止して、2点間の経過時間を表示します。これは、提案されたアイデアの経過時間を測定するために使用される方法です。

回路のすべてのコンポーネントを詳しく見ていきましょう。

コンポーネント作業の詳細

回路はかなりシンプルに保たれており、16 x 2 LCDモジュール、いくつかの抵抗、2つのLDR、およびプッシュボタンで構成されています。

LCDとarduinoの間のインターフェースは標準であり、他の多くのLCDベースのプロジェクトでも同様の接続を見つけることができます。

2つのアナログピンA0およびA1は、レーザーの中断を検出するために使用されます。アナログピンA2は、ストップウォッチを作動させるために使用される押しボタンに接続されています。

3つの抵抗、2つの4.7Kと1つの10Kはプルダウン抵抗であり、入力ピンをローに保つのに役立ちます。

LCDモジュールのコントラストを調整して最適な視認性を実現するために10Kポテンショメータが用意されています。

提案された回路は、レーザーの故障検出メカニズムを使用して設計されています。レーザーのいずれかが故障しているか、LDRと適切に位置合わせされていない場合、LCDディスプレイにエラーメッセージが表示されます。

・STARTレーザーが機能していない場合は、「「開始」レーザーが機能していません」と表示されます。

・STOPレーザーが機能していない場合は、「「停止」レーザーが機能していません」と表示されます。

・両方のレーザーが機能していない場合は、「両方のレーザーが機能していません」と表示されます。

・両方のレーザーが正常に機能している場合は、「両方のレーザーが正常に機能しています」と表示されます。

エラーメッセージは、レーザーモジュールが固定されるか、LDRで適切に位置合わせが行われるまで表示されます。

この手順で問題がなくなると、システムはスタンバイモードになり、「-systemstandby-」と表示されます。この時点で、ユーザーはいつでもプッシュボタンを押してセットアップを準備できます。

プッシュボタンを押すと、システムはユーザーからの動きを検出する準備ができており、「システムの準備ができました」と表示されます。

ランナーは、「開始」レーザーから数インチ離れている場合があります。

「開始」レーザーが中断されると、時間がカウントを開始し、「時間が計算されています……」と表示されます。時間はバックグラウンドで計算されます。

経過時間は、ランナーが「停止」レーザーに到達/中断するまで表示されません。これは、従来のストップウォッチのように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-------//

著者のプロトタイプ:

スプリットタイマー機能によるアップグレード

スプリットタイマー付きの提案された自動ストップウォッチ回路は、自動ストップウォッチ回路の拡張であり、ストップウォッチは、ソロランナーが開始点を離れるとすぐに時間を自動的に追跡し、タイマーが停止して、ランナーが終了点に到達したときの経過時間を表示します。

前書き

このプロジェクトは、このWebサイトの熱心な読者の1人であるAndrewWalker氏によって提案されました。

このプロジェクトでは、ソロランナーのスプリットタイムを測定するために、さらに4つのLDRを導入します。 LDRは全部で6つあり、状況やユーザーの選択に応じて、すべてが一定の距離でランニングトラックに配置されます。

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と適切に位置合わせされている場合、ディスプレイにエラーメッセージが表示されません。もしあれば、それらを適切に位置合わせしてください。
•これで、回路に「システムはスタンバイです」と表示されます。ここで「スタート」ボタンを押すと、「システムの準備ができました」と表示されます。
•この時点で、ソロプレーヤーがLDR 1の光線を遮断すると、タイマーが開始し、「時間が計算されています…」と表示されます。
•プレーヤーがエンドポイント(LDR 6)に到達するとすぐに、タイマーが停止し、回路によって記録された5スプリットタイムが表示されます。
•ユーザーは、タイマーをリセットするためにarduinoのリセットボタンを押す必要があります。
この自動ストップウォッチは、従来のストップウォッチのようにライブタイミングをディスプレイに表示できないのはなぜですか(むしろ、「時間が計算されています…」という静的なテキストが表示されます)。
リアルタイムでタイミングを表示するには、ArduinoはLCDディスプレイに追加の命令を実行する必要があります。これにより、コードのメインタイムトラッキング部分に数マイクロ秒から数ミリ秒の遅延が追加され、不正確な結果につながります。

ご不明な点がございましたら、コメント欄にご記入ください。




前:Arduino LCDキーパッドシールド(SKU:DFR0009)データシート 次へ:ArduinoランダムRGB光発生回路