ก่อนอื่นก็ต้องขอขอบคุณข้อมูลจาก hackaday.com และ wikispaces นะครับ ตอนที่ซื้อตัว LDS มา ข้อมูลการวิธีใช้งานมีน้อยมาก เว็ปก็มีน้อย ยิ่งเป็นภาษาไทยยิ่งไม่ค่อยมี ก็ได้เว็ปนี้แหละครับที่ละเอียด และมีข้อมูลครบถ้วน ทำให้ทำโครงงานได้จนสำเร็จครับ
![]() |
ภาพ LDS |
หลักการทำงาน
สำหรับ LDS ก็คือเซนเซอร์วัดระยะทางประเภทหนึ่ง โดยจะมีกลไกในการหมุนเพื่อวัดระยะในทิศทางต่างๆรอบตัวมันในหนึ่งระนาบ ในส่วนของการวัดระยะ จะใช้เทคนิคสามเหลี่ยมคล้าย ซึ่งจะเหมือนกับเซนเซอร์วัดระยะของ Sharp![]() |
เซนเซอร์วัดระยะของ Sharp |
![]() |
ภาพแสดงเทคนิคสามเหลี่ยมคล้าย (ภาพจาก Hackaday.com) |
การเชื่อมต่อทางไฟฟ้า
![]() |
ภาพจาก www.hizook.com/ |
1.แบบ 4-pin สำหรับไฟเลี้ยงตัวเซนเซอร์วัดระยะ และสายสัญญาณ
2.แบบ 2-pin สำหรับมอเตอร์
โดยการใช้งาน จะสื่อสารแบบ UART ที่ Buadrate 115,200 โดยใช้สายสี่เส้นประกอบด้วย
สีดำ : Ground
สีแดง : 5V
สีน้ำตาล : RX
สีส้ม : TX
ส่วนมอเตอร์ สายไฟสีแดงแสดงขั้วบวก และสีดำแสดงขั้วลบปกติ ต้องต่อให้ถูกขั้วถ้าต่อผิดมอเตอร์จะหมุนกลับด้าน ส่งผลให้ข้อมูลที่อ่านได้ผิดพลาดไปด้วย โดยทั่วไปถ้าใช้แรงดัน 3.3v ตัวเซนเซอร์จะถูกหมุนที่ความเร็วประมาณ 240 RPM แต่ก็อาจคลาดเคลื่อนได้ จึงควรทำการควบคุมแบบ close-loop เพื่อควบคุมความเร็วให้คงที่ 300 RPM เป็นความเร็วที่เหมาะสมที่สุด (เซนเซอร์จะทำงานที่ความเร็ว 180 - 349 RPM)
การอ่านค่า
เมื่อเราต่อชุดเซนเซอร์เข้ากับ Module USB UART โดยที่ยังไม่จ่ายไฟให้มอเตอร์จะปรากฏข้อความดังภาพ
เมื่อมอเตอร์เริ่มหมุน จะปรากฏข้อความ Spinning... แล้วข้อมูลที่ส่งเข้ามาจะไม่สามารถอ่านได้ (ไม่ใช่ข้อความ ตัวอักษร) แต่จะส่งเป็น package โดย 1 package จะประกอบไปด้วยข้อมูล 22-byte ดังนี้
ภาพรวมของข้อมูลคือ ใน 1 package ของข้อมูล จะให้ค่าระยะ 4 ค่าสำหรับแต่ละมุมที่อ่านเป็นลำดับทีละ 1 องศา และในหนึ่งรอบการหมุนจะมีการส่งข้อมูลทั้งหมด 90 package แต่ละแพคเกจจะมีข้อมูลดังนี้
D0 - D3
1.Speed
เป็นข้อมูลจำนวนเต็มแบบไม่มีเครื่องหมาย ( unsigned ) ขนาด 2-byte โดยจะให้ค่าเป็น 64 เท่า ของค่า ความเร็วการหมุน (RPM) ของตัวเซนเซอร์ ใช้ในการควบคุมความเร็วมอเตอร์
2.Package index
เป็นข้อมูลบอกว่าแพคเกจที่ส่งมาลำดับที่เท่าไหร่ โดย 0xA0 จะเป็นลำดับที่ 0 ไปตามลำดับถึงลำดับที่ 89 และใช้บอกว่าข้อมูลระยะทั้ง 4 ข้อมูลคือมุมที่เท่าใด เช่น ลำดับที่ 0 จะเก็บข้อมูลของมุม 0 ,1,2,3 องศา ลำดับที่ 1 จะเก็บข้อมูลของมุม 4,5,6,7 องศา ตามลำดับ
3. ข้อมูลของแต่ละมุม (D0 - D3)
จะเก็บข้อมูลของแต่ละมุม โดยแต่ละตัวจะมีขนาด 4-byte และมีวิธีอ่านค่าที่เหมือนกันนั่นคือ
`byte 0 : <distance 7:0>`
`byte 1 : <"invalid data" flag> <"strength warning" flag> <distance 13:8>`
`byte 2 : <signal strength 7:0>`
`byte 3 : <signal strength 15:8>`
ในที่นี้ผมไม่ได้สนใจ bit ของ invalid data flag และ bit ของ strength warning flag แต่จะสนใจแค่ signal strength และ distance ซึ่งทั้งสองข้อมูลนี้จะตีความแบบจำนวนเต็มไม่คิดเครื่องหมาย โดย distance เป็นข้อมูล 14-bit หน่วยเป็นมิลลิเมตร ซึ่งค่าที่อ่านได้จะอยุ่ในช่วง 15cm - 600cm ส่วน signal strength คือความเข้มของสัญญาณที่สะท้อนกลับมา ซึ่งไม่มีหน่วย และจะแปลผันตามความเข้มของวัตถุที่ลำแสงไปตกกระทบ
สรุปการทดลอง
ผมได้ใช้ อาดุยโน่ โปรมินิ ทำวงจรควบคุมความเร็วมอเตอร์ แบบ close-loop ใช้เทคนิค PI control และใช้บลูทูธส่งข้อมูลจากตัวเซนเซอร์มายังคอมพิวเตอร์แบบไร้สายทำให้ง่ายละสะดวกในการทดลอง
ทางฝั่งคอมพิวเตอร์ ใช้โปรแกรม Processing ide ในการรับข้อมูล และอ่านค่าจากข้อมูล จากนั้นให้แสดงผลเป็นภาพขึ้นที่หน้าจอคอมพิวเตอร์
![]() |
ภาพที่ได้จากโปรแกรม |
มีตัวอย่างโค๊ด ให้ศึกษาใหมครับ
ตอบลบ