บทเรียนนี้เป็นส่วนหนึ่งของ: มอเตอร์เซอร์โว
วิดีโอทั้งหมดที่เกี่ยวข้องกับมอเตอร์เซอร์โว แสดงไว้ที่นี่ ลิงก์ไปยังวิดีโออื่นๆ อยู่ด้านล่างบทความนี้
การควบคุมมอเตอร์เซอร์โว Arduino โดยใช้พอเทนชิโอมิเตอร์
ในบทแนะนำนี้ เราจะสำรวจวิธีการควบคุมมอเตอร์เซอร์โวโดยใช้พอเทนชิโอมิเตอร์ร่วมกับอาร์ดูอิโน่ เป้าหมายคือการสร้างวงจรที่ง่ายซึ่งตำแหน่งของเซอร์โวจะถูกปรับตามการหมุนของพอเทนชิโอมิเตอร์ เมื่อสิ้นสุดโครงการนี้ คุณจะมีโมเดลที่ทำงานได้ซึ่งปรับมุมเซอร์โวจาก 0 ถึง 180 องศาอย่างราบรื่นเมื่อคุณหมุนพอเทนชิโอมิเตอร์ นี่เป็นวิธีที่ดีในการเข้าใจพื้นฐานของการป้อนข้อมูลอนาล็อกและการควบคุมเซอร์โวในอาร์ดูอิโน่
เพื่อให้บรรลุเป้าหมายนี้ เราจะใช้บอร์ด Arduino มอเตอร์เซอร์โว และพอเทนชิโอมิเตอร์ พอเทนชิโอมิเตอร์ทำหน้าที่เป็นตัวต้านทานแบบแปรผัน โดยให้สัญญาณอนาล็อกแก่ Arduino ซึ่งจะกำหนดตำแหน่งของมอเตอร์เซอร์โวตามนั้น โครงการนี้ไม่เพียงแต่สนุก แต่ยังให้ความรู้ด้วย เนื่องจากแสดงให้เห็นถึงแนวคิดสำคัญในอิเล็กทรอนิกส์และการเขียนโปรแกรม สำหรับคำอธิบายที่ลึกซึ้งยิ่งขึ้น อย่าลืมดูวิดีโอ (ในวิดีโอที่ 00:00)
อธิบายฮาร์ดแวร์
ในโครงการนี้ ส่วนประกอบหลักคือบอร์ด Arduino, มอเตอร์เซอร์โว และพอเทนชิโอมิเตอร์ Arduino เป็นสมองของการทำงาน ประมวลผลข้อมูลนำเข้าและควบคุมข้อมูลส่งออก มอเตอร์เซอร์โวจะเคลื่อนที่ทางกายภาพตามคำสั่งที่ได้รับจาก Arduino พอเทนชิโอมิเตอร์สามารถมีค่า 1k โอห์มถึง 1M โอห์ม ซึ่งอนุญาตให้ผู้ใช้ให้ข้อมูลนำเข้าที่แปรผันซึ่งแปลเป็นการเคลื่อนไหวของเซอร์โว
มอเตอร์เซอร์โวทำงานโดยการรับสัญญาณ PWM (Pulse Width Modulation) ที่บ่งบอกตำแหน่งที่ต้องการ ตัวปรับความต้านทานเมื่อหมุนจะเปลี่ยนความต้านทานซึ่งจะถูกอ่านโดย Arduino เป็นแรงดันไฟฟ้าอนาล็อก มอเตอร์เซอร์โวทำงานที่ 5V ไม่ทำงานที่ 3.3V แรงดันไฟฟ้านี้จะถูกแมพไปยังช่วงการเคลื่อนไหวของมอเตอร์เซอร์โว ทำให้สามารถเคลื่อนไหวได้อย่างราบรื่นตั้งแต่ 0 องศาถึง 180 องศา
รายละเอียดแผ่นข้อมูลสำหรับมอเตอร์เซอร์โว SG90
| ผู้ผลิต | พารัลแลกซ์ |
|---|---|
| หมายเลขชิ้นส่วน | SG90 |
| แรงดันไฟฟ้า Logic/IO | 5 โวลต์ |
| แรงดันไฟฟ้าจ่าย | 4.8-6 โวลต์ |
| กระแสไฟฟ้าเอาต์พุต (ต่อช่อง) | ~500 มิลลิแอมป์ |
| กระแสสูงสุด (ต่อช่อง) | 1 เอ |
| คำแนะนำความถี่ PWM | 50 เฮิร์ตซ์ |
| เกณฑ์ตรรกะนำเข้า | 0.5 โวลต์ (ต่ำ), 2.5 โวลต์ (สูง) |
| แรงดันไฟฟ้าตก / RDS(on)/ ความอิ่มตัว | 0.5 โวลต์ ที่ 500 มิลลิแอมป์ |
| ขีดจำกัดทางความร้อน | 0°C ถึง 60°C |
| แพ็คเกจ | เซอร์โวมาตรฐาน 9 กรัม |
| หมายเหตุ / ตัวแปร | มักใช้ในแอปพลิเคชัน RC |
- ตรวจสอบให้แน่ใจว่าเซอร์โวไม่เกินค่ากระแสสูงสุดที่กำหนด
- ใช้ฮีตซิงค์หากเซอร์โวทำงานต่อเนื่องที่โหลดสูง
- เชื่อมต่อพอเทนชิโอมิเตอร์กับขาอนาล็อกเพื่อการอ่านค่าที่แม่นยำ
- โปรดระมัดระวังเกี่ยวกับการตั้งเวลาสัญญาณ PWM สำหรับการควบคุมเซอร์โว
- ตรวจสอบช่วงการเคลื่อนไหวของเซอร์โวเพื่อหลีกเลี่ยงอุปสรรคทางกายภาพ
คำแนะนำการเดินสาย


สำหรับการตั้งค่านี้ คุณจะต้องเชื่อมต่อส่วนประกอบตามที่ระบุไว้ดังนี้:
เชื่อมพินกลางของพอเทนชิโอมิเตอร์ (วายเปอร์) เข้ากับพินอนาล็อกของอาร์ดูอิโนA0. ขาอีกสองขาของพอเทนชิโอมิเตอร์ควรเชื่อมต่อกับ5VและGNDบน Arduino สำหรับมอเตอร์เซอร์โว ให้เชื่อมต่อสายสีแดงกับ5VสายดำไปยังGNDและสายสีเหลืองหรือสีขาวไปยังพินดิจิตอล9บน Arduino การจัดเรียงนี้ช่วยให้พอเทนชิโอมิเตอร์สามารถให้สัญญาณอนาล็อกแก่ Arduino ซึ่งจะควบคุมตำแหน่งของมอเตอร์เซอร์โวตามสัญญาณนั้น
ตรวจสอบการเชื่อมต่อทั้งหมดและตรวจสอบให้แน่ใจว่าเซอร์โวไม่มีสิ่งกีดขวางในช่วงการเคลื่อนไหว หากใช้โมเดล Arduino ที่แตกต่างกัน ให้ยืนยันว่าการกำหนดพินสำหรับการป้อนข้อมูลอนาล็อกและการส่งออกเซอร์โวเข้ากันได้
ตัวอย่างโค้ดและการเดินทาง
ด้านล่างเป็นส่วนหนึ่งของโค้ดที่เริ่มต้นเซอร์โวและอ่านค่าพอเทนชิโอมิเตอร์:
#include
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
ในโค้ดนี้ เราได้รวมไลบรารี Servo และสร้างออบเจ็กต์เซอร์โวที่เรียกว่าmyservoเซอร์โวถูกติดตั้งที่ขา9ซึ่งช่วยให้เราสามารถควบคุมมันได้โดยใช้ขาเชื่อมนี้
void loop() {
int sensorValue = analogRead(A0); // read the potentiometer
pos = map(sensorValue, 0, 1023, 0, 180); // map to servo position
myservo.write(pos); // move servo to position
delay(15); // waits 15ms for the servo to reach the position
}
ในฟังก์ชันลูป เราอ่านค่าพอเทนชิโอมิเตอร์จากพินA0และแปลงค่าจากช่วง (0-1023) เป็นช่วงของเซอร์โว (0-180 องศา)myservo.write(pos)คำสั่งจะย้ายเซอร์โวไปยังตำแหน่งที่ต้องการตามการหมุนของพอเทนชิโอมิเตอร์
การสาธิต / สิ่งที่คาดหวัง
เมื่อคุณเรียกใช้โปรแกรมนี้ คุณควรเห็นมอเตอร์เซอร์โวเคลื่อนที่อย่างราบรื่นจาก 0 ถึง 180 องศาเมื่อคุณหมุนพอเทนชิโอมิเตอร์ หากเซอร์โวไม่เคลื่อนที่ตามที่คาดไว้ ให้ตรวจสอบการเดินสายและตรวจสอบให้แน่ใจว่าพอเทนชิโอมิเตอร์ทำงานอย่างถูกต้อง นอกจากนี้ ให้แน่ใจว่าอาร์ดูอิโนทำงานได้อย่างถูกต้องและโค้ดถูกอัปโหลดโดยไม่มีข้อผิดพลาด คุณสามารถคาดหวังที่จะเห็นเซอร์โวสะท้อนตำแหน่งของพอเทนชิโอมิเตอร์แบบเรียลไทม์ (ในวิดีโอที่ 02:00)
รหัสเวลาในวิดีโอ
- 00:00- บทนำสู่โครงการ
- 01:30- คำอธิบายการตั้งค่าอุปกรณ์
- 03:45- คำแนะนำการเดินสาย
- 05:00- การเดินผ่านโค้ด
- 07:30- การสาธิตโครงการที่เสร็จสมบูรณ์
บทเรียนนี้เป็นส่วนหนึ่งของ: มอเตอร์เซอร์โว
- ควบคุมเซอร์โวด้วยปุ่มกดโดยใช้ Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- ควบคุมเซอร์โวด้วยโพเทนชิโอมิเตอร์โดยใช้ Arduino
- ควบคุมเซอร์โวด้วยโพเทนชิโอมิเตอร์และLCD1602 โดยใช้ Arduino
- การควบคุมเซอร์โวมอเตอร์โดยใช้รีโมทอินฟราเรดร่วมกับอาร์ดูอิโน
- ควบคุมตำแหน่งเซอร์โวด้วยท่าทางมือสำหรับ Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- วิธีใช้เซอร์โวหมุนต่อเนื่อง 360° กับ Arduino
- โค้ด Arduino และวิดีโอสำหรับ PCA9685 ตัวควบคุมเซอร์โว 16 ช่อง 12 บิต V1
- สร้างสวิตช์สลับเซอร์โว Arduino ด้วยปุ่มกด
/**
*Original source: Arduino IDE
* Arduino Project: Controlling the servo position
* This code is used with a video tutorial for Robojax.com
* Published on April 24, 2017, from Ajax, ON, Canada.
* Written/Edited by Ahmad Shamshiri
* Watch the video on YouTube: https://youtu.be/kZ9b31gVemc
* View tutorial page for this code https://robojax.com/RJT8
* Controlling a servo position using a potentiometer (variable resistor)
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
แหล่งข้อมูลและเอกสารอ้างอิง
ยังไม่มีทรัพยากรเลย
ไฟล์📁
แผ่นข้อมูล (pdf)
-
sg90_serveo_motor_datasheet
sg90_serveo_motor_datasheet.pdf0.13 MB