สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12
นี่คือรูปแบบการควบคุมสำหรับสเต็ปเปอร์มอเตอร์ 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 แล้วเปิดใช้งาน! ดูวิดีโอด้านบนสำหรับแนวคิดที่ดีเกี่ยวกับวิธีการทำงานของโครงการ ซึ่งจะเป็นประโยชน์กับอุปกรณ์กันสั่นของกล้อง แขนกลหุ่นยนต์ และการใช้งานอื่นๆ อีกมากมาย!
หากคุณใช้รหัสนี้ โปรดแจ้งให้เราทราบ และหากคุณพบเห็นจุดที่สามารถปรับปรุงโค้ดได้ เรายินดีรับฟังความคิดเห็นของคุณ
แนะนำ:
วิธีการตั้งค่า OSMC ด้วย Hyperion บน Raspberry Pi ด้วย WS2812b Led Strip: 8 ขั้นตอน
วิธีการตั้งค่า OSMC ด้วย Hyperion บน Raspberry Pi ด้วย WS2812b Led Strip: บางครั้งฉันพูดภาษาอังกฤษได้ดีมาก บางครั้งก็ไม่มี… สิ่งแรกเลย นี่เป็นการสอนครั้งแรกของฉันและภาษาอังกฤษไม่ใช่ภาษาแม่ของฉัน ดังนั้นโปรดอย่ากดดันฉันมากเกินไป นี่จะไม่เกี่ยวกับวิธีการสร้างเฟรมที่ง่าย มันเกี่ยวกับการติดตั้ง
28BYJ-48 5V Stepper Motor และ A4988 Driver: 4 ขั้นตอน
28BYJ-48 5V Stepper Motor และ A4988 Driver: เคยต้องการให้หุ่นยนต์หมุนในมุมที่แม่นยำโดยใช้ Arduino หรือ micro:bit เพียงเล็กน้อยหรือไม่? ทั้งหมดนี้ราคาถูก ? นั่นคือคำแนะนำสำหรับคุณ ! ในคำแนะนำนี้ เราจะมาดูวิธีการขับสเต็ปเปอร์มอเตอร์ราคาถูกมากโดยใช้เพียง
คอนโทรลเลอร์เกม DIY จาก Arduino - คอนโทรลเลอร์เกม Arduino PS2 - เล่น Tekken ด้วย DIY Arduino Gamepad: 7 ขั้นตอน
คอนโทรลเลอร์เกม DIY จาก Arduino | คอนโทรลเลอร์เกม Arduino PS2 | การเล่น Tekken ด้วย DIY Arduino Gamepad: สวัสดีทุกคน การเล่นเกมนั้นสนุกอยู่เสมอ แต่การเล่นด้วยตัวควบคุมเกม DIY ของคุณเองนั้นสนุกกว่า ดังนั้นเราจะสร้างคอนโทรลเลอร์เกมโดยใช้ Arduino pro micro ในคำแนะนำนี้
พูดคุย Arduino - เล่น MP3 ด้วย Arduino โดยไม่ต้องใช้โมดูลใด ๆ - การเล่นไฟล์ Mp3 จาก Arduino โดยใช้ PCM: 6 ขั้นตอน
พูดคุย Arduino | เล่น MP3 ด้วย Arduino โดยไม่ต้องใช้โมดูลใด ๆ | การเล่นไฟล์ Mp3 จาก Arduino โดยใช้ PCM: ในคำแนะนำนี้ เราจะเรียนรู้วิธีเล่นไฟล์ mp3 ด้วย Arduino โดยไม่ต้องใช้โมดูลเสียงใด ๆ ที่นี่เราจะใช้ไลบรารี PCM สำหรับ Arduino ซึ่งเล่น PCM 16 บิตที่ความถี่ 8kHZ เพื่อทำสิ่งนี้
วิธีสร้าง CubeSat ด้วย Arduino ด้วย Arducam: 9 ขั้นตอน
วิธีสร้าง CubeSat ด้วย Arduino ด้วย Arducam: ในรูปแรก เรามี Arduino และเรียกว่า "Arduino Uno"ในรูปที่สอง เรามี Arducam และเรียกว่า "Arducam OV2640 มินิ 2MP"พร้อมกับภาพที่สอง มีวัสดุที่คุณต้อง