Trong bài 3, chúng ta đã tìm hiểu về đọc tín hiệu Analog từ cảm biến xoay để điều chỉnh độ sáng đèn LED. Trong bài học này, chúng ta sẽ sử dụng tín hiệu từ cảm biến xoay để điều khiển góc quay của động cơ Servo 180 độ.
Servo là một dạng động cơ điện đặc biệt. Không giống như động cơ thông thường, cứ cắm điện vào là quay liên tục, Servo chỉ quay khi được điều khiển bằng tín hiệu xung với góc quay nằm trong khoảng bất kì từ 0o – 180o. Ngoài loại Servo 180 độ, cũng có các loại Servo có các góc quay khác như 120, 270 hay 360 độ. Mỗi loại Servo có kích thước, khối lượng và cấu tạo khác nhau, phù hợp với nhiều ứng dụng khác nhau.
Bộ xBuild Creator Kit cung cấp sẵn một động cơ Servo loại nhỏ là SG92R.
Để điều khiển Servo quay đến một góc chính xác, chúng ta cần truyền tín hiệu xung PWM với tần số 50Hz và giá trị xung như sau:
Theo như hình trên, để quay đến góc 90 độ, chúng ta dùng tín hiệu xung có tần số 50Hz (tương ứng 50 chu kỳ trong 1 giây ~ 20 mili giây mỗi chu kỳ) và cần bật tín hiệu trong 2ms (còn gọi là duty cycle). Bạn có thể tìm hiểu lại về PWM trong bài số 5.
Tuy nhiên, trong firmware MicroPython của xController đã có sẵn thư viện servo giúp chúng ta dễ dàng điều khiển servo quay đến 1 góc chính xác mà không cần quan tâm nhiều đến các thông số tín hiệu PWM này.
Lưu ý: Để sử dụng động cơ Servo thì bộ điều khiển xController cần phải được cấp nguồn từ nguồn ngoài (như từ pin) vì nguồn từ USB không đủ điện năng để chạy động cơ.
import time while True: sensor_value = pin41.read_analog() servo_value = translate(sensor_value, 0, 4095, 0, 200) servo.position(0, servo_value) time.sleep_ms(50)
sensor_value = pin41.read_analog()
Chúng ta đã quen thuộc với câu lệnh này ở các bài trước. Câu lệnh này đọc giá trị của cảm biến xoay và lưu vào biến sensor_value. Lúc này biến sensor_value sẽ có giá trị nằm trong khoảng từ 0 đến 4095.
servo_value = translate(sensor_value, 0, 4095, 0, 180)
Tuy nhiên, do góc quay của servo có giá trị từ 0 đến 180 độ, nên ta cần quy đổi các khoảng giá trị này bằng hàm translate.
servo.position(0, servo_value)
Dùng hàm position() của thư viện servo để điều khiển góc quay của servo gắn vào cổng S1. Do máy tính đếm số thứ tự bắt đầu từ 0, nên 8 cổng S1-S8 sẽ được đánh số từ 0 đến 7 trong chương trình lập trình..
Hàm servo.position() có cú pháp như sau:
servo.position(index, angle)
Các tham số sử dụng:
Sau khi chạy chương trình, bạn xoay biến trở qua trái và phải sẽ thấy servo cũng quay đến góc tương ứng.