วิธีควบคุมเซอร์โวมอเตอร์ด้วย Arduino

Withi Khwbkhum Sexr Wo Mxtexr Dwy Arduino



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

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

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

โดยปกติเซอร์โวมอเตอร์ส่วนใหญ่มีสามพิน:







  • Vcc Pin (ปกติสีแดง 5V)
  • GND Pin (ปกติสีดำ 0V)
  • Input Signal Pin (รับสัญญาณ PWM จาก Arduino)



การทำงานของเซอร์โวมอเตอร์

เราสามารถควบคุมเซอร์โวมอเตอร์ได้โดยเชื่อมต่อพิน Vcc กับ 5V และพิน GND กับ 0V บนเทอร์มินัลสีเหลือง เรามี a PWM สัญญาณที่ควบคุมมุมการหมุนของเซอร์โวมอเตอร์ ความกว้างของสัญญาณ PWM ทำให้เราได้มุมที่มอเตอร์จะหมุนแขน



หากเราดูแผ่นข้อมูลของเซอร์โวมอเตอร์ เราจะได้พารามิเตอร์ต่อไปนี้:





  • ช่วงเวลาสัญญาณ PWM
  • ความกว้างขั้นต่ำสำหรับ PWM
  • ความกว้างสูงสุดสำหรับ PWM

พารามิเตอร์ทั้งหมดเหล่านี้ถูกกำหนดไว้ล่วงหน้าในไลบรารี Arduino Servo

เซอร์โวมอเตอร์พร้อม Arduino

เซอร์โวมอเตอร์ควบคุมได้ง่ายด้วย Arduino ต้องขอบคุณ ห้องสมุดเซอร์โว ซึ่งช่วยให้เราปรับแต่งโค้ดของเราได้ตามความต้องการและช่วยให้เราหมุนแขนเซอร์โวในมุมที่ต้องการได้



พารามิเตอร์ทั้งสามที่กล่าวถึงข้างต้นได้รับการแก้ไขในไลบรารีเซอร์โว ด้วยการใช้พารามิเตอร์เหล่านี้ เราสามารถควบคุมมุมของเซอร์โวมอเตอร์ได้ดังนี้:

  • ถ้าความกว้างของสัญญาณ PWM = WIDTH_MAX เซอร์โวจะหมุนไปที่ 180o
  • ถ้าความกว้างของสัญญาณ PWM = WIDTH_MIIN เซอร์โวจะหมุนเป็น 0o
  • หากความกว้างของสัญญาณ PWM อยู่ระหว่าง WIDTH_MAX และ WIDTH_MIN , เซอร์โวมอเตอร์จะหมุนระหว่าง 0o ถึง 180o

เราสามารถสร้างสัญญาณ PWM ที่ต้องการบนพิน Arduino บางตัวได้ สัญญาณ PWM จะได้รับที่ขาสัญญาณอินพุตของเซอร์โวมอเตอร์ กำลังเชื่อมต่อเซอร์โวสองพินที่เหลือกับ 5v และ GND ของ Arduino

วิธีการควบคุมเซอร์โวมอเตอร์โดยใช้ Arduino

ที่นี่ฉันจะอธิบายวิธีที่เราสามารถเชื่อมต่อและตั้งโปรแกรมเซอร์โวมอเตอร์ของเราโดยใช้ Arduino สิ่งที่คุณต้องมีคือ:

  • Arduino UNO
  • สาย USB B
  • เซอร์โวมอเตอร์
  • สายจัมเปอร์

วิธีตั้งโปรแกรมเซอร์โวด้วย Arduino

ต่อไปนี้เป็นขั้นตอนง่ายๆ:

ขั้นตอนที่ 1: รวมไลบรารีเซอร์โวที่กำหนดไว้ล่วงหน้า:

# รวม < Servo.h >

ขั้นตอนที่ 2: สร้างวัตถุเซอร์โว:

เซอร์โว myservo;

เคล็ดลับ: ในกรณีที่คุณควบคุมเซอร์โวมอเตอร์มากกว่าหนึ่งตัว คุณต้องสร้างวัตถุเซอร์โวเพิ่มเติม:

เซอร์โว myservo1;
เซอร์โว myservo2;

ขั้นตอนที่ 3: ตั้งค่าพินควบคุม (9) บน Arduino Uno ซึ่งส่งสัญญาณ PWM ไปยังพอร์ตสัญญาณอินพุตของเซอร์โว:

myservo.attach ( 9 ) ;

ขั้นตอนที่ 4: หมุนมุมของเซอร์โวมอเตอร์ให้เป็นค่าที่ต้องการ เช่น 90o:

myservo.write ( ตำแหน่ง ) ;

รหัส Arduino

เปิดโปรแกรมตัวอย่างเซอร์โวมอเตอร์จาก ไฟล์>ตัวอย่าง>เซอร์โว>กวาด หน้าต่างใหม่จะเปิดขึ้นเพื่อแสดงภาพร่างเซอร์โวของเรา:

#รวม

เซอร์โว myservo; // วัตถุเซอร์โวถูกสร้างขึ้น สำหรับ ควบคุมเซอร์โวมอเตอร์
int pos = 0 ; // เพื่อเก็บตำแหน่งเซอร์โว ตัวแปรใหม่จะถูกสร้างขึ้น
การตั้งค่าเป็นโมฆะ ( ) {
myservo.attach ( 9 ) ; // นี่จะ ชุด พิน Arduino 9 สำหรับ เอาต์พุต PWM
}
วงโมฆะ ( ) {
สำหรับ ( ตำแหน่ง = 0 ; ตำแหน่ง = 0 ; ตำแหน่ง -= 1 ) { // ไปจาก 180 ถึง 0 องศา
myservo.write ( ตำแหน่ง ) ; // บอกให้เซอร์โวไปที่ตำแหน่ง 'pos'
ล่าช้า ( 5 ) ; // รอ สำหรับ 5 ms เพื่อให้เซอร์โวสามารถเข้าถึงตำแหน่งได้
}
}

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

แผนผัง

วิธีการควบคุมเซอร์โวมอเตอร์โดยใช้โพเทนชิออมิเตอร์

นอกจากนี้เรายังสามารถควบคุมตำแหน่งเซอร์โวมอเตอร์ได้ด้วยมือ การทำเช่นนี้เราต้องมี โพเทนชิออมิเตอร์ . โพเทนชิออมิเตอร์มีสามพิน เชื่อมต่อพินภายนอกสองตัวเข้ากับ 5V Vcc และ GND ของ Arduino และพินกลางกับพิน A0 บนบอร์ด Arduino

วิธีการตั้งโปรแกรมเซอร์โวด้วยโพเทนชิออมิเตอร์

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

int potpin = A0;
ค่า int;

อะนาล็อกพิน A0 ในส่วนลูปใช้สำหรับอ่านค่าโพเทนชิออมิเตอร์พร้อมฟังก์ชัน อนาล็อกอ่าน() . บอร์ด Arduino ประกอบด้วย 10-bit ADC (Analog to Digital Converter) ซึ่งให้ค่าระหว่าง 0 ถึง 1023 ขึ้นอยู่กับตำแหน่งโพเทนชิออมิเตอร์:

วาล = analogRead ( พินย่อย ) ;

สุดท้ายนี้เราใช้ แผนที่() ฟังก์ชั่นเพื่อทำการแมปตัวเลขใหม่ตั้งแต่ 0 ถึง 1023 ตามมุมของเซอร์โว ตามที่เราทราบดีว่าเซอร์โวมอเตอร์สามารถหมุนได้ระหว่าง 00 ถึง 1800 เท่านั้น

วาล = แผนที่ ( วาล, 0 , 1023 , 0 , 180 ) ;

รหัส Arduino

เปิดภาพร่างลูกบิดใน Arduino IDE ไปที่ ไฟล์>ตัวอย่าง>เซอร์โว>ลูกบิด . หน้าต่างใหม่จะเปิดขึ้นซึ่งจะแสดงภาพร่างปุ่มสำหรับเซอร์โวของเรา:

#รวม
เซอร์โว myservo; // การสร้างชื่ออ็อบเจ็กต์เซอร์โว myservo
int potpin = A0; // การกำหนดพินอะนาล็อก สำหรับ โพเทนชิออมิเตอร์
ค่า int; // ตัวแปร ที่ จะ อ่าน ค่าพินอะนาล็อก สำหรับ โพเทนชิออมิเตอร์

การตั้งค่าเป็นโมฆะ ( ) {
myservo.attach ( 9 ) ; // พินที่กำหนดไว้ 9 สำหรับ สัญญาณอินพุต PWM ของเซอร์โวบน Arduino
}
วงโมฆะ ( ) {
วาล = analogRead ( พินย่อย ) ; // อ่านค่าจากโพเทนชิออมิเตอร์ ( ค่าระหว่าง 0 และ 1023 )
วาล = แผนที่ ( วาล, 0 , 1023 , 0 , 180 ) ; // ปรับขนาดค่าเพื่อใช้กับเซอร์โว ( ค่าระหว่าง 0 และ 180 )
myservo.write ( วาล ) ; // กำหนดตำแหน่งเซอร์โวด้วยค่าสเกล
ล่าช้า ( สิบห้า ) ; // รอ สำหรับ เซอร์โวเพื่อไปยังตำแหน่ง
}

รหัสด้านบนจะช่วยให้เราควบคุมเพลาเซอร์โวมอเตอร์โดยใช้โพเทนชิออมิเตอร์ เพลาจะหมุนระหว่าง 0 ถึง 180 องศา เรายังสามารถรักษาความเร็วพร้อมกับทิศทางของเซอร์โวที่ใช้ได้อีกด้วย

แผนภูมิวงจรรวม

ฉันสามารถเชื่อมต่อเซอร์โวมอเตอร์กับ Arduino ได้กี่ตัว

จำนวนเซอร์โวมอเตอร์สูงสุดที่ Arduino UNO สามารถรองรับได้ถึง 12 ตัวด้วยไลบรารี Arduino สำหรับเซอร์โว และสูงสุด 48 เซอร์โว สามารถเชื่อมต่อกับบอร์ดอย่างเมก้าได้

เคล็ดลับ: เราสามารถเรียกใช้เซอร์โวโดยตรงโดยใช้กระแส Arduino แต่จำไว้ว่าถ้ามอเตอร์เซอร์โวดึงมากกว่า 500mA จากนั้นบอร์ด Arduino ของคุณสามารถรีเซ็ตและสูญเสียพลังงานได้โดยอัตโนมัติ ขอแนะนำให้ใช้แหล่งจ่ายไฟเฉพาะสำหรับเซอร์โวมอเตอร์เสมอ

บทสรุป

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