โปรเจกต์นี้คือเครื่องวัดรอบ (Tachometer) แบบทำเองที่ทั้งแม่นยำและทำตามง่ายมากๆ น้องรู้มั้ยว่าพี่อยากได้เครื่องวัดรอบสำหรับวัดความเร็วมอเตอร์ DC ตัวนึง แต่หาวิธีทำที่เชื่อถือได้ไม่เจอเลย จนต้องลองผิดลองถูกมาหลายวิธี กว่าจะสำเร็จแบบที่เห็นนี่แหละ
Speed and Spin: The Digital Tachometer
มอเตอร์ตัวนั้นมันหมุนเร็วแค่ไหนกันนะ? Easy Peasy Tachometer ตัวนี้คือเครื่องมือวัดแบบไม่สัมผัสที่ใช้คำนวณ รอบต่อนาที (Revolutions Per Minute หรือ RPM) โดยเฉพาะ เรียกได้ว่าเป็นอาวุธลับของนักสร้างหุ่นยนต์, นักแข่งรถ RC และสายโดรนตัวยงเลยทีเดียว
หลักการแบบ "ขัดจังหวะ"
- จุดสังเกต (Marker): แปะเทปสีขาวสะท้อนแสงแค่ 1 ชิ้นลงบนขอบล้อสีดำหรือใบพัดที่เราอยากวัด
- เซนเซอร์ (Sensor): ใช้ เซนเซอร์ตรวจจับสิ่งกีดขวางแบบอินฟราเรด (IR Obstacle Sensor) ตั้งจ่อไปที่วัตถุที่กำลังหมุน มันจะ "เห็น" เทปสีขาวแค่ครั้งเดียวต่อการหมุน 1 รอบพอดี ส่งผลเป็นพัลส์ดิจิทัล HIGH ออกมา
- การขัดจังหวะระดับฮาร์ดแวร์ (Hardware Interrupt): การวัดพัลส์ความเร็วสูงด้วย
digitalRead()นั้นช้าเกินไป! เราเลยใช้ Hardware Interrupt (attachInterrupt()) ของ Arduino แทน มันจะบังคับให้โปรเซสเซอร์หยุดทุกอย่างชั่วคราวเพื่อนับพัลส์ทันทีที่มันเกิดขึ้น
คณิตศาสตร์คำนวณ RPM
โค้ดของเราจะนับว่ามีพัลส์เกิดขึ้นกี่ครั้งในเวลา 1 วินาทีพอดี จากนั้นคูณเลขนั้นด้วย 60 ก็จะได้ค่า RPM ออกมา สมมติเห็นพัลส์ 50 ครั้งใน 1 วินาที แสดงว่ามอเตอร์กำลังหมุนที่ 3,000 RPM จัดไปวัยรุ่น!
ตั้งตั๋วฮาร์ดแวร์
- Arduino Uno/Nano: ตัวนับความเร็วสูง
- โมดูลเซนเซอร์อินฟราเรดแบบสะท้อนกลับ (TCRT5000): เซนเซอร์ระยะใกล้ที่แม่นยำมาก
- จอแสดงผล LCD 16x2: เอาไว้โชว์ค่า RPM แบบเป๊ะๆ
- มอเตอร์หรือพัดลม: เอาไว้เป็นหนูทดลองนั่นเอง
โปรเจกต์นี้ถือเป็นคลาสเรียนระดับมาสเตอร์สำหรับเรื่อง Interrupts บน Arduino เลยนะน้อง เป็นคอนเซปต์สำคัญมากสำหรับโปรเจกต์ไหนก็ตามที่ต้องพึ่งพาการจับเวลาแบบแม่นยำและความเร็วสูง ห้ามช็อตนะตัวนี้! สู้งานนะน้อง