ข้ามไปที่เนื้อหาหลัก

โครงงานเรื่อง ล้อวัดระยะทางด้วย Encoder (งานที่ 17)


โครงงานเรื่อง ล้อวัดระยะทางด้วย Encoder

1
รูปที่ 1 การต่อใช้งานล้อวัดระยะทางด้วย Encoder

ที่มาของโครงงาน ล้อวัดระยะทางด้วยEncoder
ปัจจุบันเทคโนโลยีมีบทบาทที่สำคัญอย่างมากต่อการดำรงชีวิตของเราในทุก ๆ เรื่อง อาทิเช่น การเรียน การทำงาน หรือแม้กระทั่งการกินอาหารของเรา นั้นแสดงถึงว่า เทคโนโลยีมีบทบาทที่สำคัญอย่างมากทำให้ความเจริญได้มีการขยายตัวออกไปในที่ห่างไกลมากยิ่งขึ้น นอกจากนี้การขยายตัวของเมืองออกไปยังที่ต่าง  ๆ นั้น สิ่งจำเป็นในการดำรงชีวิตอย่างสาธารณูปโภคอาทิเช่น ไฟฟ้า สัญญาณโทรศัพท์ ฯลฯ ก็ต้องมีการขยายตัวตามไปด้วย ดังนั้น การดำเนินการติดตั้งสาธารณูปโภคด้านนี้ต้องมีการติดตั้งเสา แล้วต้องมีการคำนวณระยะทางอย่างเหมาะสมเพื่อความแม่นยำ มีประสิทธิภาพ และเกิดประโยชน์อย่างสูงสุด และนอกจากที่จะนำไปใช้ประโยชน์ในการติดตั้งเสา แล้วยังสามารถนำไปใช้ประโยชน์ในด้านอื่นได้อีกด้วย อาทิเช่น การวัดระยะในการติดตั้งเครื่องปรับอากาศ การวัดระยะเพื่อติดตั้งเครื่องสูบลม หรืออื่น  ๆ ที่เกี่ยวข้องกับการวัดระยะทาง หรืออาจนำไปต่อยอดเป็นการตีเส้นถนนได้อีกด้วย ดังนั้นข้าพเจ้าจึงได้คิดหัวข้อโครงงาน ล้อวัดระยะทางด้วย encoder ทั้งนี้เพราะได้ศึกษาว่า encoder เป็นมอเตอร์ที่นิยมใช้วัดระยะการหมุนของมอเตอร์อยู่แล้ว เนื่องจากมีความละเอียด แม่นยำจึงได้นำมาประยุกต์ใช้กับโครงงานนี้ คือ ล้อวัดระยะทางด้วย encoder นั่นเอง
คุณสมบัติของโครงงาน
  • สามารถวัดระยะทางได้ในหน่วยเมตร
  • สามารถวัดระยะทางได้สูงสุด 5 กิโลเมตร
2
รูปที่ 2 ชุดล้อที่ใช้ในการเคลื่อนที่วัดระยะทาง
  • การใช้งาน Encoder
       ในปัจจุบันอุตสาหกรรมต้องการตรวจสอบการเคลื่อนที่แบบหมุน ดังนั้นอุปกรณ์ที่ใช้คงหนีไม่พ้น Encoder ซึ่งจะทำหน้าที่แปลงการหมุนทางกลให้เป็นสัญญาณไฟฟ้าที่อยู่ในรูปของ Pulse เพื่อนำไปใช้แสดงผลหรือเชื่อมต่อต่อไป Encoder แบ่งตามรูปแบบการให้ข้อมูลได้ 2 ชนิด คือ Incremental กับ Absolute

3
รูปที่ 3ส่วนประกอบหลักของ Encoder
  • ส่วนประกอบหลักของ Encoder
  1. เพลา Shaft ใช้สำหรับต่อเข้ากับวัตถุที่หมุน เช่น มอเตอร์
  2. แผ่นดิสซ์ ( Code หรือ Pulse Disc )  เป็นแผ่นที่มีแทร็กหรือร่องเล็ก ๆมีทั้งส่วนที่โปร่งหรือทึบแสง เพื่อให้       แสงอินฟาเรดลอดผ่านได้
  3. แหล่งแสง ( Light Source ) เป็น LED
  4. Photodetector หรือ Photodiode ใช้รับแสงจาก LED เพื่อแปลงไปเป็นรหัสข้อมูล

4
รูปที่ 4แสดงสัญญาณรูปคลื่นสี่เหลี่ยมของแสงเฟส A กับเฟส B
การต่อวงจรของบอร์ด STM32-Discovery
5
รูปที่ 5การต่อขาที่ใช้งานกับบอร์ด STM32-Discovery

ขาที่ต่อใช้งานกับบอร์ด STM32_Discovery
6

การต่อ LCD
66
รูปที่ 6การต่อ LCD กับขาที่ใช้งานกับบอร์ด STM32-Discovery

ขาที่ต่อใช้งานกับบอร์ด STM32_Discovery
7

การต่อ Encoder HEDS 5540 A05
77
รูปที่ 7การต่อใช้งาน Encoder HEDS 5540 A05
ส่วนประกอบของโครงงาน
  1. บอร์ด STM32-Discovery
  2. ล้อ สำหรับวัดระยะทาง รัศมี 7 มิลลิเมตร
  3. แกนเพลา 6 มิลลิเมตร
  4. Encoder HEDS 5540 A05
  5. แหล่งจ่าย 5 v.
  6. จอ LCD 16 × 2
8
รูปที่ 8 แหล่งจ่าย 5 v. ให้กับบอร์ด STM32-Discovery กับ Encoder
โปรแกรม Simulink ที่สมบูรณ์ของโครงงานล้อวัดระยะทางด้วย Encoder
9
รูปที่ 9โปรแกรม Simulink ที่สมบูรณ์ของโครงงาน

การเขียน Simulink ของโครงงานล้อวัดระยะทางด้วย Encoder หลักการทำงานคือเราจะเลือกใช้บล็อก Encoder Read เพื่อรับสัญญาณพัลล์ ( Pulse ) จาก Encoder มา โดยที่สัญญาณที่ออกมาจาก Encoder จะมีด้วยกัน 2 channel คือ A กับ B หลังจากนั้นจะทำการนำสัญญาณพัลล์ที่ได้มาไป หารด้วย 2 แล้วนำเศษที่ได้มาคิด คือจะได้ เศษ 1 กับเศษ 0 จากนั้นนำไปเปรียบเทียบกับ 0 แล้วจากนั้นถ้าค่าที่ได้มากกว่า 0 ก็นำไปบวกกันเพิ่มขึ้นเรื่อย ๆ  แต่ถ้าน้อยกว่า 0 ก็จะนำไปลบกัน จากกนั้นเราจะได้เป็นสัญญาณพัลล์ที่เราสร้างขึ้นออกมา สุดท้ายเราจะไปคูณกับค่าคงที่ซึ่งเป็น ตัวเลขที่ได้จากการคำนวณว่า ถ้าหมุน Encoder ไปครบ 1 รอบ และทำให้ล้อหมุนไปครบ 1 รอบได้ระยะทาง จากนั้นก็ไปแสดงผลบน LCD
อธิบายส่วนต่าง ๆ ของโปรแกรม
10
รูปที่ 10บล็อกการประกาศตัวแปร
อธิบายโปรแกรม
เป็นการประกาศเรียกใช้งานบอร์ด STM32-Discoveryการ setup LCD และการประกาศตัวแปร
  • ส่วนที่ 1 คือ เป็นการประกาศเรียกใช้งานบอร์ด STM32-Discovery
  • ส่วนที่ 2 คือ การ setup LCD
  • ส่วนที่ 3 คือ เป็นการประกาศตัวแปรด้วย Volatile Data Storageชื่อ count1
  • ส่วนที่ 4 คือ เป็นการประกาศตัวแปรด้วย Volatile Data Storageชื่อ count2
  • ส่วนที่ 5 คือ เป็นการประกาศตัวแปรด้วย Volatile Data Storageชื่อ output
11
รูปที่ 11บล็อกการจ่ายพัลล์ให้กับ Digital Output
อธิบายโปรแกรม
เป็นการสั่งจ่าย Pulse ให้กับ Digital Output เพื่อเป็นการระบุว่าโปรแกรมที่ได้ทำการโหลดได้เข้าบอร์ดเรียบร้อยแล้ว
  • ส่วนที่ 6คือ เป็นการสั่ง pulse ให้กับ Digital Output (สั่งให้หลอดไฟติด) ที่อยู่บนบอร์ด STM32-Discovery
  • ส่วนที่ 7 คือ Digital Output บนบอร์ด STM32-Discovery ไปสั่งให้หลอดไฟบนบอร์ดติด
12
รูปที่ 12บล็อก Subsystem และ Subsystem1
 13
 รูปที่ 13โปรแกรมย่อยภายในบล็อก Subsystem และ Subsystem1

 อธิบายโปรแกรม     
เป็นการแสดงข้อความ กับค่าที่ได้จากการเขียนโปรแกรมมาแสดงบนหน้าจอ LCD
  • ส่วนที่ 8 คือการกำหนดให้ไม่ต้องเคลียร์ หน้าจอ LCD โดยใช้ค่าคงที่เป็นเลข 0
  • ส่วนที่ 9 คือการบอกตำแหน่งของตัวอักษรที่แสดงบน LCD โปรแกรมนี้กำหนดให้แสดงที่ตำแหน่งเริ่มต้น X = 0 ซึ่งเป็นตำแหน่งแรก
  • ส่วนที่ 10 คือการบอกตำแหน่งของตัวอักษรที่แสดงบน LCD โปรแกรมนี้กำหนดให้แสดงที่ตำแหน่งเริ่มต้น y = 0 ซึ่งเป็นบรรทัดแรก
  • ส่วนที่ 11 คือแสดงข้อความบน LCD เป็น String โดยอ่านข้อมูลจากVolatile Data Storage Read ตัวแปรที่ชื่อว่าCount1
  • ส่วนที่ 12คือ การกำหนดให้แสดงข้อความด้วย LCD
  • ส่วนที่ 13คือการกำหนดให้เคลียร์หน้าจอ LCD โดยใช้ค่าคงที่เป็นเลข 0
  • ส่วนที่ 14คือการบอกตำแหน่งของตัวอักษรที่แสดงบน LCD โปรแกรมนี้กำหนดให้แสดงที่ตำแหน่งเริ่มต้น X = 0 ซึ่งเป็นตำแหน่งแรก
  • ส่วนที่ 15คือการบอกตำแหน่งของตัวอักษรที่แสดงบน LCD โปรแกรมนี้กำหนดให้แสดงที่ตำแหน่งเริ่มต้น y = 1ซึ่งเป็นบรรทัดที่สอง
  • ส่วนที่ 16คือแสดงข้อความบน LCD เป็น String โดยอ่านข้อมูลจากVolatile Data Storage Read ตัวแปรที่ชื่อว่าOutput
  • ส่วนที่ 17 คือ การกำหนดให้แสดงข้อความด้วย LCD
14
 รูปที่ 14การอ่านค่าจากบล็อก Encoder Read

อธิบายโปรแกรม
  • ส่วนที่ 18 คือ เป็น block การอ่าน Encoder โดยโปรแกรมเราจะเลือกใช้ Timer3 แล้ว Input Pin C6 และ B5
  • ส่วนที่ 19 คือ ค่าคงที่ 1 ที่นำมาคูณเพื่อเปลี่ยนค่าที่รับมาให้เป็น double
  • ส่วนที่ 20 คือ เครื่องหมายคูณ ที่นำมาใช้เพื่อทำให้ค่าที่จะนำไปใช้ต่อเป็น double
  • ส่วนที่ 21 คือ S-Function Builder1 เป็นการเขียนโค้ดด้วยภาษา C
  • ส่วนที่ 22 การรับค่า Position หรือ Count ที่อ่านได้จาก Encoder มาเก็บไว้ที่ String Buffer Processing ในตัวแปรที่ชื่อว่า count1

15
รูปที่ 15การรับค่าจาก Encoder มาคำนวณเพื่อหาระยะทาง
อธิบายโปรแกรม
  • ส่วนที่ 23 คือ การเช็คค่าที่รับเข้ามาว่า มากกว่า 0 หรือไม่ เพื่อตรวจสอบค่าที่เป็นบวก โดยในโปรแกรมจะรับค่ามาจาก Output ที่ออกจาก S-Function
  • ส่วนที่ 24 คือ การเช็คค่าที่รับเข้ามาว่า น้อยกว่า 0 หรือไม่ เพื่อตรวจสอบค่าที่เป็นลบ โดยในโปรแกรมจะรับค่ามาจาก Output ที่ออกจาก S-Function
  • ส่วนที่ 25 คือ การแปลงค่าที่รับมาด้วยคำสั่ง Data Type Conversion แปลงให้เป็น int8
  • ส่วนที่ 26 คือ การแปลงค่าที่รับมาด้วยคำสั่ง Data Type Conversion แปลงให้เป็น int8
  • ส่วนที่ 27 คือ การอ่านค่าด้วย Volatile Data Storage Read ตัวแปรที่ชื่อว่า count2
  • ส่วนที่ 28 คือ การนำค่าคงที่ 1 มาคูณเพื่อทำให้ค่าที่ต้องการเป็น double เนื่องจาก output ที่ออกจาก S-Function Builder2 เป็น int32
  • ส่วนที่ 29 คือ S-Function Builder2 เป็นการเขียนโค้ดด้วยภาษา C
  • ส่วนที่ 30 คือ ค่าคงที่ที่ได้จากการคำนวณหาว่า Encoder จ่าย pulse ออกมาเท่าไหร่จึงจะทำให้ล้อวิ่งไปได้ครบ 1 รอบ
  • ส่วนที่ 31 คือ เครื่องหมายคูณ ที่นำมาใช้เพื่อทำให้ค่าที่จะนำไปใช้เป็น double
  • ส่วนที่ 32 คือ เครื่องหมายคูณ ที่นำมาใช้เพื่อคูณกับค่าที่ได้จากการคำนวณ pulse กับการหมุนของล้อ
  • ส่วนที่ 33 คือ การรับค่าด้วย String Buffer Processing มาเก็บไว้ในตัวแปรที่ชื่อ Count2

16
รูปที่ 16บล็อก S-Function Builder1
อธิบายโปรแกรมในส่วน Aคือคำสั่งS – Function Builder เป็นการเขียนโค้ดด้วยภาษา C
17
รูปที่ 17โปรแกรมภายในบล็อก S-Function Builder1
               จากโค้ดคำสั่งภาษา C การใช้ %2 หมายถึง การนำค่ามา หารด้วย 2 แล้วเอาเฉพาะเศษ ที่ได้จากการหาร ในส่วนของโปรแกรมนี้ เราหารเอาเศษเพื่อจะสร้างเป็นสัญญาณ Digital ขึ้นมา และนำเศษที่ได้จากการหารซึ่งเป็น Output ไปเปรียบเทียบต่อไป

18
รูปที่ 18บล็อก S-Function Builder2
อธิบายโปรแกรมในส่วน Aคือคำสั่ง S – Function Builder เป็นการเขียนโค้ดด้วยภาษา C
19
รูปที่ 19โปรแกรมภายในบล็อก S-Function Builder2

กำหนดตัวแปร
  1. Output เป็นค่าที่ออกจากการคำนวณ โดยนำ pulse ที่รับมา นำมาบวกหรือลบกัน ตามทิศทางการหมุน แล้วส่งเป็น Output ออกไปใช้งาน
  2. countOutเป็นการสร้างเพื่อค่าไว้ในตัวแปรแล้วนำกลับมาใช้ใหม่ ใน Input ที่ชื่อว่า countIN
  3. Position1 เป็น Input ค่าบวกที่ได้จากการเปรียบเทียบ
  4. Position2 เป็น Input ค่าลบที่ได้จากการเปรียบเทียบ
  5. countINเป็น Input ที่รับค่ามาจาก countOut แล้วเก็บไว้เพื่อส่งเข้าไปใน S-Function
จากโค้ดคำสั่งภาษา Cเป็นการสร้างเงื่อนไขจาก Direction ซึ่งเป็น Input ที่รับมาจากขา Direction ของ Encoder ซึ่ง Direction ที่มาจาก Encoder เป็นการบอกทิศทางการหมุนของ Encoder ซึ่งจะออกมาเป็นค่าคงที่ 2 ตัวคือ 0 กับ 1 โดยที่
  • ถ้า Direction = 0 ให้นำ Position1 , Position2 , countIN มาบวกกัน
  • ถ้า Direction = 1 ให้นำ Position1 , Position2 , countIN มาลบกัน
 หลักการทำงานของโครงงาน
       โครงงานล้อวัดระยะทางนี้มีหลักการทำงานคือ เมื่อเรากำหนดจุดเริ่มต้นก็ต้องกดปุ่มรีเซ็ตที่บอร์ด STM32-Discovery จากนั้นก็จะเริ่มการทำงานได้ โดยเคลื่อนล้อไปข้างหน้ากับข้างหลัง โดยที่ถ้าล้อเคลื่อนที่ไปข้างหน้าระยะทางที่ได้ออกมาจะแสดงเป็นค่าบวก และถ้าเคลื่อนล้อไปข้างหลังระยะทางจะลดลงเรื่อย ๆ จนกระทั่งถึงจุดเริ่มต้นแล้วล้อยังเคลื่อนที่เลยออกไประยะทางที่ได้ออกมาจะแสดงเป็นค่าลบ

20
รูปที่ 20โครงงานล้อวัดระยะทางด้วย Encoder
1. ล้อเคลื่อนที่ไปข้างหน้าระยะทางเป็นบวก
21
รูปที่ 21ล้อเคลื่อนที่ไปข้างหน้า ระยะทางที่แสดงออกมาเป็นค่าบวก
 2. ล้อเคลื่อนไปถอยหลัง ระยะทางจะลดลงเรื่อย ๆ
22
รูปที่ 22 ล้อเคลื่อนที่ถอยหลัง ระยะทางลดลงเรื่อย ๆ
3. ล้อเคลื่อนไปข้างหลังเลยจุดเริ่มต้น ระยะทางจะที่แสดงอกมาจะเป็นลบ
23
รูปที่ 23ล้อเคลื่อนที่ไปถอยหลัง เลยจุดเริ่มต้นระยะทางจะแสดงออกมาเป็นลบ
การทดลอง
  1. กำหนดระยะทางที่วัด 5เมตร
24
รูปที่ 24 เทปกาวติดเส้นระยะทางที่จะใช้ในการทดลอง ยาว 2.5 เมตร
ผลการทดลอง
25
รูปที่ 25 จุดเริ่มต้น ต้องกดรีเซ็ตให้ระยะเท่ากับศูนย์

ผลการทดลอง
26
รูปที่ 26 ขณะที่ล้อเริ่มเคลื่อนที่ไปข้างหน้า

ผลการทดลอง
27
รูปที่ 27 ขณะที่เคลื่อนที่ไปข้างหน้า

ผลการทดลอง
28
รูปที่ 28 ขณะที่ล้อเคลื่อนที่ต่อไปข้างหน้า

ผลการทดลอง
29
รูปที่ 29ล้อเคลื่อนที่มาจนถึงปลายทาง วัดระยะทางออกมาได้ 2.594 เมตร
        จากการทดลองพบว่าระยะทางที่เรากำหนดคือ 2.5 เมตร แต่ที่วัดได้จริงจากล้อวัดระยะทางด้วย Encoder นั้นวัดระยะทางออกมาได้ 2.594 เมตร
สรุปผลของโครงงาน
       จากการทดลองโครงงานล้อวัดระยะทางด้วย Encoder สรุปได้การเคลื่อนที่ของล้อนั้นจะส่งผลให้ระยะทางที่แสดงมีการเปลี่ยนไปคือ ก่อนเริ่มการทำงานต้องมีจุดเริ่มต้นก่อน ที่จุดเริ่มต้นนั้นระยะทางจะมีค่าเป็นศูนย์เมตร ถ้าล้อเคลื่อนที่ไปข้างหน้าระยะทางจะมีค่าเป็นบวก และถ้าล้อเคลื่อนที่ถอยหลังระยะทางจะลดลงไปเรื่อย ๆ  และมาจุดถึงจุดเริ่มต้นจะมีค่าเป็นศูนย์เมตร แล้วถ้าถอยหลังเลยจุดเริ่มต้นไป ระยะทางจะได้มีค่าเป็นลบ เพื่อบ่งบอกว่าล้อกำลังเคลื่อนที่ถอยหลัง
และนอกจากนี้การหมุนล้อวัดระยะทางนี้ยังมีข้อจำกัดอีก คือ  Encoder ที่เราเลือกใช้นี้ความละเอียดไม่สูงมาก ทำให้การใช้งานล้อวัดระยะทางนี้ต้องเคลื่อนที่ด้วยความเร็วไม่มาก และให้การเคลื่อนที่นั้นเป็นไปอย่างสม่ำเสมอ
ลิ้งดูวิดีโอ http://youtu.be/ntoOHNIJG0Y

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การเขียนผังงาน (Flowchart)

(บล็อกที่ 9). code รถบังคับจากแผ่นซีดี ควบคุมด้วยแอพแอนดรอยด์