Automātiskā hronometra izgatavošana skrējējiem, sportistiem un sportistiem

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Šajā ziņojumā mēs izveidosim hronometru, kas automātiski ieslēdz taimeri, kad skrējējs sāk darboties, un taimeris apstājas, kad skrējējs sasniedz beigām. Pagājušais laiks starp sākuma un beigu punktu tiek parādīts 16 x 2 LCD displejā.

Vispirms sāksim uzzināt, kā konfigurēt vienkāršu un ļoti precīzu Arduino hronometra ķēdi.



Hronometrs ir manuāli kontrolēta laika pulksteņa ierīce, kas paredzēta laika ilguma mērīšanai, kas, iespējams, ir pagājis, sākot no konkrēta laika, kad tas tika aktivizēts, un līdz brīdim, kad tas beidzot tika deaktivizēts. Tiek saukts tās pašas ierīces lielāks variants. hronometrs, kas tiek izmantots, lai uzraudzītu darbību no attāluma, un parasti ir atrodams sporta stadionā utt.

Mehāniskais un elektroniskais hronometrs

Agrāk tradicionālie mehāniskie rokas hronometri bija izplatītāki, un visi to izmantoja šim nolūkam.



Mehāniskajā sistēmā mums bija divas nospiešanas pogas hronometra funkciju izpildei. Viens, lai palaistu hronometru, nospiežot vienu reizi, un lai apturētu laiku, vēlreiz nospiežot to pašu pogu, lai ierakstītu pagājušo laiku .... otro pogu izmantoja pulksteņa atiestatīšanai uz nulli.

Mehāniskais hronometrs pamatā darbojās ar atsperes jaudu, kas prasīja periodu manuāli uzvilkt, pagriežot doto rievoto pogu pulksteņa ierīces augšpusē.

Tomēr, salīdzinot ar modernajiem digitālajiem hronometriem, mehāniskos tipus var uzskatīt par ievērojami primitīviem un neprecīziem milisekunžu diapazonā.

Arduino izmantošana

Un šodien ar mikrokontrolleru parādīšanos šie hronometri ir kļuvuši ļoti precīzi un uzticami mikrosekunžu diapazonā.

Šeit uzrādītais Arduino hronometra ķēde ir viens no šiem modernajiem mikrokontrolleru darbināmajiem dizainiem, kas ir visprecīzākais, un var sagaidīt, ka tas būs vienāds ar mūsdienu komerciālajiem hronometra sīkrīkiem.

Uzzināsim, kā izveidot piedāvāto Arduino hronometra ķēdi:

Būvniecībai jums būs nepieciešams šāds materiālu saraksts:

Nepieciešama aparatūra

Arduino LCD tastatūras aizsargs (SKU: DFR0009)

Arduino LCD tastatūras aizsargs (SKU: DFR0009)

Arduino ONE dēlis

Arduino UNO

Arduino USB kabelis

arduino usb kabelis

Kad esat ieguvis iepriekš minēto materiālu un piesaistījis tos viens otram, tas ir tikai par nākamā skices koda konfigurēšanu savā Arduino dēlī un skatīties hronometra funkciju burvību.

Kods

/*
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 segmentu displeja pievienošana

Tagad turpināsim sīkāk par hronometra shēmas izveidi, izmantojot 7 segmentu LED displeju un Arduino. Mēs izpētīsim jēdzienus, kas saistīti ar pārtraukumiem un displeja draiveru IC, kas ir izšķiroši, lai izprastu šo projektu. Šo projektu ieteica Abu-Hafss kungs, kurš ir viens no šīs vietnes cītīgākajiem lasītājiem.

Kā mēs jau zinām, ka hronometrs ir ierīce, kas palīdz izsekot īsu laika periodu no stundām līdz milisekundēm (galvenokārt). Gandrīz visi lēti digitālie rokas pulksteņi, kas aprīkoti ar hronometra funkcionalitāti, taču neviens no pulksteņiem nevar dot prieku, kā tādu izgatavot mūsu pašu vajadzībām, kā arī atrast hronometru ar 7 segmentu LED displeju.

Abu-Hafsss kungs ieteica mums izveidot hronometru ar 4 displejiem, diviem minūtēm un diviem sekundēm (MM: SS). Bet lielākajai daļai no mums tas var nebūt izpildāms dizains, tāpēc mēs pievienojām vēl divus displejus milisekunžu diapazonam, tāpēc tagad piedāvātais dizains būs MM: SS: mS konfigurācijā.

Ja kāda iemesla dēļ jums vienkārši nepieciešama MM: SS konfigurācija, jums nav jāpievieno milisekunžu diapazona 7 segmentu displeji un tā draiveru IC, visa ķēdes funkcionalitāte joprojām netiks ietekmēta.

Ķēde:

Piedāvātais hronometrs sastāv no sešiem IC 4026, kas ir septiņu segmentu displeja draiveris, seši 7 segmentu LED displeji, viens Arduino dēlis, pāris spiedpogas un pāris 10K rezistori.

Tagad sapratīsim, kā savienot IC 4026 ar 7 segmentu displeju.

7 segmentu displejs var būt jebkurš jebkuras krāsas katoda displejs. 7 segmentu displejs var viegli nogalināt ar 5 V barošanu, tāpēc 330 omu rezistors ir obligāts katrā displeja segmentā.

Tagad aplūkosim IC 4026 tapu diagrammu:

  • 1. tapa ir pulksteņa ievade.
  • Piespraude Nr. 2 ir atspējota pulkstenī, tā atspējo displejā redzamo skaitīšanu, ja šī tapa ir augsta.
  • Piespraude Nr. 3 ir displeja iespējošanas funkcija, ja šī tapa ir zema, displejs tiks noregulēts un otrādi.
  • 5. tapa ir izpilde, kas kļūst augsta, kad IC saskaita 10.
  • 6., 7., 9., 10., 11., 12., 13. tapas ir displeja izejas.
  • Tapa Nr. 8 ir GND.
  • Tapa Nr. 16 ir Vcc.
  • Piespraude Nr. 15 tiek atiestatīta, ja mēs paaugstinām šo tapu, skaitlis pagriežas uz nulli.
  • Piespraudes Nr. 4 un Nr. 14 netiek izmantotas.

Displeja savienojuma shēma:

LCD displeja savienojuma shēma:

Jebkuru no 7 segmentu displeja GND tapām var savienot ar zemi. Mikroshēmai jābūt barotai no 5 V barošanas avota vai Arduino 5 V izejas tapas.

Iepriekš minētā shēma tikai vienam displejam, atkārtojiet to pašu pieciem citiem displejiem.

Šeit ir pārējā shēma:

Hronometrs, izmantojot Arduino ar 7 segmentu displeju

Kontūru var darbināt no 9V akumulatora. Šeit ir divas pogas, no kurām viena ir paredzēta laika sākšanai un otra - apstāšanās brīdim. Nospiežot Arduino atiestatīšanas pogu, displejā laika skaitlis tiks atiestatīts uz nulli.

Divas spiedpogas ir savienotas ar tapām Nr. 2 un Nr. 3, kas ir Arduino / Atmega328P mikrokontrollera aparatūras pārtraukums.

Sapratīsim, kas ir pārtraukums:

Ir divu veidu pārtraukumi: aparatūras pārtraukumi un programmatūras pārtraukumi. Šeit mēs izmantojam tikai aparatūras pārtraukumu.

Pārtraukums ir signāls mikrokontrollerim, kas liks mikrokontrolleram nekavējoties reaģēt uz notikumu.

Arduino dēļos ar ATmega328P mikrokontrolleru tapām Nr. 2 un Nr. 3 ir tikai divas aparatūras pārtraukuma tapas. Arduino mega ir vairāk nekā divas aparatūras pārtraukuma tapas.

Mikrokontrolleri vienlaikus nevar veikt divas funkcijas. Piemēram, pārbaudot pogas nospiešanu un skaitot skaitļus.

Mikrokontrolleri nevar izpildīt divus notikumus vienlaicīgi. Ja mēs uzrakstīsim kodu pogas nospiešanas pārbaudei un skaitīšanas skaitīšanai, pogas nospiešana tiks atklāta tikai tad, kad mikrokontrolieris nolasīs pogas nospiešanas noteikšanas kodu, pārējo laiku (skaitīs skaitļus) poga nedarbojas.

Tāpēc būs aizkavējusies pogas nospiešanas noteikšana, un kādu iemeslu dēļ, ja kods īslaicīgi tiek apturēts, pogas nospiešana nekad netiks atklāta. Lai izvairītos no šāda veida jautājumiem, tiek ieviests pārtraukums.

Pārtraukšanas signālam vienmēr tiek piešķirta visaugstākā prioritāte, galvenā funkcija (galvenās koda rindas) tiks apturēta un izpildīs (vēl viena koda daļa) funkciju, kas piešķirta konkrētajam pārtraukumam.

Tas ir ļoti svarīgi tādām laika ziņā kritiskām lietojumprogrammām kā hronometrs vai drošības sistēmas utt., Kur procesoram nekavējoties jārīkojas, reaģējot uz notikumu.

Arduino aparatūras pārtraukumu piešķiram kā:

attachInterrupt (0, sākums, RISING)

  • “0” nozīmē pārtraukuma skaitli nulle (mikrokontrolleros viss sākas no nulles), kas ir tapa Nr. 2.
  • “Start” ir pārtraukuma funkcijas nosaukums, šeit varat nosaukt jebko.
  • “RISING”, ja piespraude Nr. 2 (kas ir pārtraukuma nulle) ir augsta, tiek pārtraukta.

attachInterrupt (1, Stop, RISING)

  • “1” ir pirmais pārtraukuma numurs, kas ir piespraudes Nr. 3.
  • “Stop” ir pārtraukuma nosaukums.

Mēs varam arī aizstāt “RISING” ar “FALLING”, tagad, kad pārtraukuma tapa ir LOW, izpilda pārtraukšanas funkciju.

Mēs varam arī aizstāt “RISING” ar “CHANGE”. Tagad, kad pārtraukuma tapa tiek pārsniegta no augšas uz zemu vai no zemas uz augstu, tiek pārtraukta funkcija.

Pārtraukšanas funkciju var piešķirt šādi:

void start () // start ir pārtraukuma nosaukums.

{

// programma šeit

}

Pārtraukšanas funkcijai jābūt pēc iespējas īsākai, un funkciju delay () nevar izmantot.

Tas beidzas aparatūras pārtraukuma programmatūras pārtraukums, kas saistīts ar Arduino, tiks paskaidrots nākamajā rakstā.

Tagad jūs zināt, kāpēc mēs savienojām sākuma un apturēšanas spiedpogas, lai pārtrauktu tapas.

Pievienojiet ķēdi, kā norādīts shēmā, pārējā ķēde ir pašsaprotama.

Programma:

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

Tagad kods ir pabeigts.

Hronometrs, kas īpaši izstrādāts Atheletes

Visbeidzot, uzzināsim, kā iepriekš minētie jēdzieni tiek faktiski uzlaboti sportistiem, kuri vēlas attīstīt savas skriešanas prasmes, neatkarīgi no citiem, lai sāktu un apturētu taimeri / hronometru. Labāk ir automātiski iedarbināt taimeri, nosakot jūsu kustību, nekā kāds, kurš iedarbina / aptur hronometru, kas var arī pievienot viņu reakcijas laiku.

PIEZĪME: Šis projekts ir paredzēts laika mērīšanai starp punktu “A” līdz “B”, ko vienlaikus pārklāj VIENS lietotājs.

Uzstādīšana sastāv no diviem lāzeriem, kas novietoti sākuma un beigu punktā, divi LDR atrodas arī pretī diviem lāzeru moduļiem. Kad sportists pārtrauc ‘sākuma’ lāzeru, sāk aprēķināt laiku, un, sportistam sasniedzot beigas, pārtrauc ‘beigu’ lāzeru un taimeris apstājas un parāda pagājušo laiku starp diviem punktiem. Šī ir metode, ko izmanto, lai izmērītu pagājušo laiku ierosinātajā idejā.

Apskatīsim katru ķēdes komponentu detalizēti.

Komponentu darba detaļas

Shēma ir diezgan vienkārša, tā sastāv no 16 x 2 LCD moduļiem, dažiem rezistoriem, diviem LDR un spiedpogas.

Saskarne starp LCD un arduino ir standarta. Mēs varam atrast līdzīgu savienojumu daudzos citos LCD balstītos projektos.

Lāzera pārtraukumu noteikšanai tiek izmantotas divas analogās tapas A0 un A1. Analogais tapa A2 ir savienots ar spiedpogu, ko izmanto hronometra ieslēgšanai.

Trīs rezistori, divi 4.7K un viens 10K ir nolaižamie rezistori, kas palīdz ievades tapām palikt zemā līmenī.

10K potenciometrs ir paredzēts kontrasta pielāgošanai LCD modulī optimālai redzamībai.

Piedāvātā shēma ir paredzēta ar lāzeru bojājumu noteikšanas mehānismu. Ja kāds no lāzeriem ir bojāts vai nav pareizi saskaņots ar LDR, tas LCD displejā parāda kļūdas ziņojumu.

· Ja START lāzers nedarbojas, tas parāda “nedarbojas lāzers”

· Ja STOP lāzers nedarbojas, tas parāda “nedarbojas” lāzers

· Ja abi lāzeri nedarbojas, tiek parādīts uzraksts “Abi lāzeri nedarbojas”

· Ja abi lāzeri darbojas pareizi, tiek parādīts uzraksts “Abi lāzeri darbojas labi”

Kļūdas ziņojums tiek parādīts līdz brīdim, kad lāzera modulis ir fiksēts vai izlīdzinājums tiek veikts pareizi ar LDR.

Kad šai darbībai nav problēmu, sistēma pāriet gaidīšanas režīmā un parāda “-sistēmas gaidstāves režīms”. Šajā brīdī lietotājs var atbrīvot iestatīšanu, jebkurā laikā nospiežot spiedpogu.

Nospiežot spiedpogu, sistēma ir gatava noteikt kustību no lietotāja un parāda “Sistēma ir gatava”.

Skrējējs, iespējams, atrodas dažu collu attālumā no starta lāzera.

Ja “starta” lāzers tiek pārtraukts, laiks sāk skaitīties un displejā parādās “Laiks tiek aprēķināts ...”. Laiks tiek aprēķināts aizmugurē.

Pagājušais laiks netiks rādīts, kamēr skrējējs nebūs sasniedzis / pārtraucis “stop” lāzeru. Tas ir tāpēc, ka, parādot pagājušo laiku LCD kā tradicionālo hronometru, mikrokontrollerī ir jāizpilda vairākas papildu instrukcijas, kas ievērojami pasliktina iestatīšanas precizitāti.

PIEZĪME. Lai notīrītu rādījumus, nospiediet arduino atiestatīšanas pogu.

Kā iestatīt ķēdi skrejceļā:

Lūdzu, izmantojiet biezus vadus, lai izveidotu savienojumu starp LDR un arduino ķēdi, jo attālums starp šiem diviem var būt vairāku metru attālumā, un spriegums nedrīkst ievērojami pazemināties. Attālums starp LDR1 un LDR2 var būt maksimums pāris simti metru.

Kā uzstādīt LDR:

LDR jāuzstāda dobās necaurspīdīgās caurules iekšpusē, un tā priekšējā daļa arī jāpārklāj, un lāzera staru iekļūšanai ir izveidota tikai caurums ar dažu milimetru diametru.

LDR ir jāaizsargā no tiešiem saules stariem, jo ​​tie nevar atšķirt no lāzera stariem un citiem gaismas avotiem un var nereģistrēt lietotāja kustību.

Programmas kods:

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

Autora prototips:

Jaunināšana ar dalītā taimera iespēju

Piedāvātā automātiskā hronometra ķēde ar sadalīto taimeri ir automātiskās hronometra ķēdes pagarinājums, kur hronometrs automātiski izseko laiku, tiklīdz solo skrējējs atstāj sākuma punktu, un taimeris apstājas un parāda pagājušo laiku, kad skrējējs sasniedz beigu punktu.

Ievads

Šo projektu ieteica viens no šīs vietnes kaislīgajiem lasītājiem Endrjū Volkers.

Šajā projektā mēs ieviešam vēl 4 LDR, lai mērītu solo skrējēja dalīšanās laiku. Kopumā ir 6 LDR, visus tos var ievietot skriešanas trasē ar vienādu attālumu starp tiem vai atkarībā no apstākļiem un lietotāja izvēles.

Lielākā daļa aparatūras tiek nemainītas, izņemot 4 LDR pievienošanu, taču kods ir ļoti pārveidots.

Shematiska shēma, kas parāda sadalījuma laiku:

Automātisks hronometrs ar dalītu laiku

Iepriekš minētā shēma sastāv no dažiem komponentiem un ir draudzīga iesācējiem. Papildu paskaidrojums nav nepieciešams, vienkārši vadu, kā norādīts shēmā.

Kā savienot LDR:

LDR 2 ir parādīts galvenajā ķēdes shēmā, kas paralēli savieno vēl 4 LDR, kā parādīts iepriekšējā diagrammā.

Izkārtojuma diagramma:

Iepriekš minētā ir pamata vienošanās par lāzera novietošanu. Lūdzu, ņemiet vērā, ka attālums starp LDR var būt lietotāja izvēle atkarībā no ceļa garuma.

Programma:

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

Kā darbināt šo automātisko hronometru:

• Pēc iestatīšanas vispirms ieslēdziet lāzerus un pēc tam ieslēdziet Arduino ķēdi.
• Ja visi lāzeri ir pareizi izlīdzināti ar LDR, displejā netiks parādīts kļūdu ziņojums. Ja tādas ir, lūdzu, tās pareizi izlīdziniet.
• Tagad ķēdē parādās “Sistēma ir gaidīšanas režīmā”. Tagad nospiediet pogu “Sākt” un parādīsies “Sistēma ir gatava”.
• Šajā brīdī, kad solo spēlētājs pārtrauc LDR 1 gaismas staru, taimeris sāk darboties un tajā parādās “Laiks tiek aprēķināts…”.
• Tiklīdz atskaņotājs sasniedz beigu punktu, t.i., LDR 6, taimeris apstājas, un tas parāda ķēdes reģistrēto 5 sadalījuma laiku.
• Lietotājam ir jānospiež arduino atiestatīšanas poga, lai atiestatītu taimeri.
Kāpēc šis automātiskais hronometrs displejā nevar parādīt tiešraides laiku tāpat kā tradicionālais hronometrs (bet drīzāk tas parāda statisku tekstu “Laiks tiek aprēķināts ...”)?
Lai parādītu laiku reāllaikā, Arduino ir jāizpilda papildu norādījumi LCD displejā. Tas galvenajam laika izsekošanas kodam pievienos dažas mikrosekundes ar dažu milisekunžu aizkavēšanos, kas novedīs pie neprecīziem rezultātiem.

Ja jums ir kādi jautājumi, lūdzu, izsakiet tos komentāru sadaļā.




Pāri: Arduino LCD KeyPad Shield (SKU: DFR0009) datu lapa Nākamais: Arduino izlases veida RGB gaismas ģeneratora shēma