ค้นหาโค้ด

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

การควบคุมมอเตอร์เซอร์โว 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/IO5 โวลต์
แรงดันไฟฟ้าจ่าย4.8-6 โวลต์
กระแสไฟฟ้าเอาต์พุต (ต่อช่อง)~500 มิลลิแอมป์
กระแสสูงสุด (ต่อช่อง)1 เอ
คำแนะนำความถี่ PWM50 เฮิร์ตซ์
เกณฑ์ตรรกะนำเข้า0.5 โวลต์ (ต่ำ), 2.5 โวลต์ (สูง)
แรงดันไฟฟ้าตก / RDS(on)/ ความอิ่มตัว0.5 โวลต์ ที่ 500 มิลลิแอมป์
ขีดจำกัดทางความร้อน0°C ถึง 60°C
แพ็คเกจเซอร์โวมาตรฐาน 9 กรัม
หมายเหตุ / ตัวแปรมักใช้ในแอปพลิเคชัน RC

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

คำแนะนำการเดินสาย

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor

สำหรับการตั้งค่านี้ คุณจะต้องเชื่อมต่อส่วนประกอบตามที่ระบุไว้ดังนี้:

เชื่อมพินกลางของพอเทนชิโอมิเตอร์ (วายเปอร์) เข้ากับพินอนาล็อกของอาร์ดูอิโน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 wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor
11-Controlling a servo position using a potentiometer using Arduino
ภาษา: C++
/**
*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)