การสร้างนาฬิกาจับเวลาอัตโนมัติสำหรับนักวิ่งนักกีฬาและนักกีฬา

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





ในโพสต์นี้เราจะสร้างนาฬิกาจับเวลาซึ่งจะเริ่มจับเวลาโดยอัตโนมัติเมื่อนักวิ่งเริ่มวิ่งและตัวจับเวลาจะหยุดลงเมื่อนักวิ่งถึงจุดสิ้นสุด เวลาที่ผ่านไประหว่างจุดเริ่มต้นและจุดสิ้นสุดจะแสดงบนจอ LCD ขนาด 16 x 2

ก่อนอื่นมาเริ่มต้นด้วยการเรียนรู้วิธีกำหนดค่าวงจรนาฬิกาจับเวลา Arduino ที่เรียบง่ายและแม่นยำมาก



นาฬิกาจับเวลาเป็นอุปกรณ์นาฬิกาบอกเวลาที่ควบคุมด้วยตนเองซึ่งออกแบบมาสำหรับการวัดระยะเวลาที่อาจผ่านไปโดยเริ่มจากช่วงเวลาหนึ่งเมื่อเปิดใช้งานและเมื่อถึงเวลาที่ปิดใช้งานในที่สุดอุปกรณ์ชนิดเดียวกันที่ใหญ่กว่าเรียกว่า นาฬิกาจับเวลาซึ่งใช้สำหรับตรวจสอบการเคลื่อนไหวจากระยะไกลและมักพบในสนามกีฬาเป็นต้น

นาฬิกาจับเวลาเครื่องกลเทียบกับอิเล็กทรอนิกส์

ก่อนหน้านี้นาฬิกาจับเวลาแบบใช้มือถือแบบกลไกแบบดั้งเดิมเป็นเรื่องธรรมดามากขึ้นและทุกคนใช้เพื่อจุดประสงค์



ในระบบกลไกเรามีปุ่มกดสองปุ่มสำหรับสั่งงานฟังก์ชันนาฬิกาจับเวลา ปุ่มหนึ่งสำหรับเริ่มนาฬิกาจับเวลาโดยการกดหนึ่งครั้งและหยุดเวลาโดยการกดปุ่มเดิมอีกครั้งเพื่อบันทึกเวลาที่ผ่านไป .... ปุ่มที่สองใช้สำหรับการรีเซ็ตนาฬิกากลับเป็นศูนย์

โดยทั่วไปนาฬิกาหยุดกลไกจะทำงานผ่านกำลังสปริงซึ่งต้องใช้ระยะเวลาในการไขลานด้วยตนเองโดยการหมุนปุ่มหมุนที่กำหนดไว้ที่ด้านบนของอุปกรณ์นาฬิกา

อย่างไรก็ตามเมื่อเทียบกับนาฬิกาจับเวลาแบบดิจิตอลสมัยใหม่แล้วประเภทกลไกถือได้ว่าเป็นแบบดั้งเดิมอย่างมีนัยสำคัญและไม่แม่นยำในช่วงมิลลิวินาที

ใช้ Arduino

และในปัจจุบันด้วยการถือกำเนิดของไมโครคอนโทรลเลอร์นาฬิกาจับเวลาเหล่านี้จึงมีความแม่นยำและเชื่อถือได้อย่างมากในระดับไมโครวินาที

วงจรนาฬิกาจับเวลา Arduino ที่นำเสนอที่นี่เป็นหนึ่งในการออกแบบที่ขับเคลื่อนด้วยไมโครคอนโทรลเลอร์ที่ทันสมัยซึ่งมีความแม่นยำมากที่สุดคาดว่าจะเทียบเท่ากับอุปกรณ์นาฬิกาจับเวลาที่ทันสมัยในเชิงพาณิชย์

มาเรียนรู้วิธีสร้างวงจรนาฬิกาหยุด Arduino ที่เสนอ:

คุณจะต้องมีรายการวัสดุสำหรับการก่อสร้างดังต่อไปนี้:

ต้องใช้ฮาร์ดแวร์

Arduino LCD KeyPad Shield (SKU: DFR0009)

Arduino LCD KeyPad Shield (SKU: DFR0009)

บอร์ด Arduino ONE

Arduino UNO

สาย Arduino USB

สาย usb arduino

เมื่อคุณได้รับวัสดุข้างต้นและเชื่อมต่อเข้าด้วยกันแล้วก็เป็นเพียงการกำหนดค่ารหัสร่างที่กำหนดต่อไปนี้ลงในบอร์ด 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 ส่วน

ตอนนี้เรามาดูรายละเอียดเกี่ยวกับการสร้างวงจรนาฬิกาจับเวลาโดยใช้จอแสดงผล LED 7 ส่วนและ Arduino เราจะสำรวจแนวคิดที่เกี่ยวข้องกับการขัดจังหวะและ IC ไดรเวอร์การแสดงผลซึ่งมีความสำคัญอย่างยิ่งในการทำความเข้าใจโครงการนี้ โครงการนี้แนะนำโดยคุณ Abu-Hafss ซึ่งเป็นหนึ่งในผู้อ่านตัวยงของเว็บไซต์นี้

อย่างที่เราทราบกันดีอยู่แล้วว่านาฬิกาจับเวลาเป็นอุปกรณ์ที่ช่วยติดตามช่วงเวลาสั้น ๆ จากชั่วโมงไปจนถึงช่วงมิลลิวินาที (ส่วนใหญ่) นาฬิกาข้อมือดิจิตอลราคาถูกเกือบทั้งหมดที่มีฟังก์ชันนาฬิกาจับเวลา แต่ไม่มีนาฬิกาใดที่สามารถสร้างความสนุกให้กับตัวเองได้และยังพบว่านาฬิกาจับเวลาที่มีจอแสดงผล LED 7 ส่วนนั้นยอดเยี่ยมมาก

คุณ Abu-Hafss แนะนำให้เราออกแบบนาฬิกาจับเวลาที่มีจอแสดงผล 4 จอแสดงผล 2 จอสำหรับนาทีและ 2 วินาที (MM: SS) แต่สำหรับพวกเราส่วนใหญ่อาจไม่ใช่การออกแบบที่เป็นไปได้ดังนั้นเราจึงเพิ่มการแสดงผลอีกสองจอสำหรับช่วงมิลลิวินาทีดังนั้นตอนนี้การออกแบบที่เสนอจะอยู่ในการกำหนดค่า MM: SS: mS

หากคุณต้องการเพียงแค่การกำหนดค่า MM: SS ด้วยเหตุผลบางประการคุณไม่จำเป็นต้องเชื่อมต่อจอแสดงผล 7 เซ็กเมนต์ช่วงมิลลิวินาทีและ IC ของไดรเวอร์การทำงานทั้งหมดของวงจรยังคงไม่ได้รับผลกระทบ

วงจร:

นาฬิกาจับเวลาที่นำเสนอประกอบด้วย IC 4026 หกตัวซึ่งเป็นตัวขับการแสดงผลเจ็ดส่วนจอแสดงผล LED 7 ส่วนหกจอบอร์ด Arduino หนึ่งปุ่มปุ่มกดสองสามตัวและตัวต้านทาน 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 จะถูกรีเซ็ตหากพินนี้สูงการนับจะกลายเป็นศูนย์
  • ไม่ใช้หมุด # 4 และ # 14

แสดงแผนภาพการเชื่อมต่อ:

แผนผังการเชื่อมต่อจอแสดงผล LCD:

สามารถเชื่อมต่อขา GND ของ 7 ส่วนใดก็ได้กับกราวด์ IC ต้องใช้พลังงานจากแหล่งจ่าย 5V หรือขาเอาต์พุต 5V ของ Arduino

แผนผังด้านบนสำหรับการแสดงผลเพียงจอเดียวทำซ้ำแบบเดียวกันสำหรับจอแสดงผลอื่น ๆ อีกห้าจอ

นี่คือส่วนที่เหลือของแผนผัง:

นาฬิกาจับเวลาโดยใช้ Arduino พร้อมจอแสดงผล 7 ส่วน

วงจรอาจใช้พลังงานจากแบตเตอรี่ 9V มีปุ่มสองปุ่มที่มีให้ที่นี่ปุ่มหนึ่งสำหรับเริ่มต้นเวลาและอีกปุ่มสำหรับหยุด เมื่อกดปุ่มรีเซ็ตบน Arduino การนับเวลาจะถูกรีเซ็ตเป็นศูนย์บนหน้าจอ

ปุ่มกดสองปุ่มเชื่อมต่อกับพิน # 2 และ # 3 ซึ่งเป็นการขัดจังหวะฮาร์ดแวร์ของไมโครคอนโทรลเลอร์ Arduino / Atmega328P

มาทำความเข้าใจกันว่าการขัดจังหวะคืออะไร:

การขัดจังหวะมีสองประเภท: การขัดจังหวะฮาร์ดแวร์และการขัดจังหวะซอฟต์แวร์ ที่นี่เรากำลังใช้ฮาร์ดแวร์ขัดจังหวะเท่านั้น

การขัดจังหวะเป็นสัญญาณไปยังไมโครคอนโทรลเลอร์ซึ่งจะทำให้ไมโครคอนโทรลเลอร์ตอบสนองต่อเหตุการณ์ได้ทันที

มีพินขัดจังหวะฮาร์ดแวร์เพียงสองพินในบอร์ด Arduino ที่มีไมโครคอนโทรลเลอร์ ATmega328P พิน # 2 และ # 3 Arduino mega มีพินขัดจังหวะฮาร์ดแวร์มากกว่าสองตัว

ไมโครคอนโทรลเลอร์ไม่สามารถทำหน้าที่สองอย่างพร้อมกันได้ ตัวอย่างเช่นการตรวจสอบการกดปุ่มและการนับตัวเลข

ไมโครคอนโทรลเลอร์ไม่สามารถดำเนินการสองเหตุการณ์พร้อมกันได้หากเราเขียนรหัสสำหรับการตรวจสอบการกดปุ่มและการนับตัวเลขการกดปุ่มจะตรวจพบก็ต่อเมื่อไมโครคอนโทรลเลอร์อ่านรหัสตรวจจับการกดปุ่มในช่วงเวลาที่เหลือ (นับตัวเลข) ปุ่มไม่ทำงาน

ดังนั้นจะมีความล่าช้าในการตรวจจับการกดปุ่มและด้วยเหตุผลบางประการหากรหัสหยุดชั่วคราวการกดปุ่มอาจไม่ถูกตรวจพบ เพื่อหลีกเลี่ยงปัญหาประเภทนี้แนะนำให้ใช้การขัดจังหวะ

สัญญาณขัดจังหวะจะได้รับความสำคัญสูงสุดเสมอฟังก์ชันหลัก (บรรทัดหลักของรหัส) จะหยุดทำงานและเรียกใช้ฟังก์ชัน (ส่วนของรหัสอื่น) ที่กำหนดไว้สำหรับการขัดจังหวะนั้น ๆ

สิ่งนี้สำคัญมากสำหรับแอพพลิเคชั่นที่มีความสำคัญต่อเวลาเช่นนาฬิกาจับเวลาหรือระบบรักษาความปลอดภัยเป็นต้นซึ่งโปรเซสเซอร์จำเป็นต้องดำเนินการทันทีเพื่อตอบสนองต่อเหตุการณ์

ใน Arduino เรากำหนดฮาร์ดแวร์ขัดจังหวะเป็น:

attachInterrupt (0 เริ่มต้นขึ้น)

  • “ 0” หมายถึงหมายเลขอินเทอร์รัปต์เป็นศูนย์ (ในไมโครคอนโทรลเลอร์ทุกอย่างเริ่มต้นจากศูนย์) ซึ่งเป็นพิน # 2
  • “ start” คือชื่อของฟังก์ชันขัดจังหวะคุณสามารถตั้งชื่ออะไรก็ได้ที่นี่
  • “ RISING” ถ้าพิน # 2 (ซึ่งเป็นศูนย์ขัดจังหวะ) สูงขึ้นฟังก์ชันขัดจังหวะจะทำงาน

attachInterrupt (1 หยุด RISING)

  • “ 1” หมายถึงอินเทอร์รัปต์หมายเลขหนึ่งซึ่งเป็นพิน # 3
  • “ หยุด” เป็นชื่อของการขัดจังหวะ

นอกจากนี้เรายังสามารถแทนที่ '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---------------//

ตอนนี้สรุปรหัสแล้ว

นาฬิกาจับเวลาพัฒนามาเป็นพิเศษสำหรับ Atheletes

สุดท้ายเรามาเรียนรู้วิธีการอัพเกรดกล้องแนวคิดข้างต้นสำหรับนักกีฬาที่ต้องการพัฒนาทักษะการวิ่งโดยไม่ต้องพึ่งพาผู้อื่นเพื่อเริ่มต้นและหยุดตัวจับเวลา / นาฬิกาจับเวลาที่จำเป็น การเริ่มจับเวลาโดยอัตโนมัติโดยการตรวจจับการเคลื่อนไหวของคุณจะดีกว่าคนที่เริ่ม / หยุดนาฬิกาจับเวลาซึ่งอาจเพิ่มเวลาตอบสนองด้วย

หมายเหตุ: โครงการนี้ออกแบบมาสำหรับการวัดเวลาระหว่างจุด 'A' ถึงจุด 'B' ที่ครอบคลุมโดยผู้ใช้ทีละคน

การติดตั้งประกอบด้วยเลเซอร์สองตัวที่วางไว้ที่จุดเริ่มต้นและจุดสิ้นสุด LDR สองตัวจะวางตรงข้ามกับโมดูลเลเซอร์สองตัว เมื่อนักกีฬาขัดจังหวะเลเซอร์ 'เริ่มต้น' เวลาจะเริ่มคำนวณและเมื่อนักกีฬาไปถึงจุดสิ้นสุดจะขัดจังหวะเลเซอร์ 'สิ้นสุด' และตัวจับเวลาจะหยุดและแสดงเวลาที่ผ่านไประหว่างสองจุด นี่คือวิธีที่ใช้ในการวัดเวลาที่ผ่านไปในแนวคิดที่เสนอ

มาดูส่วนประกอบของวงจรอย่างละเอียดกัน

รายละเอียดการทำงานของส่วนประกอบ

วงจรถูกเก็บไว้ค่อนข้างง่ายประกอบด้วยโมดูล LCD 16 x 2 ตัวต้านทานน้อย LDR สองตัวและปุ่มกด

อินเทอร์เฟซระหว่าง LCD และ arduino เป็นมาตรฐานที่เราสามารถค้นหาการเชื่อมต่อที่คล้ายกันได้ในโครงการอื่น ๆ ที่ใช้ LCD

หมุดอะนาล็อกสองตัว A0 และ A1 ใช้เพื่อตรวจจับการขัดจังหวะของเลเซอร์ พินอะนาล็อก A2 เชื่อมต่อกับปุ่มกดซึ่งใช้สำหรับวางแขนนาฬิกาจับเวลา

ตัวต้านทานสามตัว 4.7K สองตัวและ 10K หนึ่งตัวเป็นตัวต้านทานแบบเลื่อนลงซึ่งช่วยให้พินอินพุตอยู่ที่ระดับต่ำ

โพเทนชิออมิเตอร์ 10K มีไว้สำหรับปรับความคมชัดในโมดูล LCD เพื่อการมองเห็นที่ดีที่สุด

วงจรที่นำเสนอได้ออกแบบให้มีกลไกการตรวจจับความผิดพลาดสำหรับเลเซอร์ หากเลเซอร์ตัวใดตัวหนึ่งทำงานผิดพลาดหรือไม่ได้จัดแนวกับ LDR อย่างเหมาะสมจะแสดงข้อความแสดงข้อผิดพลาดบนจอ LCD

·หากเลเซอร์สตาร์ทไม่ทำงานจะแสดงข้อความ 'เริ่มต้น' เลเซอร์ไม่ทำงาน '

·หากเลเซอร์ STOP ไม่ทำงานจะแสดงข้อความ '' หยุด 'เลเซอร์ไม่ทำงาน'

·หากเลเซอร์ทั้งสองไม่ทำงานจะแสดงข้อความ 'เลเซอร์ทั้งสองไม่ทำงาน'

·หากเลเซอร์ทั้งสองทำงานอย่างถูกต้องจะแสดงข้อความ 'เลเซอร์ทั้งสองทำงานได้ดี'

ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้นจนกว่าจะมีการแก้ไขโมดูลเลเซอร์หรือการจัดตำแหน่งด้วย LDR อย่างถูกต้อง

เมื่อขั้นตอนนี้ไม่มีปัญหาระบบจะเข้าสู่โหมดสแตนด์บายและแสดง“ -system standby-” ณ จุดนี้ผู้ใช้สามารถตั้งค่าได้โดยกดปุ่มกดเมื่อใดก็ได้

กดปุ่มเดียวระบบพร้อมที่จะตรวจจับการเคลื่อนไหวจากผู้ใช้และแสดงข้อความ“ ระบบพร้อมแล้ว”

ผู้วิ่งอาจอยู่ห่างจากเลเซอร์ 'start' ไม่กี่นิ้ว

หากเลเซอร์ 'เริ่มต้น' ขัดจังหวะเวลาจะเริ่มนับและจอแสดงผล 'กำลังคำนวณเวลา……' เวลาจะถูกคำนวณในพื้นหลัง

เวลาที่ผ่านไปจะไม่แสดงจนกว่านักวิ่งจะไปถึง / ขัดจังหวะเลเซอร์ 'หยุด' เนื่องจากการแสดงเวลาที่ผ่านไปบน LCD เหมือนนาฬิกาจับเวลาแบบเดิมจำเป็นต้องมีคำสั่งเพิ่มเติมหลายอย่างเพื่อดำเนินการในไมโครคอนโทรลเลอร์ซึ่งจะทำให้ความแม่นยำของการตั้งค่าลดลงอย่างมาก

หมายเหตุ: กดปุ่มรีเซ็ตบน 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-------//

ต้นแบบของผู้แต่ง:

การอัพเกรดด้วย Split Timer Facility

วงจรนาฬิกาจับเวลาอัตโนมัติที่นำเสนอพร้อมตัวจับเวลาแบบแยกเป็นส่วนเสริมของวงจรนาฬิกาจับเวลาอัตโนมัติซึ่งนาฬิกาจับเวลาจะติดตามเวลาโดยอัตโนมัติทันทีที่นักวิ่งเดี่ยวออกจากจุดเริ่มต้นและตัวจับเวลาจะหยุดและแสดงเวลาที่ผ่านไปเมื่อนักวิ่งถึงจุดสิ้นสุด

บทนำ

โครงการนี้ได้รับการแนะนำโดยหนึ่งในผู้อ่านตัวยงของเว็บไซต์นี้ Mr Andrew Walker

ในโครงการนี้เรากำลังนำเสนอ LDR อีก 4 ตัวเพื่อวัดเวลาแบ่งของนักวิ่งเดี่ยว LDR ทั้งหมดมีทั้งหมด 6 ตัวสามารถวางไว้ในลู่วิ่งโดยมีระยะห่างระหว่างกันเท่ากันหรือขึ้นอยู่กับสถานการณ์และทางเลือกของผู้ใช้

ฮาร์ดแวร์ส่วนใหญ่ยังคงไม่เปลี่ยนแปลงยกเว้นการเพิ่ม LDR 4 ตัว แต่โค้ดดังกล่าวได้รับการปรับเปลี่ยนครั้งใหญ่

แผนผังแสดงการแบ่งเวลา:

นาฬิกาจับเวลาอัตโนมัติแบบแบ่งเวลา

วงจรข้างต้นประกอบด้วยส่วนประกอบไม่กี่ชิ้นและเป็นมิตรกับผู้เริ่มต้น ไม่จำเป็นต้องมีคำอธิบายเพิ่มเติมเพียงต่อสายตามแผนผังวงจร

วิธีการต่อสาย LDR:

LDR 2 แสดงบนแผนภาพวงจรหลักเชื่อมต่อ LDR อีก 4 ตัวแบบขนานดังแสดงในแผนภาพด้านบน

แผนผังเค้าโครง:

ข้างต้นเป็นข้อตกลงพื้นฐานเกี่ยวกับวิธีการวางเลเซอร์ โปรดทราบว่าระยะห่างระหว่าง 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 ถัดไป
•หากเลเซอร์ทั้งหมดอยู่ในแนวเดียวกันกับ LDRs อย่างถูกต้องจอแสดงผลจะไม่แสดงข้อความแสดงข้อผิดพลาด ถ้ามีโปรดจัดตำแหน่งให้เหมาะสม
•ตอนนี้วงจรจะแสดงข้อความ“ ระบบอยู่ในโหมดสแตนด์บาย” ตอนนี้กดปุ่ม 'เริ่ม' และจะแสดง 'ระบบพร้อมใช้งาน'
• ณ จุดนี้เมื่อผู้เล่นเดี่ยวขัดจังหวะลำแสง LDR 1 ตัวจับเวลาจะเริ่มขึ้นและจะแสดงข้อความ“ กำลังคำนวณเวลา….”
•ทันทีที่ผู้เล่นไปถึงจุดสิ้นสุดเช่น LDR 6 ตัวจับเวลาจะหยุดและจะแสดงเวลาแยก 5 ที่บันทึกโดยวงจร
•ผู้ใช้ต้องกดปุ่มรีเซ็ตบน arduino เพื่อรีเซ็ตตัวจับเวลา
เหตุใดนาฬิกาจับเวลาอัตโนมัตินี้จึงไม่สามารถแสดงการจับเวลาแบบสดบนหน้าจอได้เหมือนนาฬิกาจับเวลาแบบเดิม (แต่จะแสดงข้อความคงที่“ กำลังคำนวณเวลา….”)
ในการแสดงเวลาแบบเรียลไทม์ Arduino ต้องดำเนินการคำสั่งเพิ่มเติมในจอ LCD สิ่งนี้จะเพิ่มความล่าช้าไม่กี่ไมโครวินาทีหรือไม่กี่มิลลิวินาทีในการติดตามเวลาหลักของโค้ดซึ่งจะนำไปสู่ผลลัพธ์ที่ไม่ถูกต้อง

หากคุณมีข้อสงสัยเพิ่มเติมโปรดแสดงความคิดเห็นผ่านส่วนความคิดเห็น




คู่ของ: แผ่นข้อมูล Arduino LCD KeyPad Shield (SKU: DFR0009) ถัดไป: วงจรกำเนิดแสง RGB แบบสุ่ม Arduino