ได้รับส่งมอบฟรีในคําสั่งทั้งหมดมากกว่า 20 ปอนด์!

การใช้มอเตอร์เซอร์โว SG90 กับ Raspberry Pi

Using the SG90 Servo Motor with the Raspberry Pi

นั้น SG90 เซอร์โวมอเตอร์ เป็นเซอร์โวมอเตอร์ขนาดเล็ก น้ำหนักเบา ที่นิยมใช้กันในงานหุ่นยนต์ ระบบอัตโนมัติ และโปรเจกต์ DIY. ช่วยให้สามารถควบคุมตำแหน่งเชิงมุมได้อย่างแม่นยำด้วยการใช้ การมอดูเลตความกว้างพัลส์ (PWM). คู่มือนี้จะแสดงวิธีการควบคุม SG90 มอเตอร์เซอร์โวกับ Raspberry Pi โดยใช้ Python.


สิ่งที่คุณต้องมี

  1. Raspberry Pi (รุ่นใดก็ได้ที่รองรับ GPIO เช่น Pi 3, Pi 4)
  2. SG90 เซอร์โวมอเตอร์
  3. แหล่งจ่ายไฟภายนอก (5V, เป็นตัวเลือกเมื่อใช้เซอร์โวหลายตัว)
  4. เบรดบอร์ดและสายจัมเปอร์
  5. ติดตั้ง Python แล้ว บน Raspberry Pi

ขั้นตอนที่ 1: การเดินสาย SG90 เซอร์โวไปที่ Raspberry Pi

เดอะ SG90 เซอร์โวมอเตอร์มี 3 ขา:

SG90 พิน พิน Raspberry Pi ฟังก์ชัน
VCC (สีแดง) 5V (ขา 2) แหล่งจ่ายไฟ
GND (สีน้ำตาล) GND (ขา 6) พื้นดิน
Signal (สีส้ม) GPIO18 (ขา 12) การควบคุมสัญญาณ PWM

หมายเหตุ: หากใช้เซอร์โวหลายตัว ให้ใช้ แหล่งจ่ายไฟภายนอก 5V เพื่อหลีกเลี่ยงการทำให้พิน 5V ของ Raspberry Pi รับโหลดเกิน.


ขั้นตอนที่ 2: เปิดใช้งาน PWM บน Raspberry Pi

Raspberry Pi สร้างสัญญาณ PWM เพื่อควบคุมตำแหน่งของเซอร์โว.

  1. ติดตั้ง ไลบรารี GPIO ของ Raspberry Pi (หากยังไม่ได้ติดตั้ง):
    sudo apt update && sudo apt install python3-rpi.gpio
    
  2. เปิดโปรแกรมแก้ไขสคริปต์ Python:
    nano servo_control.py
    
  3. คัดลอกสคริปต์ Python ต่อไปนี้ไปยัง ควบคุมสิ่งนั้น SG90 เซอร์โวมอเตอร์:

ขั้นตอนที่ 3: โค้ด Python สำหรับควบคุมเซอร์โว

import RPi.GPIO as GPIO
import time

# Set up the GPIO pin for PWM
SERVO_PIN = 18  # Use GPIO18 (Pin 12)
GPIO.setmode(GPIO.BCM)
GPIO.setup(SERVO_PIN, GPIO.OUT)

# Start PWM with 50Hz frequency
pwm = GPIO.PWM(SERVO_PIN, 50)
pwm.start(0)

def set_angle(angle):
    duty_cycle = (angle / 18) + 2.5  # Convert angle to duty cycle
    GPIO.output(SERVO_PIN, True)
    pwm.ChangeDutyCycle(duty_cycle)
    time.sleep(0.5)  # Wait for servo to move
    GPIO.output(SERVO_PIN, False)
    pwm.ChangeDutyCycle(0)

try:
    while True:
        angle = int(input("Enter angle (0-180): "))
        if 0 <= angle <= 180:
            set_angle(angle)
        else:
            print("Invalid angle! Enter a value between 0 and 180.")

except KeyboardInterrupt:
    print("Exiting...")
    pwm.stop()
    GPIO.cleanup()

ขั้นตอนที่ 4: การรันสคริปต์ควบคุมเซอร์โว

  1. บันทึกสคริปต์และออก:

    • กด CTRL+X, จากนั้น Y, จากนั้น ป้อน.
  2. เรียกใช้สคริปต์:

    python3 servo_control.py
    
  3. ป้อนมุมระหว่าง 0 ถึง 180 เพื่อขยับเซอร์โว.


ขั้นตอนที่ 5: ทำความเข้าใจ PWM สำหรับการควบคุมเซอร์โว

  • ความถี่ PWM: เดอะ SG90 ทำงานที่ 50Hz.
  • การคำนวณอัตราส่วนการทำงาน (Duty Cycle):
    • 0° → ดิวตี้ไซเคิล 2.5%
    • 90° → 7.5% ดิวตี้ไซเคิล
    • 180° → 12.5% ดิวตี้ไซเคิล
  • สูตร: duty_cycle = (angle / 18) + 2.5

ขั้นตอนที่ 6: การประยุกต์ใช้ของ SG90 เซอร์โวกับ Raspberry Pi

  1. แขนหุ่นยนต์ – รอยต่อควบคุมสำหรับการเคลื่อนตัว.
  2. ประตูและระบบล็อกอัตโนมัติ – กลไกเปิด/ปิดโดยใช้เซอร์โว.
  3. ระบบกล้องแพน-ทิลต์ – เคลื่อนย้ายกล้องสำหรับการเฝ้าระวังหรือการถ่ายภาพ.
  4. ระบบอัตโนมัติสำหรับบ้านอัจฉริยะ – ควบคุมคันโยก ตัวล็อก และสวิตช์จากระยะไกล.

การแก้ไขปัญหา

  1. เซอร์โวไม่ขยับ?

    • ให้แน่ใจ การต่อสายไฟที่ถูกต้อง (VCC, GND และ GPIO18 สำหรับสัญญาณ).
    • หากใช้เซอร์โวหลายตัว ให้ใช้ แหล่งจ่ายไฟภายนอก 5V.
  2. การเคลื่อนไหวผิดปกติ?

    • ให้แน่ใจว่าไฟฟ้าเสถียร; ใช้ ตัวเก็บประจุ (100µF) หากจำเป็น.
    • ใช้ การควบคุม PWM ที่มีความละเอียดสูงขึ้น, เช่น โมดูล PWM PCA9685 สำหรับเซอร์โวหลายตัว.
  3. ข้อผิดพลาดปฏิเสธการอนุญาต?

    • เรียกใช้สคริปต์ด้วย sudo:
      sudo python3 servo_control.py
      

บทสรุป

นั้น SG90 เซอร์โวมอเตอร์ เป็นวิธีที่ยอดเยี่ยมในการเพิ่ม การควบคุมการเคลื่อนไหว ไปยังโปรเจกต์ Raspberry Pi. โดยใช้ สัญญาณ PWM, คุณสามารถควบคุมตำแหน่งของเซอร์โวได้อย่างแม่นยำสำหรับ หุ่นยนต์ ระบบอัตโนมัติ และแอปพลิเคชัน IoT. ทดลองกับมุมและการใช้งานที่หลากหลายเพื่อปลดล็อกศักยภาพอย่างเต็มที่! 🚀

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.

1 ความคิดเห็น

Hi,
I’m considering buying some servos for a robotics and I keep seeing “analogue” and “digital” servos. If I’m using analogue servos do I need an ADC for each one, or can I plug them straight into the pi? is there even any difference? I assume this guide is for digital servos, but the pictures don’t have the “digital” label some do online

Fozzy,

แสดงความคิดเห็น