สารบัญ:

การควบคุมตำแหน่งเชิงมุมของสเต็ปเปอร์มอเตอร์ 28BYJ-48 ด้วย Arduino และจอยสติ๊กแบบอะนาล็อก: 3 ขั้นตอน
การควบคุมตำแหน่งเชิงมุมของสเต็ปเปอร์มอเตอร์ 28BYJ-48 ด้วย Arduino และจอยสติ๊กแบบอะนาล็อก: 3 ขั้นตอน

วีดีโอ: การควบคุมตำแหน่งเชิงมุมของสเต็ปเปอร์มอเตอร์ 28BYJ-48 ด้วย Arduino และจอยสติ๊กแบบอะนาล็อก: 3 ขั้นตอน

วีดีโอ: การควบคุมตำแหน่งเชิงมุมของสเต็ปเปอร์มอเตอร์ 28BYJ-48 ด้วย Arduino และจอยสติ๊กแบบอะนาล็อก: 3 ขั้นตอน
วีดีโอ: Inverted pendulum :EP4 Actuation 2024, กรกฎาคม
Anonim
การควบคุมตำแหน่งเชิงมุมของสเต็ปเปอร์มอเตอร์ 28BYJ-48 พร้อมจอยสติ๊ก Arduino และอนาล็อก
การควบคุมตำแหน่งเชิงมุมของสเต็ปเปอร์มอเตอร์ 28BYJ-48 พร้อมจอยสติ๊ก Arduino และอนาล็อก

นี่คือรูปแบบการควบคุมสำหรับสเต็ปเปอร์มอเตอร์ 28BYJ-48 ที่ฉันพัฒนาขึ้นเพื่อใช้เป็นส่วนหนึ่งของโครงการวิทยานิพนธ์ปีสุดท้ายของฉัน ฉันไม่เคยเห็นสิ่งนี้มาก่อนเลยคิดว่าฉันจะอัปโหลดสิ่งที่ฉันค้นพบ หวังว่านี่จะช่วยคนอื่นได้!

รหัสโดยทั่วไปอนุญาตให้สเต็ปเปอร์มอเตอร์ "คัดลอก" ตำแหน่งเชิงมุมของจอยสติ๊กแบบอะนาล็อก กล่าวคือ หากคุณผลักจอยสติ๊กไปข้างหน้า มอเตอร์จะชี้ไปทาง "เหนือ" ดันจอยสติ๊กไปทางทิศตะวันตก มอเตอร์หมุนให้ชี้ไปในทิศทางเดียวกัน

สำหรับการใช้งานของฉัน ฉันต้องการให้ปล่อยจอยสติ๊ก นั่นคือ ไม่มีตำแหน่งเชิงมุม มอเตอร์จะกลับสู่ทิศทาง "บ้าน" ทิศทางบ้านหันไปทางทิศตะวันออก และมอเตอร์ (หรือตัวชี้ / อุปกรณ์ใดก็ตามที่คุณติดไว้กับเพลาส่งออก) จะต้องหันไปทางนี้เมื่อเปิดเครื่อง

เสบียง

Arduino Uno หรือใกล้เคียง

เขียงหั่นขนม & การเลือกสายจัมเปอร์ (ชายกับชาย, ชายกับหญิง)

แหล่งจ่ายไฟ 5V

โมดูลจอยสติ๊กแบบอะนาล็อก (ควรมีคุณสมบัติปุ่มกดชั่วขณะ ซึ่งทำให้การพักผ่อนในตำแหน่ง "บ้าน" ง่ายขึ้น

สเต็ปเปอร์มอเตอร์ 28BYJ-48 และไดรเวอร์สเต็ปเปอร์ ULN2003

ปากกา กระดาษ และบลูแทค (หรืออุปกรณ์ตัวชี้อื่นๆ เพื่อต่อเข้ากับมอเตอร์!)

ขั้นตอนที่ 1: ขั้นตอนที่ 1: การตั้งค่า

เชื่อมต่อสเต็ปเปอร์มอเตอร์กับไดรเวอร์สเต็ปเปอร์ และเชื่อมต่อพินดังต่อไปนี้:

IN1 - ขา Arduino 8

IN2 - ขา Arduino 9

IN3 - พิน Arduino 10

IN4 - ขา Arduino 11

เชื่อมต่อแหล่งจ่ายไฟ 5v ของคุณกับรางจ่ายไฟบนเขียงหั่นขนมของคุณ และเชื่อมต่ออินพุต ULN2003 5v กับรางจ่ายไฟ เชื่อมต่อรางกราวด์กับกราวด์บน Arduino ของคุณ

สำหรับจอยสติ๊ก ให้เชื่อมต่อดังนี้:

สวิตช์พิน - ขา Arduino 2

แกน X - Arduino A0 (อนาล็อกใน 0)

แกน Y - Arduino A1

+5V - เอาต์พุต Arduino 5V

GND - Arduino GND

ในที่สุดเชื่อมต่อกราวด์ของเขียงหั่นขนมของคุณกับ Arduino GND pin อื่น ๆ

ขั้นตอนที่ 2: ขั้นตอนที่ 2: อธิบายรหัส

ฉันได้รวมรหัส Arduino ฉบับสมบูรณ์ไว้ให้คุณดาวน์โหลดและใช้งาน แต่จะพยายามอธิบายส่วนที่เกี่ยวข้องให้ดีที่สุด

ทฤษฎีเบื้องหลังโค้ดนี้คือพื้นที่ที่จอยสติ๊กครอบครองถูกแบ่งออกเป็นกราฟ โดยมี 0, 0 ที่กึ่งกลาง อย่างไรก็ตาม อินพุตของจอยสติ๊กจะอยู่ที่ (ประมาณ) 512 ตรงกลาง ดังนั้นเพื่อเอาชนะสองฟังก์ชันนี้ จะใช้ "ศูนย์" ค่าที่อ่านจากแกน X และ Y ขึ้นอยู่กับแหล่งจ่ายไฟที่คุณใช้ คุณอาจต้องเปลี่ยนค่าในฟังก์ชัน ZeroX และ ZeroY เพื่อให้จอยสติ๊กของคุณอ่านค่า 0 ได้อย่างน่าเชื่อถือเมื่อพักผ่อน

เมื่ออ่านค่า X, Y ค่าเหล่านี้จะถูกแปลงเป็นเรเดียนก่อนโดยใช้ฟังก์ชัน atan2() ในไลบรารี math.h การอธิบายฟังก์ชันนี้อยู่นอกเหนือขอบเขตของคำแนะนำนี้ แต่โปรดลองดู - มันเป็นเคล็ดลับที่ค่อนข้างง่ายของเรขาคณิต!

สุดท้าย เพื่อให้ชีวิตง่ายขึ้นสำหรับพวกเราที่เคยทำงานในหน่วยองศามากกว่าแรด ค่า rad ที่คำนวณโดย atan2() จะถูกแปลงเป็นองศา

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

ตอนนี้เข้าสู่กลุ่มหลักของรหัส! เราเริ่มต้นด้วยการอ่านจอยสติ๊ก X, Y พิกัดสองครั้งคั่นด้วยความล่าช้า 10ms จากนั้นตรวจสอบว่าเหมือนกันหรือไม่ - ฉันพบว่าจอยสติ๊กจะส่งสัญญาณการอ่านเป็นระยะ ๆ และการหน่วงเวลาเล็กน้อยนี้ก็เพียงพอแล้วที่จะหยุดการหมุนของมอเตอร์ตามสิ่งเหล่านี้. นอกจากนี้ยังเป็นความล่าช้าที่สั้นพอที่จะไม่รบกวนการป้อนข้อมูลโดยเจตนา

ส่วนที่เหลือของรหัสนั้นค่อนข้างอธิบายตนเองได้และฉันได้พยายามอย่างเต็มที่เพื่อจัดทำเอกสาร ชุดคำสั่ง IF จะเปรียบเทียบมุมของจอยสติ๊กในปัจจุบันกับมุมของมอเตอร์ และขยับมอเตอร์ไปที่มุมนั้น 28BYJ-48 มี 5.689 ก้าวต่อองศา นั่นคือเหตุผลที่เราคูณการเคลื่อนไหวที่ต้องการด้วยจำนวนที่ดูเหมือนคี่!

ส่วนหนึ่งของโค้ดที่ต้องการการอธิบายมากที่สุดคือสิ่งที่ฉันเรียกว่า "wraparound case" แม้ว่าจอยสติ๊กและมอเตอร์จะอยู่ที่ตำแหน่งเช่น +175 ° และจอยสติ๊กก็ย้ายไปที่ -175 ° (การเคลื่อนที่เพียง 10 °บนจอยสติ๊กจากทางเหนือของตะวันตกไปทางใต้ของตะวันตก) มอเตอร์จะเคลื่อนที่ไปในทิศทางที่ไม่ถูกต้อง 350 °! บัญชีสำหรับกรณีพิเศษนี้เขียนขึ้น

กรณีเบื้องต้นเริ่มต้นด้วยการตรวจสอบว่ามอเตอร์และจอยสติ๊กมีสัญญาณตรงกันข้าม กล่าวคือ มอเตอร์เป็นค่าบวกและจอยสติ๊กเป็นค่าลบ หรือในทางกลับกัน นอกจากนี้ยังตรวจสอบด้วยว่าผลรวมของค่าสัมบูรณ์ (ซึ่งก็คือค่าบวก) ของจอยสติ๊กและมอเตอร์นั้นสูงกว่า 180°

หากข้อความทั้งสองนี้เป็นจริง ฟังก์ชันจะตรวจสอบว่ามอเตอร์ต้องเคลื่อนที่ตามเข็มนาฬิกา (ค่ามอเตอร์เป็นลบ) หรือทวนเข็มนาฬิกา (หากค่ามอเตอร์เป็นบวก)

ค่าสัมบูรณ์ของมุมมอเตอร์และมุมของจอยสติ๊กจะรวมกันแล้วลบออกจาก 360° เพื่อกำหนดระยะเคลื่อนที่ สุดท้าย มุมมอเตอร์ (ซึ่งตอนนี้สะท้อนถึงมุมของจอยสติ๊ก) ได้รับการอัปเดตเช่นนี้

ขั้นตอนที่ 3: เสร็จแล้ว

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

หากคุณใช้รหัสนี้ โปรดแจ้งให้เราทราบ และหากคุณพบเห็นจุดที่สามารถปรับปรุงโค้ดได้ เรายินดีรับฟังความคิดเห็นของคุณ

แนะนำ: