Professional Documents
Culture Documents
Đồ án 1 - Nguyễn Bá Đức - 20200169 - Điều Khiển Động Cơ Servo
Đồ án 1 - Nguyễn Bá Đức - 20200169 - Điều Khiển Động Cơ Servo
*************************
ĐỒ ÁN 1
Duc.nb200169@sis.hust.edu.vn
Khanh.nn200320@sis.hust.edu.vn
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!
• 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
-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
-8-
CHƯƠNG 1: GIỚI THIỆU CHUNG
- Độ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.
- 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
- 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.
- 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.
- 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
- 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.
- 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
- 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
- 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.
- 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
- 18 -
Hình 2.5: Sơ đồ hoạt động của động cơ 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ó
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
- 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.
- 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
- 26 -
1. Lựa chọn động cơ servo
- 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.
- 27 -
00 (Max "Left") ~1𝑚𝑠
- 28 -
Hình 2.22: Cấu tạo Arduino Uno R3
- 29 -
Hình 2.23: Các thông số của Board
• 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
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ộ 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ị
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ở.
- 34 -
• Thông số kĩ thuật:
Sai số 10%
Công suất 2𝑊
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).
• Hệ số thang đo 10 mV/° C
- 36 -
6. 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
• Đ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
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.
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 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().
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).
- 42 -
attached(): Kiểm tra xem Servo đã được kết nối.
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);
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.
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
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
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
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.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:
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
Sơ đồ:
- 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.
• 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.
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 độ.
Đọ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.
- 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à 𝟏𝟎
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
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
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 độ
- 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.
Ở 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
- 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
- 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 -