You are on page 1of 15

Câu 1: Trình bày cấu tạo của động cơ servo sử dụng trong môn học (RC Servo)?

1. Motor (Động cơ):

 Động cơ trong động cơ servo thường là loại động cơ DC (điện xoay chiều) nhỏ.
 Nó được điều khiển thông qua một hệ thống điện tử để tạo ra các chuyển
động được điều khiển và chính xác.

2. Hệ thống giảm tốc (Geartrain):

 Động cơ servo thường được trang bị một hệ thống giảm tốc để tăng lực xoắn
(torque) và giảm tốc độ quay.
 Hệ thống giảm tốc bao gồm các bánh răng và bánh răng để chuyển động từ
động cơ thành chuyển động của trục ra.

3. Cảm biến phản hồi (Feedback Sensor):

 Cảm biến phản hồi là một phần quan trọng trong động cơ servo để cung cấp
thông tin về vị trí hoặc góc quay của trục.
 Trong các servo thông thường, cảm biến phản hồi thường là potentiometer
hoặc encoder.

4. Bộ điều khiển (Control Circuitry):

 Bộ điều khiển trong động cơ servo có nhiệm vụ nhận tín hiệu điều khiển từ
nguồn bên ngoài (ví dụ: từ mạch điều khiển của RC) và điều chỉnh động cơ và
cảm biến phản hồi để đạt được vị trí hoặc góc quay mong muốn.
 Bộ điều khiển thường sử dụng một bộ vi xử lý nhỏ để thực hiện các phép tính
và điều chỉnh.

5. Hộp điều khiển (Control Horn) và Dây Điều Khiển (Control Wire):

 Đây là các thành phần vật lý nối trục của động cơ servo với cơ cấu hoặc bộ
điều khiển bên ngoài.
 Hộp điều khiển có thể được gắn vào đầu trục của servo và kết nối với cơ cấu
bằng dây điều khiển để truyền sức mạnh và chuyển động.

1
Câu 2: Đặc điểm xung điều khiển động cơ RC Servo

1. Độ rộng xung (Pulse Width):

 Xung điều khiển động cơ servo thường có độ rộng biến thiên để chỉ định vị trí
hoặc góc quay mong muốn.
 Thông thường, độ rộng của xung thay đổi từ khoảng 1ms đến 2ms, với 1ms
thường tương ứng với góc quay cực thiểu và 2ms tương ứng với góc quay cực
độ.

2. Tần số xung (Pulse Frequency):

 Tần số xung điều khiển thường quyết định tốc độ cập nhật của động cơ servo
và do đó ảnh hưởng đến độ trễ trong việc điều khiển.
 Tần số thường dao động từ khoảng vài chục Hz đến vài trăm Hz. Tuy nhiên, các
động cơ servo có thể hoạt động ở tần số cao hơn.

3. Chu kỳ xung (Pulse Cycle):

 Chu kỳ xung là tổng thời gian giữa hai xung liên tiếp.
 Chu kỳ xung thường phụ thuộc vào tần số xung, ví dụ, ở tần số 50Hz, chu kỳ
xung là 20ms.

4. Điện áp xung (Pulse Voltage):

 Điện áp xung điều khiển động cơ servo thường phải nằm trong một phạm vi
nhất định để đảm bảo hoạt động chính xác của servo.
 Thông thường, điện áp xung trong khoảng 3.3V đến 5V, tùy thuộc vào loại
động cơ servo cụ thể.

5. Polarity (Polarity):

 Trong một số hệ thống, có thể có đảo ngược polarity của xung để điều khiển
hướng quay của động cơ servo.

6. Bộ điều chỉnh (Control Signal):

 Xung điều khiển được tạo ra từ một bộ điều chỉnh như mạch điều khiển trong
mô hình điều khiển từ xa (RC).
 Bộ điều chỉnh thường tạo ra các xung điều khiển với độ rộng và tần số phù hợp
để đạt được vị trí hoặc góc quay mong muốn của động cơ servo.

2
Câu 3:Vẽ sơ đồ kết nối arduino với động cơ RC servo, trình bày công dụng của các
hàm
sau trong thư viện “Servo.h” của bo mạch arduino:
- servo.attach(pin)
- servo.write(angle)
- servo.read()

#include <Servo.h>//Khai báo thư viện điều khiển Servo


Servo myservo;//Khai báo đối tượng Servo
int servoPin = 9;//Chân kết nối Servo với Arduino
void setup(){
myservo.attach(servoPin);//Khai báo chân kết nối Servo với Arduino
}
void loop()
{
for(int pos = 0; pos < 180; pos += 1){
myservo.write(pos);//Gán góc quay cho Servo
delay(15);
}
for(int pos = 180; pos>=1; pos-=1){
myservo.write(pos);//Gán góc quay cho Servo
delay(15);
}
}
3
1. servo.attach(pin):

 Công dụng: Hàm này được sử dụng để liên kết đối tượng servo với một chân
pin cụ thể trên bo mạch Arduino.
 Tham số:
 pin: Số chân digital của Arduino mà động cơ servo được kết nối đến.
 Ví dụ: servo.attach(9); sẽ kết nối động cơ servo với chân digital số 9 trên
Arduino.

2. servo.write(angle):

 Công dụng: Hàm này gửi một tín hiệu điều khiển đến động cơ servo để xoay
đến một góc nhất định.
 Tham số:
 angle: Góc cần xoay của động cơ servo, thường từ 0 đến 180 độ.
 Ví dụ: servo.write(90); sẽ điều khiển động cơ servo xoay đến góc 90 độ.

3. servo.read():

 Công dụng: Hàm này đọc giá trị góc hiện tại của động cơ servo.
 Trả về:
 Giá trị góc hiện tại của động cơ servo, thường từ 0 đến 180 độ.
Câu 4: Trình bày chức năng các chân của module L298.

4
1. Chân Nguồn (Power Supply Pins):

 VCC (Pin 1): Nguồn cung cấp cho bộ cầu H khi sử dụng tải nặng. Thường được
kết nối với nguồn cung cấp điện áp cao hơn để đáp ứng nhu cầu của các động
cơ mạnh.
 GND (Pin 2, 8): Chân này được kết nối đến mạch đất của hệ thống để tạo
mạch đất chung.

2. Chân Điều Khiển (Control Pins):

 IN1 (Pin 3), IN2 (Pin 4): Điều khiển hướng quay của động cơ 1.
 IN3 (Pin 5), IN4 (Pin 6): Điều khiển hướng quay của động cơ 2.
 Các chân này được điều khiển bởi tín hiệu logic từ vi điều khiển như Arduino.
Kết hợp giữa các mức logic trên các cặp chân này sẽ quyết định hướng quay
của động cơ.

3. Chân Điều Khiển Tốc Độ (Speed Control Pins):

 ENABLE A (Pin 7), ENABLE B (Pin 6): Chân này được sử dụng để kiểm soát tốc
độ của các động cơ. Bằng cách điều chỉnh mức điện áp trên các chân này, bạn
có thể điều chỉnh tốc độ của động cơ.
 Khi tín hiệu PWM được áp dụng lên các chân này từ vi điều khiển như Arduino,
tốc độ quay của động cơ sẽ thay đổi tương ứng với tín hiệu PWM đó.

4. Chân Đầu Ra (Output Pins):

 OUT 1, OUT 2 (Pin 9, 10): Kết nối đến động cơ 1.


 OUT 3, OUT 4 (Pin 11, 12): Kết nối đến động cơ 2.
 Các chân này được kết nối trực tiếp đến cực của động cơ, điều khiển hướng
quay và tốc độ của động cơ thông qua các tín hiệu từ các chân điều khiển và
chân điều khiển tốc độ.

5
Câu 5: Vẽ sơ đồ kết nối arduino đối với module L298 để điều khiển động cơ một
chiều,
trình bày cách điều khiển động cơ một chiều (thay đổi tốc độ, đảo chiều quay) bằng
module L298.

#define IN1 7
#define IN2 6
#define IN3 5
#define IN4 4
#define MAX_SPEED 255 //từ 0-255
#define MIN_SPEED 0
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}

void motor_1_Dung() {

6
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
}

void motor_2_Dung() {
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}

void motor_1_Tien(int speed) { //speed: từ 0 - MAX_SPEED


speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong
một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
digitalWrite(IN1, HIGH);// chân này không có PWM
analogWrite(IN2, 255 - speed);
}

void motor_1_Lui(int speed) {


speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong
một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
digitalWrite(IN1, LOW);// chân này không có PWM
analogWrite(IN2, speed);
}

void motor_2_Tien(int speed) { //speed: từ 0 - MAX_SPEED


speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong
một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
analogWrite(IN3, speed);
digitalWrite(IN4, LOW);// chân này không có PWM
}

void motor_2_Lui(int speed) {


speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong
một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
analogWrite(IN4, 255 - speed);
digitalWrite(IN3, HIGH);// chân này không có PWM
}

void loop()
{
motor_1_Tien(MAX_SPEED); // motor 1 tiến
delay(5000);//tiến 5 s
motor_2_Lui(MAX_SPEED); //motor 2 lùi
// motor 1 vẫn tiến
delay(2000);//tiến 2 s
motor_1_Dung();
7
motor_2_Dung();
delay(10000);//dừng 10s
}
IN1, IN2, IN3, IN4: Đây là các chân kết nối với module L298 để điều khiển động

cơ. Chúng được đặt như hằng số để dễ dàng thay đổi nếu cần.
 MAX_SPEED và MIN_SPEED: Đây là hằng số đại diện cho tốc độ tối đa và tốc
độ tối thiểu của động cơ.
Trong hàm setup(), chúng ta thiết lập chế độ OUTPUT cho các chân kết nối để điều
khiển động cơ.
Hai hàm motor_1_Dung() và motor_2_Dung() được sử dụng để dừng động cơ bằng
cách đặt cả hai chân điều khiển của động cơ về LOW.
 IN1, IN2, IN3, IN4: Đây là các chân kết nối với module L298 để điều khiển động
cơ. Chúng được đặt như hằng số để dễ dàng thay đổi nếu cần.
 MAX_SPEED và MIN_SPEED: Đây là hằng số đại diện cho tốc độ tối đa và tốc
độ tối thiểu của động cơ.

Trong hàm setup(), chúng ta thiết lập chế độ OUTPUT cho các chân kết nối để điều
khiển động cơ.

Hai hàm motor_1_Dung() và motor_2_Dung() được sử dụng để dừng động cơ bằng


cách đặt cả hai chân điều khiển của động cơ về LOW.

Các hàm motor_1_Tien(), motor_1_Lui(), motor_2_Tien(), và motor_2_Lui() được sử


dụng để điều khiển động cơ theo hướng tiến và lùi với tốc độ được chỉ định. Bạn chú
ý rằng hàm constrain() được sử dụng để đảm bảo rằng giá trị tốc độ nằm trong
khoảng từ MIN_SPEED đến MAX_SPEED. analogWrite() được sử dụng để điều chỉnh
tốc độ của động cơ.

Trong hàm loop(), chúng ta gọi các hàm điều khiển động cơ để thực hiện các thao tác
di chuyển của động cơ. Đoạn code này sẽ làm cho motor 1 tiến trong 5 giây, sau đó
motor 2 lùi trong 2 giây, và sau đó cả hai động cơ sẽ dừng lại trong 10 giây trước khi
lặp lại quá trình

8
Câu 6: Trình bày chức năng các chân của module LCD16x02

1. Kích thước: Màn hình có kích thước 16 cột và 2 hàng, do đó được gọi là LCD 16x2. Có
16 ký tự hiển thị trên mỗi hàng.
2. Hiển thị ký tự: Màn hình LCD 16x2 có khả năng hiển thị ký tự, con số và các ký tự đặc
biệt. Mỗi ký tự được hiển thị trong một ô (gọi là ô ký tự).
3. Đèn nền: Một số màn hình LCD 16x2 đi kèm với đèn nền (backlight) để cải thiện khả
năng đọc trong điều kiện ánh sáng yếu hoặc tối.
4. Giao tiếp: Màn hình LCD 16x2 thường được giao tiếp với vi điều khiển hoặc vi điều
khiển thông qua giao diện song song 4-bit hoặc 8-bit. Các chân kết nối bao gồm chân
dữ liệu (data pins), chân điều khiển (control pins) như RS (Register Select), RW
(Read/Write), E (Enable), và các chân khác cho đèn nền (nếu có).
5. Điều khiển hiển thị: Màn hình LCD 16x2 cho phép điều chỉnh vị trí hiển thị của con
trỏ và các ký tự trên màn hình. Bạn có thể di chuyển con trỏ đến bất kỳ vị trí nào trên
màn hình để hiển thị dữ liệu.
6. Điện áp và tiêu thụ điện năng: Điện áp hoạt động của màn hình LCD 16x2 thường là
5V DC. Tiêu thụ điện năng của màn hình thường thấp, tùy thuộc vào việc có đèn nền
và chế độ sử dụng.

9
7. Ứng dụng: Màn hình LCD 16x2 thường được sử dụng trong các dự án nhúng, điều
khiển và giám sát, hệ thống nhúng, thiết bị điện tử, và các ứng dụng hiển thị thông tin
đơn giản.

Câu 7: Vẽ sơ đồ kết nối arduino với module LCD16x02 theo cách kết nối trực tiếp (4
bit),trình bày công dụng của các hàm sau trong thư viện “LiquidCrystal.h” của bo
mạch arduino:
o LiquidCrystallcd(rs,enable,d4,d5,d6,d7);
o LiquidCrystallcd(rs,rw,enable,d4,d5,d6,d7);
o lcd.begin(cols,rows);
o lcd.clear();
o lcd.setCursor(col,row);
o lcd.print(data);
Sơ đồ kết nối module LCD và arduino trực tiếp

10
Arduino Uno R3 LCD 16X2 Biến trở

5V 2, 15 Chân ngoài

GND 1, 16 Chân ngoài

2 D7

3 D6

4 D5

5 D4

11 EN

12 RS

Vo Chân giữa
Code:

1. #include <LiquidCrystal.h>

2.

3. // Khai báo chân kết nối với màn hình LCD

4. const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

5.

6. // Khai báo số cột và số hàng của màn hình LCD

7. const int cols = 16;

8. const int rows = 2;

9.

10. // Khởi tạo đối tượng LiquidCrystal

11. LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

12.

13. void setup() {

11
14. // Khởi tạo màn hình LCD với số cột và số hàng

15. lcd.begin(cols, rows);

16.

17. // In dòng chữ "Hello, LCD!"

18. lcd.print("Hello, LCD!");

19. // Di chuyển con trỏ đến cột 0, hàng 1

20. lcd.setCursor(0, 1);

21. // In dòng chữ "Welcome!"

22. lcd.print("Welcome!");

23. }

24. void loop() {

25. // Đoạn code trong hàm loop() không cần thiết trong trường hợp này,

26. // vì chúng ta không có hoạt động lặp lại cụ thể nào cần thực hiện liên tục.

27. }LiquidCrystal lcd(rs, enable, d4, d5, d6, d7);

1. Công dụng: Hàm này khởi tạo một đối tượng LCD với các chân được kết
nối tương ứng với các chân trên bo mạch Arduino.
2. Tham số:
1. rs: Chân Register Select kết nối với màn hình LCD để xác định liệu
dữ liệu được gửi là dữ liệu ký tự (RS = HIGH) hay lệnh (RS =
LOW).
2. enable: Chân Enable cho phép gửi dữ liệu hoặc lệnh đến màn
hình LCD.
3. d4, d5, d6, d7: Các chân dữ liệu kết nối với màn hình LCD.

28. LiquidCrystal lcd(rs, rw, enable, d4, d5, d6, d7);

1. Công dụng: Tương tự như hàm trước, nhưng có thêm tham số rw, cho
phép xác định chế độ đọc hoặc ghi dữ liệu từ màn hình LCD.
2. Tham số:
1. rs: Chân Register Select.

12
2. rw: Chân Read/Write để xác định chế độ đọc (HIGH) hoặc ghi
(LOW).
3. enable, d4, d5, d6, d7: Các chân tương tự như trong hàm trước.

29. lcd.begin(cols, rows);

1. Công dụng: Khởi tạo màn hình LCD với số cột và số hàng được chỉ định.
2. Tham số:
1. cols: Số cột trên màn hình LCD.
2. rows: Số hàng trên màn hình LCD.

30. lcd.clear();

1. Công dụng: Xóa màn hình LCD và di chuyển con trỏ về vị trí ban đầu
(0,0).

31. lcd.setCursor(col, row);

1. Công dụng: Di chuyển con trỏ đến vị trí cột và hàng được chỉ định trên
màn hình LCD.
2. Tham số:
1. col: Vị trí cột.
2. row: Vị trí hàng.

32. lcd.print(data);

1. Công dụng: In dữ liệu lên màn hình LCD tại vị trí con trỏ hiện tại.
2. Tham số:
1. data: Dữ liệu (chuỗi ký tự, số nguyên, số thực, ... ) cần in lên màn
hình LCD.

13
Câu 8: Vẽ sơ đồ kết nối arduino với module LCD16x02 theo cách kết nối thông qua
module
I2C, trình bày công dụng của các hàm sau trong thư viện “LiquidCrystal_I2C.h” của
bo
mạch arduino.
o LiquidCrystal_I2C lcd(address, cols, rows);
o lcd.init();
o lcd.backlight();
o lcd.setCursor(col, row);
o lcd.print(data);

14
#include <Wire.h>

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()

lcd.init();

lcd.backlight();

lcd.setCursor(0, 0);

lcd.print("Line 1 test OK");

lcd.setCursor(0, 1);

lcd.print("Line 2 test OK");

void loop()

15

You might also like