เรียน-เล่น-โค้ด KidBright32iP กับ microBlock IDE EP7: การควบคุมเซอร์โวมอเตอร์

ก่อนจะควบคุมเซอร์โวมอเตอร์ จะต้องแนะนำให้รู้จักกับตัวต้านทานปรับค่าได้และ ZX-POTV
ก่อน เพื่อนำมันไปประยุกต์ในการควบคุมเซอร์โวมอเตอร์ต่อไป

ZX-POTV

เป็นตัวต้านทานปรับค่าได้ที่ต่อเข้ากับแรงดันไฟเลี้ยงและกราวด์แล้วนำเอาขากลางมาใช้งาน ลักษณะวงจรแบ่งแรงดัน เมื่อปรับปุ่มหมุน ค่าความต้านทานที่ตำแหน่งจุด S จะเปลี่ยนทำให้แรงดันเปลี่ยนแปลงไปด้วย โดยแรงดันที่จุด S จะมีค่าตั้งแต่ 0 จนถึงแรงดันไฟเลี้ยง สำหรับ KidBright32ip แรงดันไฟเลี้ยงจะมีค่าเท่ากับ 3.3V

การอ่านค่าแอนะล็อก

เมื่อค่าจาก ZX-POTV มีการเปลี่ยนแปลงแรงดันตามการหมุน การอ่านค่าการเปลี่ยนแปลงนี้จะเป็นการอ่านค่าแอนะล็อก โดยบอร์ด KidBright32ip มีวงจรแปลงแอนะล็อกเป็นดิจิตอลขนาด 12 บิตติดตั้งอยู่ทำให้อ่านค่าแรงดัน 0-3.3V ให้กลายเป็นค่าดิจิตอล 0-4095 ได้

สำหรับจุดเชื่อมต่ออุปกรณ์แอนะล็อกจากภายนอก จะต่อเข้ากับขา I1-I4 โดยการอ่านค่าจะใช้คำสั่ง analog read ในหัวข้อ Input

ตัวอย่างที่ 29 การอ่านค่าแอนะล็อกแสดงผลที่ Dashboard

การทำงาน

โค้ดจะอ่านค่าแอนะล็อกที่ช่อง IN1 ส่งไปแสดงผลที่ dashboard ผ่านซอร์สชื่อ source1 ทุกๆ 0.1 วินาที

ที่หน้าต่าง
dashboard จะนำค่าจาก source1 มาแสดงในรูปแบบของ Gauge โดยกำหนดช่วงการแสดงผลไว้ที่ 0-4095

ตัวอย่างที่ 30 เปลี่ยนช่วงการแสดงผลให้อยู่ในช่วง 0-180

ค่าตัวเลข 4095 คือค่าสูงสุดของวงจรแปลงสัญญาณแอนะล็อกเป็นดิจิตอลขนาด 12 บิต จากตัวอย่างก่อนหน้านี้ ถ้าต้องการให้การแสดงผล มีช่วงของตัวเลขที่เปลี่ยนไปต้องเอาการคำนวณคณิตศาสตร์เข้ามาช่วย ตัวอย่างนี้ต้องการให้ค่าตัวเลข อยู่ในช่วง 0-180 แสดงว่าค่า 4095 เดิมต้องถูกหารด้วยค่า 22.75 เพื่อให้ค่าสูงสุดอยู่ที่ 180

การทำงาน

ค่าสเกล 0-180 มาจากเอาค่าสเกลเดิม 4095 หารด้วย 22.75 แล้วนำค่าไปแสดงที่ dashboard ค่าที่ได้จะอยู่ในช่วง 0-180

ที่หน้าต่าง dashboard จะกำหนดค่าสูงสุดใหม่เป็น 180 เมื่อมีการปรับค่าที่ตัวต้านทานปรับค่าได้ ค่าสูงสุดที่ได้จะเป็นค่า 180

เซอร์โวมอเตอร์ SG92R

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

เซอร์โวมอเตอร์มีคาบเวลาเท่ากับ 20 ms(50Hz) ค่า Duty Cycle ที่ใช้ได้จะอยู่ในช่วง 0.5-2.5ms, หรือค่าจริงที่ใช้โดยประมาณ(25 -127) เทียบเป็นองศา 0-180 องศา

คำสั่งควบคุมเซอร์โวมอเตอร์

คำสั่ง servo อยู่ในหัวข้อ Output ขาปกติที่ไว้ต่อเซอร์โวมอเตอร์คือ SV1 และ SV2 โดยกำหนด angle หรือมุมให้เซอร์โวมอเตอร์หมุนได้ 0-180 องศา

การเชื่อมต่อเซอร์โวมอเตอร์

เซอร์โวมอเตอร์ต้องการแรงดันไฟเลี้ยง 4.8-6V สามารถนำแหล่งจ่ายไฟภายนอกมาต่อเข้าไปที่จุดต่อ Terminal สีเขียวที่เห็นในรูปได้ บอร์ด KidBright32iP มีไฟ 5V จากพอร์ต USB อยู่แล้วสามารถนำมาต่อตามรูปเพื่อเป็นไฟเลี้ยงให้กับเซอร์โวมอเตอร์ได้ โดยไม่จำเป็นต้องต่อขา GND เนื่องจากเป็นขาที่ต่อร่วมกันทั้งบอร์ดอยู่แล้ว

ตัวอย่างที่ 31 ควบคุมเซอร์โวมอเตอร์ด้วย ZX-POTV

ค่าที่อ่านได้จาก ZX-POTV เมื่อหารด้วย 22.75 แล้ว ได้ 0-180 สามารถส่งไปขับเซอร์โวมอเตอร์ได้เลย เพื่อให้เห็นตำแหน่งของเซอร์โวเทียบกับค่าที่ได้ จึงนำค่าไปแสดงที่ dashboard ด้วย

การทำงาน

ตัวอย่างโค้ดนำค่าที่อ่านได้จาก ZX-POTV แปลงให้อยู่ในช่วง 0-180 และเพื่อให้ค่าเป็นจำนวนเต็ม จึงใช้บล็อก round มาคั่นไว้ก่อน นำค่าทั้งหมดเก็บในตัวแปร x นำค่าจากตัวแปร x แสดงผลที่ dashboard และควบคุมตำแหน่งของเซอร์โวมอเตอร์ตามการหมุนของ ZX-POTV

ตัวอย่างที่ 32 สั่งงานเซอร์โวด้วยสวิตช์

จากตัวอย่างก่อนหน้านี้พบว่า เซอร์โวเคลื่อนที่และหยุดค้างอยู่ที่ตำแหน่งที่ระบุ โดย SG92R ถ้ากำหนดค่าใกล้เคียง 0 หรือ 180 แกนของเซอร์โวจะชนขอบด้านข้าง ทำให้เกิดการสั่นและสึกหรอได้ง่าย ตัวอย่างนี้จะใช้สวิตช์เป็นตัวสั่งการเซอร์โวมอเตอร์ โดยถ้ากดสวิตช์ S1 จะให้เคลื่อนที่ไปที่ตำแหน่ง 10 องศา ถ้ากดสวิตช์ S2 จะให้เซอร์โวมอเตอร์เคลื่อนที่ไปที่ตำแหน่ง 170 องศา

ตัวอย่างที่ 33 เพิ่มและลดตำแหน่งของเซอร์โวมอเตอร์ด้วยสวิตช์

ปรับเปลี่ยนให้การกดสวิตช์เป็นการเลื่อนตำแหน่งของเซอร์โวมอเตอร์ทีละ 10 องศา โดยสวิตช์ S1 จะเป็นการลดลงทีละ 10 องศา ส่วนสวิตช์ S2 จะเป็นการเพิ่มค่าทีละ 10 องศา

การทำงาน

เริ่มต้นด้วยการสร้างตัวแปร x และกำหนดค่าไว้เท่ากับ 90 ซึ่งเป็นตำแหน่งกึ่งกลางของเซอร์โวมอเตอร์พอดี ในลูป forever จะตรวจสอบการกดสวิตช์

เมื่อสวิตช์ S1 ถูกกด จะรอจนกระทั่งปล่อยสวิตช์จึงค่อยทำขั้นตอนต่อไป จากนั้นจะทำการตรวจสอบค่าของตัวแปร x ว่ายังมีค่ามากกว่า 10 หรือเปล่า ถ้ามากกว่าจะลดค่าลง 10 แต่ถ้าน้อยกว่าจะให้ค่า x เท่ากับ 0 และเพื่อเป็นการตรวจสอบค่า จะนำค่า x ไปแสดงที่หน้าต่าง terminal ด้วย

เมื่อกดสวิตช์ S2 จะรอจนกว่าปล่อยสวิตช์ S2 แล้วตรวจสอบตัวแปร X ว่ามากกว่า 170 หรือยัง ถ้ายังให้เพิ่มค่าตัวแปร x ขึ้น 10 แต่ถ้ามากกว่าจะให้ตัวแปร x เท่ากับ 180 ไปเลยและนำค่าตัวแปรแสดงที่ Terminal ในลูปจะมีการส่งค่าตัวแปร x ไปยังเซอร์โวมอเตอร์เพื่ออัพเดตตำแหน่งไปเรื่อยๆ

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

Facebook Comments Box