Raspberry Pi Servo Motor

Hướng dẫn này sẽ chỉ bạn cách sử dụng Raspberry Pi để điều khiển servo motor. Cụ thể, chúng ta sẽ học:

Linh Kiện Cần Thiết

1×Raspberry Pi 5
1×động cơ servo
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Raspberry Pi
1×(Khuyến nghị) Raspberry Pi Prototyping Base Plate & Breadboard Kit
1×(Khuyến nghị) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Servo Motor

Servo motor là một linh kiện có khả năng xoay trục của nó trong phạm vi chuyển động cụ thể, thường là từ 0 đến 180 độ. Nó thường được sử dụng để điều khiển vị trí góc của một đối tượng.

Sơ Đồ Chân Servo Motor

Servo motor có ba chân:

  • Chân VCC (thường là màu đỏ) cần được kết nối với VCC (5V)
  • Chân GND (thường là màu đen hoặc nâu) cần được kết nối với GND (0V)
  • Chân tín hiệu (thường là màu vàng hoặc cam) nhận tín hiệu điều khiển PWM từ chân của Raspberry Pi.
động cơ servo sơ đồ chân

Raspberry Pi - Servo Motor

Một số chân trên Raspberry Pi có thể được lập trình để tạo ra tín hiệu PWM. Chúng ta có thể điều khiển servo motor bằng cách kết nối chân tín hiệu của nó với một trong các chân của Raspberry Pi và lập trình để tạo ra PWM trên chân đó.

Nhờ có thư viện Raspberry Pi Servo, việc điều khiển servo motor trở nên dễ dàng. Chúng ta không cần hiểu cách hoạt động của servo motor hay cách tạo ra tín hiệu PWM. Tất cả những gì chúng ta cần làm là học cách sử dụng thư viện.

Sơ Đồ Kết Nối

Raspberry Pi động cơ servo sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Để đơn giản hóa, sơ đồ kết nối ở trên được sử dụng để thử nghiệm và học tập, phù hợp với servo motor có mô-men xoắn thấp. Chúng tôi khuyến khích mạnh mẽ việc sử dụng nguồn điện bên ngoài cho servo motor. Sơ đồ kết nối dưới đây cho thấy cách kết nối servo motor với nguồn điện bên ngoài.

Raspberry Pi động cơ servo external power supply sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Code Raspberry Pi

Các Bước Nhanh

  • Đảm bảo bạn đã cài đặt Raspbian hoặc hệ điều hành tương thích Raspberry Pi khác trên Pi của bạn.
  • Đảm bảo Raspberry Pi của bạn được kết nối với cùng mạng cục bộ như PC của bạn.
  • Đảm bảo Raspberry Pi của bạn được kết nối internet nếu bạn cần cài đặt một số thư viện.
  • Nếu đây là lần đầu tiên bạn sử dụng Raspberry Pi, hãy xem Raspberry Pi - Cài Đặt Phần Mềm
  • Kết nối PC của bạn với Raspberry Pi qua SSH bằng SSH client tích hợp trên Linux và macOS hoặc PuTTY trên Windows. Xem cách kết nối PC với Raspberry Pi qua SSH.
  • Đảm bảo bạn đã cài đặt thư viện RPi.GPIO. Nếu chưa, hãy cài đặt bằng lệnh sau:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Tạo file script Python servo_motor.py và thêm code sau:
# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi này được cung cấp để sử dụng công khai, không có ràng buộc. # Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: # https://newbiely.vn/tutorials/raspberry-pi/raspberry-pi-servo-motor import RPi.GPIO as GPIO import time # Set the GPIO mode (BCM or BOARD) GPIO.setmode(GPIO.BCM) # Define the GPIO pin connected to the servo motor SERVO_PIN = 18 # Set the servo pin as an output pin GPIO.setup(SERVO_PIN, GPIO.OUT) # Set up PWM pwm_frequency = 50 # Set PWM frequency to 50Hz (standard for most servos) pwm = GPIO.PWM(SERVO_PIN, pwm_frequency) pwm.start(0) def set_servo_angle(angle): duty_cycle = (angle / 18) + 2.5 pwm.ChangeDutyCycle(duty_cycle) time.sleep(0.3) # Give the servo time to reach the desired angle try: while True: # Rotate the servo from 0 to 180 degrees for angle in range(0, 181, 10): set_servo_angle(angle) # Rotate the servo back from 180 to 0 degrees for angle in range(180, -1, -10): set_servo_angle(angle) except KeyboardInterrupt: # If the user presses Ctrl+C, clean up the GPIO configuration pwm.stop() GPIO.cleanup()
  • Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 servo_motor.py

Script chạy trong vòng lặp vô hạn liên tục cho đến khi bạn nhấn Ctrl + C trong terminal.

  • Kiểm tra kết quả: Servo motor xoay với tốc độ chậm theo cả hai chiều kim đồng hồ và ngược chiều kim đồng hồ, lên đến 180°.

Giải Thích Code

Hãy xem giải thích từng dòng có trong phần comment của source code!

Cách Điều Khiển Tốc Độ Servo Motor

# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi này được cung cấp để sử dụng công khai, không có ràng buộc. # Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: # https://newbiely.vn/tutorials/raspberry-pi/raspberry-pi-servo-motor import RPi.GPIO as GPIO import time # Set the GPIO mode (BCM or BOARD) GPIO.setmode(GPIO.BCM) # Define the GPIO pin connected to the servo motor SERVO_PIN = 18 # Set the servo pin as an output pin GPIO.setup(SERVO_PIN, GPIO.OUT) # Set up PWM pwm_frequency = 50 # Set PWM frequency to 50Hz (standard for most servos) pwm = GPIO.PWM(SERVO_PIN, pwm_frequency) pwm.start(0) MOVING_TIME = 3000 # moving time is 3 seconds angle_start = 30 # 30° angle_stop= 90 # 90° move_start_ms = int(round(time.time() * 1000)) # start moving in milliseconds try: while True: # Get the elapsed time since the movement started progress = int(round(time.time() * 1000)) - move_start_ms if progress <= MOVING_TIME: # Calculate the current angle based on the progress angle = angle_start + (angle_stop- angle_start) * progress / MOVING_TIME pwm.ChangeDutyCycle(2.5 + (angle / 18)) # Convert angle to duty cycle time.sleep(0.05) # Adjust this delay to control the speed/smoothness of movement except KeyboardInterrupt: # If the user presses Ctrl+C, clean up the GPIO configuration pwm.stop() GPIO.cleanup()

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.