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

การตั้งค่านี้มีความยืดหยุ่นอย่างเหลือเชื่อ นี่คือวิธีใช้งานจริงบางประการที่คุณสามารถนำไปใช้ได้:
- หุ่นยนต์: การควบคุมการแพนและเอียงของกล้องกิมบอล หรือฐานและข้อต่อแขนของหุ่นยนต์ขนาดเล็ก
- แอนิเมทรอนิกส์: การสร้างการเคลื่อนไหวที่สมจริงให้กับหุ่นเชิดหรือตัวละครแอนิเมทรอนิกส์โดยการควบคุมศีรษะและตาอย่างอิสระ
- การควบคุมโมเดล: การสร้างตัวควบคุมแบบกำหนดเองสำหรับรถ RC หรือเครื่องบินจำลองเพื่อปรับแผ่นปีกและปีกผีเสื้ออย่างแม่นยำ
- ระบบอัตโนมัติ: การสร้างสถานีควบคุมด้วยมือสำหรับระบบติดตามแสงอาทิตย์หรืออุปกรณ์จับยึดหลายแกน
ฮาร์ดแวร์ที่ต้องใช้
- Arduino Uno (หรือบอร์ดที่เข้ากันได้ใดๆ)
- มอเตอร์เซอร์โว 2 ตัว (ใช้เซอร์โวมาตรฐาน 180 องศาที่นี่)
- โพเทนชิโอมิเตอร์ 2 ตัว (10kΩ เป็นตัวเลือกทั่วไป)
- เบรดบอร์ดและสายจัมเปอร์
- แหล่งจ่ายไฟภายนอก 5V (แนะนำสำหรับเซอร์โวหลายตัว)
คู่มือการเดินสายไฟ
โปรเจกต์นี้ต้องใช้การเดินสายไฟมากกว่าการตั้งค่าเซอร์โวตัวเดียวเล็กน้อย สาเหตุหลักคือคุณต้องกระจายไฟและกราวด์ไปยังหลายส่วนประกอบ สิ่งสำคัญคือการใช้รางไฟของเบรดบอร์ดเพื่อสร้างบัส 5V และ GND ร่วมกัน แผนผังการเดินสายไฟเป็นสิ่งจำเป็นสำหรับการประกอบนี้

มาดูรายละเอียดการเชื่อมต่อตามที่อธิบายในวิดีโอกัน (ในวิดีโอที่ 02:23) ขั้นแรก ตั้งค่ารางไฟของคุณ: เชื่อมต่อพิน 5V ของ Arduino เข้ากับรางบวกของเบรดบอร์ด และพิน GND เข้ากับรางลบ ซึ่งจะทำให้คุณเข้าถึงไฟสำหรับส่วนประกอบทั้งหมดได้ง่าย
โพเทนชิโอมิเตอร์: โพเทนชิโอมิเตอร์แต่ละตัวทำหน้าที่เป็นตัวแบ่งแรงดันไฟฟ้า เชื่อมต่อพินด้านขวาของโพเทนชิโอมิเตอร์แต่ละตัวเข้ากับราง 5V และพินด้านซ้ายเข้ากับราง GND พินตรงกลางคือ "ตัวเลื่อน" และให้แรงดันไฟฟ้าที่แปรผันได้ เชื่อมต่อพินตรงกลางของโพเทนชิโอมิเตอร์ตัวแรกเข้ากับอินพุตแอนะล็อก A0 และพินตรงกลางของตัวที่สองเข้ากับ A1 (ในวิดีโอที่ 03:22)
มอเตอร์เซอร์โว: เซอร์โวแต่ละตัวมีสายสามเส้น เชื่อมต่อสายสีเข้ม (โดยปกติเป็นสีดำหรือสีน้ำตาล) เข้ากับราง GND เชื่อมต่อสายตรงกลาง (โดยปกติเป็นสีแดง) เข้ากับราง 5V สุดท้าย เชื่อมต่อสายสัญญาณ (โดยปกติเป็นสีส้มหรือสีเหลือง) เข้ากับพินที่รองรับ PWM บน Arduino สายสัญญาณของเซอร์โวตัวแรกไปที่พิน 3 และสายสัญญาณของเซอร์โวตัวที่สองไปที่พิน 5 (ในวิดีโอที่ 04:01) จำไว้ว่า คุณต้องใช้พินที่รองรับ PWM (มีเครื่องหมายทิลเด้ "~" บน Uno) สำหรับการควบคุมเซอร์โว
คำอธิบายโค้ด
โค้ดนี้มีพื้นฐานมาจากตัวอย่าง "Knob" มาตรฐานจาก Arduino IDE แต่ถูกแก้ไขเพื่อรองรับเซอร์โวสองตัว ตรรกะนั้นตรงไปตรงมา: อ่านค่าแอนะล็อกจากโพเทนชิโอมิเตอร์ แปลงเป็นมุม และสั่งให้เซอร์โวเคลื่อนที่ไปยังมุมนั้น ส่วนการกำหนดค่าที่ด้านบนของโค้ดคือจุดที่คุณจะทำการปรับเปลี่ยนทั้งหมด
นี่คือส่วนที่ผู้ใช้สามารถกำหนดค่าได้ ซึ่งกำหนดพินและสร้างออบเจกต์เซอร์โว:
#include <Servo.h>
//**** การตั้งค่าเซอร์โว 1
Servo servo1;
const int servo1PotPin = A0;
const int servo1Pin = 3;// ต้องใช้พินที่รองรับ PWM
int servo1Value;
//**** สิ้นสุดการตั้งค่าเซอร์โว 1
//**** การตั้งค่าเซอร์โว 2
Servo servo2;
const int servo2PotPin = A1;
const int servo2Pin = 5;// ต้องใช้พินที่รองรับ PWM
int servo2Value;
//**** สิ้นสุดการตั้งค่าเซอร์โว 2
นี่คือแกนหลักของการกำหนดค่า หากต้องการเพิ่มเซอร์โวตัวที่สาม คุณจะคัดลอกบล็อก "การตั้งค่าเซอร์โว 2" เปลี่ยน "2" ทั้งหมดเป็น "3" กำหนดพินแอนะล็อกใหม่ (เช่น A2) และพิน PWM ใหม่ (เช่น 9) คลาส Servo ถูกสร้างไว้ใน Arduino IDE แล้ว ดังนั้นจึงไม่จำเป็นต้องใช้ไลบรารีเพิ่มเติม
ในฟังก์ชัน setup() คำสั่ง servo.attach(pin) จะบอก Arduino ว่าพินใดเชื่อมต่อกับสายสัญญาณของเซอร์โวแต่ละตัว คุณต้องมีบรรทัดสำหรับเซอร์โวแต่ละตัวที่คุณใช้
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
ใน loop() โค้ดจะอ่านค่าโพเทนชิโอมิเตอร์ แปลงเป็นช่วง 0-180 องศา และเขียนมุมนั้นไปยังเซอร์โว delay(5) ที่ท้ายสุดคือพารามิเตอร์การปรับแต่ง ดังที่สาธิตในวิดีโอ การลดค่านี้จาก 15 เป็น 5 มิลลิวินาทีทำให้การเคลื่อนที่ของเซอร์โวนุ่มนวลขึ้นมากและกำจัดการสั่นสะเทือน (ในวิดีโอที่ 12:00)
การสาธิตโปรเจกต์สด
เมื่อคุณเดินสายวงจรและอัปโหลดโค้ดแล้ว การสาธิตจะเกิดขึ้นทันที เมื่อคุณจ่ายไฟให้ Arduino เซอร์โวแต่ละตัวจะเคลื่อนที่ไปยังตำแหน่งที่กำหนดโดยการตั้งค่าปัจจุบันของโพเทนชิโอมิเตอร์ที่เกี่ยวข้อง เมื่อคุณหมุนปุ่ม เซอร์โวของมันจะเคลื่อนที่ตามอย่างนุ่มนวล วิดีโอสาธิตว่าเซอร์โวสองตัวทำงานอย่างเป็นอิสระอย่างสมบูรณ์ ทำให้สามารถเคลื่อนไหวที่ซับซ้อนพร้อมกันได้ หากคุณสังเกตเห็นการกระตุกหรือการสั่นสะเทือน การปรับค่า delay() ในลูปเป็นสิ่งแรกที่ควรลอง
บทต่างๆ
- [00:00] บทนำและภาพรวมโครงการ
- [00:56] ทำความเข้าใจมอเตอร์เซอร์โว
- [02:23] แผนภาพการเดินสายไฟสำหรับเซอร์โวสองตัวและโพเทนชิโอมิเตอร์
- [04:15] คำอธิบายการเดินสายไฟโดยละเอียด
- [06:49] คำอธิบายโค้ด: การกำหนดค่าและการตั้งค่า
- [09:15] คำอธิบายโค้ด: ตรรกะการควบคุมและการแมป
- [11:15] การสาธิตสดและการปรับแต่ง
/*
* Control two or more servo motors
* using potentiometers.
* Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
* in Ajax, Ontario, Canada . www.Robojax.com
* This code on robojax https://robojax.com/RJT766
*
* Original code from Arduino IDE: File->Examples->Servo->knob
*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
* Get this code and other Arduino codes from Robojax.com
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
void loop() {
//Robojax.com multiple servo
servo1Value = analogRead(servo1PotPin);
servo1Value = map(servo1Value, 0, 1023, 0, 180);
servo1.write(servo1Value);
servo2Value = analogRead(servo2PotPin);
servo2Value = map(servo2Value, 0, 1023, 0, 180);
servo2.write(servo2Value);
delay(5);
//Robojax.com multiple servo
}// loop end
สิ่งที่คุณอาจต้องการ
-
อเมซอน
-
อเมซอน
-
อีเบย์
-
อาลีเอ็กซ์เพรสPurchase SG90 Servo motor 180 or 360 from AliExpresss.click.aliexpress.com
แหล่งข้อมูลและเอกสารอ้างอิง
ยังไม่มีทรัพยากรเลย
ไฟล์📁
ไฟล์อื่น ๆ
-
SG90 Seroo มอเตอร์ แผ่นข้อมูล
robojax-servo-SG90_datasheet.pdf0.12 MB