นั้น SG90 เซอร์โวมอเตอร์ เป็นเซอร์โวมอเตอร์ขนาดเล็ก น้ำหนักเบา ที่นิยมใช้กันในงานหุ่นยนต์ ระบบอัตโนมัติ และโปรเจกต์ DIY. ช่วยให้สามารถควบคุมตำแหน่งเชิงมุมได้อย่างแม่นยำด้วยการใช้ การมอดูเลตความกว้างพัลส์ (PWM). คู่มือนี้จะแสดงวิธีการควบคุม SG90 มอเตอร์เซอร์โวกับ Raspberry Pi โดยใช้ Python.
สิ่งที่คุณต้องมี
- Raspberry Pi (รุ่นใดก็ได้ที่รองรับ GPIO เช่น Pi 3, Pi 4)
- SG90 เซอร์โวมอเตอร์
- แหล่งจ่ายไฟภายนอก (5V, เป็นตัวเลือกเมื่อใช้เซอร์โวหลายตัว)
- เบรดบอร์ดและสายจัมเปอร์
- ติดตั้ง 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 เพื่อควบคุมตำแหน่งของเซอร์โว.
- ติดตั้ง ไลบรารี GPIO ของ Raspberry Pi (หากยังไม่ได้ติดตั้ง):
sudo apt update && sudo apt install python3-rpi.gpio - เปิดโปรแกรมแก้ไขสคริปต์ Python:
nano servo_control.py - คัดลอกสคริปต์ 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: การรันสคริปต์ควบคุมเซอร์โว
-
บันทึกสคริปต์และออก:
- กด CTRL+X, จากนั้น Y, จากนั้น ป้อน.
-
เรียกใช้สคริปต์:
python3 servo_control.py -
ป้อนมุมระหว่าง 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
- แขนหุ่นยนต์ – รอยต่อควบคุมสำหรับการเคลื่อนตัว.
- ประตูและระบบล็อกอัตโนมัติ – กลไกเปิด/ปิดโดยใช้เซอร์โว.
- ระบบกล้องแพน-ทิลต์ – เคลื่อนย้ายกล้องสำหรับการเฝ้าระวังหรือการถ่ายภาพ.
- ระบบอัตโนมัติสำหรับบ้านอัจฉริยะ – ควบคุมคันโยก ตัวล็อก และสวิตช์จากระยะไกล.
การแก้ไขปัญหา
-
เซอร์โวไม่ขยับ?
- ให้แน่ใจ การต่อสายไฟที่ถูกต้อง (VCC, GND และ GPIO18 สำหรับสัญญาณ).
- หากใช้เซอร์โวหลายตัว ให้ใช้ แหล่งจ่ายไฟภายนอก 5V.
-
การเคลื่อนไหวผิดปกติ?
- ให้แน่ใจว่าไฟฟ้าเสถียร; ใช้ ตัวเก็บประจุ (100µF) หากจำเป็น.
- ใช้ การควบคุม PWM ที่มีความละเอียดสูงขึ้น, เช่น โมดูล PWM PCA9685 สำหรับเซอร์โวหลายตัว.
-
ข้อผิดพลาดปฏิเสธการอนุญาต?
- เรียกใช้สคริปต์ด้วย
sudo:sudo python3 servo_control.py
- เรียกใช้สคริปต์ด้วย
บทสรุป
นั้น SG90 เซอร์โวมอเตอร์ เป็นวิธีที่ยอดเยี่ยมในการเพิ่ม การควบคุมการเคลื่อนไหว ไปยังโปรเจกต์ Raspberry Pi. โดยใช้ สัญญาณ PWM, คุณสามารถควบคุมตำแหน่งของเซอร์โวได้อย่างแม่นยำสำหรับ หุ่นยนต์ ระบบอัตโนมัติ และแอปพลิเคชัน IoT. ทดลองกับมุมและการใช้งานที่หลากหลายเพื่อปลดล็อกศักยภาพอย่างเต็มที่! 🚀


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