- โมดูลเซ็นเซอร์ความเร็วออปติคัล LM-393 แบบช่องอินฟราเรด
- การวัดความเร็วและระยะทางที่เดินทางเพื่อคำนวณค่าโดยสาร
ปัจจุบันมิเตอร์ดิจิทัลกำลังเข้ามาแทนที่มิเตอร์อนาล็อกในทุกภาคส่วนไม่ว่าจะเป็นมิเตอร์ไฟฟ้าหรือมิเตอร์ค่าโดยสารแท็กซี่ เหตุผลหลักคือมาตรวัดแบบอนาล็อกมีชิ้นส่วนกลไกที่มักจะสึกหรอเมื่อใช้งานเป็นเวลานานและไม่แม่นยำเท่ากับมิเตอร์ดิจิตอล
ตัวอย่างที่ดีคือมาตรวัดความเร็วแบบอะนาล็อกและเครื่องวัดระยะทางที่ใช้ในรถมอเตอร์ไซค์รุ่นเก่าเพื่อวัดความเร็วและระยะทาง พวกเขามีชิ้นส่วนพิเศษที่เรียกว่าปีกนกและชั้นวางซึ่งใช้สายเคเบิลเพื่อหมุนพินของมาตรวัดความเร็วเมื่อล้อหมุน สิ่งนี้จะเสื่อมสภาพเมื่อใช้งานเป็นเวลานานและยังต้องเปลี่ยนและบำรุงรักษาอีกด้วย
ในมิเตอร์ดิจิทัลแทนที่จะใช้ชิ้นส่วนเชิงกลเซ็นเซอร์บางตัวเช่นตัวขัดขวางแสงหรือเซ็นเซอร์ฮอลล์จะใช้ในการคำนวณความเร็วและระยะทาง แม่นยำกว่ามิเตอร์อนาล็อกและไม่ต้องการการบำรุงรักษาใด ๆ เป็นเวลานาน ก่อนหน้านี้เราได้สร้างโครงการมาตรวัดความเร็วแบบดิจิทัลจำนวนมากโดยใช้เซ็นเซอร์ต่างๆ:
- DIY Speedometer โดยใช้ Arduino และการประมวลผลแอพ Android
- วงจรวัดความเร็วแบบดิจิตอลและเครื่องวัดระยะทางโดยใช้ไมโครคอนโทรลเลอร์ PIC
- การวัดความเร็วระยะทางและมุมสำหรับหุ่นยนต์เคลื่อนที่โดยใช้เซ็นเซอร์ LM393 (H206)
วันนี้ในการกวดวิชานี้เราจะทำให้ต้นแบบของที่มิเตอร์ค่าโดยสารรถแท็กซี่ดิจิตอลใช้ Arduino โครงการนี้คำนวณความเร็วและระยะทางที่เดินทางโดยล้อของรถแท็กซี่และแสดงอย่างต่อเนื่องบนจอ LCD 16x2 และตามระยะทางที่เดินทางจะสร้างจำนวนค่าโดยสารเมื่อเรากดปุ่มกด
ภาพด้านล่างแสดงการตั้งค่าโครงการ Digital Taxi Meter ทั้งหมด
ต้นแบบนี้มีแชสซีรถ RC ที่มีโมดูลเซ็นเซอร์ความเร็วและล้อตัวเข้ารหัสที่ติดอยู่กับมอเตอร์ เมื่อวัดความเร็วแล้วเราสามารถวัดระยะทางที่เดินทางและค้นหามูลค่าค่าโดยสารได้โดยกดปุ่ม เราสามารถตั้งความเร็วของล้อโดยใช้โพเทนชิออมิเตอร์ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการใช้โมดูล LM-393 Speed Sensor กับ Arduino โปรดไปที่ลิงค์ มาดูคำแนะนำสั้น ๆ ของโมดูลเซ็นเซอร์ความเร็ว
โมดูลเซ็นเซอร์ความเร็วออปติคัล LM-393 แบบช่องอินฟราเรด
นี่คือโมดูลประเภทสล็อตที่สามารถใช้สำหรับวัดความเร็วในการหมุนของล้อเข้ารหัส โมดูลเซ็นเซอร์ความเร็วนี้ทำงานโดยอาศัยตัวขัดขวางออปติคัลประเภทสล็อตหรือที่เรียกว่าเซ็นเซอร์แหล่งกำเนิดแสง โมดูลนี้ต้องการแรงดันไฟฟ้า 3.3V ถึง 5V และสร้างเอาต์พุตดิจิตอล ดังนั้นจึงสามารถเชื่อมต่อกับไมโครคอนโทรลเลอร์ได้
เซ็นเซอร์แสงอินฟราเรดประกอบด้วยแหล่งกำเนิดแสง (IR-LED) และเซ็นเซอร์โฟโตทรานซิสเตอร์ ทั้งสองถูกวางโดยให้มีช่องว่างเล็ก ๆ ระหว่างพวกเขา เมื่อวัตถุถูกวางไว้ระหว่างช่องว่างของ IR LED และโฟโตทรานซิสเตอร์มันจะขัดขวางลำแสงทำให้โฟโต้ทรานซิสเตอร์หยุดส่งกระแส
ดังนั้นด้วยเซ็นเซอร์นี้จึงใช้แผ่นดิสก์แบบเจาะรู (Encoder Wheel) ที่สามารถต่อเข้ากับมอเตอร์และเมื่อล้อหมุนด้วยมอเตอร์มันจะขัดจังหวะลำแสงระหว่าง IR LED และโฟโตทรานซิสเตอร์ที่ทำให้เอาต์พุตเปิดและปิด (การสร้างพัลส์)
ดังนั้นจึงสร้างเอาต์พุตสูงเมื่อมีการขัดจังหวะระหว่างแหล่งที่มาและเซ็นเซอร์ (เมื่อวัตถุใด ๆ วางอยู่ระหว่าง) และสร้างเอาต์พุตต่ำเมื่อไม่มีวัตถุวาง ในโมดูลเรามี LED เพื่อระบุการขัดจังหวะด้วยแสงที่เกิดขึ้น
โมดูลนี้มาพร้อมกับLM393 Comparator ICซึ่งใช้ในการสร้างสัญญาณ HIGH และ LOW ที่แม่นยำที่ OUTPUT ดังนั้นโมดูลนี้บางครั้งจะเรียกว่าเป็นเซ็นเซอร์ LM393 ความเร็ว
การวัดความเร็วและระยะทางที่เดินทางเพื่อคำนวณค่าโดยสาร
ในการวัดความเร็วของการหมุนเราจำเป็นต้องทราบจำนวนสล็อตที่มีอยู่ในวงล้อเข้ารหัส ฉันมีวงล้อเอนโค้ดเดอร์ที่มีช่อง 20 ช่อง เมื่อพวกเขาหมุนการหมุนหนึ่งครั้งเรามี 20 พัลส์ที่เอาต์พุต ดังนั้นในการคำนวณความเร็วเราต้องการจำนวนพัลส์ที่ผลิตได้ต่อวินาที
ตัวอย่างเช่น
หากมี 40 พัลส์ในหนึ่งวินาที
ความเร็ว = Noo. จำนวนพัลส์ / จำนวนสล็อต = 40/20 = 2RPS (การปฏิวัติต่อวินาที)
สำหรับการคำนวณความเร็วใน RPM (รอบต่อนาที) ให้คูณด้วย 60
ความเร็วใน RPM = 2 X 60 = 120 RPM (รอบต่อนาที)
การวัดระยะทาง
การวัดระยะทางที่ล้อเดินทางนั้นง่ายมาก ก่อนคำนวณระยะทางควรทราบเส้นรอบวงของล้อ
เส้นรอบวงของล้อ = π * d
โดยที่ d คือเส้นผ่านศูนย์กลางของล้อ
ค่าπคือ 3.14
ฉันมีล้อ (ล้อรถ RC) ขนาดเส้นผ่านศูนย์กลาง 6.60 ซม. เส้นรอบวงคือ (20.7 ซม.)
ดังนั้นในการคำนวณระยะทางที่เดินทางให้คูณจำนวนพัลส์ที่ตรวจไม่พบด้วยเส้นรอบวง
ระยะทางที่เดินทาง = เส้นรอบวงของล้อ x (จำนวนพัลส์ / จำนวนช่อง)
ดังนั้นเมื่อวงล้อที่มีเส้นรอบวง 20.7 ซม. รับ 20 พัลส์ซึ่งเป็นการหมุนหนึ่งรอบของวงล้อเข้ารหัสระยะทางที่เดินทางโดยล้อจะคำนวณโดย
ระยะทาง = 20.7 x (20/20) = 20.7 ซม
ในการคำนวณระยะทางเป็นเมตรให้หารระยะทางเป็นหน่วยซม. ด้วย 100
หมายเหตุ: นี่คือล้อรถ RC ขนาดเล็กในรถยนต์แบบเรียลไทม์จะมีล้อที่ใหญ่กว่านี้ ดังนั้นฉันสมมติว่าเส้นรอบวงของล้อที่จะเป็น 230cm ในการกวดวิชานี้
การคำนวณค่าโดยสารตามระยะทางที่เดินทาง
หากต้องการรับจำนวนค่าโดยสารทั้งหมดให้คูณระยะทางที่เดินทางด้วยอัตราค่าโดยสาร (จำนวนเงิน / เมตร)
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
ถัดไปแนบสองอินเตอร์รัปต์ภายนอก การขัดจังหวะครั้งแรกทำให้ Arduino พิน 2 เป็นพินขัดจังหวะและเรียก ISR (นับ) เมื่อตรวจพบ RISING (LOW TO HIGH) ที่พิน 2 พิน 2 นี้เชื่อมต่อกับเอาต์พุต D0 ของโมดูลเซ็นเซอร์ความเร็ว
และอันที่สองทำให้ Arduino พิน 3 เป็นพินขัดจังหวะและเรียก ISR (สร้างแฟร์) เมื่อตรวจพบ HIGH ที่พิน 3 พินนี้เชื่อมต่อกับปุ่มกดด้วยตัวต้านทานแบบดึงลง
attachInterrupt (digitalPinToInterrupt (2), นับ, เพิ่มขึ้น); attachInterrupt (digitalPinToInterrupt (3), สร้าง, สูง);
5. ต่อไปมาดูเกี่ยวกับ ISR ที่เราใช้ที่นี่:
ISR1- count () ISR ถูกเรียกเมื่อ RISING (LOW TO HIGH) เกิดขึ้นที่ขา 2 (เชื่อมต่อกับเซ็นเซอร์ความเร็ว)
นับเป็นโมฆะ () // ISR สำหรับการนับจากเซ็นเซอร์ความเร็ว { counter ++; // เพิ่มค่าตัวนับโดย การหมุน หนึ่งครั้ง++; // เพิ่มค่าการหมุนโดยการหน่วงเวลา หนึ่งครั้ง(10); }
ISR2- timerIsr () ISR ถูกเรียกทุก ๆ หนึ่งวินาทีและเรียกใช้บรรทัดเหล่านั้นที่อยู่ภายใน ISR
เป็นโมฆะ timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); ความเร็วลอย = (ตัวนับ / 20.0) * 60.0; การหมุนลอย = 230 * (หมุน / 20); Rotationsinm = การหมุน / 100; lcd.setCursor (0,0); lcd.print ("Dist (ม.):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("ความเร็ว (RPM):"); lcd.print (ความเร็ว); เคาน์เตอร์ = 0; int analogip = analogRead (A0); int Motorspeed = แผนที่ (analogip, 0,1023,0,255); analogWrite (5, Motorspeed); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), นับ, เพิ่มขึ้น); }
ฟังก์ชันนี้มีบรรทัดที่ถอด Timer1 และ Interrupt pin2 ออกก่อนเนื่องจากเรามีคำสั่งการพิมพ์ LCD ภายใน ISR
สำหรับการคำนวณSPEED ใน RPMเราใช้โค้ดด้านล่างโดยที่ 20.0 คือจำนวนสล็อตที่ตั้งไว้ล่วงหน้าในวงล้อเอนโค้ดเดอร์
ความเร็วลอย = (ตัวนับ / 20.0) * 60.0;
และสำหรับการคำนวณระยะทางด้านล่างรหัสจะใช้:
การหมุนลอย = 230 * (หมุน / 20);
เส้นรอบวงของล้อจะถือว่าเป็น 230 ซม. (เนื่องจากเป็นเรื่องปกติสำหรับรถยนต์แบบเรียลไทม์)
ถัดไปแปลงระยะทางเป็น m โดยหารระยะทางด้วย 100
Rotationsinm = การหมุน / 100;
หลังจากนั้นเราจะแสดง SPEED และ DISTANCE บนจอ LCD
lcd.setCursor (0,0); lcd.print ("Dist (ม.):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("ความเร็ว (RPM):"); lcd.print (ความเร็ว);
สำคัญ:เราต้องรีเซ็ตตัวนับเป็น 0 เพราะเราต้องรับจำนวน pluses ที่ตรวจพบต่อวินาทีดังนั้นเราจึงใช้บรรทัดนี้
เคาน์เตอร์ = 0;
จากนั้นอ่านพินอะนาล็อก A0 และแปลงเป็นค่าดิจิตอล (0 ถึง 1023) และแมปค่าเหล่านั้นเพิ่มเติมเป็น 0-255 สำหรับเอาต์พุต PWM (การตั้งค่าความเร็วของมอเตอร์) และสุดท้ายเขียนค่า PWM เหล่านั้นโดยใช้ฟังก์ชัน analogWrite ที่เชื่อมต่อกับ ULN2003 มอเตอร์ IC
int analogip = analogRead (A0); int Motorspeed = แผนที่ (analogip, 0,1023,0,255); analogWrite (5, Motorspeed);
ISR3: createfare () ISR ใช้เพื่อสร้างจำนวนค่าโดยสารตามระยะทางที่เดินทาง ISR นี้ถูกเรียกเมื่อตรวจพบพินอินเทอร์รัปต์ 3 HIGH (เมื่อกดปุ่มกด) ฟังก์ชันนี้จะปลดการขัดจังหวะที่พิน 2 และตัวจับเวลาขัดจังหวะจากนั้นจะล้าง LCD
โมฆะการสร้าง() { detachInterrupt (digitalPinToInterrupt (2)); ปักหมุดที่ 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("ค่าโดยสาร Rs:"); รูปีลอย = rotationinm * 5; lcd.print (รูปี); lcd.setCursor (0,1); lcd.print ("Rs 5 ต่อเมตร"); }
หลังจากนั้นระยะทางที่เดินทางจะคูณด้วย 5 (ฉันใช้ 5 สำหรับอัตรา INR 5 / เมตร) คุณสามารถเปลี่ยนได้ตามความต้องการของคุณ
รูปีลอย = rotationinm * 5;
หลังจากคำนวณค่าจำนวนเงินแล้วจะแสดงบนจอ LCD ที่เชื่อมต่อกับ Arduino
lcd.setCursor (0,0); lcd.print ("ค่าโดยสาร Rs:"); lcd.print (รูปี); lcd.setCursor (0,1); lcd.print ("Rs 5 ต่อเมตร");
รหัสที่สมบูรณ์และวิดีโอสาธิตได้รับด้านล่าง
คุณสามารถปรับปรุงต้นแบบนี้เพิ่มเติมได้โดยเพิ่มความแม่นยำความทนทานและเพิ่มคุณสมบัติอื่น ๆ เช่นแอพ Android การชำระเงินดิจิทัล ฯลฯ และพัฒนาเป็นผลิตภัณฑ์