Download as pdf or txt
Download as pdf or txt
You are on page 1of 75

ĐẠI HỌC BÁCH KHOA HÀ NỘI

TRƯỜNG ĐIỆN – ĐIỆN TỬ

*************************

ĐỒ ÁN 1

ĐIỀU KHIỂN ĐỘNG CƠ SERVO


Nguyễn Bá Đức - 20200169

Duc.nb200169@sis.hust.edu.vn

Nguyễn Nam Khánh - 20200320

Khanh.nn200320@sis.hust.edu.vn

Ngành KT Điều khiển – Tự động hóa

Giảng viên hướng dẫn: PGS. TSKH Trần Hoài Linh


Trường: Điện – Điện tử
Khoa: Tự động hóa

Hà Nội 6/2023

-1-
LỜI CẢM ƠN
Để hoàn thành được đồ án 1 này, lời đầu tiên em xin chân thành cảm ơn các thầy
cô trong Đại học Bách khoa Hà Nội nói chung và thầy cô trong trường Điện – Điện tử nói
riêng đã tận tình truyền đạt kiến thức và giúp đỡ em trong quá trình thực hiện đồ án cũng
như trong suốt thời gian trước đây.

Đặc biệt, chúng em xin chân thành cảm ơn PGS.TSKH Trần Hoài Linh là người
trực tiếp giúp chúng em định hướng đề tài thực hiện, hỗ trợ kiến thức chuyên môn cũng
như động viên tinh thần mỗi khi chúng em gặp khó khăn. Bên cạnh đó, trong quá trình
làm đồ án cũng gặp nhiều khó khăn nhưng được sự giúp đỡ của các bạn trong ngành giúp
em hoàn thành được đồ án.

Tuy nhiên trong quá trình thực hiện đồ án và làm báo cáo, sai sót là điều chúng em
không thể tránh khỏi. Vì vậy, chúng em kính mong quý thầy cô góp ý để chúng em chỉnh
sửa và hoàn thiện để cuốn đồ án này thêm hoàn thiện hơn!

Chúng em xin chân thành cảm ơn!

Hà Nội, ngày 30 tháng 06 năm 2023


Sinh viên thực hiện

Nguyễn Bá Đức Nguyễn Nam Khánh


-2-
TÓM TẮT ĐỒ ÁN
Trong đồ án này, chúng em thiết mạch điều khiển động cơ Servo, chúng em đã thực hiện
những vấn đề sau:

• Tìm hiểu các về vấn đề động cơ Servo và hệ thống điều khiển servo, phân loại, các
ứng dụng tiêu biểu, kinh điển của động cơ Servo. Tại sao động cơ servo lại được
dùng nhiều trong thực tế
• Tìm hiểu cấu tạo chi tiết của động cơ servo, nguyên lý hoạt động.
• Tìm hiểu vi điều khiển ardunio và sử dụng arduino trong việc điều khiển động cơ
Servo
• Tìm hiểu thêm các thiết bị liên quan như breadboard, chiết áp, …
• Thiết kế mạch điều khiển động cơ servo để thực hiện công việc cụ thể:
- Điều khiển servo trực tiếp bằng arduino để servo quay đều từ 0→1800
- Điều khiển servo trực tiếp bằng arduino để servo quay đều từ 0→900 →1800
- Điều khiển servo quay bằng cách thay đổi giá trị chiết áp và mạch điều khiển bao
gồm Arduino
- Thiết kế mạch điều khiển thiết bị tự động mở khi có vật cản sử dụng động cơ
servo
- Xây dựng nhiệt kế analog sử dụng động cơ servo
• Lựa chọn các linh kiện phù hợp cùng với các thông số
- Lựa chọn động cơ servo: SERVO SG90
- Lựa chọn vi điều khiển: ARDUINO UNO R3
- Lựa chọn breadboard, chiếp áp: 10𝑘Ω
- Cảm biến nhiệt độ TMP36
- Cảm biến siêu âm HC-SR04
• Thiết kế mạch điều khiển động cơ servo và lập trình cho vi điều khiển arduino điều
khiển servo thực hiện các chức năng thông qua phần mềm Arduino IDE

-3-
MỤC LỤC
ĐIỀU KHIỂN ĐỘNG CƠ SERVO

LỜI CẢM ƠN................................................................................................................ - 2 -


TÓM TẮT ĐỒ ÁN ........................................................................................................ - 3 -
MỤC LỤC ..................................................................................................................... - 4 -
DANH MỤC HÌNH VẼ ................................................................................................ - 6 -
DANH MỤC BẢNG BIỂU ........................................................................................... - 8 -
CHƯƠNG 1: GIỚI THIỆU CHUNG ............................................................................ - 9 -
I.Giới thiệu chung ................................................................................................ - 9 -
1.Động cơ servo ................................................................................................ - 9 -
2.Hệ thống servo ............................................................................................. - 10 -
3.Ứng dụng của động cơ Servo và hệ thống điều khiển servo ....................... - 10 -
II.Giải quyết vấn đề............................................................................................ - 12 -
CHƯƠNG 2: THIẾT KẾ PHẦN CỨNG .................................................................... - 13 -
I.Động cơ R/C servo (micro servo).................................................................... - 13 -
II.Hoạt động của hệ thống servo ........................................................................ - 17 -
III.Mạch/thiết bị điều khiển hệ thống Servo ...................................................... - 22 -
IV.Lựa chọn linh kiện ........................................................................................ - 26 -
1. Lựa chọn động cơ servo.............................................................................. - 27 -
2. Lựa chọn vi điều khiển ............................................................................... - 28 -
3. Bảng mạch bánh mỳ - Bộ cắm dây (breadboard) ....................................... - 32 -
4. Chiết áp (biến trở) ....................................................................................... - 33 -
5. Cảm biến nhiệt độ TMP36.......................................................................... - 35 -
6. Cảm biến siêu âm HC-SR04 ....................................................................... - 37 -
CHƯƠNG 3. THIẾT KẾ PHẦN MỀM ...................................................................... - 41 -
I.Chương trình điều khiển servo quay đều từ 0→90𝑜 với độ chia là 1𝑜 ........... - 45 -
II.Chương trình điều khiển servo quay tới 0, 90𝑜 , 1800 sau mỗi 1 giây (1000ms) ....-
49 -
III.Chương trình điều khiển servo quay tới 1 góc tùy ý (trong khoảng 0→1800 ) sử
dụng chiết áp ...................................................................................................... - 53 -
-4-
IV.Thiết kế mô hình các thiết bị tự động mở khi có vật cản sử dụng động cơ servo
và cảm biến siêu âm ........................................................................................... - 57 -
V.Building an Analog thermometer (xây dựng nhiệt kế analog) ...................... - 61 -
CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNH GIÁ ....................................................... - 68 -
I.Chương trình điều khiển servo quay đều từ 0 → 900 với độ chia là 10 ......... - 68 -
II.Chương trình điều khiển servo quay tới 0, 90𝑜 , 1800 sau mỗi 1 giây (1000ms) ...-
69 -
III.Chương trình điều khiển servo quay tới 1 góc tùy ý (trong khoảng 0→1800 ) sử
dụng chiết áp ...................................................................................................... - 69 -
IV.Thiết kế mô hình các thiết bị tự động mở khi có vật cản sử dụng động cơ servo
và cảm biến siêu âm ........................................................................................... - 70 -
V.Building an Analog thermometer (xây dựng nhiệt kế analog) ...................... - 70 -
CHƯƠNG 5. TỔNG KẾT ........................................................................................... - 73 -
I.Kết luận............................................................................................................ - 73 -
II.Hướng phát triển đề tài ................................................................................... - 73 -
TÀI LIỆU THAM KHẢO ........................................................................................... - 75 -

-5-
DANH MỤC HÌNH VẼ
Hình 1.1: Các loại servo motor thông dụng
Hình 1.2: Hoạt động của hệ thống servo
Hình 1.3: Ứng dụng trong cánh tay robot
Hình 1.4: Ứng dụng trong định vị ăng-ten
Hình 1.5: Mạch điều khiển động cơ servo
Hình 2.1: Động cơ servo R/C điển hình dùng trong mô hình máy bay và xe đua.
Hình 2.2: Bên trong của một động cơ servo R/C
Hình 2.3: Cấu tạo chi tiết động cơ servo
Hình 2.4: Hoạt động của động cơ servo
Hình 2.5: Sơ đồ hoạt động của động cơ servo
Hình 2.6: Sơ đồ điều khiển hệ thống servo
Hình 2.7: Mạch cầu H bên trong Motor Driver
Hình 2.8: Chiết áp
Hình 2.9: Các góc quay của động cơ servo tương ứng với độ rộng xung
Hình 2.10: Mạch điều khiển hệ thống servo sử dụng hệ Arduino
Hình 2.11: Hình ảnh kết nối biến trở và động cơ servo với IoT Maker
Hình 2.12: Board mạch Arduino
Hình 2.13: Đầu nối USB và nguồn
Hình 2.14: Vi điều khiển ATMEGA
Hình 2.15: Ổ cắm nguồn và analog
Hình 2.16: Các chân đầu vào/ra kỹ thuật số
Hình 2.17: Các đèn LED trên bo mạch
Hình 2.18: Nút RESET
Hình 2.19: Động cơ SERVO SG90
Hình 2.20: Kích thước và thông số kĩ thuật của SG90
Hình 2.21: Xung PWM trong điều khiển góc quay
Hình 2.22: Cấu tạo Arduino Uno R3
-6-
Hình 2.23: Các thông số của Board
Hình 2.24: Các chân của vi điều khiển Atmega328
Hình 2.25: Breadboard circuit dùng để kết nối thành mạch kín giữa các thiết bị
Hình 2.26: Cấu tạo bên dưới của 1 breadboard circuit
Hình 2.27: Cấu tạo chiết áp
Hình 2.28: Chiết áp sử dụng là loại 10k
Hình 2.29: Cảm biến nhiệt độ TMP36
Hình 2.30: Cảm biến siêu âm HC-SR04
Hình 2.31: Nguyên lý truyền sóng của cảm biến siêu âm HC-SR04
Hình 2.32: Thông số kỹ thuật của cảm biến siêu âm HC-SR04
Hình 2.33: Nguyên lý hoạt động của cảm biến siêu âm HC-SR04
Hình 3.1: Màn hình làm việc chúng của phần mềm Arduino IDE
Hình 3.2: Kết nối mạch điều khiển servo quay đều từ 00 → 900
Hình 3.3: Kết nối mạch điều khiển servo quay đều từ 00 → 900 → 1800
Hình 3.4: Kết nối mạch điều khiển servo quay đều một góc tùy ý sử dụng chiết áp
Hình 3.5: Kết nối mạch tự động mở khi có vật cản
Hình 3.6: Các cổng được kết nối tương ứng của thiết bị
Hình 3.7: Mạch xây dựng nhiệt kế analog
Hình 3.8: Tay quay của servo chỉ đến nhiệt độ tương ứng được hiển thị trong bảng
Hình 4.1: Kết quả thực nghiệm 1
Hình 4.2: Kết quả thực nghiệm 2
Hình 4.3: Kết quả thực nghiệm 3
Hình 4.4: Kết quả thực nghiệm 4

-7-
DANH MỤC BẢNG BIỂU
Bảng 2.1: Các thông số của Board

Bảng 2.2: Các thông số kỹ thuật của Atmega328

Bảng 2.3: Các thông số kỹ thuật của chiết áp

-8-
CHƯƠNG 1: GIỚI THIỆU CHUNG

I. Giới thiệu chung


1. Động cơ servo

- Động cơ điện servo hay còn gọi là servo motor là một loại động cơ máy móc chuyên
dùng để cung cấp cơ năng cho một số thiết bị, dây chuyền hay cơ cấu hoạt động nào
đó trong quy trình sản xuất và chế tạo. Chúng đóng vai trò là đầu tàu cung cấp lực kéo,
giúp cho các dây chuyền hay các cơ cấu động cơ khác hoạt động theo.
- Thiết bị này thường sử dụng từ trường để biến đổi điện năng thành cơ năng dưới dạng
xoay nhằm mục đích kéo tải.

Hình 1.1: Các loại servo motor thông dụng

- Servo là loại động cơ dễ điều khiển vị trí và điều khiển rất chính xác (có độ chính xác
cao). Servo có có ưu điểm là nhanh và chính xác nhưng công suất thấp. Vì vậy servo
không phải là một loại động cơ có momen lớn dùng để làm các công việc như một số
loại động cơ dùng với các ứng dụng như đẩy, kéo, nâng, hạ các vật có khối lượng
lớn,… Sử dụng servo với các ứng dụng yêu cầu độ chính xác cao, vì vậy servo rất phổ
biến.

-9-
- Trục đầu ra của động cơ servo có thể di chuyển đến một góc, vị trí và vận tốc cụ thể
mà động cơ thông thường không có được

2. Hệ thống servo

Hình 1.2: Hoạt động của hệ thống servo


- Hệ thống động cơ Servo là một phần của hệ thống vòng kín và bao gồm một số bộ
phận cụ thể là mạch điều khiển, động cơ Servo, trục, chiết áp, bánh răng truyền động,
bộ khuếch đại và bộ mã hóa (encoder) hoặc bộ phân giải.
- Servo là một hệ thống truyền động điều khiển hồi tiếp vòng kín, nhận tín hiệu và thực
hiện một cách nhanh chóng và chính xác theo lệnh từ PLC. Bộ servo bao gồm 1 bộ
điều khiển servo (servo drive), 1 động cơ servo và 1 encoder để phản hồi tín hiệu từ
động cơ về bộ điều khiển. Servo được sử dụng để điều khiển vị trí chính xác, điều
chỉnh momen phù hợp với các ứng dụng khác nhau và thay đổi tốc độ cực kỳ nhanh
(đáp ứng ở ms).
- Hệ thống servo là một cơ chế vòng kín kết hợp phản hồi vị trí để kiểm soát tốc độ và
vị trí quay hoặc tuyến tính
- Động cơ servo được điều khiển bằng tín hiệu điện, tương tự hoặc số.

3. Ứng dụng của động cơ Servo và hệ thống điều khiển servo

- Với nhiều tıń h năng nổi bật, hiệu suất cao, khả năng điều khiển chính xác vị trí, tốc độ,
lực căng, vận hành mạnh mẽ và hoạt động ổn định trong thời gian dài, động cơ servo
- 10 -
phù hợp với nhiều ứng dụng từ cơ bản, đa năng đến chuyên dụng, hiện đại trong nhiều
ngành công nghiệp khác nhau.
- Các ứng dụng động cơ Servo được áp dụng trong nhiều hệ thống và sản phẩm công
nghiệp và thương mại, chẳng hạn như với robot, các động cơ Servo được sử dụng ở
mọi “khớp” của robot để thực hiện góc chuyển động chính xác.

Hình 1.3: Ứng dụng trong cánh tay robot

- Thêm một ứng dụng tiêu biểu chính là các hệ thống định vị ăng-ten, động cơ Servo được
sử dụng cho cả định vị phương vị và trục độ cao của ăng-ten và kính thiên văn, thường
được sử dụng bởi đài quan sát thiên văn vô tuyến quốc gia.

Hình 1.4: Ứng dụng trong định vị ăng-ten

- 11 -
II. Giải quyết vấn đề
- Vấn đề đặt ra đó là thiết kế một mạch điều khiển động cơ servo và thực nghiệm một
nhiệm vụ cụ thể
- Nêu cấu tạo cụ thể và chi tiết của động cơ servo sử dụng
- Hệ thống điều khiển servo
- Mạch/thiết bị điều khiển servo
- Lựa chọn thiết bị phần cứng
- Chọn thuật toán cho phần việc điều khiển servo và sử dụng

Hình 1.5: Mạch điều khiển động cơ servo

- 12 -
CHƯƠNG 2: THIẾT KẾ PHẦN CỨNG
Ở trong đồ án này sẽ lựa chọn động cơ R/C servo (micro servo) là trung tâm để tiến
hành nghiên cứu chi tiết và thực hành các công việc điều khiển đối với động cơ này.

I. Động cơ R/C servo (micro servo)


- Động cơ servo có nhiều kiểu dáng và kích thước, được sử dụng trong nhiếu máy khác
nhau, từ máy tiện điều khiển bằng máy tính cho đến các mô hình máy bay và xe hơi.
Ứng dụng mới nhất của động cơ servo là trong các robot, cùng loại với các động cơ
dùng trong mô hình máy bay và xe hơi.
- Các động cơ servo điều khiển bằng liên lạc vô tuyến được gọi là động cơ servo R/C
(radio - controlled). Trong thực tế, bản thân động cơ servo không phải được điều khiển
bằng vô tuyến, nó chỉ nối với máy thu vô tuyến trên máy bay hay xe hơi. Động cơ
servo nhận tín hiệu từ máy thu này. Như vậy có nghĩa là ta không cần phải điều khiển
robot bằng tín hiệu vô tuyến bằng cách sử dụng một động cơ servo, trừ khi ta muốn
thế. Ta có thể điều khiển động cơ servo bằng máy tính, một bộ vi xử lý hay thậm chí
một mạch điện tử đơn giản dùng IC 555.
- Trong phần này ta sẽ tìm hiểu động cơ servo R/C là gì, sử dụng chúng trong robot như
thế nào. Mặc dù còn có nhiều loại động cơ servo khác nhưng động cơ servo R/C được
sử dụng nhiều nhất. Để đơn giản ta gọi động cơ servo R/C là servo.

- 13 -
1. Motor - Động cơ
2. Electronics Board - Bảng điện tử
3.Positive Power Wire (Red) - Dây nguồn dương (Đỏ)
4. Signal Wire (Yellow or White) - Dây tín hiệu (Vàng
hoặc Trắng)
5. Negative or Ground Wire (Black) - Dây âm hoặc dây
nối đất (Đen)
6. Potentiometer - Chiết áp
7.Output Shaft/Gear - Trục đầu ra/Bánh răng
8. Servo Attachment Horn/Wheel/Arm - Còi/Bánh
Hình 2.1: Một động cơ servo R/C kích thước chuẩn xe/Cánh tay Servo
điển hình dùng trong mô hình máy bay và xe đua. 9. Servo Case - Vỏ Servo
Ngoài ra còn có nhiều loại kích thước thông dụng 10. Integrated Control Chip - Chip điều khiển tích hợp
khác.

Hình 2.2: Bên trong của một động cơ servo R/C. Servo bao gồm một động cơ, một chuỗi các bánh răng
giảm tốc, một mạch điều khiển và một vôn kế

- 14 -
Vỏ chính (main housing) và các kết nối điện
(electrical connections) bên cạnh. Trong đó:
- Dây đỏ(positive) là dây điện áp dương
- Dây nâu(negative) là dây nối đất
- Dây cam(signal) là dây điều chế độ rộng
xung

Bên ngoài vỏ servo phần trên cùng là một


bánh răng nhỏ (splined gear) có thể kết nối
với các tay đòn dài ngắn khác nhau để sử
dụng với các loại tải khác nhau

Bên trong servo. Phần phía trên là các bánh


răng(gears) và vòng bi(bearing)

Bánh răng đầu vào (input) và bánh răng đầu


ra (output)

- 15 -
Bánh răng đầu vào sẽ kết nối với động cơ 1
chiều (DC motor). DC motor và bánh răng
đầu vào sẽ quay cùng một tốc độ góc

Hệ truyền động cơ học gồm các bánh răng


gọi là bộ truyền bánh răng phức hợp
(compound gear train).
Các bánh răng thiết kế để đảm bảo gọn nhất
có thể

DC motor có tốc độ quay cao tuy nhiên


momen sinh ra lại thấp (tay đòn ngắn) vì vậy
hệ thống các bánh răng giúp chuyển đổi đầu
ra tốc độ thấp nhưng momen lại lớn

DC motor được kết nối với một bảng mạch


nhỏ bên trong. Bảng mảng này giúp kiểm
soát vòng quay của động cơ DC cũng như
hướng quay của động cơ DC

- 16 -
Bảng mạch còn được kết nối với một chiết
áp. Chiết áp này kết nối với Bánh răng đầu
ra trong hệ bánh răng. Khi bánh răng đầu ra
quay nó làm quay chiết áp. Vận tốc góc của
bánh răng đầu ra chính là vận tốc góc của
momen kéo tải. Chiết áp quay làm thay đổi
điện trở và xác định vị trí đầu ra.

Hình 2.3: Cấu tạo chi tiết động cơ servo

II. Hoạt động của hệ thống servo


- Động cơ và chiết áp nối với mạch điều khiển tạo thành mạch hồi tiếp vòng kín. Cả mạch
điều khiển và động cơ đều được cấp nguồn DC (thường từ 4.8 – 7.2 V). Để quay động cơ,
tín hiệu số được gửi tới mạch điều khiển. Tín hiệu này khởi động động cơ, thông qua
chuỗi bánh răng, nối với vôn kế. Vị trí của trục vôn kế cho biết vị trí trục ra của servo.
Khi vôn kế đạt được vị trí mong muốn, mạch điều khiển sẽ tắt động cơ.
- Động cơ servo được thiết kế để quay có giới hạn chứ không phải quay liên tục như động
cơ DC hay động cơ bước. Mặc dù ta có thể chỉnh động cơ servo R/C quay liên tục nhưng
công dụng chính của động cơ servo là đạt được góc quay chính xác trong khoảng từ
0𝑜 – 180𝑜 . Việc điều khiển này có thể ứng dụng để lái robot, di chuyển các tay máy lên
xuống, quay một cảm biến để quét khắp phòng
- Trục của động cơ servo R/C được định vị nhờ vào kỹ thuật gọi là điều biến độ rộng xung
(PWM)
- Trong hệ thống này, servo là đáp ứng của một dãy các xung số ổn định. Cụ thể hơn, mạch
điều khiển là đáp ứng của một tín hiệu số có các xung biến đổi từ 1 – 2 ms. Các xung này
được gửi đi 50 lần/giây. Chú ý rằng không phải số xung trong một giây điều khiển servo
mà là chiều dài của các xung. Servo đòi hỏi khoảng 30 – 60 xung/giây. Nếu số này quá
thấp, độ chính xác và công suất để duy trì servo sẽ giảm.

- 17 -
Bộ điều khiển gửi tín hiệu đến động cơ
servo để xác định vị trí mà nó sẽ quay

Sử dụng phương pháp điều chế độ rộng


xung (PWM) để điều khiển servo. Bộ điều
khiển gửi các xung điện áp xuống dây dẫn.
Độ rộng của xung thay đổi lớn, bé tùy vào
việc điều khiển. Các xung này được gửi từ
bộ điều khiển sau mỗi 20 ms tức là có
khoảng 50 xung mỗi giây nghĩa là tần số
phát xung là 50Hz

Điều khiển vị trí của trục ra của động cơ


bằng cách điều chế độ rộng xung.
Độ rộng của xung xác định vị trí của servo.
Xung càng rộng, đầu kim gắn với trục ra
của servo sẽ đi sang trái. Xung càng hẹp,
đầu kim đi sang phải.

Mặt khác, khi thay đổi điện áp nguồn, độ


cao của xung cũng thay đổi lên xuống, tuy
nhiên độ rộng xung vẫn giữ nguyên và
động cơ servo vẫn đứng yên

Hình 2.4: Hoạt động của động cơ servo

- 18 -
Hình 2.5: Sơ đồ hoạt động của động cơ servo

Hình 2.6: Sơ đồ điều khiển hệ thống servo

- Tín hiệu đi từ bộ điều khiển vào servo và sẽ được chuyển đổi thành điện áp
- Nó đi qua 1 bộ so sánh điện áp sau đó đi đến Motor Driver
- Motor Driver sẽ điều khiển tốc độ góc của DC motor

- 19 -
Hình 2.7: Mạch cầu H bên trong Motor Driver

- Mạch cầu H bên trong Motor Driver điều khiển hướng quay của DC motor theo chiều
kim đồng hồ hoặc ngược chiều kim đồng hồ để đến vị trí cần thiết
- Vòng quay này làm cho hệ thống bánh răng quay và cánh tay nối với trục đầu ra servo
cũng quay
• Vai trò của chiết áp:
Chiết áp trong servo giữ vai trò chính trong việc cho phép định vị trí của trục ra. Chiết
áp được gắn vào trục ra (trong một vài servo, chiết áp chính là trục ra). Bằng cách này, vị
trí của chiết áp phản ánh chính xác vị trí trục ra của servo. Ta đã biết chiết áp hoạt động
nhờ cung cấp một điện áp biến thiên cho mạch điều khiển, như hình. Khi cần chạy bên
trong Vôn kế chuyển động, điện thế sẽ thay đổi. Mạch điều khiển trong servo so sánh điện
thế này với độ dài các xung số đưa vào và phát “tín hiệu sai số” nếu điện thế không đúng.
Tín hiệu sai số này tỉ lệ với độ lệch giữa vị trí của chiết áp và độ dài của tín hiệu vào.
Mạch điều khiển sẽ kết hợp tín hiệu sai số này để quay động cơ. Khi điện thế của chiết áp
và độ dài các xung số bằng nhau, tín hiệu sai số được loại bỏ và động cơ ngừng.

- 20 -
Chiết áp hoạt động trên nguyên lý
của một mạch phân áp, khi xoay
núm điện trở thay đổi làm thay đổi
điện áp tỉ lệ thuận với vị trí của nó

Hình 2.8: Chiết áp


- Chiết áp được nối với bộ so sánh trong bảng mạch và điện áp theo dõi để cung cấp
phản hồi
- Bộ so sánh (Comparator) sẽ so sánh điện áp của chiết áp và với điện áp của tín hiệu bộ
điều khiển. Nếu có sự khác biệt thì động cơ sẽ quay cho đến khi chuyên lệch bằng 0.
Đấy là lúc servo đứng đúng vị trí
• Các giới hạn quay:

Các servo khác nhau ở góc quay được với cùng tín hiệu 1 – 2 ms (hoặc bất kỳ) được
cung cấp. Các servo chuẩn được thiết kế để quay tới và lui từ 0𝑜 – 180𝑜 khi được cung
cấp toàn bộ chiều dài xung. Phần lớn servo có thể quay được 180𝑜 hay gần 180𝑜 . Nếu ta
cố điều khiển servo vượt quá những giới hạn cơ học của nó, trục ra của động cơ sẽ đụng

- 21 -
vật cản bên trong, dẫn đến các bánh răng bị mài mòn hay bị rơ. Hiện tượng này kéo dài
hơn vài giây sẽ làm bánh răng của động cơ bị phá hủy.

Hình 2.9: Các góc quay của động cơ servo tương ứng với độ rộng xung

III. Mạch/thiết bị điều khiển hệ thống Servo


Sử dụng Vi điều khiển Arduino để điều khiển hệ thống servo.

- 22 -
Hình 2.10: Mạch điều khiển hệ thống servo sử dụng hệ Arduino

- Vi điều khiển Arduino là một loại vi điều khiển (microcontroller) được tích hợp sẵn
trên các board mạch Arduino. Vi điều khiển này chính là "bộ não" của board mạch, nó
thực hiện các chức năng điều khiển, xử lý dữ liệu và giao tiếp với các linh kiện khác
như cảm biến, module mạng, ...
- Các vi điều khiển trên board Arduino thường được lập trình bằng ngôn ngữ C/C++
thông qua IDE (Integrated Development Environment) của Arduino. Chức năng mạnh
mẽ của vi điều khiển này cùng với sự tiện dụng của môi trường lập trình IDE giúp cho
các nhà phát triển có thể dễ dàng thực hiện các dự án IoT hoặc các ứng dụng điện tử
của riêng mình.

Hình 2.11: Hình ảnh kết nối biến trở và động cơ servo với IoT Maker
• Cấu tạo của Arduino
- Arduino là một hệ thống máy tính nhỏ có thể được lập trình theo hướng dẫn của bạn
để tương tác với nhiều dạng đầu vào và đầu ra khác nhau. Mẫu bo mạch Arduino hiện
tại, Uno, có kích thước khá nhỏ so với bàn tay trung bình của con người

- 23 -
Hình 2.12: Board mạch Arduino
- Ở ngoài cùng bên trái là đầu nối Universal Serial Bus (USB). Đầu này kết nối bo mạch
với máy tính của bạn vì ba lý do: cung cấp năng lượng cho bo mạch, tải chương trình
của bạn lên Arduino và gửi dữ liệu đến và nhận dữ liệu từ máy tính. Bên phải là đầu
nối nguồn. Thông qua đầu nối này, bạn có thể cấp nguồn cho Arduino bằng bộ đổi
nguồn chính tiêu chuẩn.

Hình 2.13: Đầu nối USB và nguồn


- Bộ vi điều khiển là “bộ não” của Arduino. Đó là một chiếc máy tính nhỏ chứa bộ xử
lý để thực hiện các lệnh, bao gồm nhiều loại bộ nhớ khác nhau để chứa dữ liệu và
hướng dẫn từ các bản phác thảo của chúng tôi, đồng thời cung cấp nhiều cách gửi và
nhận dữ liệu khác nhau

- 24 -
Hình 2.14: Vi điều khiển ATMEGA
- Hàng các chân đầu tiên cung cấp các kết nối nguồn và khả năng sử dụng nút RESET
bên ngoài. Hàng thứ hai cung cấp sáu đầu vào tương tự được sử dụng để đo các tín
hiệu điện có điện áp khác nhau. Ngoài ra, các chân A4 và A5 cũng có thể được sử dụng
để gửi và nhận dữ liệu từ các thiết bị khác

Hình 2.15: Ổ cắm nguồn và analog


- Ổ cắm (hoặc chân) được đánh số từ 0 đến 13 là các chân đầu vào/đầu ra kỹ thuật số
(I/O). Chúng có thể phát hiện xem có tín hiệu điện hay không hoặc tạo tín hiệu theo
lệnh. Chân 0 và 1 còn được gọi là cổng nối tiếp, được sử dụng để gửi và nhận dữ liệu
đến các thiết bị khác, chẳng hạn như máy tính thông qua mạch kết nối USB. Các chân
được dán nhãn dấu ngã (~) cũng có thể tạo ra tín hiệu điện khác nhau, có thể hữu ích
cho những việc như tạo hiệu ứng ánh sáng hoặc điều khiển động cơ điện.

Hình 2.16: Các chân đầu vào/ra kỹ thuật số


- 25 -
- Tiếp theo là một số thiết bị rất hữu ích được gọi là đi-ốt phát quang (đèn LED); những
thiết bị rất nhỏ này sáng lên khi có dòng điện chạy qua chúng. Bo mạch Arduino có
bốn đèn LED: một ở ngoài cùng bên phải có nhãn ON, cho biết khi nào bo mạch có
nguồn và ba ở nhóm khác, như trong Hình 2-17
- Các đèn LED có nhãn TX và RX sáng lên khi dữ liệu đang được truyền hoặc nhận giữa
Arduino và các thiết bị được đính kèm thông qua cổng nối tiếp và USB. Đèn LED L
dành cho mục đích sử dụng của riêng bạn (nó được kết nối với chân I/O kỹ thuật số
13). Phần hình vuông nhỏ màu đen ở bên trái của đèn LED là một bộ vi điều khiển nhỏ
điều khiển giao diện USB cho phép Arduino của bạn gửi và nhận dữ liệu từ máy tính

Hình 2.17: Các đèn LED trên bo mạch


- Và cuối cùng, nút RESET được hiển thị trong Hình 2-18

Hình 2.18: Nút RESET

IV. Lựa chọn linh kiện

- 26 -
1. Lựa chọn động cơ servo

- Chọn động cơ servo là ĐỘNG CƠ SERVO SG90

Hình 2.19: Động cơ SERVO SG90

- Nhỏ và nhẹ với công suất đầu ra cao. Servo có thể xoay khoảng 1800 (900 mỗi
hướng) và hoạt động giống như các loại tiêu chuẩn nhưng nhỏ hơn. Có thể sử dụng
bất kỳ mã servo, phần cứng hoặc thư viện nào để điều khiển các servo này, nó sẽ
phù hợp ở những nơi nhỏ. Nó đi kèm với 3 sừng (cánh tay) và phần cứng.

Hình 2.20: Kích thước và thông số kĩ thuật của SG90

- 27 -
00 (Max "Left") ~1𝑚𝑠

900 (Center) ~1.5𝑚𝑠

1800 (Max "Right") ~2𝑚𝑠

Hình 2.21: Xung PWM trong điều khiển góc quay

2. Lựa chọn vi điều khiển

- Chọn vi điều khiển là ARDUINO UNO R3

- 28 -
Hình 2.22: Cấu tạo Arduino Uno R3

- Một số thông tin chính của Board:

- 29 -
Hình 2.23: Các thông số của Board

• Sử dụng vi điều khiển ATmega328 của hãng Atmel.

• Lập trình thông qua giao diện cổng USB.

• Header cho các chân GPIO.

• Gồm 4 LED: nguồn, RX, TX và Debug.

• Nút nhấn Reset board mạch.

• Có jack để cấp nguồn khi không dùng nguồn ở cổng USB.

• Các header cho In-circuit serial programmer (ICSP), hiểu đơn giản thì đây là các header
để kết nối với mạch nạp cho chip nếu không nạp thông qua cổng USB

- 30 -
Bảng 2.1: Các thông số của Board

- Giới thiệu về vi điều khiển ATmega328

Hình 2.24: Các chân của vi điều khiển Atmega328

Vi điều khiển (tiếng Anh là microcontroller hoặc microcontroller unit) là trái tim
của các board mạch lập trình được. Nó có khả năng thực thi code khi chúng ta yêu cầu.
- 31 -
Bên trong vi điều khiển bao gồm rất nhiều các mạch điện với các khối chức năng như
CPU (Central Processing Unit), RAM (Random Access Memmory), ROM (Read Only
Memory), Input/output ports, các bus giao tiếp (I2C, SPI), …

Vi điều khiển giúp chúng ta có thể giao tiếp với sensor, điều khiển thiết bị.

Board Arduino Uno R3 sử dụng vi điều khiển ATmega328 của hãng Atmel (một
công ty thiết kế và chế tạo vật liệu bán dẫn ở Mỹ). ATmega328 là vi điều khiển thuộc
dòng vi điều khiển 8 bits (data bus là 8 bit)

Bảng 2.2: Các thông số kỹ thuật của Atmega328

3. Bảng mạch bánh mỳ - Bộ cắm dây (breadboard)

- Bộ cắm dây (breadboard) là những mạch không cần sử dụng mỏ hàn dùng để tạo mẫu
những mạch điện tử
- Loài bộ cắm dây sử dụng ở đây làm bằng nhựa trắng có lỗ để cắm dây

- 32 -
Hình 2.25: Breadboard circuit dùng để kết nối thành mạch kín giữa các thiết bị

Hình 2.26: Cấu tạo bên dưới của 1 breadboard circuit

4. Chiết áp (biến trở)

Chiết áp, potentiometer hay biến trở chia áp là phần tử điện trở có ít nhất một tiếp điểm
di động trên thân điện trở để tạo thành "bộ chia điện áp" chỉnh được. Tiếp điểm di động

- 33 -
chia điện trở thành các phần có giá trị bù nhau, và khi đặt lên điện trở một điện áp (tín
hiệu) V thì điện áp tại tiếp điểm là giá trị chia tỷ lệ điện áp đó theo các giá trị điện trở.

Hình 2.27: Cấu tạo chiết áp

Hình 2.28: Chiết áp sử dụng là loại 10k

- 34 -
• Thông số kĩ thuật:

Điện trở 10𝑘Ω

Sai số 10%

Nhiệt độ hoạt động −550 𝐶 − 1250 𝐶

Công suất 2𝑊

Loại Đơn, 3 chân

Loại điều chỉnh Tuyến tính

Trọng lượng của chiết áp đơn 10𝑔

Bảng 2.3: Các thông số kỹ thuật của chiết áp

5. Cảm biến nhiệt độ TMP36

Hình 2.29: Cảm biến nhiệt độ TMP36

Cảm biến này nhìn qua thì chúng ta thấy giống như một transistor. TMP36 sử dụng rất
đơn giản, nếu nhìn thẳng vào mặt phẳng thì:

Chân số 1 là chân cấp nguồn 5V (chân này có thể cắm vào nguồn 5V của Arduino khi sử
dụng nó với Arduino).

Chân thứ 2 là chân xuất tín hiệu tương tự (tín hiệu dạng xung).

- 35 -
Chân thứ 3 là chân nối đất hay chân GND (khi sử dụng với Arduino có thể lấy từ chân
GND từ Arduino).

TMP36 là cảm biến nhiệt độ điện áp thấp, chính xác. Nó cung cấp một đầu ra điện áp tỷ
lệ tuyến tính với nhiệt độ C. Nó cũng không yêu cầu bất kỳ hiệu chuẩn bên ngoài nào để
cung cấp độ chính xác điển hình là ±1°C ở +25°C và ±2°C trong phạm vi nhiệt độ −40°C
đến +125°C. Dễ sử dụng: Chỉ cần nối đất cho thiết bị và 2,7 đến 5,5 VDC và đọc điện áp
trên chân Vout. Điện áp đầu ra có thể được chuyển đổi thành nhiệt độ một cách dễ dàng
bằng cách sử dụng hệ số thang đo 10 mV/°C.

Cảm biến TMP 36 này xuất tín hiệu là tín hiệu điện áp, tín hiệu này tỷ lệ thuận với nhiệt
độ. Cứ 10mV tương đương với 1oC nó có thể đo được nhiệt độ từ -40o đến 25oC).

Thông số kĩ thuật cơ bản:

• Điện áp đầu vào: 2,7 V đến 5,5 VDC

• Hệ số thang đo 10 mV/° C

• Độ chính xác ± 2°C theo nhiệt độ

• Độ tuyến tính ± 0,5°C

• Phạm vi hoạt động: −40°C đến +125°C

- 36 -
6. Cảm biến siêu âm hc-sr04

Hình 2.30: Cảm biến siêu âm HC-SR04

Cảm biến siêu âm Ultrasonic HC-SR04 được sử dụng để nhận biết khoảng cách từ vật thể
đến cảm biến nhờ sóng siêu âm, cảm biến có thời gian phản hồi nhanh, độ chính xác cao,
phù hợp cho các ứng dụng phát hiện vật cản, đo khoảng cách bằng sóng siêu âm.

Cảm biến siêu âm Ultrasonic HC-SR04 sử dụng cặp chân Echo/Trigger để phát và nhận
tín hiệu, cảm biến được sử dụng phổ biến với nhiều bộ thư viện và Code mẫu với Arduino.

Cảm biến siêu âm HC-SR04 (Ultrasonic Sensor) được sử dụng rất phổ biến để xác định
khoảng cách. Cảm biến HC-SR04 sử dụng sóng siêu âm và có thể đo khoảng cách trong
khoảng từ 2 đến 300cm, với độ chính xác gần như chỉ phụ thuộc vào cách lập trình.

VCC (5V), TRIG (chân điều khiển phát), ECHO (chân nhận tín hiệu phản hồi), GND (nối
đất)

Cảm biến siêu âm SR04 sử dụng nguyên lý phản xạ sóng siêu âm. Cảm biến gồm 2
module.1 module phát ra sóng siêu âm và 1 module thu sóng siêu âm phản xạ về. Đầu tiên
cảm biến sẽ phát ra 1 sóng siêu âm với tần số 40khz. Nếu có chướng ngại vật trên đường
đi, sóng siêu âm sẽ phản xạ lại và tác động lên module nhận sóng. Bằng cách đo thời gian
từ lúc phát đến lúc nhận sóng ta sẽ tính được khoảng cách từ cảm biến đến chướng ngại
vật.
- 37 -
Hình 2.31: Nguyên lý truyền sóng của cảm biến siêu âm HC-SR04

thời gian × vận tốc âm thanh


Khoảng cách =
2

Thông số kỹ thuật cảm biến siêu âm HC-SR04:

• Điện áp: 5V DC
• Dòng hoạt động: < 2mA
• Mức cao: 5V
• Mức thấp: 0V
• Góc tối đa: 15 độ
• Khoảng cách: 2cm – 450cm (4.5m)
• Độ chính xác: 3mm

- 38 -
Hình 2.32: Thông số kỹ thuật của cảm biến siêu âm HC-SR04

Hình 2.33: Nguyên lý hoạt động của cảm biến siêu âm HC-SR04

- 39 -
- 40 -
CHƯƠNG 3. THIẾT KẾ PHẦN MỀM
Giới thiệu chung:

Đây là phần quan trọng và cốt lõi của hệ thống để cho phần cứng có thể hoạt động được.
Arduino lấy nguồn và kết nối trực tiếp với máy tính. Nạp code vào Arduino thông qua
phần mềm arduino trên máy tính. Thực hiện kết nối giữa arduino với động cơ servo theo
các chân quy định. Sau đó lập trình code vào phần mềm arduino trên máy tính để thực
hiện việc điều khiển Arduino.

Để điều khiển động cơ RC Servo sử dụng Arduino, cần kết nối Servo với Arduino thông
qua các chân GPIO. Sau đó, sử dụng thư viện Servo để điều khiển chuyển động servo đến
vị trí mong muốn.

GPIO được dùng để mô tả các chân trên vi điều khiển (microcontroller) hoặc vi xử lý
(microprocessor) có thể được sử dụng để đọc dữ liệu từ các thiết bị đầu vào (input) hoặc
điều khiển các thiết bị đầu ra (output) thông qua chân GPIO

Bước 1: Kết nối

Kết nối với Servo thông qua các chân, cụ thể:

Chân đầu tiên (+) của Servo kết nối với pin VCC của Arduino (5V).

Chân thứ hai (-) của Servo kết nối với chân GND của Arduino.

Chân thứ ba (S) của Servo kết nối với một chân GPIO của Arduino, ví dụ chân 9.

Bước 2: Thiết lập chương trình điều khiển Servo

Để lập trình Arduino, cài đặt Arduino IDE: https://www.arduino.cc/en/software.

Sau khi cài đặt, hãy mở Arduino IDE và tạo một chương trình mới.

- 41 -
Hình 3.1: Màn hình làm việc chúng của phần mềm Arduino IDE

Thư viện Servo trong arduino:

Thư viện Servo là một thư viện được tích hợp sẵn trong Arduino IDE. Có thể sử dụng thư
viện này để điều khiển Servo trên các dòng bo mạch Arduino.

Thư viện Servo chứa nhiều hàm hỗ trợ các thao tác điều khiển Servo đơn giản và dễ sử
dụng như attach(), write(), writeMicroseconds(), read(), attached() và detach().

Một số hàm chính trong thư viện Servo:

attach(pin): Kết nối Servo với chân GPIO được chỉ định.

write(angle): Đưa Servo đến góc được chỉ định (0-180 độ). Hàm `write()` sẽ gửi giá trị
Pulse Width Modulation (PWM) đến Servo Motor để xoay đến góc đóng mở tương ứng
với giá trị góc truyền vào.

writeMicroseconds(value): Đưa Servo đến vị trí tương ứng với giá trị micro giây (1100-
1900).

read(): Đọc góc hiện tại của Servo.

- 42 -
attached(): Kiểm tra xem Servo đã được kết nối.

detach(): Ngắt kết nối Servo và giải phóng chân GPIO.

Ngoài ra, một số hàm thông dụng khác không nằm trong thư viện servo mà sẽ sử
dụng:

delay(time): Trong đó, `time` là thời gian (tính bằng mili giây) muốn tạm dừng chương
trình.

Hàm `delay()` sẽ tạm dừng chương trình trong số mili giây được chỉ định trước đó, sau đó
chương trình sẽ tiếp tục thực hiện các lệnh tiếp theo. Trong đoạn chương trình trên, hàm
`delay()` được sử dụng để đảm bảo rằng Servo Motor sẽ di chuyển đến góc mới một cách
mịn màng hơn bằng cách đợi 30ms trước khi di chuyển đến góc tiếp theo trong vòng lặp
`for`.

#define: không phải là một hàm, mà là một chỉ thị dựng trước trong C/C++.

Chỉ thị `#define` được sử dụng để định nghĩa một hằng số trong chương trình. Khi chương
trình được biên dịch, tất cả các trường hợp của tên hằng số này trong chương trình sẽ được
thay thế bằng giá trị được định nghĩa trước đó.

analogRead

Thư viện Servo không chứa hàm analogRead. Hàm analogRead là một hàm cung cấp
sẵn trong thư viện Arduino, không liên quan đến thư viện Servo.

Hàm analogRead được sử dụng để đọc giá trị tín hiệu analog từ một chân vào analog trên
bo mạch Arduino. Hàm này sẽ trả về một giá trị nguyên từ 0 đến 1023 (tương ứng 10 bit),
tương ứng với phạm vi giá trị từ 0V đến 5V trên chân vào analog. Giá trị trả về của hàm
analogRead được dùng để đo đạc các tín hiệu analog như cảm biến nhiệt độ, cảm biến ánh
sáng, cảm biến độ ẩm, v.v

map

- 43 -
Tương tự như hàm analogRead, hàm map cũng không thuộc thư viện Servo. Hàm map
là một hàm cung cấp sẵn trong thư viện Arduino.

Hàm map được sử dụng để ánh xạ một giá trị từ một phạm vi giá trị này sang một phạm
vi giá trị khác. Hàm này nhận vào 5 tham số: giá trị cần ánh xạ, giá trị tối thiểu và tối đa
của phạm vi giá trị ban đầu, giá trị tối thiểu và tối đa của phạm vi giá trị mới. Hàm sẽ trả
về giá trị đã được ánh xạ vào phạm vi mới.

Hàm Serial.begin(baudRate): Hàm này khởi động giao tiếp serial với tốc độ truyền dữ
liệu (baud rate) cụ thể. Baud rate xác định số bit dữ liệu được truyền trong một giây. Cả
Arduino và thiết bị ngoại vi cần được cấu hình để hoạt động ở cùng tốc độ baud. Nếu tốc
độ không khớp, dữ liệu có thể bị gửi và nhận không chính xác.

Hàm pinMode() trong Arduino được sử dụng để thiết lập chế độ hoạt động của một chân
số (pin) trên bo mạch Arduino. Chế độ này có thể là INPUT (đầu vào) hoặc OUTPUT
(đầu ra), tùy thuộc vào việc sử dụng chân đó để đọc dữ liệu từ một thiết bị ngoại vi (như
cảm biến) hoặc để điều khiển một thiết bị khác.

pinMode(pin, mode);

pin: Số của chân trên bo mạch Arduino muốn cấu hình.

mode: Chế độ hoạt động của chân, có thể là INPUT hoặc OUTPUT.

Hàm digitalWrite() trong Arduino được sử dụng để điều khiển trạng thái của một chân
số (pin) trên bo mạch Arduino.

digitalWrite(pin, value);

pin: Số của chân trên bo mạch Arduino bạn muốn điều khiển.

value: Giá trị trạng thái muốn đặt cho chân, có thể là HIGH hoặc LOW

- 44 -
Hàm pulseIn() trong Arduino được sử dụng để đo thời gian giữa hai xung (đoạn thời gian
mà tín hiệu có trạng thái HIGH hoặc LOW) (trả về us) trên một chân số (pin) cụ thể trên
bo mạch Arduino.

pulseIn(pin, value);

pin: Số của chân trên bo mạch Arduino bạn muốn đo thời gian.

value: Trạng thái tín hiệu muốn đo thời gian. Có thể là HIGH hoặc LOW

Hàm delayMicroseconds() trong Arduino được sử dụng để tạm ngừng thực hiện chương
trình trong một khoảng thời gian cụ thể được đo bằng đơn vị micro giây (µs). Hàm này
thường được sử dụng để tạo các đợi ngắn hơn so với hàm delay() (đơn vị mili giây), và
thường được sử dụng trong các ứng dụng yêu cầu thời gian đo lường chính xác.

Thiết lập các chương trình điều khiển Servo:


I. Chương trình điều khiển servo quay đều từ 0→𝟗𝟎𝒐 với độ chia là 𝟏𝒐

Hình 3.2: Kết nối mạch điều khiển servo quay đều từ 00 → 900
Ý tưởng: Quay đều servo từ 0→90𝑜 bằng cách lập trình servo quay tịnh tiến từng
độ 1 trong khoảng thời gian 30ms
Chương trình:
- 45 -
1. #include<Servo.h>
2. Servo myServo;
3. int servoPin = 9;
4. int angle=0;
5. void setup()
6. {
7. myServo.attach(servoPin);
8. }
9. void loop()
10.{
11.for (angle=0; angle<90; angle+=1) {
12. myServo.write(angle);
13. delay(30);
14.}
15.}
Lưu đồ thuật toán:

- 46 -
Begin

Sử dụng thư viện Servo


Tạo đối tượng myServo
sử dụng hàm Servo

Khai báo biến:


servoPin=9
angle= 0

Hàm setup
myServo.attach(servoPin);

Hàm loop;
angle=0;

Yes Delay(30)
angle<90 myServo.write(angle);
angle+=1

No

End

- 47 -
Giải thích chương trình:

1. #include<Servo.h>
Thêm thư viện Servo để sử dụng các hàm điều khiển Servo.
2. Servo myServo;
Tạo một đối tượng Servo mới có tên “myServo”
3. int servoPin = 9;
Khai báo biến servoPin và gắn giá trị của biến này là 9. Biến servoPin này thể hiện
servo sẽ kết nối với arduino qua chân số 9
4. int angle;
Khai báo biến angle(góc) và gắn giá trị của biến này là 0. Biến angle này thể hiện
góc tại thời điểm quay của servo
5. void setup()
6. {
7. myServo.attach(servoPin);
8. }
Khởi tạo hàm setup. Trong hàm setup, sử dụng hàm attach(pin) để kết nối servo với
chân arduino được chỉ định:
9. void loop()
10.{
11.for (angle=0; angle<90; angle+=1) {
12. myServo.write(angle);
13. delay(30);
14.}
15.}
Khởi tạo hàm loop. Hàm loop được thực hiện liên tục. Trong hàm này servo sẽ được
di chuyển các góc khác nhau.
Vòng lặp for được sử dụng để đưa servo từ góc 0𝑜 lên 900 .

- 48 -
Hàm write sử đụng để ghi giá trị góc đóng mở servo từ 0→1800 . Sau hàm này
servo sẽ quay đến giá trị angle.
Delay(30): Servo dừng 30ms trước khi thực hiện lệnh tiếp theo

II. Chương trình điều khiển servo quay tới 𝟎𝟎 , 𝟗𝟎𝟎 , 𝟏𝟖𝟎𝟎 sau mỗi 1 giây
(1000ms)

Hình 3.3: Kết nối mạch điều khiển servo quay đều từ 00 → 900 → 1800
Ý tưởng: Servo quay từ góc khởi tạo 0𝑜 dừng 1s trước khi quay lên góc 90𝑜 , tiếp
tục dừng 1s sau đó quay lên 180𝑜 và chu trình được lại
Chương trình:
1. #include <Servo.h>
2. Servo gServo;
3. #define SERVO_PIN 9
4. void setup()
5. {
6. gServo.attach(SERVO_PIN);
7. }
8. void loop()
9. {
- 49 -
10.gServo.write(0);
11.delay(1000);
12.gServo.write(90);
13.delay(1000);
14.gServo.write(180);
15.delay (1000);
16.}
Lưu đồ thuật toán

- 50 -
Begin

Sử dụng thư viện Servo


Tạo đối tượng gServo sử
dụng hàm Servo

Khai báo biến:


SERVO_PIN 9

Hàm setup
gServo.attach(SERVO_PIN);

Hàm loop
gServo.write(0);
delay(1000);
gServo.write(90);
delay(1000);
gServo.write(180);
delay (1000);

End

- 51 -
Giải thích chương trình:

1. #include <Servo.h>
Đây là thông báo cho Arduino rằng chúng ta đang sử dụng thư viện `Servo.h`. Thư
viện này cho phép điều khiển Servo Motor trên Arduino
2. Servo gServo;
Khai báo một đối tượng của `Servo` với tên là ‘gServo’
3. #define SERVO_PIN 9
Khai báo biến servoPin và gắn giá trị của biến này là 9.Khai báo này sử dụng cách
khai báo bằng define(dùng để định nghĩa một hằng số trong chương trình). Biến
SERVO_Pin này thể hiện servo sẽ kết nối với arduino qua chân số 9
4. void setup()
5. {
6. gServo.attach(SERVO_PIN);
7. }
Khởi tạo hàm setup. Trong hàm setup, sử dụng hàm attach(pin) để kết nối servo với
chân arduino được chỉ định.
8. void loop()
9. {
10.gServo.write(0);
11.delay(1000);
12.gServo.write(90);
13.delay(1000);
14.gServo.write(180);
15.delay (1000);
16.}
Khởi tạo hàm loop. Hàm loop được thực hiện liên tục. Trong hàm này servo sẽ được
di chuyển các góc khác nhau.

- 52 -
Hàm write sử đụng để ghi giá trị góc đóng mở servo từ 0→1800 . Sau hàm này
servo sẽ quay đến giá trị trong dấu ngoặc.
Delay(30): Servo dừng 30ms trước khi thực hiện lệnh tiếp theo
Ở đây servo sẽ bắt đầu quay từ 0𝑜 và dừng 1s, sau đó quay lên góc 90𝑜 và tiếp tục
dừng 1s, sau đó quay lên 180𝑜 và dừng 1s, quá trình này được lặp đi lặp lại. Servo
quay 1 chu trình từ 0𝑜 lên 180𝑜 trong 3s.

III. Chương trình điều khiển servo quay tới 1 góc tùy ý (trong
khoảng 0→𝟏𝟖𝟎𝟎 ) sử dụng chiết áp

Hình 3.4: Kết nối mạch điều khiển servo quay đều một góc tùy ý sử dụng chiết áp
Ý tưởng: Từ giá trị đầu ra của chiết áp sẽ chuyển đổi thành góc quay tương ứng của
Servo và điều khiển servo quay đúng giá trị góc đấy.
1. #include <Servo.h>
2. Servo Servo1;
3. int servoPin = 9;
4. int potPin = A0;
5. void setup() {
6. Servo1.attach(servoPin);
- 53 -
7. }
8. void loop() {
9. int reading = analogRead(potPin);
10.int angle = map(reading, 0, 1023, 0, 180);
11.Servo1.write(angle);
12.}
Lưu đồ thuật toán:

- 54 -
Begin

Khai báo đối tượng


Servo1 của sử dụng hàm
Servo

Khai báo biến


servoPin=9
potPin=A0

Hàm setup
gServo.attach(SERVO_PIN);

Hàm loop
reading = analogRead(potPin);
angle = map(reading, 0, 1023, 0, 180);
Servo1.write(angle);

End

- 55 -
Giải thích chương trình:

1. #include <Servo.h>
Đây là thông báo cho Arduino rằng chúng ta đang sử dụng thư viện `Servo.h`. Thư
viện này cho phép điều khiển Servo Motor trên Arduino
2. Servo Servo1;
Tạo một đối tượng Servo mới có tên “Servo1”. Đây chính là đối tượng mà chúng
ta sẽ điều khiển
3. int servoPin = 9;
Khai báo biến servoPin và gắn giá trị của biến này là 9. Biến servoPin này thể hiện
servo sẽ kết nối với arduino qua chân số 9
4. int potPin = A0;
Khai báo biến potPin và gắn giá trị biến này là A0; Biến potPin này thể hiện giá trị
anolog được đưa vào từ chiết áp sẽ được nối vào cổng A0 trong các cổng anolog in
của Arduino
5. void setup() {
6. Servo1.attach(servoPin);
7. }
Khởi tạo hàm setup. Trong hàm setup, sử dụng hàm attach(pin) để kết nối servo với
chân arduino được chỉ định, ở đây là chân phát xung PWM 9.
8. void loop() {
9. int reading = analogRead(potPin);
10.int angle = map(reading, 0, 1023, 0, 180);
11.Servo1.write(angle);
12.}
Khởi tạo hàm loop. Hàm loop được thực hiện liên tục. Trong hàm này servo sẽ được
di chuyển các góc khác nhau.

- 56 -
Hàm analogRead sẽ chuyển giá trị analog đưa ra từ chiết áp(0-5V) thành giá trị
trong hệ thập phân (0-1023). Giá trị thập phân này sẽ được gắn vào biến reading
Hàm map sử dụng để ánh xạ giá trị reading (đang ở dạng thập phân) từ phạm vi 0-
1023 sang giá trị từ 0-180. Mục đích của việc ánh xạ này là để dùng giá trị sau khi
ánh xạ (0-180) chính là giá trị ứng với góc quay của servo. Giá trị sau khi ánh xạ
được gán vào biến angle
Hàm write sử dụng để điều khiển đối tượng Servo1 quay đến giá trị góc đã chuyển
đổi(angle)

IV. Thiết kế mô hình các thiết bị tự động mở khi có vật cản sử dụng
động cơ servo và cảm biến siêu âm

Hình 3.5: Kết nối mạch tự động mở khi có vật cản

- Phần cứng: Phần cứng cần thiết tối thiểu là:


• Một cảm biến siêu âm HC-SR04
• Một breadboard
• Một servo nhỏ
• Các loại dây kết nối
- 57 -
• Arduino và cáp USB
- Mô tả:
+ Động cơ servo SG điều khiển sử dụng Arduino UNO là một hệ thống điện tử sử dụng
kết hợp cảm biến khoảng cách siêu âm HC-SR04, động cơ servo SG và bộ vi điều
khiển Arduino UNO để điều khiển vị trí của động cơ servo dựa trên trên khoảng cách
của một đối tượng ở phía trước của cảm biến.
+ Cảm biến HC-SR04 sử dụng sóng siêu âm để đo khoảng cách của vật thể phía trước
nó và trả về khoảng cách tính bằng centimet. Bộ vi điều khiển Arduino UNO nhận dữ
liệu khoảng cách này và sử dụng nó để điều khiển vị trí của động cơ servo SG51R.
- Kết nối:

Hình 3.6: Các cổng được kết nối tương ứng của thiết bị
- Chương trình trên sử dụng cảm biến siêu âm để đo khoảng cách và điều khiển servo
motor dựa trên khoảng cách đo được.

#include <Servo.h>
int TRIG_PIN = 6;
int ECHO_PIN = 7;
int SERVO_PIN = 9;
int DISTANCE_THRESHOLD = 50; // cm

- 58 -
float duration_us, distance_cm; // Biến để lưu trữ thời gian và khoảng cách

Servo servo;
void setup() {
Serial.begin (9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servo.attach(SERVO_PIN);
servo.write(0);
}
void loop() {
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration_us = pulseIn(ECHO_PIN, HIGH);
distance_cm = 0.017 * duration_us;
if(distance_cm < DISTANCE_THRESHOLD)
servo.write(90);
else
servo.write(0);
delay(500);
}
- Giải thích chương trình:
• Khai báo Thư viện và Biến:

#include <Servo.h>; // Khai báo sử dụng thư viện Servo


int TRIG_PIN = 6; // Chân kết nối Trig của cảm biến siêu âm
int ECHO_PIN = 7; // Chân kết nối Echo của cảm biến siêu âm
int SERVO_PIN = 9; // Chân kết nối điều khiển servo là 9
- 59 -
int DISTANCE_THRESHOLD = 50; // Ngưỡng khoảng cách, khi dưới ngưỡng servo sẽ
di chuyển, ở đây đặt là 50cm
Servo servo; // Khai báo một đối tượng Servo
float duration_us, distance_cm; // Biến để lưu trữ thời gian và khoảng cách

Chương trình bắt đầu bằng việc khai báo thư viện Servo và các biến cần thiết. TRIG_PIN
và ECHO_PIN là các chân kết nối của cảm biến siêu âm. SERVO_PIN là chân kết nối điều
khiển servo. DISTANCE_THRESHOLD là ngưỡng khoảng cách, nếu khoảng cách đo
được dưới ngưỡng này, servo sẽ được điều khiển.

• Hàm Setup:

void setup() {
Serial.begin(9600); // Khởi động giao tiếp Serial với tốc độ baud là 9600
pinMode(TRIG_PIN, OUTPUT); // Đặt TRIG_PIN là OUTPUT
pinMode(ECHO_PIN, INPUT); // Đặt ECHO_PIN là INPUT
servo.attach(SERVO_PIN); // Gắn servo vào chân SERVO_PIN = 9.
servo.write(0); // Đặt góc của servo ở vị trí 0 độ ban đầu
}
Hàm setup() được gọi một lần khi chương trình bắt đầu. Trong hàm này, giao tiếp Serial
được khởi động với tốc độ 9600 baud. Các chân TRIG_PIN và ECHO_PIN được thiết lập
là OUTPUT và INPUT tương ứng để gửi và nhận xung từ cảm biến siêu âm. Đối tượng
servo được gắn vào chân SERVO_PIN và servo được đặt ở vị trí góc 0 độ ban đầu.

• Hàm Loop:

void loop() {
digitalWrite(TRIG_PIN, HIGH); // Đặt trạng thái chân TRIG lên mức cao(phát xung từ
chân TRIG lên cảm biến)
delayMicroseconds(10); // delay 10us, độ rộng xung là 10ms phát ra từ bên T

- 60 -
digitalWrite(TRIG_PIN, LOW); // Đặt trạng thái chân TRIG xuống mức thấp Tắt phát
xung vào chân TRIG
duration_us = pulseIn(ECHO_PIN, HIGH); // Đo thời gian chân ECHO ở mức cao
distance_cm = 0.017 * duration_us; // Chuyển đổi thời gian thành khoảng cách (cm)
if (distance_cm < DISTANCE_THRESHOLD)
servo.write(90); // Nếu khoảng cách nhỏ hơn ngưỡng, servo di chuyển về 90 độ
else
servo.write(0); // Nếu khoảng cách lớn hơn hoặc bằng ngưỡng, servo đặt ở vị trí 0 độ
delay(500); // Đợi 500ms trước khi lặp lại
}
Hàm loop() là vòng lặp chính của chương trình và sẽ được thực thi liên tục. Trong vòng
lặp, trước tiên, xung siêu âm được kích hoạt bằng cách đặt chân TRIG_PIN ở mức cao
trong 10 micro giây, sau đó chuyển về mức thấp. Thời gian giữa xung gửi và xung nhận
được đo bằng hàm pulseIn để tính thời gian tương ứng với khoảng cách.

Khoảng cách tính được (distance_cm) được chuyển đổi từ thời gian bằng công thức đơn
giản (tính dựa trên vận tốc âm thanh trong không khí). Nếu khoảng cách nhỏ hơn ngưỡng
DISTANCE_THRESHOLD, servo được điều khiển di chuyển về góc 90 độ. Nếu khoảng
cách lớn hơn hoặc bằng ngưỡng, servo được đặt ở vị trí 0 độ (đóng). Sau mỗi vòng lặp,
chương trình chờ 500ms trước khi thực hiện vòng lặp tiếp theo.

- Các ứng dụng: Từ việc điều khiển động cơ servo như trên, ta có thể thấy công việc này
có thể là nền tảng cho các ứng dụng liệt kê sau đây:
1. Vòi rửa tự động
2. Ứng dụng trên các mô hình xe tự lái
3. Hệ thống an ninh và camera giám sát
4. Tự động hóa công nghiệp để kiểm soát vị trí của các bộ phận máy
5. Thiết bị y tế để định vị và di chuyển chính xác

V. Building an Analog thermometer (xây dựng nhiệt kế analog)


- 61 -
Sử dụng servo và cảm biến nhiệt độ TMP36, chúng em sẽ chế tạo một nhiệt kế tương tự.
Cảm biến sẽ đo nhiệt độ và sau đó chuyển đổi phép đo này thành một góc từ 0 đến 180 độ
để biểu thị nhiệt độ từ 0 đến 30 độ C. Servo sẽ xoay theo góc phù hợp với nhiệt độ hiện
tại.

Phần cứng: Phần cứng cần thiết tối thiểu là:

• Một cảm biến nhiệt độ TMP36


• Một breadboard
• Một servo nhỏ
• Các loại dây kết nối
• Arduino và cáp USB

Sơ đồ:

Hình 3.7: Mạch xây dựng nhiệt kế analog


Mạch thiết kế cho project này

- 62 -
Hình 3.8: Tay quay của servo chỉ đến nhiệt độ tương ứng được hiển thị trong bảng

Mặc dù đây là một ứng dụng khá thú vị về việc điều khiển servo nhưng nó sẽ có một vài
hạn chế khi tiến hành như việc khó mô phỏng sự thay đổi nhiệt độ của môi trường trong
phạm vi 0 − 300 vì vậy ứng dụng này sẽ không được trình bày bằng thực nghiệm tuy
nhiên việc nhiệt độ thay đổi và được chuyển đổi thông qua cảm biến nhiệt độ đã được mô
phỏng như việc sử dụng chiết áp để thay đổi dải điện áp đầu vào đã được trình bày từ các
phần trên nên có thể phần nào hiểu được.

Một cách sơ bộ, nhiệt độ được chuyển thành góc tương ứng qua công thức:
góc = nhiệt độ × 6

Chương trình:

#include <Servo.h>
Servo myservo;
float voltage = 0;
float sensor = 0;
float currentC = 0;
int angle = 0;
int potPin = A0;
- 63 -
void setup()
{
myservo.attach(9);
}
int calculateservo(float temperature)
{
float resulta;
int resultb;
resulta = 6 * temperature;
resultb = int(resulta);
return resultb;
}
void loop()
{
// đọc nhiệt độ hiện tại
sensor = analogRead(potPin);
voltage = (sensor*5000)/1024;
voltage = voltage-500;
currentC = voltage/10;
// hiển thị nhiệt độ hiện tại trên servo
angle = calculateservo(currentC);
// chuyển đổi nhiệt độ sang vị trí servo
if (angle>=0 && currentC <=180)
{
myservo.write(angle); // đặt servo quay với góc tương ứng
delay(1000);
}
}
- 64 -
Chương trình này sử dụng một cảm biến nhiệt độ để đọc giá trị nhiệt độ, sau đó điều chỉnh
một servo motor để hiển thị giá trị nhiệt độ đó bằng cách điều chỉnh góc của servo.

Giải thích từng phần của chương trình:

• Khai báo thư viện và biến: Chương trình bắt đầu bằng việc khai báo thư viện Servo
và khai báo các biến cần thiết cho chương trình.

#include <Servo.h> // Khai báo sử dụng thư viện Servo


Servo myservo; // Khai báo đối tượng myservo từ thư viện Servo
float voltage = 0; // Biến để lưu giá trị điện áp từ cảm biến
float sensor = 0; // Biến để lưu giá trị analog từ cảm biến
float currentC = 0; // Biến để lưu giá trị nhiệt độ tính bằng độ C
int angle = 0; // Biến để lưu góc servo
int SERVO_PIN = 9; // Chân kết nối điều khiển servo
• Hàm setup(): Trong hàm này, chúng ta gắn servo motor vào chân số 4 của Arduino.

void setup()
{
myservo.attach(SERVO_PIN); // Gắn servo motor vào chân số 9 của Arduino
}
• Hàm calculateservo(float temperature): Đây là hàm tính toán chuyển đổi ra góc
quay của servo dựa trên giá trị nhiệt độ đầu vào. Dải nhiệt độ từ 0-30 độ sẽ tương
ứng với góc quay servo từ 0-180 độ.

int calculateservo(float temperature) {


// float temperature: Đây là tham số đầu vào của hàm, đại diện cho giá trị nhiệt độ (tính
bằng độ C) muốn chuyển đổi thành góc.
float resulta;
int resultb;
resulta = -6 * temperature; // Tính toán góc dựa trên nhiệt độ
- 65 -
resulta = resulta + 180; // Điều chỉnh giá trị góc
resultb = int(resulta); // Chuyển thành số nguyên
return resultb;
}
• Hàm loop(): Đây là hàm chính của chương trình và sẽ được thực thi liên tục sau khi
khởi động.

Đọc giá trị analog và tính toán nhiệt độ: Đọc giá trị analog từ cảm biến nhiệt độ qua chân
A0. Chuyển đổi giá trị analog sang điện áp và điều chỉnh giá trị điện áp để tính toán nhiệt
độ.

Tính toán góc cho servo: Sử dụng hàm calculateservo để tính toán góc dựa trên nhiệt độ
đã tính toán.

Kiểm tra và điều khiển servo: Kiểm tra xem currentC có nằm trong khoảng 0-30 độ không.
Nếu có, chương trình sẽ điều khiển servo motor để đặt ở vị trí tương ứng với giá trị angle
và sau đó chờ 1 giây (delay(1000)) trước khi lặp lại.

void loop()
{
sensor = analogRead(A0); // Đọc giá trị analog từ cảm biến nhiệt độ
voltage = (sensor * 5000) / 1024; // Chuyển đổi giá trị analog sang điện áp
// Điều chỉnh giá trị điện áp để tính toán nhiệt độ. Giá trị analog được nhân với 5000 và
sau đó chia cho 1024. Mục tiêu của phép tính này là chuyển đổi giá trị analog thành đơn
vị mV (mili Volt), dựa trên nguyên tắc rằng giá trị analog tối đa là 1023 và đối ứng với
điện áp tối đa (trong trường hợp này, điện áp tối đa là 5000 mV)

voltage = voltage - 500; //Điều chỉnh giá trị điện áp để xoay quanh giá trị thực tế từ cảm
biến.

currentC = voltage / 10; // Tính toán nhiệt độ dựa trên điện áp

- 66 -
angle = calculateservo(currentC); // Tính toán góc cho servo dựa trên nhiệt độ. Điện áp
tính bằng mV được chia cho 10 để chuyển thành độ C. Mỗi 10 mV tương ứng với 1 độ C
if (currentC >= 0 && currentC <= 30) { // Điều khiển servo nếu nhiệt độ trong khoảng
0-30 độ C
myservo.write(angle); // Đặt servo ở vị trí tương ứng với nhiệt độ
delay(1000); // Chờ 1 giây trước khi lặp lại
}
}

- 67 -
CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNH GIÁ

I. Chương trình điều khiển servo quay đều từ 𝟎 → 𝟗𝟎𝟎 với độ chia là 𝟏𝟎

Hình 4.1: Kết quả thực nghiệm 1

Kết luận: Servo quay đúng theo chương trình đã tạo, servo quay đều (dừng 30ms sau 1
độ quay) từ 00 →900 .
- 68 -
II. Chương trình điều khiển servo quay tới 𝟎𝟎 , 𝟗𝟎𝟎 , 𝟏𝟖𝟎𝟎 sau mỗi 1 giây
(1000ms)
Kết luận: Tương tự như chương trình số 1. Servo quay đúng theo chương trình đã tạo,
servo quay bắt đầu từ góc 00 , quay lên 900 , 1800 và trở lại 00 sau mỗi 1 giây

III. Chương trình điều khiển servo quay tới 1 góc tùy ý (trong khoảng
0→𝟏𝟖𝟎𝟎 ) sử dụng chiết áp

Hình 4.2: Kết quả thực nghiệm 2

Kết luận: Thực nghiệm kết quả cho thấy động cơ chạy đúng với chương trình đã
tạo. Khi vặn núm xoay của chiết áp để thay đổi giá trị điện áp từ 0 - 5V thì động cơ
servo quay tương ứng với góc quay từ góc quay 0 - 1800

- 69 -
IV. Thiết kế mô hình các thiết bị tự động mở khi có vật cản sử dụng
động cơ servo và cảm biến siêu âm

Hình 4.3: Kết quả thực nghiệm 3

Kết luận: Thực nghiệm kết quả cho thấy khi có vật cản đặt trước cảm biến với
khoảng cách dưới ngưỡng đã đặt động cơ servo sẽ quay 1 góc 90 độ cho đến khi
vật cản không còn đặt trước cảm biến nữa thì động cơ servo sẽ quay từ góc 0 độ về
góc 90 độ

V. Building an Analog thermometer (xây dựng nhiệt kế analog)


- Hạn chế khi tiến hành như việc khó mô phỏng sự thay đổi nhiệt độ của môi trường
trong phạm vi 0 − 300 vì vậy ứng dụng này sẽ không được trình bày bằng thực nghiệm

- 70 -
tuy nhiên việc nhiệt độ thay đổi và được chuyển đổi thông qua cảm biến nhiệt độ chúng
ta có thể mô phỏng bằng việc đặt giá trị biến sensor như sau:
1. #include <Servo.h>
2. Servo myservo;
3. float voltage = 0;
4. float sensor = 163.84;
5. float currentC = 0;
6. int angle = 0;
7.

8. void setup()
9. {
10. myservo.attach(9);
11.

12. }
13. int calculateservo(float temperature)
14. {
15. float resulta;
16. int resultb;
17. resulta = 6 * temperature;
18. resultb = int(resulta);
19. return resultb;
20. }
21. void loop()
22. {
23.

24. voltage = (sensor*5000)/1024;


25. voltage = voltage-500;
26. currentC = voltage/10;
- 71 -
27. angle = calculateservo(currentC);
28. if (angle>=0 && angle <=180)
29. {
30. myservo.write(angle);
31. delay(1000);
32. }
33. }

Ở chương trình trên ta đã đặt giá trị sensor là 163.84 tương ứng với việc góc quay servo
là 180 độ và đồng thời hiển thị giá trị nhiệt độ 30 độ C. Thực nghiệm cũng cho thấy kết
quả đúng với mô phỏng

Hình 4.4: Kết quả thực nghiệm 4

- 72 -
CHƯƠNG 5. TỔNG KẾT

I. Kết luận
Sau khoảng thời gian tìm hiểu, nghiên cứu và thiết kế cùng nhau, đến nay đồ án của
chúng em cơ bản đã được hoàn thành. Những nôi dung mà bọn em đã thực hiện được đó
là:

- Tìm hiểu chung về động cơ servo và ứng dụng chung của động cơ servo trong công
nghiệp, cuộc sống và qua đó thấy được tầm quan trọng của loại động cơ này
- Tìm hiểu về hệ thống servo bao gồm động cơ servo là trung tâm và các thiết bị kèm
theo
- Tìm hiểu chi tiết cấu tạo bên trong của động cơ servo DC (radio servo), cách nó hoạt
động. Tìm hiểu chi tiết về thiết bị điều khiển servo là vi điều khiển Arduino Uno R3 và
các thiết bị như chiết áp, bảng mạch.
- Lập trình trên vi điều khiển arduino để thực hiện điều khiển servo thực hiện một số
chức năng thông qua một số thuật toán tương đối cơ bản và đã giải thích chi tiết các
chương trình này. Qua đó có thể thấy động cơ servo được ứng dụng rộng rãi trong thực
tế và công nghiệp tuy nhiên việc điều khiển servo không phải là một vấn đề quá khó.
Vì vậy chúng ta có thể ứng dụng điều này để nghiên cứu, tìm hiểu, ứng dụng việc điều
khiển servo vào trong những công việc liên quan
- Trong quá trình hoàn thành đồ án này, em cũng rèn luyện thêm nhiều kỹ năng quang
trọng. Kỹ năng tìm kiếm tài liệu được nâng cao hơn, khả năng viết báo cáo được cải
thiện. Kỹ năng thiết kế mạchlập trình với arduino IDE, tìm hiểu thêm một số hàm cơ
bản và các hàm trong thư viện servo.h, tìm hiểu sơ đồ nguyên lý. Kỹ năng lập trình
Arduino được cải thiện trong quá trình lập trình cho vi điều khiển. Có thêm kiến thức
về truyền thông công nghiệp, được tiếp xúc với động cơ thật

II. Hướng phát triển đề tài

- 73 -
- Sau khi đã hiểu rõ về động cơ servo DC (radio servo) và cũng đã tìm hiểu về cách điều
khiển servo hoạt động. Tuy nhiên trong đồ án 1 này vẫn còn dừng lại ở việc điều khiển
servo bằng vi điều khiển arduino kết hợp thêm một số thiết bị cảm biến khá cơ bản.
Mặc dù vậy có một số ứng dụng và chúng em cho rằng có thể tiếp tục sử dụng để phát
triển thêm về ứng dụng của loại động cơ này, chúng em xin được đề xuất sau đây:
- Điều khiển từ xa: Kết nối Arduino với một module không dây như Bluetooth hoặc WiFi
để điều khiển servo từ xa thông qua điện thoại hoặc máy tính. Điều này mở ra cơ hội
để điều khiển servo từ xa và thực hiện các tác vụ từ xa.
- Tích hợp âm thanh và ánh sáng: Kết hợp điều khiển servo với âm thanh và ánh sáng để
tạo ra các hiệu ứng trực quan và đa giác.
- Robotics: Trong lĩnh vực robot hóa, các động cơ servo được sử dụng để điều khiển các
khớp cơ học của robot. Điều này cho phép robot có khả năng chuyển động đa dạng và
chính xác, từ robot công nghiệp đến robot dịch vụ như robot y tế và robot nông nghiệp.
- Xe tự hành thường sử dụng nhiều loại thiết bị và cảm biến để có khả năng thấy và hiểu
môi trường xung quanh. Trong một số trường hợp, servo có thể được sử dụng trong xe
tự hành để thực hiện các nhiệm vụ cụ thể như:
- Điều khiển hướng bánh xe Servo có thể được sử dụng để điều khiển hướng bánh xe
trước của xe. Điều này cho phép xe có khả năng quẹo và thay đổi hướng di chuyển.

- 74 -
TÀI LIỆU THAM KHẢO
1. Arduino Workshop. Copyright © 2013 by John Boxall
2. Arduino cho người mới bắt đầu - IoT Maker Viet Nam
3. The robot builder’s BONANZA: 99 Inexpensive robotics projects -Gordon
McComb
4. Arduino Uno R3 data sheet. SG90 motor datasheet.

- 75 -

You might also like