Ang SG90 servo motor ay isang maliit at magaan na servo na karaniwang ginagamit sa robotics, automation, at mga proyektong DIY. Pinapayagan nito ang tumpak na pagkontrol sa anggulo ng posisyon gamit ang Pulse Width Modulation (PWM). Ipakikita ng gabay na ito kung paano kontrolin ang isang SG90 servo motor gamit ang Raspberry Pi sa pamamagitan ng Python.
Mga Kakailanganin
- Raspberry Pi (anumang model na may suporta sa GPIO, hal. Pi 3, Pi 4)
- SG90 Servo Motor
- External Power Source (5V, opsyonal para sa maraming servo)
- Breadboard at Jumper Wires
- Python na naka-install sa Raspberry Pi
Hakbang 1: Pag-wire ng SG90 Servo sa Raspberry Pi
Ang SG90 servo motor ay may tatlong pin:
| SG90 Pin | Raspberry Pi Pin | Function |
|---|---|---|
| VCC (Pula) | 5V (Pin 2) | Power Supply |
| GND (Kayumanggi) | GND (Pin 6) | Ground |
| Signal (Orange) | GPIO18 (Pin 12) | PWM Signal Control |
Paalala: Kung gumagamit ng maraming servo, gumamit ng external 5V power supply upang maiwasan ang overloading sa 5V pin ng Raspberry Pi.
Hakbang 2: I-enable ang PWM sa Raspberry Pi
Ang Raspberry Pi ay bumubuo ng mga PWM signal upang kontrolin ang posisyon ng servo.
- I-install ang Raspberry Pi GPIO library (kung hindi pa naka-install):
sudo apt update && sudo apt install python3-rpi.gpio - Magbukas ng Python script editor:
nano servo_control.py - I-copy ang sumusunod na Python script para kontrolin ang SG90 servo motor:
Hakbang 3: Python Code para Kontrolin ang Servo
import RPi.GPIO as GPIO
import time
# I-set up ang GPIO pin para sa PWM
SERVO_PIN = 18 # Gamitin ang GPIO18 (Pin 12)
GPIO.setmode(GPIO.BCM)
GPIO.setup(SERVO_PIN, GPIO.OUT)
# Simulan ang PWM na may 50Hz frequency
pwm = GPIO.PWM(SERVO_PIN, 50)
pwm.start(0)
def set_angle(angle):
duty_cycle = (angle / 18) + 2.5 # I-convert ang anggulo sa duty cycle
GPIO.output(SERVO_PIN, True)
pwm.ChangeDutyCycle(duty_cycle)
time.sleep(0.5) # Maghintay para gumalaw ang servo
GPIO.output(SERVO_PIN, False)
pwm.ChangeDutyCycle(0)
try:
while True:
angle = int(input("Ilagay ang anggulo (0-180): "))
if 0 <= angle <= 180:
set_angle(angle)
else:
print("Maling anggulo! Maglagay ng value sa pagitan ng 0 at 180.")
except KeyboardInterrupt:
print("Lumalabas...")
pwm.stop()
GPIO.cleanup()
Hakbang 4: Pagpapatakbo ng Servo Control Script
-
I-save ang script at lumabas:
- Pindutin ang CTRL+X, pagkatapos ay Y, at pagkatapos ay ENTER.
-
Patakbuhin ang script:
python3 servo_control.py -
Maglagay ng mga anggulo sa pagitan ng 0 at 180 para igalaw ang servo.
Hakbang 5: Pag-unawa sa PWM para sa Servo Control
- PWM Frequency: Ang SG90 ay gumagana sa 50Hz.
- Duty Cycle Calculation:
- 0° → 2.5% Duty Cycle
- 90° → 7.5% Duty Cycle
- 180° → 12.5% Duty Cycle
-
Formula:
duty_cycle = (angle / 18) + 2.5
Hakbang 6: Mga Aplikasyon ng SG90 Servo kasama ang Raspberry Pi
- Robotic Arms – Kontrolin ang mga joint para sa paggalaw.
- Automated Doors & Locks – Mga mekanismo ng pagbukas/pagsara gamit ang servo.
- Pan-Tilt Camera Systems – Igalaw ang mga camera para sa surveillance o photography.
- Smart Home Automation – Kontrolin ang mga lever, lock, at switch nang malayuan.
Troubleshooting
-
Hindi gumagalaw ang servo?
- Siguraduhin ang tamang wiring (VCC, GND, at GPIO18 para sa signal).
- Kung gumagamit ng maraming servo, gumamit ng external 5V power source.
-
Maling paggalaw?
- Siguraduhin ang stable na power; gumamit ng capacitors (100µF) kung kinakailangan.
- Gumamit ng higher precision PWM control, gaya ng PCA9685 PWM module para sa maraming servo.
-
Permission Denied Error?
- Patakbuhin ang script gamit ang
sudo:sudo python3 servo_control.py
- Patakbuhin ang script gamit ang
Konklusyon
Ang SG90 servo motor ay isang mahusay na paraan upang magdagdag ng motion control sa mga proyekto sa Raspberry Pi. Sa paggamit ng PWM signals, maaari mong tumpak na kontrolin ang posisyon ng servo para sa robotics, automation, at mga aplikasyon sa IoT. Mag-eksperimento sa iba't ibang anggulo at aplikasyon upang mailabas ang buong potensyal nito! 🚀


1 Komento
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