You are on page 1of 123

GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH

KHOA CƠ KHÍ ĐỘNG LỰC



ĐỒ ÁN TỐT NGHIỆP

ỨNG DỤNG LABVIEW TRONG


THU THẬP VÀ ĐIỀU KHIỂN ĐỘNG CƠ

GVHD:Ths. LÊ KHÁNH TÂN


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

LỜI CẢM ƠN

Đề tài “Ứng dụng LabVIEW trong thu thập và điều khiển động cơ” là một đề tài mới lạ
và khó. Trong khoảng thời gian ngắn với lượng kiến thức còn hạn chế, hoàn thành xong đề
tài xem như là một thành công lớn của nhóm. Để có thể hoàn thành tốt đề tài cần một sự cố
gắng lớn của cả nhóm. Và với một vai trò rất quan trọng đặc biệt đó là giáo viên hướng dẫn,
nhóm thực hiện đồ án xin gửi lời cảm ơn đến thầy Lê Khánh Tân, người đã tận tình hướng
dẫn, chia sẻ tài liệu và đưa ra các góp ý để đề tài của nhóm có thể hoàn thiện tốt hơn đề tài.
Trong quá trình thực hiện đồ án, nhóm tác giả đã gặp không ít khó khăn cả về phần cứng lẫn
phần mềm, nhưng nhờ sự góp ý hướng dẫn quý báu của thầy mà nhóm có thể giải quyết
được vấn đề.

Chúng em xin gửi lời cảm ơn thầy phản biện đã nhận xét thật cụ thể và đóng góp những
ý kiến quý báu để đồ án được hoàn thiện hơn.

Để có thể thực hiện được đề tài thì kinh nghiệm tích lũy từ 4 năm Đại học rất quan
trọng, qua đó nhóm tác giả xin gửi lời cảm ơn đến các thầy cô trong trường Đại Học Sư
Phạm Kỹ Thuật TP. HCM và đặt biệt là các thầy cô trong khoa Cơ Khí Động Lực đã giúp
nhóm tác giả có được kiến thức trong việc học và có thể áp dụng vào việc làm sau này.

Nhóm tác giả xin gửi lời cảm ơn đến bạn bè trong lớp, tuy các bạn cũng bận làm đồ án
nhưng cũng đã giành thời gian đóng góp ý kiến và giúp đỡ khi nhóm gặp khó khăn.

Xin chúc các thầy cô luôn luôn dồi dào sức khỏe, tràn đầy năng lượng, có thật nhiều là
nhiều niềm vui, hạnh phúc trong cuộc sống. Nhóm thực hiện xin chân thành cảm ơn.

Thành phố Hồ Chí Minh, ngày … tháng… năm 20…

Nhóm sinh viên thực hiện


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

TÓM TẮT

1. Vấn đề nghiên cứu


- Giao tiếp Arduino với Labview và động cơ.
- Sơ đồ mạch điện của xe Toyota Yaris 2SZ - FE
- Hệ thống điều khiển động cơ.
- Phần mềm Arduino.
- Phần mềm LabVIEW.
- Lý thuyết và ứng dụng lập trình trong điều khiển bàn đạp ga điện tử
2. Các hướng tiếp cận
- Thông qua sự phát triển của công nghệ điều khiển qua máy tính và ứng dụng công
nghệ đó trong học tập và nghiên cứu trong Trường Đại Học Sư Phạm Kỹ Thuật
Thành Phố Hồ Chí Minh.
- Dựa vào tài liệu tham khảo của khóa trước cùng với sư hỗ trợ, hướng dẫn cụ thể và
cung cấp tài liệu của thầy Lê Khánh Tân.
3. Cách giải quyết vấn đề
- Nắm rõ nguyên lý hoạt động cảm biến và cách đọc hiểu sơ đồ mạch điện động cơ.
- Lập trình thu thập tín hiệu các cảm biến thông qua board Arduino, giao tiếp Arduino
với Labview để điều khiển động cơ trên máy tính, thiết kế mạch điện để giảm dòng
điện.
- Nghiên cứu lý thuyết về phương pháp điều xung PWM
- Lập trình LabVIEW nhận dữ liệu từ Arduino truyền lên, sử dụng ngôn ngữ lập trình
để điều khiển bàn đạp ga điện tử từ màn hình máy tính.
- Sử dụng 2 microchip MCP4921 để giả tín hiệu xung đưa vào bàn đạp ga điện tử.
- Tham khảo tài liệu có sẵn trên Internet, ý kiến bạn bè, sinh viên khóa trước và đặc
biệt là thầy hướng dẫn Lê Khánh Tân.
4. Một số kết quả đạt được
- Thiết kế được thiết bị thu thập tín hiệu cảm biến trên động cơ, thiết kế được board
điều khiển tốc độ động cơ thông qua điều khiển bàn đạp ga.
- Dữ liệu được truyền từ chương trình Arduino đến LabVIEW xử lý và được truyền
ngược lại từ LabVIEW tới động cơ để điều khiển.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

MỤC LỤC
TÓM TẮT............................................................................................................................ iii

MỤC LỤC.............................................................................................................................v

DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT.........................................................ix

DANH MỤC CÁC HÌNH.....................................................................................................x

DANH MỤC CÁC BẢNG..................................................................................................xii

CHƯƠNG 1: TỔNG QUAN...............................................................................................13

1.1. Lý do chọn đề tài......................................................................................................13

1.2. Giới hạn đề tài..........................................................................................................13

1.3. Mục tiêu và nhiệm vụ đề tài.....................................................................................13

1.4. Phương pháp thực hiện............................................................................................14

1.5. Kế hoạch nghiên cứu................................................................................................14

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT...................................................................................16

2.1. Lý thuyết cảm biến...................................................................................................16

2.1.1. Cảm biến vị trí bướm ga (Throttle position sensor).......................................16

2.1.2. Cảm biến nhiệt độ.............................................................................................17

2.1.3. Cảm biến vị trí bàn đạp ga...............................................................................22

2.2. Điều khiển động cơ...................................................................................................26

2.2.1. Điều khiển đánh lửa..........................................................................................26

2.2.2. Điều khiển phun nhiên liệu...............................................................................30

2.3. Ứng dụng vi điều khiển trong điều khiển động cơ.................................................33

2.3.1. Phương pháp điều xung PWM.........................................................................33

2.3.2. IC MCP 4921.....................................................................................................37


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

CHƯƠNG 3: THIẾT KẾ, LẬP TRÌNH THIẾT BỊ THU THẬP VÀ TRUYỀN DỮ


LIỆU....................................................................................................................................... 4

3.1. Thiết kế phần cứng.....................................................................................................4

3.2. Thiết kế phần mềm.....................................................................................................6

3.2.1. Chương trình Arduino........................................................................................6

3.2.2. Chương trình trên LabVIEW............................................................................7

3.3. Cài đặt Router và NAT PORT.................................................................................11

CHƯƠNG 4: THỰC NGHIỆM VÀ ĐÁNH GIÁ KẾT QUẢ...........................................17

4.1. Quy trình thực nghiệm.............................................................................................17

4.2. Kết quả thức nghiệm thu được khi nổ máy xe.......................................................17

CHƯƠNG 5: KẾT LUẬN VÀ ĐỀ NGHỊ..........................................................................23

5.1. Kết quả đạt được......................................................................................................23

5.2. Kết luận..................................................................................................................... 23

5.3. Hướng phát triển của đề tài.....................................................................................23

DANH MỤC TÀI LIỆU THAM KHẢO...........................................................................25

PHỤ LỤC A: GIỚI THIỆU VỀ ARDUINO......................................................................26

1. Arduino là gì?..............................................................................................................26

2. Tại sao chọn Arduino?................................................................................................27

3. Tổng quan về Arduino Uno R3...................................................................................27

3.1. Phần cứng của Arduino Uno R3..........................................................................27

3.2. Phần mềm Arduino IDE......................................................................................30

4. Lập trình trên Arduino IDE.......................................................................................32

4.1. Ngôn ngữ lập trình trên Arduino........................................................................32


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

4.2. Chương trình code................................................................................................35

4.3. Giải thích chương trình code...............................................................................39

PHỤ LỤC B: GIỚI THIỆU LabVIEW.............................................................................44

1. LabVIEW là gì ?..........................................................................................................44

2. Các ứng dụng của LabVIEW.....................................................................................45

3. Những khái niệm cơ bản của LabVIEW...................................................................45

3.1. VI -Thiết bị ảo.......................................................................................................45

3.2 Front Panel và Block Diagram.............................................................................45

3.3. Các kỹ thuật lập trình trên LabVIEW...............................................................47

4. Functions Palette (Bảng các hàm chức năng)............................................................51

4.1. Programming (Các khối hàm cơ bản).................................................................51

4.2. Instrument I/O (Công cụ giao tiếp).....................................................................56

4.3. Data communication (Giao tiếp dữ liệu).............................................................59

5. Chương trình thu thập xử lý tín hiệu các cảm biến và đồ thị mô phỏng.................61

5.1. Chương trình SERVER.......................................................................................61

5.2. Chương trình CLIENT........................................................................................65

PHỤ LỤC C: GIỚI THIỆU CÔNG NGHỆ IoT...............................................................67

1. Mạng không dây..........................................................................................................67

1.1. NFC....................................................................................................................... 67

1.2. Bluetooth...............................................................................................................67

1.3. RF.......................................................................................................................... 67

1.4. Wireless.................................................................................................................67

2. CÔNG NGHỆ IoT.......................................................................................................68


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

2.1. Internet of Things là gì?.......................................................................................68

2.2. Khả năng định danh độc nhất.............................................................................69

2.3. Xu hướng và tính chất của Internet of Things...................................................69

2.4. Các hệ thống phụ trong IoT.................................................................................70

2.5. Ứng dụng của IoT.................................................................................................70

2.7. IoT trong công nghệ nhà thông minh..................................................................74

2.8. Ứng dụng IoT cho camera giám sát....................................................................76

2.9. Kết luận................................................................................................................. 77


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT


Ký hiệu Chú thích Đơn vị
Chuẩn giao tiếp RS232 để nối ghép các thiết bị
RS232
ngoại vi với máy tính
Serial Công cụ giao tiếp giữa thiết bị và máy tính
Phần mềm máy tính (Laboratory Virtual
LabVIEW
Instrument Engineering Workbench)
MAF Cảm biến dây nhiệt đo lưu lượng không khí nạp
VG Tín hiệu lưu lượng không khí Volt
VPA, VPA2 Tín hiệu kép bàn đạp ga điện tử
VTA, VTA2 Tín hiệu vị trí bướm ga %
THW Tín hiệu nhiệt độ nước làm mát
THA Tín hiệu nhiệt độ không khí nạp
#10, #20 Tín hiệu phun nhiên liệu
E1 Tín hiệu chân mass
IGT Tín hiệu điều khiển đánh lửa
RPM Tốc độ động cơ (Round Per Minute) Vòng/phút
Arduino IDE Phần mềm lập trình cho Arduino
IC Atmega328 Vi xử lý trên Arduino
ECU Hộp điều khiển (Electronic Control Unit)
Chuẩn kết nối tuần tự đa dụng trong máy tính
USB
(Universal Serial Bus)
MCP4921 MICROCHIP giả xung tín hiệu
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

DANH MỤC CÁC HÌ


Hình 2.1: Cấu tạo và mạch điện cảm biến..............................................................................4
Hình 2.2: Cảm biến vị trí bướm ga.........................................................................................5
Hình 2.3: Đường đặc tuyến cảm biến vị trí bướm ga.............................................................5
Hình 2.4: Cảm biến nhiệt độ động cơ.....................................................................................6
Hình 2.5: Mạch điện cảm biến nhiệt độ nước làm mát...........................................................7
Hình 2.6: Đường đặc tính cảm biến nhiệt độ..........................................................................8
Hình 2.7: Cảm biến nhiệt độ..................................................................................................8
Hình 2.8: Mạch điện cảm biến khí nạp...................................................................................9
Hình 2.9: Đường đặc tính cảm biến nhiệt độ không khí nạp..................................................9
Hình 2.10: Cảm biến áp suất tuyệt đối trên đường ống nạp (MAP).....................................10
Hình 2.11: Cấu tạo và sơ sồ mạch điện cảm biến MAP........................................................10
Hình 2.12: Mạch điện cầu Wheatston bên trong cảm biến MAP..........................................11
Hình 2.13: Đồ thị đường đặc tính cảm biến MAP................................................................12
Hình 2.14: Mạch điện cảm biến mức nhiên liệu...................................................................12
Hình 2.15: Đồ thị đường đặc tính cảm biến mức nhiên liệu.................................................13
Hình 2.16: Đồ thị đường đặc tính góc đánh lửa sớm............................................................14
Hình 2.17: Sơ đồ khối điều khiển đánh lửa của ECU...........................................................15
Hình 2.18: Sơ đồ điều khiển góc đánh lửa sớm của hệ thống đánh lửa trực tiếp xe Toyota. 17
Hình 2.19: Bản đồ góc ngậm điện........................................................................................17
Hình 2.20: ECU điều khiển phun nhiên liệu.........................................................................20
Hình 2.21: Mô hình mạng riêng ảo VPN..............................................................................21
Hình 2.22: Quy trình thực hiện thu thập và truyền dữ liệu...................................................23
Y

Hình 3.1: Hình vẽ mô phỏng mạch điện thu thập dữ liệu.....................................................28


Hình 3.2: Thiết kế bộ thu thập dữ liệu..................................................................................28
Hình 3.3: Cáp kết nối Arduino và máy tính..........................................................................29
Hình 3.4: Giao tiếp giữa máy tính và Arduino.....................................................................29
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hình 3.5: Sơ đồ khối đọc tín hiệu từ các chân tín hiệu.........................................................29
Hình 3.6: Sơ đồ khối đọc tín hiệu xung IGT........................................................................30
Hình 3.7: Sơ đồ khối Gửi tín hiệu đọc được từ Arduino lên máy tính..................................30
Hình 3.8: Sơ đồ khối giao tiếp giữa Arduino và LabVIEW..................................................31
Hình 3.9: Mô hình khối giao tiếp VISA của LabVIEW........................................................32
Hình 3.10: Mô hình khối tách tín hiệu trong LabVIEW.......................................................32
Hình 3.11: Sơ đồ khối thiết lập chương trình SERVER........................................................33
Hình 3.12: Mô hình khối chương trình SERVER trong LabVIEW......................................33
Hình 3.13: Sơ đồ khối thiết lập chương trình CLIENT........................................................33
Hình 3.14: Mô hình khối chương trình SERVER trong LabVIEW......................................34

Hình 4.1: Giao diện chương trình SERVER lúc không tải (VTA 0 %).................................41
Hình 4.2: Giao diện chương trình CLIENT lúc không tải (VTA 0 %)..................................41
Hình 4.3: Bảng đồ thị kết quả chương trình SERVER lúc không tải (VTA 0 %)..................42
Hình 4.4: Bảng đồ thị kết quả chương trình CLIENT lúc không tải (VTA 0 %)..................42
Hình 4.5: Giao diện chương trình SERVER lúc có tải (VTA 31 %).....................................43
Hình 4.6: Giao diện chương trình CLIENT lúc không tải (VTA 31%).................................43
Hình 4.7: Bảng đồ thị kết quả chương trình SERVER lúc không tải (VTA 31 %)................44
Hình 4.8: Bảng đồ thị kết quả chương trình CLIENT lúc không tải (VTA 31 %)................44
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

DANH MỤC CÁC BẢNG


Bảng 2.1: Giá trị đặc tính cảm biến nhiệt độ nước làm mát....................................................7
Bảng 2.2: Giá trị đặc tính cảm biến nhiệt độ không khí nạp...................................................9
Bảng 2.3: So sánh với ứng dụng IoT trên nhà thông minh:..................................................24
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

CHƯƠNG 1: TỔNG QUAN

1.1. Lý do chọn đề tài

Với sự phát triển của công nghệ ô tô với tốc độ chóng mặt, cùng với xu hướng hội nhập
hiện nay thì nên công nghiệp ô tô Việt Nam đăng trên con đường phát triển mạnh mẽ.

Các nước phát triển đang chạy đua với cuộc cạch mạng công nghiệp 4.0 và công nghệ
điều khiển thông qua máy tính là một phần không thể thiếu, đặc biệt là điều khiển tự động vẫn
đang rất phổ biến trong lĩnh vực kỹ thuật ngày nay. Các xe hơi được điều khiển, truyền và
nhận thông tin một cách chính xác, vì vậy xe hơi sẽ ngày càng thông minh và có thể xử lý tình
huống phức tạp trong khi hoạt động. Để làm được điều đó thì việc thu thập dữ liệu từ xe là rất
quan trọng, sau đó ECU sẽ nhận tín hiệu điều khiển từ máy tính và thực thi mệnh lệnh của
người điều khiển và mục đích cuối cùng là giúp động cơ hoạt động ổn định theo mong muốn
của chúng ta.

Lĩnh vực điều khiển ô tô thông qua máy tính ngày càng phát triển mạnh, việc điều khiển
để xe hoạt động theo ý muốn giúp con người giảm bớt được thao tác khi vận hành, đồng thời
việc xử lí các sự cố xảy ra cũng chính xác và nhanh hơn. Do đó nhóm chúng em đã chọn
nghiên cứu đề tài “ Ứng dụng LabVIEW trong thu thập và điều khiển động cơ trên xe
TOYOTA YARIS 2SZ - FE”. Nhóm hy vọng rằng đề tài này sẽ là đòn bẩy để giúp nhóm
chúng em nghiên cứu sâu về điều khiển tự động các hệ thống trên xe, đặc biệt là trên các dòng
xe thông minh hiện nay.

1.2. Giới hạn đề tài

- Nghiên cứu, thiết kế và chế tạo mô hình thu thập tín hiệu, điều khiển động cơ trên xe
Toyota Yaris 2SZ-FE
- Xử lý tín hiệu thu được thông qua ứng dụng của Arduino và sau đó gửi tín hiệu lên máy
tính thông qua phần mềm Labview.
- Sử dụng 2 microchip MCP 4921 để giả hai tín hiệu bàn đạp ga điện tử, từ đó điều khiển
được tốc độ động cơ trên máy tính thông qua giao diện LabVIEW.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

1.3. Mục tiêu và nhiệm vụ đề tài

Mục tiêu:

- Thu thập được tín hiệu từ cảm biến, hiển thị chúng lên đồ thị trên phần mềm Labview.
- Lập trình điều khiển bàn đạp ga trên máy tính gần chính xác nhất với việc điều khiển bàn
đạp ga thật.

Nhiệm vụ:

- Tìm hiểu sử dụng được các ứng dụng cơ bản nhất của hai phần mềm Arduino và
LabVIEW.
- Ôn lại kiến thức chuyên ngành về điều khiển động cơ và các cảm biến có trên xe
TOYOTA Yaris 2SZ – FE.
- Lập trình chương trình thu thập tín hiệu các cảm biến, và chương trình giả tín hiệu kép tới
bàn đạp ga bằng Arduino.
- Thiết kế giao diện LabVIEW để theo dõi, điều khiển động cơ.
- Thiết kế phần cứng để đảm bảo an toàn việc kết nối board Arduino và các tín hiệu từ cảm
biến và xung cần thu thập, điều khiển.
- Bàn đạp ga thật và bàn đạp ga trên máy tính hoạt động cùng nhau, tín hiệu nào truyền đi
lớn hơn thì động cơ sẽ hoạt động theo tín hiệu đó, không bị xung đột tín hiệu.

1.4. Phương pháp thực hiện

- Bắt đầu nghiên cứu từ những ứng dụng cơ bản nhất của hai phần mềm Arduino và
LabVIEW rồi sau đó dần đi vào mục đích nghiên cứu chính của đề tài là điều khiển bàn
đạp ga điện tử.
- Tham khảo nhiều nguồn tài liệu từ trên mạng và sách giáo trình liên quan đến đề tài về các
phần mềm, giao tiếp SPI và các giao tiếp khác. Đặt biệt được sự hướng dẫn chu đáo từ
thầy hướng dẫn và việc trao đổi kiến thức cùng các nhóm khác và các bạn khóa trước. Từ
đó nhóm đã có đủ cơ sở kiến thức để thực hiện đề tài này.

1.5. Kế hoạch nghiên cứu


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Với sự định hướng của giáo viên hướng dẫn, nhóm đã thực hiện đề tài theo các giai đoạn sau:

Giai đoạn 1: Nghiên cứu các tài liệu phần mềm liên quan đến đề tài

- Lập trình về Arduino làm các ứng dụng cơ bản có liên quan đến đề tài.
- Lập trình về LabVIEW thực hiện hiển thị kết quả đơn giản.
- Nắm cơ bản các hệ thống liên quan trên mạch điện xe Toyota Yaris 2SZ-FE.
- Ôn lại kiến thức về hệ thống điều khiển động cơ và các cảm biến.

Giai đoạn 2: Thiết kế phần cứng, phần mềm cho đề tài nghiên cứu và nghiên cứu điều
khiển bàn đạp ga điện tử.

- Thiết kế phần cứng là bộ thu tín hiệu và giả tín hiệu kép điều khiển bàn đạp ga điện tử.
- Thiết kế phần mềm là hoàn thành chương trình trên phần mềm Arduino và LabVIEW để
thu thập dữ liệu ổn định, đồng thời điều khiển bàn đạp ga theo cài đặt cho trước.
- Tìm hiểu về điều khiển bàn đạp ga điện tử trên động cơ tránh xung đột xung, nghiên cứu
tìm hiểu mạch “OR”.
Giai đoạn 3: Tiến hành thu thập tín hiệu, điều khiển bàn đạp ga và viết thuyết minh.
- Nổ máy xe và thực hiện thu thập, truyền dữ liệu đi điều khiển.
- Làm video về quá trình thực hiện kết quả đề tài thực nghiệm.
- Viết thuyết minh bằng Word.
- Viết báo cáo bằng Powerpoint để thuyết trình.
- Hoàn tất đề tài.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

2.1. Lý thuyết cảm biến

2.1.1. Cảm biến vị trí bướm ga (Throttle position sensor)

Góc mở bướm ga thành tín hiệu điện áp gửi đến ECU. Đa số cảm biến bướm ga là loại
tuyến tính (dạng biến trở) 3 dây. Tuy nhiên trên một số xe có 4 dây do bố trí thêm công tắc vị
trí không tải (idle). Cảm biến bướm ga có các chức năng sau:

- Điều chỉnh tỉ lệ hỗn hợp theo tải của động cơ: Ở tốc độ cầm chừng đòi hỏi hỗn hợp hơi
giàu, khi tải lớn phải làm giàu hỗn hợp để công suất động cơ phát ra tối đa và khi động cơ
hoạt động ở tải trung bình phải đảm bảo động cơ chạy tiết kiệm.
- Cắt nhiên liệu khi giảm tốc: Khi giảm tốc ECU sẽ căn cứ vào cảm biến số vòng quay động
cơ và cảm biến vị trí bướm ga để cắt nhiên liệu, nhằm tiết kiệm nhiên liệu và giảm ô
nhiễm môi trường. Tốc độ cắt nhiên liệu phụ thuộc nhiệt độ nước làm mát, khi nhiệt độ
động cơ càng thấp thì tốc độ cắt nhiên liệu càng cao.
- Làm giàu hỗn hợp khi tăng tốc: Khi ấn ga đột ngột từ vị trí cầm chừng, ECU sẽ tăng lượng
nhiên liệu cung cấp để làm giàu hỗn hợp giúp cho động cơ tăng tốc nhanh chóng.

Mạch điện và cảm biến vị trí bướm ga

Hình 2.1: Cấu tạo và mạch điện cảm biến


Cảm biến xác định vị trí mở của cánh bướm ga một cách liên tục theo quy luật một đường
thẳng, giúp cho việc nhận biết góc mở của bướm ga được chính xác hơn.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Cảm biến bao gồm một điện trở, nguồn điện áp 5V từ ECU cung cấp vào hai đầu của điện
trở, con trượt di chuyển trên điện trở theo góc mở của cánh bướm ga. Tín hiệu điện áp VTA từ
con trượt gởi về ECU để xác định độ mở của cánh bướm ga.

Ảnh cảm biến rời và trên xe.

Hình 2.2: Cảm biến vị trí bướm ga

Hình 2.3: Đường đặc tuyến cảm biến vị trí bướm ga


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

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

Trên các hệ thống điều khiển động cơ và ô tô ngày nay người ta sử dụng khá nhiều cảm
biến đo nhiệt độ: nhiệt độ động cơ (nhiệt độ nước làm mát – ECT Engine Coolant
Temperature), nhiệt độ dầu (EOT - Engine Oil Temperature), nhiệt độ nắp máy (CHT -
Cylinder Head Temperature, nhiệt độ khí nạp (IAT - Intake Air Temperature hay MAT –
Manifold Air Temperature).

Trong phần đồ án này chỉ lấy tín hiệu cảm biến nhiệt độ khí nạp và nhiệt độ động cơ , các
cảm biến đo nhiệt độ này có cấu tạo và mạch điện giống nhau, thường là một điện trở nhiệt
(thermistor) mắc trong mạch cầu phân áp.

Nguyên lý hoạt động của cảm biến nhiệt độ này là dựa vào sự thay đổi giá trị điện trở, dựa
trên sự thay đổi nhiệt độ nên dẫn đến sự thay đổi điện áp ở cầu phân áp. Chi tiết quan trọng đó
là điện trở nhiệt là một phần tử cảm nhận sự thay đổi điện trở theo nhiệt độ. Nó được làm
bằng vật liệu bán dẫn nên có hệ số nhiệt điện trở âm (NCT – Negative Temperature
Coefficient). Khi nhiệt độ tăng thì điện trở giảm và ngược lại. Các loại cảm biến nhiệt độ hoạt
động cùng nguyên lý nhưng mức hoạt động và sự thay đổi điện trở theo nhiệt độ có khác
nhau. Sự thay đổi giá trị điện trở sẽ làm thay đổi giá trị điện áp được gửi đến ECU trên nền
tảng cầu phân áp.

 Cảm biến nhiệt độ động cơ (nhiệt độ nước làm mát):


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hình 2.4: Cảm biến nhiệt độ động cơ


Cảm biếm này rất quan trọng vì tín hiệu của nó được ECU dùng để điều khiển lượng xăng
phun, góc đánh lửa sớm, tốc độ không tải, và cả quạt làm mát két nước.

Điện áp 5V qua điện trở chuẩn (điện trở này có giá trị không đổi theo nhiệt độ) tới cảm
biến rồi trở ECU về mass (-). Như vậy điện trở chuẩn và nhiệt điện trở trong cảm biến tạo
thành một cầu phân áp. Điện áp giữa cầu được đưa đến bộ chuyển đổi tương tự - số (bộ
chuyển đổi ADC – analog to digital converter).

Khi nhiệt độ động cơ thấp, giá trị điện trở cảm biến cao và điện áp gửi đến bộ biến đổi
ADC lớn. Tín hiệu điện áp được chuyển đổi thành một dãy xung vuông và được giải mã nhờ
bộ vi xử lý để thông báo cho ECU biết động cơ đang lạnh. Khi động cơ nóng, giá trị điện trở
cảm biến giảm kéo theo điện áp đặt giảm, báo cho ECU biết là động cơ đang nóng.

ECU dùng nhiệt độ chuẩn là C. Khi nhiệt độ nước làm mát bé hơn C, ECU sẽ điều khiển
tăng lượng phun.

Khi nhiệt độ nước làm mát thay đổi, điện áp tại cực THW thay đổi theo và ECU dùng tín
hiệu này để hiệu chỉnh lượng phun nhiên liệu.

Mạch điện

Hình 2.5: Mạch điện cảm biến nhiệt độ nước làm mát
Lượng nhiên liệu phun thay đổi theo nhiệt độ nước làm mát là rất lớn. Khi cảm biến bị hở
mạch thì điện áp tại cực THW sẽ rất cao, lượng nhiên liệu phun sẽ tăng mạnh làm động cơ bị
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

ngộp xăng không thể hoạt động được. Khi cảm biến bị ngắn mạch, điện áp tại cực THW là bé
nhất làm cho động cơ hoạt động không ổn định, nhất là khi nhiệt độ động cơ dưới C.

Bảng 2.1: Giá trị đặc tính cảm biến nhiệt độ nước làm mát

Hình 2.6: Đường đặc tính cảm biến nhiệt độ


 Cảm biến nhiệt độ không khí nạp, THA hoặc TA, MAT:
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hình 2.7: Cảm biến nhiệt độ khí nạp

Cảm biến dùng để xác định nhiệt độ không khí nạp vào động cơ. Mật độ của không khí
thay đổi theo nhiệt độ, điều này có nghĩa là khối lượng không khí nạp vào động cơ phụ thuộc
vào nhiệt độ của lượng không khí nạp.

Cảm biến được bố trí ở phía trước họng bướm ga, phần chính cảm biến là một điện trở có
trị số nhiệt điện trở âm. ECU dụng nhiệt độ cơ bản là C để giảm lượng nhiên liệu phun khi
nhiệt độ không khí nạp tăng cao và sẽ gia tăng lượng nhiên liệu khi nhiệt độ không khí bé hơn
C.

Mạch điện

Hình 2.8: Mạch điện cảm biến khí nạp


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Tương tự như cảm biến nhiệt độ động cơ, cảm biến nhiệt độ không khí cũng lấy tín hiệu
từ cầu phân áp giữ điện trở chuẩn trong ECU và nhiệt điện trở trên cảm biến.
Bảng 2.2: Giá trị đặc tính cảm biến nhiệt độ không khí nạp

Hình 2.9: Đường đặc tính cảm biến nhiệt độ không khí nạp
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

2.1.3. Cảm biến vị trí bàn đạp ga


Hình dạng và vị trí

Hình 2.10: Cảm biến vị trí bàn đạp ga

Hình 2.11: Vị trí cảm biến vị trí bàn đạp ga

Mô tả cảm biến:
Cảm biến vị trí bàn đạp ga biến đổi mức đạp xuống của bàn đạp ga (góc) thành một tín hiệu
điện được chuyển đến ECU động cơ.

Ngoài ra để đảm bảo độ tin cậy, cảm biến này truyền các tín hiệu từ hai hệ thống có các đặc
điểm đầu ra khác nhau. Có hai loại cảm biến vị trí bàn đạp ga, loại tuyến tính và loại phần tử
Hall.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Cảm biến bàn đạp động cơ nghiên cứu là loại tuyến tính. Cấu tạo và hoạt động của cảm biến
này cơ bản giống như cảm biến vị trí bướm ga loại tuyền tính.
Trong các tín hiệu từ hai hệ thống này, một là tín hiệu VPA truyền điện áp theo đường thẳng
trong toàn bộ phạm vi bàn đạp ga. Tín hiệu khác là tín hiệu VPA2, truyền điện áp bù từ tín
hiệu VPA.

Hình 2.12: Sơ đồ mạch điện cảm biến vị trí bàn đạp ga


Sử dụng loại cảm biến chiết áp (thay đổi giá trị điện trở). Chiết áp là loại biến trở dùng để ghi
nhận vị trí và hướng chuyển động của một cơ phận để báo cho máy tính. Tất cả các triết áp
điều có 3 đầu dây nối. Đầu thứ 3 là tín hiệu nó lướt tự do trên điện trở, khi dây tín hiệu lướt tự
do trên điện trở thì điện áp sẽ thay đổi.

Cảm biến vị trí bàn đạp ga và van định lượng luôn là loại chiết áp. Tại mọi thời điểm máy
tính đều cần biết vị trí và hướng chuyển động của chân ga và van định lượng được liên kết cơ
khí với dây tín hiệu. Một đầu dây kia cung cấp điện áp ổn định 5volts từ ECU. Khi trục bàn
đạp hay trục dẫn động van định lượng xoay thì điện áp dây tín hiệu sẽ thay đổi báo cho ECU
biết đang tăng tốc hay thay đổi.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hình 2.13: Đường đặc tính của cảm biến bàn đạp ga

Hình 2.14: Sơ đồ thứ tự giắc điện cảm biến vị trí bàn đạp ga
Hình bàn đạp
Hình 2.14
Ký hiệu các chân của cảm biến vị trí bàn đạp ga:
1: VPA2 (xanh dương)

2: VPA (đỏ)
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

3: VCP2 (trắng)

4: EP2 (nâu)

5: EPA (xanh lá)

6: VCPA (đen)

Thông số kiểm tra:

Bảng 3.1: Thông số kiểm tra cảm biến vị trí bàn đạp ga

Giá trị hiển thị Giá trị hiển thị


Điều kiện làm việc
VPA (Volt) VPA2 (Volt)
Chế độ cầm chừng 0.79 1.58
Bàn đạp ga ở vị trí đạp hết ga 3.53 4.35

2.1.4 Cảm biến khối lượng khí nạp

Hiện nay hầu hết các xe đều sử dụng cảm biến lưu lượng khí nạp kiểu dây nóng vì nó đo
chính xác hơn, trọng lượng nhẹ hơn và độ bền cao hơn.

Cấu tạo

- Cấu tạo của cảm biến rất đơn giản.


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hình 2.15: Cấu tạo cảm biến dây nhiệt

Hoạt động và chức năng

Hình 2.16: Hoạt động của cảm biến dây nhiệt

Hình 2.17: Mạch điện cảm biến dây nhiệt


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hoạt động của cảm biến được thể hiện thông qua một dây sấy được ghép vào mạch cầu. Mạch
cầu này có đặc tính là các điện thế tại điểm A và B bằng nhau khi tích của điện trở theo đường
chéo bằng nhau ([Ra + R3] * R1 = Rh*R2).

Hình 2.18: Đường đặc tính cảm biến dây nhiệt

2. Điều khiển động cơ


2.2.1. Điều khiển đánh lửa
Thời điểm đánh lửa sớm tối ưu bị ảnh hưởng bởi một số các yếu tố khác bên cạnh tốc độ
và độ chân không như: hình dạng của buồng cháy, nhiệt độ bên trong của buồng cháy, …. Vì
lý do này, bộ đánh lửa sớm chân không và ly tâm không thể tạo ra thời điểm đánh lửa lý
tưởng cho động cơ. Nhưng hệ thống đánh lửa sớm điện tử (Electronic Spark Advance - ESA)
sẽ giúp động cơ gần đạt được đặc tính thời điểm đánh lửa lý tưởng và hệ thống đánh lửa này
được TOYOTA ứng dụng trên chiếc Toyota Yaris 2SZ- FE.

So với các hệ thống đánh lửa trước đó, hệ thống đánh lửa với cơ cấu đánh lửa sớm bằng
điện tử có những ưu điểm sau:

- Góc đánh lửa sớm được điều chỉnh tối ưu cho từng chế độ hoạt động của động cơ.
- Góc ngậm điện luôn luôn được điều chỉnh theo tốc độ động cơ và hiệu điện thế Accu, đảm
bảo hiệu điện thế thứ cấp có giá trị cao ở mọi thời điểm.
- Động cơ khởi động dễ dàng, cầm chừng êm dịu, tiết kiệm nhiên liệu và giảm ô nhiễm khí
thải.
- Công suất và đặc tính động học của động cơ được cải thiện rõ rệt.
- Có khả năng điều khiển chống kích nổ cho động cơ.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

- Ít bị hư hỏng, có tuổi thọ cao và không cần bảo dưỡng.


Với những ưu điểm nổi bật như vậy, ngày nay hệ thống đánh lửa với cơ cấu điều khiển
góc đánh lửa sớm bằng điện tử kết hợp với hệ thống phun xăng đã thay thế hoàn toàn hệ
thống đánh lửa bán dẫn thông thường, giải quyết các yêu cầu ngày càng cao về độ độc hại
của khí thải.

Hình 2.10: Đồ thị đường đặc tính góc đánh lửa sớm
Hệ thống ESA là một hệ thống dùng ECU động cơ để xác định thời điểm đánh lửa dựa
vào các tín hiệu từ các cảm biến khác nhau. Số tín hiệu vào càng nhiều thì việc xác định góc
đánh lửa sớm tối ưu càng chính xác. Sơ đồ hệ thống đánh lửa với cơ cấu điều khiển góc đánh
lửa sớm bằng điện tử có thể chia thành 3 thành phần: tín hiệu vào (input signals), ECU và tín
hiệu điều khiển Igniter (output signals).

Ngoài ra còn có thể có các tín hiệu vào từ cảm biến nhiệt độ khí nạp, cảm biến tốc độ xe,
cảm biến oxy. Sau khi nhận tín hiệu từ các cảm biến ECU động cơ tính toán thời điểm đánh
lửa tối ưu được lưu trong bộ nhớ để phù hợp với từng chế độ hoạt động của động cơ, sau đó
gửi tín hiệu đánh lửa thích hợp đến IC đánh lửa.

Trong các tín hiệu ngõ vào, tín hiệu tốc độ động cơ, vị trí piston (cốt máy) và tín hiệu tải
là các tín hiệu quan trọng nhất. Để xác định tốc độ động cơ, người ta có thể đặt cảm biến trên
một vành răng ở đầu cốt máy, bánh đà, đầu cốt cam hoặc delco. Để xác định tải của động cơ,
ECU dựa vào tín hiệu áp suất trên đường ống nạp hoặc tín hiệu lượng khí nạp. Do sự thay đồi
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

về áp suất trên đường ống nạp khi thay đổi tải, tín hiệu điện áp gởi về ECU sẽ thay đổi và
ECU nhận tín hiệu này để xử lý và quy ra mức tải tương ứng để xác định góc đánh lửa sớm.

Trong các hệ thống đánh lửa trước đây, việc hiệu chỉnh góc đánh lửa sớm được thực hiện
bằng phương pháp cơ khí với cơ cấu ly tâm và áp thấp. Đường đặc tính đánh lửa sớm tối ưu
rất đơn giản và không chính xác. Trong khi đó, đường đặc tính đánh lửa lý tưởng được xác
định bằng thực nghiệm rất phức tạp và phụ thuộc vào nhiều thông số. Đối với hệ thống đánh
lửa với cơ cấu điều khiển góc đánh lửa sớm bằng điện tử, góc đánh lửa sớm được hiệu chỉnh
gần sát với đặc tính lý tưởng. Kết hợp hai đặc tính đánh lửa sớm theo tốc độ và theo tải có bản
đồ góc đánh lửa sớm lý tưởng, với khoảng 1000 đến 4000 điểm đánh lửa sớm được chọn lựa
đưa vào bộ nhớ.

Hình 2.11: Sơ đồ khối điều khiển đánh lửa của ECU


1. Tín hiệu tốc độ động cơ (NE).
2. Tín hiệu vị trí piston (G).
3. Tín hiệu tải (MAP).
4. Tín hiệu vị trí bướm ga (VTA).
5. Tín hiệu nhiệt độ nước làm mát (THW).
6. Tín hiệu điện áp Accu.
7. Tín hiệu kích nổ.

Hệ thống đánh lửa trên động cơ Toyota Yaris 2SZ - FE là hệ thống không có bộ chia điện
và sử dụng 4 Bobine đơn cho 4 máy. Bobine thứ nhất nối với bougie máy 1, Bobine thứ hai
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

nối với bougie máy 2 còn Bobine thứ ba, tư nối với bougie máy 3 và 4. Nhờ tần số hoạt động
của mỗi bôbin nhỏ hơn trước nên các cuộn dây sơ cấp và thứ cấp ít nóng hơn. Vì vậy kích
thước của bôbin rất nhỏ và được gắn dính với nắp chụp bougie.

Trong sơ đồ hình 2.18, ECU sau khi xử lí tín hiệu từ các cảm biến sẽ gửi tín hiệu đến cực B
của từng transistor công suất trong igniter theo thứ tự thì nổ và thời điểm đánh lửa.

Cuộn sơ cấp của các bôbin loại này có điện trở rất nhỏ (< 1 Ω) và trên mạch sơ cấp không sử
dụng điện trở phụ vì xung điểu khiển đã được xén sẵn trong ECU. Vì vậy, không được thử
trực tiếp bằng điện áp 12V.

Hình 2.19 Hệ thống đánh lửa trực tiếp sử dụng mỗi bôbin cho từng bougie

Khi đã xác định được thời điểm đánh lửa, ECU động cơ gửi tín hiệu xung IGT đến IC
đánh lửa. Trong khi tín hiệu xung IGT ở mức cao là 5V được chuyển đến để bật IC đánh lửa,
dòng điện sơ cấp chạy vào cuộn dây đánh lửa này. Trong khi tín hiệu xung IGT ở mức thấp
0V, dòng điện sơ cấp và từ thông giảm đột ngột. Trên cuộn thứ cấp của Bobine sẽ sinh ra một
hiệu điện thế vào khoảng từ 15KV à 40KV. Đồng thời, tín hiệu IGF được gửi đến ECU động
cơ để báo lửa đã có để chuẩn bị quá trình ECU điều khiển phun nhiên liệu.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hình 2.12: Sơ đồ điều khiển góc đánh lửa sớm của hệ thống đánh lửa trực tiếp xe Toyota
Ngoài việc điều khiển thời điểm đánh lửa chính xác ECU còn có thể kiểm soát góc ngậm
điện (Dwell angle) của Bobine đánh lửa để động cơ hoạt động tối ưu hơn. Góc ngậm điện là
khoảng thời gian tín hiệu một chu kỳ xung IGT từ ECU truyền xuống ở mức cao 5V để mở
Transistor công suất trong Igniter do đó có dòng chạy qua cuộn sơ cấp.

Góc ngậm điện phụ thuộc vào hiệu điện thế Accu và tốc độ động cơ. Khi khởi động, hiệu
điện thế Accu bị giảm do sụt áp, vì vậy ECU sẽ điều khiển tăng thời gian ngậm điện nhằm
mục đích tăng dòng điện trong cuộn sơ cấp. Ở tốc độ thấp, do thời gian tích lũy năng lượng
quá dài (góc ngậm điện lớn) gây lẵng phí năng lượng nên ECU sẽ điều khiển xén bớt xung
điện áp điều khiển để giảm thời gian ngậm điện nhằm mục đích tiết kiệm năng lượng và tránh
nóng Bobine. Trong trường hợp dòng sơ cấp vẫn tăng cao hơn giá trị ấn định, bộ phận hạn chế
dòng sẽ làm việc và giữ cho dòng điện sơ cấp không thay đổi cho đến thời điểm đánh lửa.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hình 2.13: Bản đồ góc ngậm điện


2.2.2. Điều khiển phun nhiên liệu

Đi tiên phong trong lĩnh vực nghiên cứu phát triển hệ thống phun nhiên liệu điện tử cho
động cơ đốt trong sử dụng trên ô tô là hãng Bosch (Đức) từ những thập niên cuối thế kỷ
trước. Đến năm 1984, người Nhật mua bản quyền của Bosch và ứng dụng hệ thống phun
nhiên liệu điện tử cho các xe của Toyota và chiếc Toyota Yaris 2 SZ- FE cũng được trang bị
bộ điều khiển này. Ngày nay, hầu hết các xe ô tô du lịch trên thế giới sử dụng động cơ đốt
trong đều được trang bị hệ thống phun nhiên liệu điện tử (Electronic Fuel Injection - EFI). Hệ
thống này có khả năng cung cấp cho động cơ một hỗn hợp hòa khí hoàn hảo. Tùy theo chế độ
làm việc của ô tô, EFI thay đổi tỷ lệ khí - nhiên liệu để luôn cung cấp cho động cơ một hỗn
hợp khí tối ưu.

Cấu tạo chung của hệ thống phun xăng điện tử bao gồm các cảm biến, bộ vi xử lý trung
tâm và các cơ cấu chấp hành.

Ưu điểm của hệ thống phun nhiên liệu điện tử:

- Cung cấp hỗn hợp không khí - nhiên liệu đến từng xylanh đồng đều.
- Điều khiển được tỷ lệ không khí - nhiên liệu dễ dàng, chính xác với tất cả các dãy tốc độ
làm việc của động cơ.
- Đáp ứng nhanh chóng, chính xác với sự thay đổi góc mở bướm ga.
- Hiệu suất nạp hỗn hợp không khí - nhiên liệu cao.
- Hỗn hợp không khí - nhiên liệu trước khi cháy được phun tơi hơn, dẫn đến quá trình cháy
được hoàn thiện làm tiết kiệm nhiên liệu và giảm ô nhiễm môi trường đáng kể.

Có nhiều loại hệ thống phun xăng điện tử tùy thuộc vào quan điểm của các nhà chế tạo và
mức độ hoàn hảo, kết cấu của hệ thống. Trên ô tô du lịch hiện nay thường sử dụng một số loại
hệ thống phun xăng điện tử chính là:
- Hệ thống phun xăng điều khiển theo lưu lượng không khí (L - EFI): loại này lấy thông tin
chính để điều khiển vòi phun qua lưu lượng đường ống nạp.
- Hệ thống phun xăng điều khiển theo áp suất không khí (D - EFI): loại này lấy thông tin
chính để điều khiển vòi phun qua áp suất đường ống nạp.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

- Hệ thống phun xăng điện tử một vòi phun: Hay còn được gọi là hệ thống phun đơn điểm
hoặc hệ thống phun tập trung (Mono Injection). Trong hệ thống phun xăng kiểu này người
ta dùng một vòi phun để phun xăng vào họng ống khuếch tán ở phía trên bướm ga của
đường ống nạp chung cho tất cả các xylanh động cơ. Hệ thống này được sử dụng khá phổ
biến trên các động cơ công suất nhỏ do đơn giản và giá thành không cao.
- Hệ thống phun xăng điện tử nhiều vòi phun: sử dụng nhiều vòi phun hay còn được gọi là
hệ thống phun đa điểm (MultiPoint Injection). Hệ thống này phun vào họng xupap nạp của
từng xylanh hoặc trực tiếp vào từng xylanh động cơ. Đồng thời hệ thống còn phun nhiên
liệu làm nhiều lần giúp cho quá trình cháy được hoàn hảo và tránh được hiện tượng ngưng
đọng hơi xăng trong đường ống nạp. Chính vì thế mà hệ thống được áp dụng cho phần lớn
các ô tô hiện nay.
Điểm khác nhau căn bản giữa hệ thống cung cấp nhiên liệu thông thường với hệ thống
phun xăng điện tử ở chỗ: Với hệ thống cung cấp nhiên liệu thông thường, chế độ làm việc của
động cơ phụ thuộc hoàn toàn vào bàn đạp chân ga, hỗn hợp nhiên liệu và không khí được hòa
trộn trong xylanh nhờ sự tụt áp. Trong khi đó, với hệ thống phun xăng điện tử, chế độ làm
việc của động cơ phụ thuộc vào các tín hiệu từ các cảm biến gửi đến ECU như:

- Tín hiệu nhiệt độ nước làm mát (THW).


- Tín hiệu nhiệt độ khí nạp (THA).
- Tín hiệu số vòng quay động cơ (NE).
- Tín hiệu vị trí bướm ga (VTA).
- Tín hiệu tốc độ xe (cảm biến tốc độ xe được lắp bên trong hộp số, phát hiện tốc độ xe và
được đưa vào cực SP1 của ECU động cơ).
- Tín hiệu công tắc khởi động trung gian (phát hiện vị trí cần số ở trung gian, đỗ hay không
và được đưa vào cực NSW của ECU động cơ).
- Tín hiệu công tắc A/C (điện áp hoạt động của ly hợp từ điều hòa được phát hiện và đưa
vào cực A/C của ECU động cơ).
- Tín hiệu Accu (điện áp thường trực được cấp đến cực BATT của ECU, khi khóa điện được
bật điện áp hoạt động của ECU được cấp đến chân +B qua Relay EFI).
- Tín hiệu lượng khí nạp (MAP).
- Tín hiệu máy khởi động (để xác định động cơ có đang khởi động hay không, điện áp cấp
đến máy khởi động và tín hiệu cấp đến chân STA của ECU động cơ).
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

- Tín hiệu phản hồi đánh lửa IGF (sau khi tín hiệu IGT từ ECU động cơ gửi đến Igniter sẽ
phản hồi rằng Bobine đã đánh lửa bằng tín hiệu xung IGF về lại ECU động cơ).

Sau khi nhận tín hiệu phản hồi từ các cảm biến, ECU điều khiển nhịp mass các chân
về từ kim phun là chân #10, #20, #30 và #40 bằng 4 con Transistor để điều khiển cho 4 kim
phun của 4 máy. Do đó khi Relay EFI đóng dòng điện chạy qua các cuộn dây trong Solenoid
của kim phun về mass làm Solenoid mở và nhiên liệu được phun vào buồn hòa trộn. Bằng
cách kích mở Transistor để mở kim phun, ECU có thể điều khiển được thời gian phun tối ưu
cho động cơ.

2.3. Ứng dụng vi điều khiển trong điều khiển động cơ

2.3.1. Phương pháp điều xung PWM

Phương pháp điều xung PWM (Pulse Width Modulation) là phương pháp điều chỉnh điện áp
ra tải, hay nói cách khác, là phương pháp điều chế dựa trên sự thay đổi độ rộng của chuỗi
xung vuông, dẫn đến sự thay đổi điện áp ra.

Các PWM khi biến đổi thì có cùng 1 tần số và khác nhau về độ rộng của sườn dương hay
sườn âm.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hình 2.21: Đồ thị dạng xung điều chế PWM


 Ứng dụng của PWM trong điều khiển

PWM được ứng dụng nhiều trong điều khiển. Điển hình nhất mà chúng ta thường hay gặp là
điều khiển động cơ và các bộ xung áp, điều áp... Sử dụng PWM điều khiển độ nhanh chậm
của động cơ hay cao hơn nữa, nó còn được dùng để điều khiển sự ổn định tốc độ động cơ.

Ngoài lĩnh vực điều khiển hay ổn định tải thì PWM còn tham gia và điều chế các mạch nguồn
như : boot, buck, nghịch lưu 1 pha và 3 pha...

PWM còn gặp nhiều trong thực tế ở các mạch điện điều khiển. Điều đặc biệt là PWM chuyên
dùng để điều khiển các phần tử điện tử công suất có đường đặc tính là tuyến tính khi có sẵn 1
nguồn 1 chiều cố định .Như vậy PWM được ứng dụng rất nhiều trong các thiết bị điện- điện
tử. PWM cũng chính là nhân tố mà các đội Robocon sử dụng để điều khiển động cơ hay ổn
định tốc độ động cơ.

 Nguyên lý hoạt động của PWM


GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Đây là phương pháp được thực hiện theo nguyên tắc đóng ngắt nguồn của tải một cách có
chu kì theo luật điều chỉnh thời gian đóng cắt. Phần tử thực hiện nhiện vụ đó trong mạch các
van bán dẫn.

Hình 2.2: Sơ đồ xung của van điều khiển và đầu ra

Nguyên lý : Trong khoảng thời gian 0 - t0, ta cho van G mở, toàn bộ điện áp nguồn Ud được
đưa ra tải. Còn trong khoảng thời gian t0 - T, cho van G khóa, cắt nguồn cung cấp cho tải. Vì
vậy với t0 thay đổi từ 0 cho đến T, ta sẽ cung cấp toàn bộ , một phần hay khóa hoàn toàn điện
áp cung cấp cho tải.

 Công thức tính giá trị trung bình của điện áp ra tải :

Gọi t1 là thời gian xung ở sườn dương (khóa mở ) còn T là thời gian của cả sườn âm và
dương, Umax là điện áp nguồn cung cấp cho tải. Ta có:

Ud = Umax.( t1/T) (V)

hay Ud = Umax.D (Với D = t1/T là hệ số điều chỉnh và được tính bằng % tức là
PWM)

Như vậy ta nhìn trên hình đồ thị dạng điều chế xung thì ta có : Điện áp trung bình trên tải sẽ
là :
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Ud = 12.20% = 2.4V ( với D = 20%)


Ud = 12.40% = 4.8V (Vói D = 40%)
Ud = 12.90% = 10.8V (Với D = 90%)
 Các cách để tạo ra được PWM để điều khiển

Để tạo được ra PWM thì hiện nay có hai cách thông dụng : Bằng phần cứng và bằng phần
mềm.

Trong phần cứng có thể tạo bằng phương pháp so sánh hay là từ trực tiếp từ các IC dao động
tạo xung vuông như : 555, LM556...

Trong phần mền được tạo bằng các chip có thể lập trình được. Tạo bằng phần mền thì độ
chính xác cao hơn là tạo bằng phần cứng. Nên người ta hay sử dụng phần mền để tạo PWM.

Ở đây ta tham khảo 2 cách điều chế PWM phổ biến: bằng phương pháp so sánh và tạo xung
vuông bằng phần mềm.

 PWM trong điều khiển động cơ và trong các bộ biến đổi xung áp

Trong động cơ : Điều mà chúng ta dễ nhận thấy rằng là PWM rất hay được sử dụng trong
động cơ để điều khiển động cơ hoạt động nhanh , chậm, thuận ,nghịch và ổn định tốc độ cho
nó. Cái này được ứng dụng nhiều trong điều khiển động cơ 1 chiều.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hình 2.2: Sơ đồ nguyên lý của mạch điều khiển động cơ DC

Đây là mạch đơn giản điều khiển động cơ. Nếu muốn điều khiển động cơ quay thuận quay
ngược thì phải dùng đến cầu H.

Trong các bộ biến đổi xung áp: Trong các bộ biến đổi xung áp thì PWM đặc biệt quan trọng
trong việc điều chỉnh dòng điện và điện áp ra tải. Bộ biến đổi xung áp có nhiều loại như là
biến đổi xung áp nối tiếp và bộ biến đổi xung áp song song.

Lấy ví dụ 1 mạch nguyên lý đơn giản trong bộ nguồn Boot đơn giản.
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hình 2.2: Sơ đồ mạch nguyên lý của bộ nguồn Boot đơn giản

Đây là nguyên lý của mạch nguồn Boot. Dùng xung điều khiển để tạo tích lũy năng lượng từ
trường , từ đó tạo điện áp ra tải lớn hơn điện áp vào.

Ngoài ra, PWM còn được sử dụng trong các bộ chuyển đổi DC -AC , hay trong biến tần,
nghịch lưu.

2.3.2. IC MCP 4921


Để hỗ trợ chức năng DAC thì phải ghép nối thêm IC phụ có chức năng DAC. DAC là
chức năng ngược của ADC tức là biến đổi tín hiệu từ dạng số sang tương tự, nó nhận vào một
chuỗi số nhị phân và xuất sang tín hiệu điện áp tương tự.

Có nhiều loại IC có chức năng DAC và MCP4921 cũng nằm trong số đó. IC MCP4921 có độ
phân giải 12 bit, hoạt động trong dải điện áp từ 2,7 – 5V, sử dụng giao tiếp SPI với vi điều
khiển. IC MCP4921 có chân điện áp tham chiếu ngoài, một ngõ ra điện áp tương tự, có bộ
khuếch đại hai lần điện áp ngõ ra, thời gian xác lập ngõ ra là 4,5us, dòng tiêu thụ la 175uA, có
cấu trúc 2 hàng chân với mỗi bên 4 chân và hoạt động trong dải nhiệt độ -400C – 1250C

Sơ đồ chân
GVHD: LÊ KHÁNH TÂN

---------------------------------------------------------------------------------------------------------------

Hình 2.2: Sơ đồ chân IC MCP4921


Chân 1: VDD: cấp nguồn dương

Chân 2: CS: Chip Select

Chân 3: SCK: Clock

Chân 4: SDI: Serial Data In

Chân 5: LDAC: chốt ngõ vào.

Chân 6: VREFA: điện áp tham chiếu

Chân 7: AVSS: nguồn 0V

Chân 8: VOUTA: ngõ ra analog

2.3.3 Giao tiếp Arduino với MCP4921


Sơ đồ kết nối.

Hình 2.2: Sơ đồ kết nối Arduino với IC MCP4921

Giải thích kí hiệu các chân trong sơ đồ:

- 5V và GND là 2 chân cấp nguồn cho 2 MCP4921


- A0 là chân thu thập tín hiệu điều khiển VPA
- A1 là chân thu thập tín hiệu điều khiển VPA2
- Chân 13 tạo tín hiệu định thời dữ liệu cho MCP4921
- Chân 11 truyền dữ liệu từ Arduino tới MCP4921
- Chân 9,10 tạo ra tín hiệu thu phát dữ liệu tới MCP4921
- Chân SCK nhận tín hiệu định thời dữ liệu trên Arduino
- Chân SDI nhận sữ liệu truyền tới từ Arduino
- Chân CS nhận tín hiệu báo sự bắt đầu và kết thúc một lần thu phát dữ liệu qua SPI
- Chân LDAC là chân nối với GND trên Arduino
- Chân VREFA là chân nhận nguồn 5V cung cấp cho MCP4921
- Chân VOUTA đưa tín hiệu đi điều khiển VPA và VPA2 thay thế tín hiệu điều khiển
của bàn đạp ga.

Chi tiết nối chân giữa Arduino và MCP4921

- Chân SCK của U1 nối với chân SCK của U2 và nối với chân 13 của Arduino
- Chân CS của U1 nối với chân 10 của Arduino
- Chân CS của U2 nối với chân 9 của Arduino
- Chân SDI của U1 nối với chân SDI của U2 và nối với chân 11 của Arduino
- Chân LDAC của U1 nối với chân LDAC của U2 và nối với chân GND của Arduino
- Chân VREFA của U1 nối với chân VREFA của U2 và nối với chân 5V trên Arduino
- Chân VOUTA của U1 nối với chân A0 trên Arduino
- Chân VOUTA của U2 nối với chân A1 trên Arduino

2.3.4 Giao tiếp SPI giữa Arduino và MCP4921


- Để DAC tạo được điện áp ngõ ra thì phải gửi lệnh cho DAC. Chiều dài của lệnh là
16 bit, trong đó:
+ 4 bit cao là 4 bit cấu hình, dùng để tùy chỉnh các chế độ hoạt động của DAC.
+ 12 bit thấp còn gọi là các số nhị phân cần chuyển đổi sang điện áp tương tự.

Hình : Giản đồ xung mô tả gửi lệnh từ vi điều khiển sang DAC


Để gửi lệnh qua thì phải kéo chân CS xuống mức thấp, sau đó gửi 8 bit cao trước (vì mỗi lần
gửi trong giao tiếp SPI chỉ gửi được 8 bit), sau đó gửi 8 bit thấp rồi kéo chân CS lên mức 1.

Chân LDAC phải kéo xuống mức thấp thì khi đó sẽ xuất hiện giá trị điện áp ra rồi sau đó
kéo chân LDAC lên mức 1 và kết thúc 1 chu kì ghi lệnh cho DAC. Nếu LDAC đã được nối
đất rồi thì không cần quan tâm tới LDAC nữa, khi đo điện áp ngõ ra sẽ được xuất ra luôn.

2.3.5 Thanh ghi lệnh của MCP4921


 8 bit cao:

 8 bit thấp:

Bit 15: : lựa chọn DAC


0: ghi vào DACA
1: ghi vào DACB
Bit 14: BUF: bộ đệm VREF
0: Không đệm
1: Có đệm.
Bit 13: : chọn hệ số khuếch đại.

Bit 12: :
0: ngõ ra là tổng cao
1: ngõ ra là điện áp DAC.
Bit 11:0 dữ liệu DAC.
12 bit dữ liệu này thiết lập giá trị đầu ra. Bao gồm các giá trị từ 0 đến 4095.
CHƯƠNG 3: THIẾT KẾ, LẬP TRÌNH THIẾT BỊ THU THẬP VÀ TRUYỀN DỮ
LIỆU

3.1. Thiết kế phần cứng

3.1.1 Sơ lược về động cơ cần thu thập tín hiệu và điều khiển Toyota Yaris 2SZ - FE

- Động cơ xăng, 4 xylanh thẳng hàng.


- Hệ thống đánh lửa sớm điện tử (Electronic Spark Advance - ESA) sử dụng Bobine đơn.
- Hệ thống phun xăng điện tử (Electronic Fuel Injection - EFI).
- Thu thập tín hiệu từ các cảm biến: nhiệt độ nước làm mát; nhiệt độ khí nạp; vị trí bướm
ga; cảm biến lưu lượng khí nạp; lấy tín hiệu IGT để đo thời gian ngăm điện của Bobine
và tốc độ động cơ; lấy tín hiệu từ một chân #10 hoặc #20 trên mỗi kim phun về ECU
động cơ để đo thời gian mà kim phun nhiên liệu với mỗi chu kỳ của máy.
- Thu thập tín hiệu cảm biến vị trí bàn đạp ga tín hiệu kép loại tuyến tính.
3.1.2 Phương pháp thực hiện
 Sử dụng board Arduino để thu thập dữ liệu từ các hệ thống trên động cơ:

- Tín hiệu analog của cảm biến nhiệt độ khí nạp (THA) được thu thập từ chân tín hiệu trên
cảm biến tại họng gió về ECU thông qua một con điện trở 1,5 KΩ về chân A2 trên board
Arduino.
- Tín hiệu analog của cảm biến nhiệt độ nước làm mát (THW) được thu thập từ chân tín
hiệu trên cảm biến tại khoang động cơ về ECU thông qua một con điện trở 1,5 KΩ về
chân A3 trên board Arduino.
- Tín hiệu analog của cảm biến lưu lượng khí nạp (VG) được thu thập từ chân tín hiệu trên
cảm biến thông qua một con điện trở 1,5 KΩ về chân A4 trên board Arduino.
- Tín hiệu analog của cảm biến vị trí bướm ga (VTA) được thu thập từ chân tín hiệu trên
cảm biến về ECU thông qua một con điện trở 1,5 KΩ về chân A5 trên board Arduino.
- Tín hiệu góc ngậm đánh lửa và tốc độ động cơ được lấy từ chân tín hiệu IGT từ ECU
xuống Bobine thông qua một con điện trở 1,5KΩ về chân digital 2 trên board Arduino.
- Tín hiệu thời gian phun nhiên liệu được lấy từ chân tín hiệu #10 hoặc #20 hoặc #30 hoặc
#40 sau một trong bốn kim phun qua một con điện trở 10KΩ về chân digital 3 trên board
Arduino.
 Sử dụng board Arduino và microchip MCP 4921 để giả tín hiệu cảm biến vị trí bàn
đạp ga điều khiển động cơ:

Hình 3.1: Mạch in thiết kế trên Protues điều khiển và thu thập

- Tín hiệu analog giả tín hiệu cảm biến vị trí bàn đạp ga (VPA) được thu thập từ chân tín
hiệu số 8 trên Microchip MCP 4921 thứ I được đưa vào chân A0 board Arduino.
- Tín hiệu analog giả tín hiệu cảm biến vị trí bàn đạp ga (VPA2) được thu thập từ chân tín
hiệu số 8 trên Microchip MCP 4921 thứ II được đưa vào chân A1 board Arduino.
- Chân số 1 và số 6 của cả hai MCP 4921 nối với nhau và nối với chân 5V board Arduino.
- Chân số 2 MCP 4921 thứ I nối với chân ra số 10 board Arduino để nhận xung điều chỉnh.
- Chân số 2 MCP 4921 thứ II nối với chân ra số 9 board Arduino để nhận xung điều chỉnh.
- Chân số 3 của cả hai MCP 4921 nối với nhau và nối về chân ra 13 board Arduino.
- Chân số 4 của cả hai MCP 4921 nối với nhau và nối với chân ra 11 board Arduino.
- Chân số 5 và 7 của cả hai MCP 4921 nối với nhau và nối về chân GND board Arduino.
- Chân số 8 MCP 4921 thứ I đưa tín hiệu đi điều khiển giả tín hiệu chân VPA của cảm
biến bàn đạp ga trên ECU động cơ.
- Chân số 8 MCP 4921 thứ II đưa tín hiệu đi điều khiển giả tín hiệu chân VPA2 của cảm
biến bàn đạp ga trên ECU động cơ.

- Và một điều quan trọng là chúng ta cần nối chân GND của Arduino với cực âm của Accu
khởi động trên xe để đồng bộ hóa dữ liệu.
Hình 3.2: Mạch thiết kế 3D trên Protues
 Thiết kế mạch OR bảo vệ bàn đạp ga và linh kiện mạch:
- Mỗi mạch OR gồm 2 điốt và 1 điện trở 1k. Mỗi đầu Anot của điốt được nối với tín hiệu
đi điều khiển. Hai đầu Katot của điốt được nối với nhau và nối với một đầu của điện trở
và nối xuống mass. Từ đầu Katot tạo một ngõ ra thực hiện chức năng điều khiển.

Hình : Các chế độ hoạt động của cổng OR.


- Nguyên lí hoạt động của cổng OR:
- Nếu cả hai đầu A và B đều ở mức 1 thì lúc này 2 điốt được phân cực
thuận và dòng điện sẽ đi qua điốt, khi đó tại đầu A và B sẽ ở mức 1(5V).
Dòng điện k đi xuống GND vì điện trở ở đây có trở kháng lớn. Nếu đầu
A ở mức 1 và đầu B ở mức 0 thì D1 được phân cực thuận và D2 được
phân cực nghịch. Khi đó có dòng chạy qua D1 mà không qua D2 nên
A+B vẫn ở mức 1. Còn nêu A ở mức 0 mà B ở mức 1 thì khi đó có dòng
chạy qua D2 mà không qua D1 nên A+B cũng ở mức 1. Trong trường
hợp Avà B cùng ở mức 0 thì đầu ra A+B ở mức 0 bởi vì khi đó 2 điốt
phân cực nghịch không cho dòng chạy qua điốt nên A+B không có dòng
điện.
- Hình c là bảng chân lí giá trị vào ra của cổng OR.
- Hình d là giản đồ xung và giản đồ xung đầu ra của cổng OR.
- Thiết kế mạch cổng OR trên board để điều khiển:

Hình 3.1: Mạch “OR” thiết kế trên mô hình thật


Hình 3.4: Hình vẽ mô phỏng mạch điện tổng thể

Hình 3.5: Thiết kế hộp bộ thu thập và điều khiển động cơ


3.2. Thiết kế phần mềm

3.2.1. Chương trình Arduino

Arduino sau khi thu thập dữ liệu qua các chân trên board Arduino sẽ gửi dữ liệu qua giắc
nối USB type B trên Arduino của một đầu cáp nối đến đầu nối còn lại USB type A trên máy
tính.

Hình 3.1: Cáp kết nối Arduino và máy tính


Máy tính sử dụng Serial để giao tiếp với Arduino thông qua Serial Monitor: máy tính sẽ
mở cổng COM sau đó các nội dung trong output buffer của Arduino sẽ được truyền qua máy
tính và lưu ở input buffer. Máy tính đọc những dòng đó rồi quy ra lệnh (Serial Command),
đồng thời trên Arduino cũng song song tồn tại phương thức ấy.

Hình 3.2: Giao tiếp giữa máy tính và Arduino


- Sơ đồ khối đọc tín hiệu từ 5 chân Analog trong chương trình Arduino:
Hình 3.3: Sơ đồ khối đọc tín hiệu từ các chân tín hiệu
- Sơ đồ khối đọc tín hiệu xung IGT và tín hiệu xung #10 hoặc #20:

Hình 3.4: Sơ đồ khối đọc tín hiệu xung IGT


- Gửi tín hiệu đọc được từ Arduino lên máy tính:

Hình 3.5: Sơ đồ khối Gửi tín hiệu đọc được từ Arduino lên máy tín
 Chương trình lập trình trên Arduino

1- #include "SPI.h" // necessary library


2- byte comdata[2] = {0}, receive = 0;
3- int n = 0, flag = 0, led_analog1 = 0, led_analog2 = 0, analog_read1 = 0,
analog_read2 = 0, digital_read1 = 0, digital_read2 = 0;
4- int del=0; // used for various delays
5- word outputValue1 = 0, outputValue2 = 0; // a word is a 16-bit number
6- byte data = 0; // and a byte is an 8-bit number
7- int THA, THW, VG, VTA;
8- const int pin1 = 3;
9- const int pin0 = 2;
10- unsigned long thoigianmuccao1, biencux1, biencuy1, thoigianmucthap1;
11- unsigned long thoigianmuccao0, biencux0, biencuy0, thoigianmucthap0;
12- unsigned long chuky, tocdo;

13- void setup()


14- { Serial.begin(115200);
//set pin(s) to input and output
15- pinMode(10, OUTPUT);
16- pinMode(9, OUTPUT);
17- SPI.begin(); // wake up the SPI bus.
18- SPI.setBitOrder(MSBFIRST);
19- digitalWrite(10, HIGH);
20- digitalWrite(9, HIGH);
21- pinMode(3, INPUT_PULLUP);
22- pinMode(2, INPUT_PULLUP);
23- attachInterrupt(1, ngat1, FALLING);
24- attachInterrupt(0, ngat0, FALLING);

25- }
26- void ngat1()
27- {
28- detachInterrupt(1);
29- if (digitalRead(pin1) == LOW)
30- {
31- thoigianmuccao1 = micros() - biencuy1;
32- biencux1 = micros();
33- attachInterrupt(1, ngat1, RISING);
34- }
35- else
36- {
37- thoigianmucthap1 = micros() - biencux1;
38- biencuy1 = micros();
39- attachInterrupt(1, ngat1, FALLING);
40- }
41- }

42- void ngat0() {


43- detachInterrupt(0);
44- if (digitalRead(pin0) == LOW)
45- {
46- thoigianmuccao0 = micros() - biencuy0;
47- biencux0 = micros();
48- attachInterrupt(0,ngat0,RISING);
49- }
50- else
51- {
52- thoigianmucthap0 = micros() - biencux0;
53- biencuy0 = micros();
54- attachInterrupt(0,ngat0,FALLING);
55- }
56- chuky = thoigianmuccao0 + thoigianmucthap0;
57- }

58- void loop()


59- {
60- if (Serial.available() > 0)
61- {
62- receive = Serial.read();
63- n++;
64- if (receive == 'a')
65- {
66- flag = 1;
67- n = 0;
68- }
69- if (receive == 'b')
70- {
71- flag = 2;
72- }

73- if ((flag == 1) & (n != 0))


74- {
75- comdata[n - 1] = receive;
76- }
77- led_analog1 = comdata[0];
78- led_analog2 = comdata[1];

79- }
80- outputValue1 = map(led_analog1,0,100,647,2875); // VPA: 0.8V --> 3.54V
81- outputValue2 = map(led_analog1,0,100,1248,3521); // VPA2: 1.2V --> 4.33V
82- digitalWrite(10, LOW);
83- data = highByte(outputValue1);
84- data = 0b00001111 & data;
85- data = 0b00110000 | data;
86- SPI.transfer(data);
87- data = lowByte(outputValue1);
88- SPI.transfer(data);
89- digitalWrite(10, HIGH);

90- digitalWrite(9, LOW);


91- data = highByte(outputValue2);
92- data = 0b00001111 & data;
93- data = 0b00110000 | data;
94- SPI.transfer(data);
95- data = lowByte(outputValue2);
96- SPI.transfer(data);
97- digitalWrite(9, HIGH);

98- tocdo = 1000000 * 60 / chuky;


99- int a0 = analogRead(A0);
100- int a1 = analogRead(A1);
101- THA = analogRead(A2);
102- THW = analogRead(A3);
103- VG = analogRead(A4);
104- VTA = analogRead(A5);
105- Serial.print('a');
106- Serial.print(a0);
107- Serial.print('b');
108- Serial.print(a1);
109- Serial.print("c");
110- Serial.print(THA);
111- Serial.print("d");
112-Serial.print(THW);
113- Serial.print("e");
114- Serial.print(VG);
115- Serial.print("f");
116- Serial.print(VTA);
117- Serial.print("g");
118- Serial.print(thoigianmuccao0);
119- Serial.print("h");
120- Serial.print(thoigianmucthap1);
121- Serial.print("i");
122- Serial.print(tocdo);
123- }
 Giải thích code
 Khai báo biến

#include "SPI.h" // necessary library

byte comdata[2] = {0}, receive = 0;

int n = 0, flag = 0, led_analog1 = 0, led_analog2 = 0, analog_read1 = 0,


analog_read2 = 0, digital_read1 = 0, digital_read2 = 0;

int del=0; // used for various delays

word outputValue1 = 0, outputValue2 = 0; // a word is a 16-bit number

byte data = 0; // and a byte is an 8-bit number

int THA, THW, VG, VTA;

const int pin1 = 3;

const int pin0 = 2;

unsigned long thoigianmuccao1, biencux1, biencuy1, thoigianmucthap1;

unsigned long thoigianmuccao0, biencux0, biencuy0, thoigianmucthap0;

unsigned long chuky, tocdo;

Dòng 1-12: khai báo thư viện sử dụng (SPI), khai báo biến dữ liệu để điều khiển bàn đạp ga,
biến dữ liệu cho chương trình con để ngắt và xử lí xung.
Kiểu dữ liệu Ý nghĩa
Int Kiểu Int là kiểu số nguyên. Kiểu int chiếm 2 byte bộ nhớ.
Có giá trị từ -32,768 đến 32,767 (từ ) (16 bit).
Byte Là một kiểu dữ liệu biểu diễn số nguyên nằm trong khoảng từ 0 đến 255. Mỗi biến
mang kiểu byte chiếm 1 byte bộ nhớ

word Kiểu dữ liệu này là kiểu số nguyên 16 bit không âm (chứa các giá trị từ 0 đến
65535), và nó chiếm 2 byte bộ nhớ.

Unsigned long Là kiểu số nguyên nằm trong khoảng từ 0 đến 4,294,967,295 ( 0 đến . Mỗi biến
mang kiểu dữ liệu này chiếm 4 byte bộ nhớ.

Const int Giống như khai báo kiểu int nhưng giá trị của biến cố định được gán
cho các chân ( như chương trình trên pin1 gán cho chân digital 3).

 Chương trình setup( )


Ở phần này khi chương trình được khởi động, bạn có thể sử dụng nó để khai báo
biến, khai báo thư viện. thiết lập các thông số, khởi tạo chương trình ngắt, đặt chế
độ cho các chân (nhận hay xuất tín hiệu) ,…. Hàm setup() này chỉ chạy một lần
sau khi cấp nguồn hoặc reset mạch.
 Bắt đầu từ dòng 13-25:
Dòng 14: Serial.begin(115200);
Thư viện Serial được dùng trong giao tiếp giữa các board mạch với nhau (hoặc
board mạch với máy tính hoặc với các thiết bị khác). Tất cả các mạch Arduino
đều có ít nhất 1 cổng Serial (hay còn được gọi là UART hoặc USART). Giao tiếp
Serial được thực hiện qua 2 cổng digital 0(RX) VÀ 1(TX) hoặc qua cổng USB tới
máy tính. Vì vậy ở dòng 14 của chương trình chúng ta khởi tạo giao tiếp. Giá trị
baudrate được đặt là 115200. Khi sử dụng bảng Serial monitor trong Arduino IDE
ta chọn giá trị baudrate giống như khi lập trình.
 Dòng 15-16, 21-22:
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(3, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
Hàm pinMode(pin, mode) với pin là chân digital mà mình muốn thiết đặt và mode
là cấu hình một pin quy định hoạt động như là một đầu vào (INPUT) hoặc đầu ra
(OUTPUT). Nó có thể kích hoạt các điện trở nội bộ với chế độ INPUT_PULLUP.
Ngoài ra chế độ INPUT vô hiệu hóa một cách rõ rang điện trở nội bộ.
 Dòng 17: SPI.begin(); kích hoạt giao tiếp SPI.
SPI (Serial Peripheral Bus) là một chuẩn truyền thông nối tiếp tốc độ cao do
hãng Motorola đề xuất. Đây là kiểu truyền thông Master-Slave, trong đó có 1 chip
Master điều phối quá trình tuyền thông và các chip Slaves được điều khiển bởi
Master vì thế truyền thông chỉ xảy ra giữa Master và Slave. SPI là một cách truyền
song công (full duplex) nghĩa là tại cùng một thời điểm quá trình truyền và nhận có
thể xảy ra đồng thời.
 Dòng 18: SPI.setBitOrder(MSBFIRST);
Xác định cách để gửi dữ liệu, MSB hay LSB trước. Thông số này liên quan tới cách
1 byte dữ liệu được truyền đi như thế nào.
 Dòng 19-20: digitalWrite(10, HIGH);
digitalWrite(9, HIGH);

Trong dòng 15-16 thiết đặt pin9 và pin10 ở chế độ OUTPUT bởi pinMode(), do đó
chúng ta sẽ dùng digitalWrite để xuất tín hiệu ở hai pin này. Điện thế tại hai chân này là 5V
(hoặc 3,3V trên mạch 3,3V) nếu được xuất tín hiệu là HIGH, và 0V nếu được xuất tín hiệu là
LOW.

 Dòng 23-24: attachInterrupt(1, ngat1, FALLING);


attachInterrupt(0, ngat0, FALLING);

Ngắt (interrupt) là những lời gọi hàm tự động khi hệ thống sinh ra một sự kiện. Những sự
kiện này được nhà sản xuất vi điều khiển thiết lập bằng phần cứng và được cấu hình trong
phần mềm bằng những tên gọi cố định. Ngắt giúp chương trình gọn nhẹ và xử lý nhanh hơn.
Để khởi tạo chương trình con ngắt ta sử dụng hàm attachInterrupt(interrupt, ISR, mode);,
trong đó:

- interrupt: Số thứ tự của ngắt. Trên Arduino Uno, bạn có 2 ngắt với số thứ tự là 0 và 1.
Ngắt số 0 nối với chân digital số 2 và ngắt số 1 nối với chân digital số 3. Muốn dùng ngắt
bạn phải gắn nút nhấn hoặc cảm biến vào đúng các chân này thì mới sinh ra sự kiện ngắt.
Nếu dùng ngắt số 0 mà gắn nút nhấn ở chân digital 4 thì không chạy được rồi.
- ISR: tên hàm sẽ gọi khi có sự kiện ngắt được sinh ra.

- mode: kiểu kích hoạt ngắt, bao gồm:

- LOW: kích hoạt liên tục khi trạng thái chân digital có mức thấp

- HIGH: kích hoạt liên tục khi trạng thái chân digital có mức cao.

- RISING: kích hoạt khi trạng thái của chân digital chuyển từ mức điện áp thấp sang mức
điện áp cao.

- FALLING: kích hoạt khi trạng thái của chân digital chuyển từ mức điện áp cao sang mức
điện áp thấp.

 Chương trình con xử lí ngắt.


 Dòng 26 - 57 chương trình con của ngat1: void ngat1(){…}
 Dòng 28: hàm detachInterrupt(interrupt) sẽ tắt các ngắt đã được kích hoạt tương ứng
với thông số truyền vào. Ở đây interrupt là số thứ tự ngắt.
 Dòng 29 – 39 chương trình ngắt chạy hàm if … else để xử lý tín hiệu xung từ kim
phun để tách ra được thời gian mà kim phun nhiên liệu vào buồng đốt cho mỗi chu
trình công tác của mỗi máy. Bằng cách xử dụng hàm định thời gian micros()có nhiệm
vụ trả về một số - là thời gian (tính theo micro giây) kể từ lúc chương trình ngắt
ngừng hoạt động (sau hàm dettachInterrupt(1)) và từ việc đọc được giá trị điện áp ở
mức cao và mức thấp Arduino xác định được thời gian kim phun phun nhiên liệu mỗi
chu trình ở mức thấp (LOW) của mỗi chu kỳ xung mà tín hiệu kim phun gửi về board.
Và chương trình xử lý ta lấy ra được thời gian kim phun cho mỗi chu trình là
thoigianmucthap1.
 Từ dòng 42 – 57 chương trình con của ngat0: void ngat0(){…}

Từ cách thức tương tự như chương trình con ở ngat1 ta cũng tính ra được thời gian ngậm
(thoigianmuccao0) từ xung IGT ở chương trình con ngat0 này. Ở phần này ta còn tính ra
được chuky bằng tổng của thoigianmuccao0 và thoigianmucthap0 để phục vụ cho quá trình
tính toán số vòng quay của động cơ bên dưới vòng lặp.
 Chương trình vòng lặp:

Những lệnh trong setup() sẽ được chạy khi chương trình của bạn khởi động. Bạn có thể sử
dụng nó để khai báo giá trị của biến, khai báo thư viện, thiết lập các thông số, …. Sau khi
setup() chạy xong, những lệnh trong loop() được chạy. Chúng sẽ lặp đi lặp lại liên tục cho
tới khi nào bạn ngắt nguồn của board Arduino mới thôi.

Hình : chương trình vòng lặp Arduino

 Chương trình này bắt đầu từ dòng 58 – 123: void loop() {... }
 Dòng 60-78: dữ liệu điều khiển được truyền từ trên Labview xuống Arduino, sử dụng
lập trình mảng.
 Dòng 80-81: outputValue1 = map(led_analog1,0,100,647,2875);
outputValue2 = map(led_analog1,0,100,1248,3521);
Chuyển đổi dữ liệu sang dạng 12 bit (có giá trị từ 0 đến 4095) của IC MCP4921 bằng
cú pháp Map (val, A1, A2, B1, B2);

Trong đó:
Val: giá trị cần chuyển đổi
A1, A2 là giới hạn trên và dưới của thang đo hiện tại
B1, B2 là giới hạn trên và dưới của thang đo cần chuyển tới.
 Dòng 82-89:

( còn điều chỉnh)


 Dòng 90-97:
 Dòng 98 thể hiện công thức tính tocdo của động cơ qua chuky của xung IGT. Vì thời
gian của chuky trong chương trinh ngắt trên là micros và tocdo được tính bằng
vòng/phút do đó ta có công thức tính tocdo = 1000000 * 60 /chuky;.
 Dòng 99 - 104 sử dụng hàm analogRead() để đọc giá trị điện áp của tín hiệu VPA,
VPA2, cảm biến THA, THW, VG, VTA, từ các chân Analog A0, A1, A2, A3, A4.
 Dòng 105 - 122 các tín hiệu được Arduino đọc được sẽ xuất ra cổng Serial bằng hàm
Serial.print(); dưới dạng chuỗi dài nối tiếp xen kẽ các chữ cái: a, a0, b, a1, c , THA, d
, THW, e, VG, f, VTA, g, thoigianmuccao0, h, thoigianmucthap1, i, tocdo. Việc chen
các chữ cái này để phục vụ cho việc tách tín hiệu dễ dàng khi phần mềm LabVIEW
nhận được chuỗi tín hiệu này.

3.2.2. Chương trình trên LabVIEW

3.2.2.1 Giao tiếp RS232


Đặc điểm chuẩn RS232 được nối ra một giắc cắm (gọi là cổng COM). Khi sử dụng nó có
thê sử dụng 2 hay toàn bộ chân pin của cổng này (các chân 4,9,15,37 phục vụ các chức năng
khác). Nếu mục đích chỉ truyền nhận tín hiệu, điều khiển giữa 2 thiết bị thì người ta chỉ sử
dụng hai dây 1 dây truyền nhận và 1 dây nối đất vì vậy khi máy tính sử dụng LabVIEW giao
tiếp RS232 với Arduino chỉ bằng cáp nối 2 đầu USB.

RS232 sử dụng phương thức truyền thông không đối xứng, tức là sử dụng tín hiệu điện
áp chênh lệch giữa một dây dẫn và đất. Các cổng của RS232 có ngưỡng điện áp quy ước là
-15V (volt) tới -3V , và 3V tới 15V (hoặc -5V, +5V, sự khác biệt giữa hai giá trị 3V, và 5V
này được gọi là noise magin - biên độ dao động của nhiễu).

- Tín hiệu có áp lớn +3V được coi có logic 0 hoặc có giá trị cao (H)
- Tín hiệu có áp nhỏ hơn -3V được coi có logic 1 hoặc giá trị thấp (L).
- Điện áp từ -3V tới +3V không có ý nghĩa.
Chính vì từ -3V tới +3V là phạm vi không được định nghĩa, trong trường hợp thay đổi
giá trị logic từ thấp lên cao hoặc từ cao xuống thấp, một tín hiệu phải vượt qua quãng quá độ
trong một thời gian ngắn hợp lý. Điều này dẫn đến việc phải hạn chế về điện dung của các
thiết bị tham gia và của cả đường truyền. Tốc độ truyền dẫn tối đa phụ thuộc vào chiều dài
của dây dẫn. Đa số các hệ thống hiện nay chỉ hỗ trợ với tốc độ 19,2 kBd (chiều dài cho phép
30-50 m).

Các giá trị tốc độ truyền tiêu chuẩn: 50, 75, 110, 750, 300, 600, 1200, 2400, 4800, 9600,
19200, 28800, 38400, …, 56600, 115200 bps.

Các ưu điểm của giao tiếp này:


- Khả năng chống nhiễu của các cổng nối tiếp cao.
- Thiết bị ngoại vi có thể lắp ngay khi máy tính đang được cấp điện.
- Các mạch đơn giản có thể nhận điện áp nguồn nuôi qua cổng nối tiếp.
Cách giao tiếp RS232 sử dụng trên LabVIEW:

Hình 3.6: Sơ đồ khối giao tiếp giữa Arduino và LabVIEW

Hình 3.7: Mô hình khối giao tiếp VISA của LabVIEW


 Chuyển đổi mảng
Là chuyển đổi các mảng giá trị ASCII thành các chuỗi, như giải thích phần tử mảng mong
muốn và tạo ra một chuỗi ra khỏi các ký tự tương ứng.

Hình 3.3: Hình mô tả khối chuyển đổi mảng

 Tách tín hiệu


Sau khi nhận được tín hiệu truyền đến từ giao tiếp RS232, chúng ta sử dụng các khối Match
Pattern để tách riêng biệt từng dữ liệu ra.

Hình 3.8: Mô hình khối tách tín hiệu trong LabVIEW


CHƯƠNG 4: THỰC NGHIỆM VÀ ĐÁNH GIÁ KẾT QUẢ
4.1. Quy trình thực nghiệm

 Nội dung thực nghiệm:

Kết nối các chân để đọc tín hiệu các cảm biến THA, THW, PIM, VTA, FUEL và xung
IGT, xung kim phun #10 hoặc #20 với các chân board Arduino. Dữ liệu được truyền từ
board Arduino lên máy tính SERVER thông qua giao tiếp Serial Monitor. Máy tính sẽ hiển
thị các giá trị cảm biến và xung thông qua phần mềm LabVIEW.

Kết nối các chân của 2 MCP4921 với board Arduino để thực hiện điều khiển bàn đạp ga
điện tử:

 Kết nối các chân của 2 MCP4921 với nhau.

Quy trình thực hiện:

- Bước 1: Xác đính chân tín hiệu từ các cảm biến và kết nối với các chân Arduino để đọc
tín hiệu.
- Bước 2: Kết nối board Arduino với máy tín và khởi động Arduino IDE nạp chương trình
code cho phần cứng.
- Bước 3: Khởi động chương trình LabVIEW trên 2 máy SERVER và CLIENT. Xác định
cổng COM trên chương trình LabVIEW của máy SERVER.
- Bước 4: Xác nhận IP WAN ở Site trung tâm và IP LAN của máy SERVER để đọc được
PORT sau khi NAT PORT. Nhập IP WAN vào máy CLIENT và chân PORT đồng nhất
với IP LAN trên máy SERVER.
- Bước 5: Khởi động động cơ
- Bước 6: Khởi chạy chương trình LabVIEW máy SERVER trước rồi chạy chương trình
trên máy CLIENT sau.
- Bước 7: Kết quả được hiển thị thông qua hai máy tiến hành đọc, kiểm tra tín hiệu và ghi
lại tín hiệu đọc được từ các chế độ hoạt động của xe.

4.2. Kết quả thức nghiệm thu được khi nổ máy xe

 Thử nghiệm 1:
- Xe hoạt động với chế độ không tải (máy lạnh, quạt, đèn không bật).
- Bướm ga đóng hoàn toàn với góc mở 0%.
- Xe nằm trong xưởng động cơ với nhiệt độ môi trường tại xưởng bình thường.

Kết quả đo được thể hiện đầy đủ trên giao diện LabVIEW của 2 máy SERVER và
CLIENT với các tín hiệu đo được ở thử nghiệm 1 như sau:

Hình 4.1: Giao diện chương trình SERVER lúc không tải (VTA 0 %)

Hình 4.2: Giao diện chương trình CLIENT lúc không tải (VTA 0 %)

Các biểu đồ thể hiện đặc tính của các tín hiệu thử nghiệm 1 thu được như sau:
Hình 4.3: Bảng đồ thị kết quả chương trình SERVER lúc không tải (VTA 0 %)

Hình 4.4: Bảng đồ thị kết quả chương trình CLIENT lúc không tải (VTA 0 %)

 Thử nghiệm 2:
- Xe hoạt động với chế độ không tải (máy lạnh, quạt, đèn không bật).
- Bướm ga mở với góc 31%.
- Xe nằm trong xưởng động cơ với nhiệt độ môi trường tại xưởng bình thường.

Kết quả đo được thể hiện đầy đủ trên giao diện LabVIEW của 2 máy SERVER và
CLIENT với các tín hiệu đo được ở thử nghiệm 2 như sau:

Hình 4.5: Giao diện chương trình SERVER lúc có tải (VTA 31 %)

Hình 4.6: Giao diện chương trình CLIENT lúc không tải (VTA 31%)

Các biểu đồ thể hiện đặc tính của các tín hiệu thử nghiệm 2 thu được như sau:
Hình 4.7: Bảng đồ thị kết quả chương trình SERVER lúc không tải (VTA 31 %)

Hình 4.8: Bảng đồ thị kết quả chương trình CLIENT lúc không tải (VTA 31 %)

****** quy trình thực hiện điều khiển bàn đạp ga


CHƯƠNG 5: KẾT LUẬN VÀ ĐỀ NGHỊ

5.1. Kết quả đạt được

Nhờ việc ứng dụng Internet để thu thập dữ liệu đã được nhiều kết quả nổi bật sau:

- Dữ liệu thu thập được từ các cảm biến, tốc độ, thời gian được truyền lên Internet, nên
người dùng ở bất cứ nơi nào có kết nối Internet là xem dữ liệu dễ dàng và chính xác.
- Áp dụng ứng dụng của IoT vào việc thu thập dữ liệu, truyền dữ liệu, điều khiển giữa hai
máy tính.
- Thiết lập mạng riêng ảo VPN để kết nối giữa hai Router.
- Đáp ứng các yêu cầu giao tiếp giữa Arduino và LabVIEW thông qua giao tiếp RS232,
LabVIEW và Internet.
- Thiết kế giao diện LabVIEW dễ nhìn, thông tin rõ ràng, chính xác.
- Thiết kế board mạch Arduino gọn gàng, dễ dàng lắp đặt và kết nối.

5.2. Kết luận

Qua hai tháng nghiên cứu làm đồ án, nhóm đã thiết kế thành công mô hình thu thập dữ
liệu trên động cơ Toyota Camry 5S - FE và giao tiếp với máy tính thông qua Internet. Như
vậy, dữ liệu trên xe sẽ được truyền liên tục lên trên Internet thông qua kết nối mạng di động
3G, 4G, 5G hoặc mạng Wi-Fi diện rộng. Vì vậy, việc ứng dụng IoT để thu thập dữ liệu trên
thiết bị, phương tiện có ý nghĩa đặc biệt quan trọng đối với cuộc cách mạng công nghiệp 4.0
đang bùng nổ nói chung và công nghệ xe tự hành nói riêng. Khi công nghê thông tin đạt đến
đỉnh cao thì Internet sẽ kết nối giữa các phương tiện giao thông, kết nối phương tiện với cơ
sở hạ tầng, thành phố thông minh, nhà thông minh, camera thông minh và vạn vật được kết
nối Internet.

5.3. Hướng phát triển của đề tài

- Thu thập thêm nhiều cảm biến.


- Thu thập dữ liệu không dây các tín hiệu cảm biến.
- Định hướng truyền tín hiệu dùng mạng di động 3G, 4G không cần giải pháp hỗ trợ
đường hầm VPN và NAT PORT.
- Thiết kế được thiết bị chuyên dùng để thu thập dữ liệu và truyền lên Internet.
- Thu thập dữ liệu ổn đinh, nhanh và chính xác hơn nữa.
- Thiết kế ứng dụng điều khiển xe hơi từ xa thông qua Internet.
DANH MỤC TÀI LIỆU THAM KHẢO
[1] Đỗ Văn Dũng, Điện động cơ và điều khiển động cơ, NXB Đại Học Quốc Gia Tp Hồ Chi
Minh, 2013

[2]Nguyễn Tấn Lộc, Giáo Trình Thực Tập Động Cơ Xăng II, Trường Đại Học Sư Phạm Kỹ
Thuật Tp Hồ Chí Minh

[3], Nguyễn Bá Hải, Giáo trình lập trình LabVIEW, Nhà Xuất Bản Đại Học Quốc Gia Thành
Phố Hồ Chí Minh, Năm 2013.

[4], Iotvietnam.com.vn

[5], Arduino.com

[6], Acis.com.vn
PHỤ LỤC A: GIỚI THIỆU VỀ ARDUINO

1. Arduino là gì?

Arduino được biết đến vào năm 2005 như là một dự án dành cho sinh viên trại
Interaction Design Institute Ivrea (Viện thiết kế tương tác Ivrea) tại Ivrea, Italy. Vào thời
điểm đó các sinh viên sử dụng một "BASIC Stamp" (con tem Cơ Bản) có giá khoảng $100,
xem như giá dành cho sinh viên. Massimo Banzi, một trong những người sáng lập, giảng
dạy tại Ivrea. Cái tên "Arduino" đến từ một quán bar tại Ivrea, nơi một vài nhà sáng lập của
dự án này thường xuyên gặp mặt. Bản thân quán bar này có được lấy tên là Arduino, Bá tước
của Ivrea, và là vua của Italy từ năm 1002 đến 1014.

Lý thuyết phần cứng được đóng góp bởi một sinh viên người Colombia tên là Hernando
Barragan. Sau khi nền tảng Wiring hoàn thành, các nhà nghiên cứu đã làm việc với nhau để
giúp nó nhẹ hơn, rẻ hơn, và khả dụng đối với cộng đồng mã nguồn mở. Trường này cuối
cùng bị đóng cửa, vì vậy các nhà nghiên cứu, một trong số đó là David Cuarlielles, đã phổ
biến ý tưởng này.

Arduino là một board mạch vi xử lý, nhằm xây dựng các ứng dụng tương tác với nhau
hoặc với môi trường được thuận lợi hơn. Phần cứng bao gồm một board mạch nguồn mở
được thiết kế trên nền tảng vi xử lý AVR Atmel 8bit, hoặc ARM Atmel 32 - bit. Những
Model hiện tại được trang bị gồm 1 cổng giao tiếp USB, 6 chân đầu vào analog, 14 chân I/O
kỹ thuật số tương thích với nhiều board mở rộng khác nhau.Những nhà thiết kế của Arduino
cố gắng mang đến một phương thức dễ dàng, không tốn kém cho những người yêu thích,
sinh viên và giới chuyên nghiệp để tạo ra những thiết bị có khả năng tương tác với môi
trường thông qua các cảm biến và các cơ cấu chấp hành. Những ví dụ phổ biến cho những
người yêu thích mới bắt đầu bao gồm các robot đơn giản, điều khiển nhiệt độ và phát hiện
chuyển động. Đi cùng với nó là một môi trường phát triển tích hợp (IDE) chạy trên các máy
tính cá nhân thông thường và cho phép người dùng viết các chương trình cho Aduino bằng
ngôn ngữ C hoặc C++.
2. Tại sao chọn Arduino?

Hiện tại ở Việt Nam và trên thế giới có rất nhiều bo mạch vi điều khiển khác nhau. Tuy
nhiên Arduino có rất nhiều ưu điểm để khiến nó trở nên rất phổ biến trên thế giới. Các ưu
điểm nổi trội như: chi phí đầu tư cho mỗi board thấp; khả năng thích ứng với nhiều hệ điều
hành; chương trình đơn giản; rất dễ sử dụng; sử dụng mã nguồn mở; có thể thực hiện nhiều
nhiệm vụ lấy tín hiệu từ các cảm biến hoặc xung điều khiển đèn, động cơ, và nhiều đối
tượng; có thể kết hợp với nhiều module khác (đọc thẻ từ, athernet shield, Sim900A,…).

3. Tổng quan về Arduino Uno R3

3.1. Phần cứng của Arduino Uno R3

Nhắc tới dòng mạch Arduino dùng để lập trình, cái đầu tiên mà người ta thường nói tới
chính là dòng Arduino UNO. Hiện dòng mạch này đã phát triển tới thế hệ thứ 3 (R3).

Hình 1: Arduino Uno R3.

 Cổng USB:

Dùng để kết nối board Arduino với máy tính bằng cáp USB hoặc có thể sử dụng nguồn
5V từ USB máy tính truyền đến.

 Cổng nguồn ngoài:


Cấp nguồn ngoài với điện áp khuyên dùng là 7 - 12V DC và giới hạn là 6 - 20V. Thường
thì cấp nguồn bằng pin vuông 9V là hợp lý nhất nếu bạn không có sẵn nguồn từ cổng USB.
Nếu cấp nguồn vượt quá ngưỡng giới hạn trên có thể sẽ làm hỏng Arduino UNO.

 Chân cấp nguồn cho cảm biến:

- GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi bạn dùng các thiết bị
sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với nhau.

- 5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA.

- 3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA.

- Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của
nguồn với chân này và cực âm của nguồn với chân GND.

- IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở chân
này. Và dĩ nhiên nó luôn là 5V. Mặc dù vậy bạn không được lấy nguồn 5V từ chân này để
sử dụng bởi chức năng của nó không phải là cấp nguồn.

- RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc chân
RESET được nối với GND qua 1 điện trở 10KΩ.

 Chân lấy tín hiệu Analog:

Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 →
210 - 1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với chân AREF trên board, bạn có thể
để đưa vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu bạn cấp điện áp 2.5V
vào chân này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V
với độ phân giải vẫn là 10bit. Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ
trợ giao tiếp I2C/TWI với các thiết bị khác.

 IC Atmega 328:
- IC Atmega 328 là phần quan trọng nhất của board Arduino UNO, IC này giống như một
bộ não dùng để thu thập dữ liệu và xử lý chúng để truyền đi. Một sô thông tin cơ bản của
IC này:

- 32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong bộ nhớ Flash
của vi điều khiển. Thường thì sẽ có khoảng vài KB trong số này sẽ được dùng cho
bootloader nhưng đừng lo, bạn hiếm khi nào cần quá 20KB bộ nhớ này đâu.

- 2KB cho SRAM (Static Random Access Memory): giá trị các biến bạn khai báo khi lập
trình sẽ lưu ở đây. Bạn khai báo càng nhiều biến thì càng cần nhiều bộ nhớ RAM. Tuy
vậy, thực sự thì cũng hiếm khi nào bộ nhớ RAM lại trở thành thứ mà bạn phải bận tâm.
Khi mất điện, dữ liệu trên SRAM sẽ bị mất.

- 1KB cho EEPROM (Electrically Eraseble Programmable Read Only Memory): đây
giống như một chiếc ổ cứng mini – nơi bạn có thể đọc và ghi dữ liệu của mình vào đây
mà không phải lo bị mất khi cúp điện giống như dữ liệu trên SRAM.

 Nút Reset: Nút này thường được sử dụng khi muốn chạy lại chương trình hay đôi khi
chương trình bị lỗi chúng ta muốn reset lại chương trình đó.

 ICSP Atmega: ICSP (In - Ciruit Serial Programming) là các chân giao tiếp của chíp
Atmega 16U2. Các chân này thường được sử dụng trong các dự án lớn về Arduino.

 Các chân đọc và xuất tín hiệu Digital:

Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có 2 mức
điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA. Ở mỗi chân đều có các
điện trở pull - up từ được cài đặt ngay trong vi điều khiển ATmega328 (mặc định thì các điện
trở này không được kết nối).

Một số chân digital có các chức năng đặc biệt như sau:
- 2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ
liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết
nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây. Nếu không cần
giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết

- Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ phân giải
8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách
đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ
cố định ở mức 0V và 5V như những chân khác.

- Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các chức năng
thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các
thiết bị khác.

3.2. Phần mềm Arduino IDE

Arduino IDE (Integrated Development Environment) là một trình soạn thảo văn bản,
giúp bạn viết code để nạp vào bo mạch Arduino. Arduino IDE là phần mềm nguồn mở được
viết bằng Java và sẽ làm việc được trên các nền tảng khác nhau: Windows, Mac, và Linux.
IDE cho phép bạn viết mã trong môi trường đặc biệt với sự nhấn mạnh cú pháp và các tính
năng khác sẽ làm cho việc lập trình dễ dàng hơn, và sau đó dễ dàng tải mã của bạn vào thiết
bị với việc đơn giản nháy vào một cái núm.

 Giao diện Arduino IDE


Hình 2: Giao diện Arduino

- Nút kiểm tra lỗi của code: khi hoàn tất việc viết code ta cần dùng nút này để kiểm tra
xem code đã đúng chưa. Khi code bị sai, bên phần vùng thông tin sẽ thông báo cho ta
biết lỗi sai và vị trí lỗi trên mã code.

- Nút nạp code cho board Arduino: dùng để nạp code xuống board khi code đã được kiểm
tra và sửa lỗi hoàn chỉnh.

- Nút hiển thị màn hình giao tiếp với máy tính (Serial Monitor): khi nhấn vào màn hình sẽ
hiển thị phần mà người dùng muốn đưa lên nhằm giao tiếp với các phần mềm khác.

- Vùng lập trình: tại đây người dùng viết code theo ngôn ngữ lập trình mà mình muốn cài
đặt lên board Arduino hoạt động để thu thập tin hiệu hay truyền tín hiệu đi cho các hệ
thống liên quan.

- Vùng thông tin: chức năng chính của vùng này là thông báo các vấn đề của mã code đã
viết về lỗi và các thông tin liên quan khác.
 Sử dụng một số chức năng khác trên thanh Menu của Arduino IDE

- File - Example: thông thường ở các phần mềm cơ bản đều có File nhưng ở phần mềm
Arduino IDE này có thêm phần Example rất hữu ích cho người dùng. Nó đưa ra các ví dụ
mẫu cơ bản nhất để những người mới hay đã lập trình thông thạo cũng có thể sử dụng và
tham khảo để giảm bớt thời gian viết code.

Hình 3: Thư viện Example của Arduino

- Tools - Board: tại đây chúng ta cần chọn board Arduino đúng với board mà mình đang sử
dụng. Phần mềm bên dưới đang sử dụng kiểu board Arduino Uno do đó khi chọn nhầm
board khác thì code sẽ không nạp xuống được.
Hình 4: Chọn đúng board Arduino đang sử dụng

- Tools - PORT: Giống như việc chọn board trên chúng ta cũng phải đồng thời chọn đúng
cổng PORT mà board Arduino kết nối với cổng USB trên máy tính.

4. Lập trình trên Arduino IDE

4.1. Ngôn ngữ lập trình trên Arduino

Bảng A.1: Cấu trúc, giá trị và hàm thủ tục

CẤU TRÚC GIÁ TRỊ HÀM VÀ THỦ TỤC


- stepup() Hằng số Nhập xuất Digital

- soop()  High | Low (digital I/O)

Cấu trúc điều khiển  pinMode()


 INPUT

 if  digitalWrite()
 INPUT_PULLUP

 if…else  digitalRead()
 OUTPUT

 switch/case Nhập xuất Analog


 LED_BULTIN
(Analog I/O)
 for  true | fales
 while Kiểu dữ liệu  analogReference()

 break  void  analogRead()

 continue  boolean  analogWrite()

 char PWM – PPM


 return
Hàm thời gian
 goto  unsigned char
 millis()
Cú pháp  byte
 mcros()
 ; (dấu chấm phẩy)  int
 delay()
 {} (dấu ngoặc  unsigned int
nhọn)  delayMicrosecond
 word
s()
 //(single line
 long
comment) Hàm toán học
 unsigned long
 /**/(muti - line  min()
 float
comment)  max()
 #define  double
 abs()
 #include  array
 map()
Toán tử số học  string (chuỗi ký
 pow()
tự biểu diễn bằng
 = (phép gán)
array)  sqrt()
 + (phép cộng)
Chuyển đổi kiểu dữ  sq()
 - (phép trừ) liệu  isnan()
 * (phép nhân)  char()
 contrain()
 /(phép chia)  byte()
Hàm lượng giác
 % (phép chia lấy  int()  cos()
dư)  word()  sin()

Toán tử so sánh  long()  tan()

 == (so sánh bằng)  float() Sinh số ngẫu nhiên

 != (khác bằng) Phạm vi của biến và  randomSeed()

 > (lớn hơn) phân loại  random(0

 < (bé hơn)  static – biến tĩnh


Nhập xuất nâng cao

 >= (lớn hơn hoặc  const – biến hằng (advanced I/O)

bằng)  volatile  tone()

 <= (bé hơn hoặc Hàm hỗ trợ  noTone()


bằng)
 sizeof()  shiftOut()
Toán tử logic
 shiftln()
 && (và)
 pulseln()
 || (hoặc)
Bít và Bytes
 ! (phủ định)
 lowByte()
 ^ (loại trừ)
 highByte()
Phép toán hợp nhất
 bitRead()
 ++ (cộng thêm
 bitWrite()
một đơn vị)
 bitSet()
 -- (trừ đi một đơn
vị)  bitClear()

 += (phép rút gọn  bit()


của phép cộng) Ngắt (interrupt)
 -= (phép rút gọn  attachInterrupt()
của phép trừ)  detachInterrupt()

 *= (phép rút gọn  interrupts()


của phép nhân)
 noInterrupts()
 /= (phép rút gọn
Giao tiếp
của phép chia)
 Serial
4.2. Chương trình code

1 - int THA, THW, PIM, VTA, FUEL;

2 - const int pin1 = 3;

3 - const int pin0 = 2;

4 - unsigned long thoigianmuccao1, biencux1, biencuy1, thoigianmucthap1;

5 - unsigned long thoigianmuccao0, biencux0, biencuy0, thoigianmucthap0;

6 - unsigned long chuky, tocdo;

7 - void setup()

8-{

9 - Serial.begin(9600);

10 - pinMode(3, INPUT_PULLUP);

11 - pinMode(2, INPUT_PULLUP);

12 - attachInterrupt(1, ngat1, FALLING);

13 - attachInterrupt(0, ngat0, FALLING);

14 - }

15 - void ngat1()

16 - {

17 - detachInterrupt(1);
18 - if (digitalRead(pin1) == LOW)

19 - {

20 - thoigianmuccao1 = micros() - biencuy1;

21 - biencux1 = micros();

22 - attachInterrupt(1, ngat1, RISING);

23 - }

24 - else

25 - {

26 - thoigianmucthap1 = micros() - biencux1;

27 - biencuy1 = micros();

28 - attachInterrupt(1, ngat1, FALLING);

29 - }

30 - }

31 - void ngat0() {

32 - detachInterrupt(0);

33 - if (digitalRead(pin0) == LOW)

34 - {

35 - thoigianmuccao0 = micros() - biencuy0;

36 - biencux0 = micros();

37 - attachInterrupt(0, ngat0, RISING);

38 - }

39 - else

40 - {
41 - thoigianmucthap0 = micros() - biencux0;

42 - biencuy0 = micros();

43 - attachInterrupt(0, ngat0, FALLING);

44 - }

45 - chuky = thoigianmuccao0 + thoigianmucthap0;

46 - }

47 - void loop()

48 - {

49 - tocdo = 1000000 * 60 /chuky;

50 - THA = analogRead(A0);

51 - THW = analogRead(A1);

52 - PIM = analogRead(A2);

53 - VTA = analogRead(A3);

54 - FUEL = analogRead(A4);

55 - Serial.print("a");

56 - Serial.print(THA);

57 - Serial.print("b");

58 - Serial.print(THW);

59 - Serial.print("c");

60 - Serial.print(PIM);

61 - Serial.print("d");

62 - Serial.print(VTA);

63 - Serial.print("e");
64 - Serial.print(FUEL);

65 - Serial.print("f");

66 - Serial.print(thoigianmuccao0);

67 - Serial.print("g");

68 - Serial.print(thoigianmucthap1);

69 - Serial.print("h");

70 - Serial.print(tocdo);

71 - }

4.3. Giải thích chương trình code

 Khai báo biến:

int THA, THW, PIM, VTA, FUEL;

const int pin1 = 3;

const int pin0 = 2;

unsigned long thoigianmuccao1, biencux1, biencuy1, thoigianmucthap1;

unsigned long thoigianmuccao0, biencux0, biencuy0, thoigianmucthap0;

unsigned long chuky, tocdo;

Dòng 1-7 để khai báo biến dữ liệu của các tín hiệu cảm biến và chương trình con ngắt để xử
lý xung:

Bảng A.2: Ý nghĩa các kiểu biến dữ liệu

Kiểu khai báo Ý nghĩa


Kiểu int là kiểu số nguyên chính được dùng trong chương trình
Arduino. Kiểu int chiếm 2 byte bộ nhớ.
Int
Trên mạch Arduino Uno, nó có đoạn giá trị từ -32,768 đến 32,767
(-215 đến 215-1) (16 bit)
Kiểu unsigned long là kiểu số nguyên nằm trong khoảng từ 0 đến
unsigned long 4,294,967,295 (0 đến 232 - 1). Mỗi biến mang kiểu dữ liệu này chiếm 4 byte bộ
nhớ.

Giống như khai báo kiểu int nhưng giá trị của biến cố định được
const int gán cho các chân (như chương trình trên pin1 gán cho chân Digital
3).

 Chương trình setup()

Ở phần này khi chương trình được khởi động, bạn có thể sử dụng nó để khai báo biến,
khai báo thư viện, thiết lập các thông số, khởi tạo chương trình ngắt, đặt chế độ cho các chân
(nhận hay xuất tín hiệu),…. Hàm setup() này chỉ chạy một lần sau khi cấp nguồn hoặc reset
mạch.

Bắt đầu từ dòng 7-14 của chương trình:

Dòng 9: Serial.begin(9600);

Thư viện Serial được dùng trong việc giao tiếp giữa các board mạch với nhau (hoặc
board mạch với máy tính hoặc với các thiết bị khác). Tất cả các mạch Arduino đều có ít nhất
1 cổng Serial (hay còn được gọi là UART hoặc USART). Giao tiếp Serial được thực hiện
qua 2 cổng digital 0 (RX) và 1 (TX) hoặc qua cổng USB tới máy tính. Vì vậy ở dòng 9 của
chương trình chúng ta khởi tạo giao tiếp. Giá trị baudrate được đặt mặc định 9600. Khi sử
dụng bảng Serial monitor trong Arduino IDE ta chọn giá trị baudrate giống như khi lập trình.

Dòng 10, 11: pinMode(3, INPUT_PULLUP); pinMode(2, INPUT_PULLUP);


Hàm pinMode(pin, mode) với pin là chân digital mà mình muốn thiết đặt và mode là cấu
hình 1 pin quy định hoạt động như là một đầu vào (INPUT) hoặc đầu ra (OUTPUT). Nó có
thể kích hoạt các điện trở pullup nội bộ với chế độ INPUT_PULLUP. Ngoài ra, chế độ
INPUT vô hiệu hóa một cách rõ ràng điện trở pullups nội bộ.

Dòng 12, 13: attachInterrupt(1, ngat1, FALLING); attachInterrupt(0, ngat0, FALLING);

Ngắt (interrupt) là những lời gọi hàm tự động khi hệ thống sinh ra một sự kiện. Những
sự kiện này được nhà sản xuất vi điều khiển thiết lập bằng phần cứng và được cấu hình trong
phần mềm bằng những tên gọi cố định. Ngắt giúp chương trình gọn nhẹ và xử lý nhanh hơn.
Để khởi tạo chương trình con ngắt ta sử dụng hàm attachInterrupt(interrupt, ISR, mode);,
trong đó:

- interrupt: Số thứ tự của ngắt. Trên Arduino Uno, bạn có 2 ngắt với số thứ tự là 0 và 1.
Ngắt số 0 nối với chân digital số 2 và ngắt số 1 nối với chân digital số 3. Muốn dùng ngắt
bạn phải gắn nút nhấn hoặc cảm biến vào đúng các chân này thì mới sinh ra sự kiện ngắt.
Nếu dùng ngắt số 0 mà gắn nút nhấn ở chân digital 4 thì không chạy được rồi.

- ISR: tên hàm sẽ gọi khi có sự kiện ngắt được sinh ra.

- mode: kiểu kích hoạt ngắt, bao gồm:

- LOW: kích hoạt liên tục khi trạng thái chân digital có mức thấp

- HIGH: kích hoạt liên tục khi trạng thái chân digital có mức cao.

- RISING: kích hoạt khi trạng thái của chân digital chuyển từ mức điện áp thấp sang mức
điện áp cao.

- FALLING: kích hoạt khi trạng thái của chân digital chuyển từ mức điện áp cao sang mức
điện áp thấp.

 Chương trình con xử lý ngắt


- Dòng 15 - 30 chương trình con của ngat1: void ngat1(){…}
- Dòng 17 hàm detachInterrupt(interrupt) sẽ tắt các ngắt đã được kích hoạt tương ứng với
thông số truyền vào. Ở đây interrupt là số thứ tự ngắt.
- Dòng 18 – 29 chương trình ngắt chạy hàm if … else để xử lý tín hiệu xung từ kim phun
để tách ra được thời gian mà kim phun nhiên liệu vào buồng đốt cho mỗi chu trình công
tác của mỗi máy. Bằng cách xử dụng hàm định thời gian micros()có nhiệm vụ trả về một
số - là thời gian (tính theo micro giây) kể từ lúc chương trình ngắt ngừng hoạt động (sau
hàm dettachInterrupt(1)) và từ việc đọc được giá trị điện áp ở mức cao và mức thấp
Arduino xác định được thời gian kim phun phun nhiên liệu mỗi chu trình ở mức thấp
(LOW) của mỗi chu kỳ xung mà tín hiệu kim phun gửi về board. Và chương trình xử lý ta
lấy ra được thời gian kim phun cho mỗi chu trình là thoigianmucthap1.
- Từ dòng 30 – 46 chương trình con của ngat0: void ngat0(){…}

Từ cách thức tương tự như chương trình con ở ngat1 ta cũng tính ra được thời gian ngậm
(thoigianmuccao0) từ xung IGT ở chương trình con ngat0 này. Ở phần này ta còn tính ra
được chuky bằng tổng của thoigianmuccao0 và thoigianmucthap0 để phục vụ cho quá trình
tính toán số vòng quay của động cơ bên dưới vòng lặp.

 Chương trình vòng lặp

Những lệnh trong setup() sẽ được chạy khi chương trình của bạn khởi động. Bạn có thể
sử dụng nó để khai báo giá trị của biến, khai báo thư viện, thiết lập các thông số, …. Sau khi
setup() chạy xong, những lệnh trong loop() được chạy. Chúng sẽ lặp đi lặp lại liên tục cho
tới khi nào bạn ngắt nguồn của board Arduino mới thôi.

Hình 5: Chương trình vòng lặp Arduino


Chương trình này bắt đầu từ dòng 47 – 71: void loop() {... }

- Dòng 49 thể hiện công thức tính tocdo của động cơ qua chuky của xung IGT. Vì thời gian
của chuky trong chương trinh ngắt trên là micros và tocdo được tính bằng vòng/phút do
đó ta có công thức tính tocdo = 1000000 * 60 /chuky;.
- Dòng 50 - 54 sử dụng hàm analogRead() để đọc giá trị điện áp của các cảm biến THA,
THW, PIM, VTA, FUEL từ các chân Analog A0, A1, A2, A3, A4.
- Dòng 55 - 70 các tín hiệu được Arduino đọc được sẽ xuất ra cổng Serial bằng hàm
Serial.print(); dưới dạng chuỗi dài nối tiếp xen kẽ các chữ cái: a, THA, b, THW, c , PIM,
d , VTA, e , FUEL, f , thoigianmuccao0, g, thoigianmucthap1, h, tocdo. Việc chen các
chữ cái này để phục vụ cho việc tách tín hiệu dễ dàng khi phần mềm LabVIEW nhận
được chuỗi tín hiệu này.
PHỤ LỤC B: GIỚI THIỆU LabVIEW

1. LabVIEW là gì ?

LabVIEW là môi trường ngôn ngữ đồ họa hiệu quả trong việc giao tiếp đa kênh giữa con
người, thuật toán và các thiết bị.

Gọi LabVIEW là ngôn ngữ đồ họa hiệu quả vì cách thức lập trình LabVIEW khác với
các ngôn ngữ C hay (Python, Basic, vv.) ở điểm thay vì sử dụng các từ vựng (từ khóa) cố
định thì LabVIEW sử dụng các khối hình ảnh sinh động và các dây nối để tạo ra các lệnh và
các hàm như trong hình 6. Cũng chính vì sự khác biệt này mà LabVIEW đã giúp cho việc
lập trình trở nên đơn giản hơn bao giờ hết, đặc biệt, LabVIEW rất phù hợp đối với kỹ sư,
nhà khoa học, hay giảng viên. Chính sự đơn giản, dễ học, dễ nhớ đã giúp cho LabVIEW trở
thành một trong những công cụ phổ biến trong các ứng dụng thu thập dữ liệu từ các cảm
biến, phát triển các thuật toán, và điều khiển thiết bị tại các phòng thì nghiệm trên thế giới.

Hình 6: Mã nguồn viết bằng LabVIEW

Về ý nghĩa kỹ thuật, LabVIEW cũng được dùng để lập trình ra các chương trình (source
code: mã nguồn) trên máy tính tương tự các ngôn ngữ lập trình dựa trên chữ (text - based
language) như C, Python, Java, Basic, vv.

Đồng thời, LabVIEW hỗ trợ các kỹ sư, nhà khoa học và sinh viên, vv. Xây dựng (thực
thi) các thuật toán một cách nhanh, gọn, sáng tạo và dễ hiểu nhờ các khối hình ảnh có tính
gợi nhớ và cách thức hoạt động theo kiểu dòng dữ liệu (data flow) lần lượt từ trái qua phải.
Các thuật toán này sau đó được áp dụng lên các mạch điện và cơ cấu chấp hành thực nhờ
vào việc kết nối hệ thống thật với LabVIEW thông qua nhiều chuẩn giao tiếp như chuẩn giao
tiếp RS232 (giao tiếp qua cổng COM), chuẩn USB, chuẩn giao tiếp mạng TCP/IP, UDP,
chuẩn GPIB, vv. Vì vậy LabVIEW là một ngôn ngữ giao tiếp đa kênh.

2. Các ứng dụng của LabVIEW

LabVIEW được sử dụng trong các lĩnh vực đo lường tự động hóa, cơ điện tử, robotics,
vật lý, toán học, sinh học, vật liệu, ô tô, vv. Nhìn chung:

- LabVIEW giúp kỹ sư kết nối bất kỳ cảm biến, và bất kỳ cơ cấu chấp hành nào với máy
tính.
- LabVIEW có thể được sử dụng để xử lý các kiểu dữ liệu như tín hiệu tương tự (analog),
tín hiệu số (digital) hình ảnh (vision), âm thanh (audio), vv.

3. Những khái niệm cơ bản của LabVIEW

3.1. VI -Thiết bị ảo

Lập trình LabVIEW được thực hiện trên cơ sở là các thiết bị ảo (VI). Các đối tượng
trong các thiết bị ảo được sử dụng để mô phỏng các thiết bị thực, nhưng chúng được thêm
vào bởi phần mềm vào bởi phần mềm. Các VI tương tự như các hàm trong lập trình bằng
ngôn ngữ.

3.2 Front Panel và Block Diagram

Một chương trình trong LabVIEW gồm hai phần chính: một là giao diện với người sử
dụng (Front Panel), hai là giao diện dạng sơ đồ khối cung cấp mã nguồn (Block Diagram) và
các biểu tượng kết nối (Icon/Connector).

- Front Panel (Bảng giao diện):

Front Panel là một panel tương tự như panel của thiết bị thực tế. Ví dụ các nút bấm, nút
bật, các đồ thị và các bộ điều khiển. Từ Front Panel người dùng chạy và quan sát kết quả có
thể dùng chuột, bàn phím để đưa dữ liệu vào sau đó cho chương trình chạy và quan sát.
Front Panel thường gồm các bộ điều khiển (Control) và các bộ hiển thị (Indicator).

Control là các đối tượng được đặt trên Front Panel để cung cấp dữ liệu cho chương trình.
Nó tương tự như đầu vào cung cấp dữ liệu.

Indicator là đối tượng được đặt trên Front Panel dùng để hiển thị kết quả, nó tương tự
như bộ phận đầu ra của chương trình.

Hình 7: Front Panel của chương trình LabVIEW

- Block Diagram (Sơ đồ khối):

Block Diagram của một VI là một sơ đồ được xây dựng trong môi trường LabVIEW, nó
có thể gồm nhiều đối tượng và các hàm khác nhau để tạo các cấu trúc lệnh để chương trình
thực hiện. Block Diagram là một mã nguồn đồ họa của một VI. Các đối tượng trên Front
Panel được thể hiện bằng các thiết bị đầu cuối trên Block Diagram, không thể loại bỏ các
thiết bị đầu cuối trên Block Diagram. Các thiết bị đầu cuối chỉ mất đi sau khi loại bỏ đối
tượng tương ứng trên Fron panel.
Cấu trúc của một Block Diagram gồm các thiết bị đầu cuối (Terminal), nút (Node) và các
dây nối (Wire).

Hình 8: Sơ đồ khối của LabVIEW

- Icon & Connector:

Icon (biểu tượng): là biểu tượng của VI, được sử dụng khi từ một VI muốn sử dụng chức
năng của một VI khác. Khi đó nó được gọi là SubVI, nó tương đương như một chương trình
con trong các ngôn ngữ khác.

Connector (đầu nối): là một phần tử của Terminal dùng để nối các đầu vào và đầu ra của
các VI với nhau khi sử dụng. Mỗi VI có một Icon mặc định hiển thị trong bảng Icon ở góc
trên bên phải của sổ Front Panel và Block Diagram.

Khi các VI được phân cấp và module hóa thì ta có thể dùng chúng như các chương trình
con. Do đó để xây dựng một VI ta có thể chia thành nhiều VI thực hiện các chức năng đơn
giản và cuối cùng kết hợp chúng lại với nhau thành một khối để thực thi những công việc cụ
thể trong một chương trình.

3.3. Các kỹ thuật lập trình trên LabVIEW


Khác với những ngôn ngữ lập trình khác, ngôn ngữ lập trình LabVIEW ngoài những
menu quen thuộc giống như những ngôn ngữ khác. LabVIEW còn sử dụng các bảng: Tools
Palette, Controls Palette, chính những bảng này làm cho LabVIEW khác với các ngôn ngữ
sử dụng những câu lệnh rườm rà khó nhớ. Các bảng đó cung cấp các chức năng để người sử
dụng có thể tạo và thay đổi trên Front Pannel và Block Diagram bằng các biểu tượng, các
hình ảnh trực quan giúp cho việc sử dụng trở nên dễ dàng, linh động hơn.

 Tools Palette (Bảng công cụ tiện ích):

Tools Palette xuất hiện trên cả Front Panel và Block Diagram. Bảng này cho phép người
sử dụng có thể xác lập các chế độ làm việc đặc biệt của trỏ chuột. Khi lựa chọn một công cụ,
biểu tượng của con trỏ sẽ được thay đổi theo biểu tượng của công cụ đó. Nếu thiết lập tự
động lựa chọn công cụ và người sử dụng di chuyển con trỏ qua các đối tượng trên Front
Panel hoặc Block Diagram, LabVIEW sẽ tự động lựa chọn công cụ phù hợp trên bảng Tools
Palette.

Để mở bảng công cụ tiện ích ta vào: VIEW, sau đó chọn Tools Palette (LabVIEW 2015).

Hình 9: Bảng công cụ tiện ích Tools Palette

Bảng điều khiển chỉ duy nhất xuất hiện trên Front Panel. Bảng điều khiển chứa các bộ
điều khiển (Control) và các bộ hiển thị (Indicator).

Bảng điều khiển đầy đủ được minh họa như hình bên. Để mở bảng Controls Palette ta
vào VIEW, chọn Controls Palette (LabVIEW 2015)
Hình 10: Bảng điều khiển - Controls Palette

Bảng điều khiển được sử dụng để người sử dụng thiết kế cấu trúc mặt hiển thị gồm các
thiết bị ví dụ: các công tắc, các loại đèn, các loại màn hình hiển thị... Với bảng điều khiển
này, người sử dụng có thể chọn các bộ thiết bị chuẩn do hãng sản xuất cung cấp ví dụ công
tắc nhưng cũng có thể chọn các bộ thiết bị do người sử dụng tự xây dựng. Bảng điều khiển
dùng để cung cấp dữ liệu đầu vào và hiển thị kết quả đầu ra.

Trên bảng Controls Palette thể hiện khá phong phú các bộ điều khiển khác nhau như trên
hình. Ta có thể sử dụng tất cả các thành phần của bảng Controls Palette, ở hình trên mục
Modern đang được mở , ngoài ra còn những mục điều khiển khác như Sliver, System,
Clacssic, Express... Sau đây ta xem qua một số công cụ điều khiển thông dụng của
LabVIEW.

- Numeric controls/Indicators:

Bộ công cụ này dùng để hiển thị và điều khiển dữ liệu dạng số trong chương trình
LabVIEW.
Hình 11: Thư viện Numeric

- Boolean controls/Indicators:

Bộ công cụ này cung cấp hai giá trị là True và False. Khi thực hiện chương trình người
dùng sử dụng chuột để điều khiển giá trị của thiết bị. Việc thay đổi giá trị của các thiết bị chỉ
có tác dụng khi các thiết bị đó được xác lập ở chế độ là các Control. Còn nếu ở chế độ là các
Indicator thì giá trị không thay đổi vì chúng chỉ là các thiết bị hiển thị.

Hình 12: Thư viện Boolean


- Graph Controls/Indicators:

Bộ công cụ này dùng để hiển thị các tín hiệu dạng sóng, hiển thị giá trị của tín hiệu bằng
đồ thị và hiển thi mối quan hệ của tín hiệu.

Hình 13: Các dạng đồ thị, biểu đồ

4. Functions Palette (Bảng các hàm chức năng)

Bảng Functions Palette chỉ xuất hiện trên Block Diagram. Bảng này chứa các VI và các
hàm mà người dùng thiết kế để tạo dựng nên các khối lưu đồ. Với bảng Functions Palette,
người lập trình thực hiện các lệnh khác nhau bằng các lưu đồ như: các phép tính số học, các
biểu thức toán học, các vòng lặp, phép lựa chọn thông qua các nhóm hàm, chức năng đã
được cung cấp bên cạnh đó bảng này có thể tạo ra và sử dụng lại các hàm, chức năng mà
người dùng tự xây dựng. Các hàm toán học được minh họa thông qua các biểu tượng. Khi
muốn lựa chọn thực hiện một hàm nào đó thì người dùng chọn biểu tượng thể hiện cho hàm
đó và có thể kéo thả ở bất kỳ vị trí nào trên Block Diagram sau đó xác định những đầu vào
và đầu ra cần thiết.

4.1. Programming (Các khối hàm cơ bản).

Một số khối hàm cơ bản điển hình như hàm cấu trúc (Structures), mảng (Array), chuỗi
(String), hàm tính toán (Numeric), hàm thời gian (Timing).
Hình 14: Thư viện các khối hàm cơ bản

 Hàm cấu trúc (Structures):

Bao gồm For, While, cấu trúc Case, Sequence, các biến toàn cục và cục bộ.

Hình 15: Thư viện hàm cấu trúc

Hàm While Loop cho phép chạy lặp lại chương trình cho đến khi một điều kiện cụ thể
xảy ra thì sẽ dừng. Hàm While Loop luôn luôn chạy ít nhất một lần.
Để chương trình có thể thực hiện và cập nhật giá trị liên tục, và chỉ dừng khi ta muốn,
chúng ta sẽ dùng vòng lặp While Loop này.

Nút Stop được tạo để điều khiển dừng vòng lặp.

Hình 16: Vòng lặp While Loop

 Array (Mảng dữ liệu):

Mảng dữ liệu là khái niệm chỉ tập hợp hữu hạn được đánh số các giá trị có cùng kiểu dữ
liệu. Ví dụ: mảng số thực, mảng số nguyên, mảng ký tự, mảng đa chiều, mảng đối tượng...
Mảng có một tính chất quan trọng khác là ta có thể sử dụng nó như một bộ đếm chứa dữ
liệu.

Hình 17: Thư viện Array

Trong thư viện Array này có chứa các hàm:


- Index Array: Tìm phần tử trong mảng theo chỉ số (Index)

- Built Array: Tạo mảng, nối các phần tử đầu vào thành mảng

 String (Chuỗi):

Hàm String sử dụng để nối hai hay nhiều chuỗi, tách chuỗi, chuyển dữ liệu thành chuỗi
và định dạng một chuỗi thành định dạng ký tự hoặc bảng tính.

Trong thư viện String này có chứa các hàm:

- Match pattern: Tách chuỗi dựa vào ký tự nhận dạng.

- Decimal String To Number: chuyển đổi chuỗi số trong chuỗi, chuyển dạng chuỗi số thành
dạng số thập phân, kết quả trả về là kiểu số nguyên để tính toán và hiển thị kết quả.

- String to byte array function: Chức năng chuyển các dữ liệu dạng chuỗi thành mảng.
 Numeric (Hàm tính toán):

Gồm các hàm dùng để tính toán, xử lý dữ liệu, đường dẫn truy xuất

Hình 18: Thư viện Numeric

- Quotient and remainder: dùng để chia lấy dư, và có thể tách kết quả thành 2 byte để xử
lý kết quả.

 Timing (Hàm thời gian):

Xác định dòng thời gian, đo khoảng thời gian đo hoặc trì hoãn một tiến trình một khoảng
thời gian xác định.

Hình 19: Thư viện hàm thời gian


- Wait Until Next Ms Mutiple: Dùng để trì hoãn một tiến trình trong một khoảng thời gian,
đồng thời tiết kiệm tài nguyên cho máy tính.

- Get Date/Time Seconds: trả về mốc thời gian hiện tại

- Get Date/Time String: chuyển đổi mốc thời gian thành chuỗi để hiện thị.

4.2. Instrument I/O (Công cụ giao tiếp)

Công cụ giao tiếp này cho phép giao tiếp với GPIB, Serial, module và những loại công
cụ khác.

Hình 20: Thư viện công cụ giao tiếp

 Serial: Giao tiếp những thiết bị được kết nổi ở cổng giao tiếp (Serial PORT).
Hình 21: Thư viện công cụ Serial

- VISA Configure Serial PORT: Thiết lập các thông số của chuẩn giao tiếp.

Trong đó:

VISA resource name: chọn thông số cổng COM

Baud rate (9600): tốc độ đường truyền, mặc định là 9600.

Data bits (8): số bit dữ liệu vào, giá trị bit dữ liệu khoảng 5 đến 8 và mặc định là 8.

Parity: xác định số bit chẵn lẻ cho mỗi quá trình truyền hay nhận, mặc định là 0.

Error in (no error): thông báo lỗi trước khi chức năng này chạy.

Flow control (0: none): thiết lập kiểu điều khiển.

Output 1(VISA resource name out): đầu ra của VISA resource name.

Output 2 (Error out): chứa thông tin bị lỗi.


- Property Node: Trả về số lượng bye dữ liệu đọc được.

- VISA Read: Đọc byte dữ liệu từ thiết bị giao tiếp truyền vào, và trả về dữ liệu được chứa
trong bộ nhớ đệm (read buffer)

Trong đó:

VISA resourse name: chọn thông số cổng COM.

Read buffer: chứa dữ liệu được truyền vào.

Byte count: số byte dữ liệu được đọc.

- VISA Write: Truyền dữ liệu bộ nhớ đệm (write buffer) đến thiết bị giao tiếp nối tiếp.

Trong đó:

VISA resourse name: chọn thông số cổng COM.

Write buffer: chứa byte dữ liệu được thiết lập từ thiết bị.

Return count: trả về số lượng byte dữ liệu được thiết lập.

- VISA Close: Kết thúc chương trình.

4.3. Data communication (Giao tiếp dữ liệu)


Dùng phương thức giao tiếp TCP/IP Protocols trong Data Communication để giao tiếp,
trao đổi dữ liệu giữa các thiết bị.

Hình 22: Công sụ giao tiếp TCP

- TCP Protocols (Giao tiếp TCP):

Hình 23: Thư viện TCP

- TCP Open Function: mở một giao thức giao tiếp với địa chỉ và cổng PORT từ xa hoặc
tên miền.

Trong đó:
Address:địa chỉ thiết lập để giao tiếp, địa chỉ này là địa chỉ IPv4 của máy chủ.

Remote PORT or service name: là cổng PORT hoặc tên miền để thiết lập giao tiếp.

Timeout ms: thời gian trễ, để chờ kết nối và trả về lỗi nếu hết thời gian trễ.

Error in: thông báo lỗi xảy ra trước khi chạy chương trình.

Connection ID: kết nối ID.

Error out: chứa thông tin lỗi.

- TCP Listen Function: Tạo một bộ nghe cho máy chủ và chờ kết nối mạng giao tiếp tại
cổng PORT cụ thể.

Service name: thiết lập tên miền

PORT: cổng PORT để kết nối

Remote address: địa chỉ của máy tính từ xa

Remote PORT: cổng PORT kết nối từ xa

- TCP Write Function: Truyền byte dữ liệu đến mạng giao tiếp TCP.

Data in: dữ liệu được truyền đi

Connection ID out: trả về cùng giá trị với connection ID

Bytes written: số lượng byte dữ liệu được truyền đi


- TCP Read Function: Đọc số lượng byte dữ liệu từ mạng giao tiếp TCP, trả về kết quả ở
data out

Mode (standard): chế độ đọc byte dữ liệu

Bytes to read: số byte dữ liệu để đọc

Data out: chứa byte dữ liệu đọc được từ mạng giao tiếp TCP

- TCP Close Function: Kết thúc một chương trình giao tiếp TCP.

5. Chương trình thu thập xử lý tín hiệu các cảm biến và đồ thị mô phỏng

Bao gồm 2 chương trình: SERVER và CLIENT

Chương trình SERVER: chọn cổng COM để giao tiếp nối tiếp với Arguino và thu thập
giá trị tín hiệu cảm biến, thời gian phun, thời gian ngậm bằng phần mềm Arduino. Sau đó
được xử lý, tính toán hiển thị trực tiếp bằng phần mềm LabVIEW thông qua giao diện
LabVIEW. Dữ liệu sau đó được truyền lên mạng Internet thông qua kết nối các Router.

Chương trình CLIENT: kết nối với Router Trung Tâm để nhận dữ liệu từ chương trình
SERVER. Do dữ liệu được truyền lên Internet, nên có thể truy cập và nhận dữ liệu ở bất kỳ
nơi đâu.

5.1. Chương trình SERVER


Hình 24: Sơ đồ khối chương trình SEVER

Sơ đồ khối thiết lập giao tiếp nối tiếp RS232 giữa thiết bị và máy tính.

Sơ đồ khối thiết lập giao tiếp TCP và truyền dữ liệu đến máy tính khác.
Sơ đồ khối tách chuỗi từ thiết bị dữ liệu truyền lên thông qua giao tiếp RS232 (VISA
Read), dùng khối Match Pattern để tách chuỗi.
Sơ đồ khối chuyển dạng chuỗi số (String) vừa tách được thành dạng số (Number), thông
qua khối chuyển chuỗi thành số (Decimal String To Number). Sau đó dữ liệu được phân tích,
xử lý bằng các chương trình con để thể hiện trên bảng đồng hồ.

Hình 25: Bảng giao diện chương trình SERVER

Hình 26: Bảng hiển thì đồ thị tín hiệu


5.2. Chương trình CLIENT

Hình 27: Bảng giao diện chương trình CLIENT

Hình 28: Sơ đồ khối chương trình CLIENT


Sơ đồ khối thiết lập giao tiếp TCP và nhận dữ liệu từ chương trình SERVER.

Sơ đồ khối phân tính xử lý dữ liệu sau khi nhận dữ liệu từ chương trình SERVER, thông
qua giao tiếp TCP.
PHỤ LỤC C: GIỚI THIỆU CÔNG NGHỆ IoT

1. Mạng không dây

1.1. NFC

NFC (Near - Field Communications) là một giao thức kết nối được bật bởi hai thiết bị
điện tử, một trong số đó thường là các thiết bị cầm tay như điện thoại thông minh, để chuyển
đổi dữ liệu trong khoảng cách 4 cm.

1.2. Bluetooth

Bluetooth là một đặc tả công nghiệp cho truyền thông không dây tầm gần giữa các thiết
bị điện tử. Công nghệ này hỗ trợ việc truyền dữ liệu qua các khoảng cách ngắn giữa các thiết
bị di động và cố định, tạo nên các mạng cá nhân không dây (Wireless Personal Area
Network-PANs).

1.3. RF

RF (Radio Frequency) - tần số vô tuyến là một thiết bị điện tử nhỏ được sử dụng để
truyền hoặc nhận các tín hiệu radio giữa hai thiết bị. Trong một hệ thống nhúng, nó thường
được mong muốn để giao tiếp với một thiết bị không dây. Truyền thông không dây này có
thể được thực hiện thông qua truyền thông quang học hoặc thông qua giao tiếp tần số vô
tuyến (RF). Truyền thông RF kết hợp với máy phát hoặc máy thu, hiện nay khoảng cách tối
đa để hai thiết bị RF truyền dữ liệu điều khiển gần 10 km.

1.4. Wireless

Wi-Fi (Wireless Fidelity) mà mạng kết nối Internet không dây, sử dụng sóng vô tuyến để
truyền tín hiệu. Loại sóng vô tuyến này tương tự như sóng điện thoại, truyền hình và radio.
Cũng rất đơn giản, để có được sóng Wi-Fi thì chúng ta cần phải có bộ phát Wi-Fi chính là
các thiết bị như modem, router. Đầu vào, tín hiệu Internet nguồn (được cung cấp bởi các đơn
vị ISP như FPT, Viettel, VNPT, CMC... hiện nay). Thiết bị modem, router sẽ lấy tín hiệu
Internet qua kết nối hữu tuyến rồi chuyển thành tín hiệu vô tuyến, và gửi đến các thiết bị sử
dụng như điện thoại smartphone, máy tính bảng, laptop…
2. CÔNG NGHỆ IoT
2.1. Internet of Things là gì?

Hình 29: Sơ đồ kết nối của IoT

Mạng lưới vạn vật kết nối Internet (IoT) là kịch bản của thế giới, khi mà mỗi đồ vật, con
người được cung cấp một định danh của riêng mình, và tất cả có khả năng truyền tải, trao
đổi thông tin, dữ liệu qua một mạng duy nhất mà không cần đến sự tương tác trực tiếp giữa
người với người, hay người với máy tính. IoT đã phát triển từ sự hội tụ của công nghệ không
dây, công nghệ vi cơ điện tử và Internet. Nói đơn giản là một tập hợp các thiết bị có khả
năng kết nối với nhau, với Internet và với thế giới bên ngoài để thực hiện một công việc nào
đó.

Một vật trong IoT có thể là một người với một trái tim cấy ghép; một động vật ở trang
trại với bộ chíp sinh học; một chiếc xe với bộ cảm ứng tích hợp cảnh báo tài xế khi bánh xe
xẹp hoặc bất kỳ vật thể tự nhiên hay nhân tạo nào mà có thể gán được một địa chỉ IP và cung
cấp khả năng truyền dữ liệu thông qua mạng lưới. Cho đến nay, IoT là những liên kết máy
đến máy (Machine to Machine - M2M) trong ngành sản xuất, công nghiệp năng lượng, kỹ
nghệ xăng dầu. Khả năng sản phẩm được tích hợp máy đến máy thường được xem như là
thông minh.

2.2. Khả năng định danh độc nhất

Điểm quan trọng của IoT đó là các đối tượng phải có thể được nhận biết và định dạng.
Nếu mọi đối tượng, kể cả con người, được định danh để phân biệt bản thân đối tượng đó với
những thứ xung quanh thì chúng ta có thể hoàn toàn quản lý được nó thông qua máy tính.
Việc đinh danh có thể được thực hiện thông qua nhiều công nghệ, chẳng hạn như RFID,
NFC, mã vạch, mã QR, watermark kỹ thuật số... Việc kết nối thì có thể thực hiện qua Wi-Fi,
mạng viễn thông băng rộng (3G, 4G), Bluetooth, ZigBee, hồng ngoại...

Ngoài những kỹ thuật nói trên, nếu nhìn từ thế giới web, chúng ta có thể sử dụng các địa
chỉ độc nhất để xác định từng vật, chẳng hạn như địa chỉ IP. Mỗi thiết bị sẽ có một IP riêng
biệt không nhầm lẫn. Sự xuất hiện của IPv6 với không gian địa chỉ cực kỳ rộng lớn sẽ giúp
mọi thứ có thể dễ dàng kết nối vào Internet cũng như kết nối với nhau.

2.3. Xu hướng và tính chất của Internet of Things

- Thông minh: Sự thông minh và tự động trong điều khiển thực chất không phải là một
phần trong ý tưởng về IoT. Các máy móc có thể dễ dàng nhận biết và phản hồi lại môi
trường xung quanh, chúng cũng có thể tự điều khiển bản thân mà không cần đến kết nối
mạng. Tuy nhiên, trong thời gian gần đây người ta bắt đầu nghiên cứu kết hợp hai khái
niệm IoT và Autonomous control (Điều khiển tự động) lại với nhau. Tương lai của IoT
có thể là một mạng lưới các thực thể thông minh có khả năng tự tổ chức và hoạt động
riêng lẻ tùy theo tình huống, môi trường, đồng thời chúng cũng có thể liên lạc với nhau
để trao đổi thông tin, dữ liệu.
- Kiến trúc dựa trên sự kiện: Các thực thể, máy móc trong IoT sẽ phản hồi dựa theo các sự
kiện diễn ra trong lúc chúng hoạt động theo thời gian thực. Một số nhà nghiên cứu từng
nói rằng một mạng lưới các cảm biến chính là một thành phần đơn giản của IoT.
- Là một hệ thống phức tạp: Trong một thế giới mở, IoT sẽ mang tính chất phức tạp bởi nó
bao gồm một lượng lớn các đường liên kết giữa những thiết bị, máy móc, dịch vụ với
nhau.
- Kích thước: Một mạng lưới IoT có thể chứa đến 50 đến 100 nghìn tỉ đối tượng được kết
nối và mạng lưới này có thể theo dõi sự di chuyển của từng đối tượng. Một con người
sống trong thành thị có thể bị bao bọc xung quanh bởi 1000 đến 5000 đối tượng có khả
năng theo dõi.
- Vấn đề không gian, thời gian: Trong IoT, vị trí địa lý chính xác của một vật nào đó là rất
quan trọng. Hiện nay, Internet chủ yếu được sử dụng để quản lý thông tin được xử lý bởi
con người.

2.4. Các hệ thống phụ trong IoT

Không phải tất cả mọi thứ nằm trong IoT đều nhất thiết phải kết nối vào một mạng lưới
toàn cầu, chúng ta có thể hoạt động trong từng hệ thống đơn lẻ (subsystem). Hãy tưởng
tượng đến một căn nhà thông minh, trong đó các đồ điện gia dụng có thể tự chúng tương tác
với nhau và hoạt động mà không cần phải vào Internet, trừ khi chúng ta cần điều khiển nó từ
xa. Ngôi nhà này có thể được xem là một subsystem. Cũng giống như hiện nay chúng ta có
các mạng LAN, WAN, mạng ngang hàng nội bộ chứ không kết nối trực tiếp vào Internet.

2.5. Ứng dụng của IoT

Khi Internet of Things phát triển, sự phát triển của các thiết bị kết nối thông minh được
hỗ trợ bởi các mạng di động, cung cấp kết nối mở rộng khắp và phổ biến thì sẽ mở ra cơ hội
cung cấp các dịch vụ nâng cao cuộc sống cho người tiêu dùng, đồng thời tăng năng năng
suất cho các doanh nghiệp.
Hình 30: Tác động của ứng dụng IoT đối với cuộc sống
Đối với người dùng, kết nối được cung cấp bởi IoT có thể nâng cao chất lượng cuộc
sống của họ theo nhiều cách, như là sử dụng năng lượng hiệu quả, an ninh trong nhà và cả
thành phố. Trong gia đình, việc tích hợp các thiết bị kết nối thông minh và dịch vụ dựa trên
đám mây sẽ giúp giải quyết vấn đề năng lượng và an ninh. Các thiết bị thông minh kết nối sẽ
cho phép giảm bớt chi phí và tiêu tốn điện năng, đồng thời cải thiện an ninh tại nhà thông
qua giám sát từ xa.
Trong phương tiện giao thông: Tại các thành phố, sự phát triển của lưới điện thông
minh, phân tích dữ liệu và các phương tiện tự hành sẽ cung cấp một nền tảng thông minh để
đổi mới trong các lĩnh vực quản lý năng lượng, quản lý cơ sở hạ tầng, an ninh và giao thông.
Hệ thống đèn chiếu sáng, đèn giao thông, camera, xe tự hành sẽ hoạt động ở mức độ tối ưu
nhất dựa vào các điều kiện thực tế đang xảy ra xung quanh để tiết kiệm năng lượng, giảm ô
nhiễm môi trường, kẹt xe…
Đảm bảo an toàn cho phương tiện, có khả năng cảnh báo người lái những vấn đề trên
đường và tự động nhận biết, ngăn cản những va chạm có thể xảy ra như các tín hiệu cảnh
báo nguy hiểm, chức năng cuộc gọi khẩn cấp

Hỗ trợ nghe nhạc, xem phim cho người lái và hành khách như là giao tiếp với điện thoại
thông minh thông qua Wi-Fi, 3G, 4G. Một số nhà sản xuất ô tô đã có kế hoạch tích hợp
mạng di động cho xe, để tải bản đồ trực tiếp nhanh hơn, có thể phát Wi-Fi cho người dùng
máy tính trên xe.

Sức khỏe: tối ưu hóa sức khỏe và năng lực của người lái như hỗ trợ cảnh báo về sức
khỏe, sự mệt mỏi hoặc những hình thức hỗ trợ cá nhân khác

Hỗ trợ giảm thiểu chi phí vận hành và tăng sự thoải mái như điều khiển các tính năng từ
xa của xe hơi, hiển thị các thông tin, dịch vụ xe và sự truyền nhận dữ liệu, hướng dẫn nhanh
hơn, an toàn hơn, tiết kiệm hơn và tăng hiệu quả nhiên liệu khi lái xe dựa trên những thông
tin thu thập được trên xe như hiển thị thông tin giao thông thời gian thực, hiển thị các thông
tin về sửa chữa và dịch vụ, thậm chí xe hơi còn liên kết với nhà thông minh, văn phòng và
các tòa nhà khác để báo nguy và giám sát hệ thống năng lượng.

Hình 31: Ứng dụng IoT trong thành phố thông minh (Smart cities)
- Trong Y tế: IoT cũng sẽ mở rộng tiếp cận và nâng cao chất lượng giáo dục và y tế. Khi
nhu cầu về việc chăm sóc sức khỏe tăng lên, các thiết bị kết nối thông minh sẽ giúp giải
quyết thách thức này bằng cách hỗ trợ các dịch vụ y tế điện tử, giúp cải thiện khả năng
tiếp cận và cho phép theo dõi bệnh nhân tại nhà. Như vậy chất lượng chăm sóc và chất
lượng cuộc sống cho bệnh nhân sẽ được nâng cao, đồng thời giảm sự quá tải của hệ
thống bệnh viện hiện nay.
Hình 32: Ứng dụng IoT trong Y tế
- Trong giáo dục: các giải pháp học tập linh hoạt sẽ điều chỉnh quá trình học tập theo nhu
cầu của mỗi học sinh. Nâng cao trình độ giảng dạy, học tập thuận tiện và dễ tiếp cận hơn.
Mỗi học sinh không cần mang nhiều sách đến trường, tất cả tài liệu đã được cung cấp
trong các thiết bị thông minh. Và từ những thiết bị thông minh đó, học sinh có thể kết nối
đến lớp và giáo viên để chia sẽ kiến thức và làm việc nhóm mà không cần đến trường.

Hình 33: Ứng dụng IoT trong giáo dục


2.6. Hạn chế của IoT
Chưa có một ngôn ngữ chung
Ở mức cơ bản nhất, Internet là một mạng dùng để nối thiết bị này với thiết bị khác. Nếu
chỉ riêng có kết nối không thôi thì không có gì đảm bảo rằng các thiết bị biết cách nói
chuyện nói nhau. Cũng giống như là bạn có thể đi từ Việt Nam đến Mỹ, nhưng không đảm
bảo rằng bạn có thể nói chuyện với người Mỹ.

Để các thiết bị có thể giao tiếp với nhau, chúng sẽ cần một hoặc nhiều giao thức
(protocols), có thể xem là một thứ ngôn ngữ chuyên biệt để giải quyết một tác vụ nào đó.
Chắc chắn bạn đã ít nhiều sử dụng một trong những giao thức phổ biến nhất thế giới, đó là
HyperText Transfer Protocol (HTTP) để tải web. Ngoài ra chúng ta còn có SMTP, POP,
IMAP dành cho email, FTP dùng để trao đổi file.

Hàng rào subnetwork

Như đã nói ở trên, thay vì giao tiếp trực tiếp với nhau, các thiết bị IoT hiện nay chủ yếu
kết nối đến một máy chủ trung tâm do hãng sản xuất một nhà phát triển nào đó quản lý.
Cách này cũng vẫn ổn thôi, những thiết bị vẫn hoàn toàn nói chuyện được với nhau thông
qua chức năng phiên dịch của máy chủ rồi. Thế nhưng mọi chuyện không đơn giản như thế,
cứ mỗi một mạng lưới như thế tạo thành một subnetwork riêng, và buồn thay các máy móc
nằm trong subnetwork này không thể giao tiếp tốt với subnetwork khác.

Lấy ví dụ như xe ô tô chẳng hạn. Một chiếc Ford Focus có thể giao tiếp cực kỳ tốt đến
các dịch vụ và trung tâm dữ liệu của Ford khi gửi dữ liệu lên mạng. Nếu một bộ phận nào đó
cần thay thế, hệ thống trên xe sẽ thông báo về Ford, từ đó hãng tiếp tục thông báo đến người
dùng. Nhưng trong trường hợp chúng ta muốn tạo ra một hệ thống cảnh báo kẹt xe thì mọi
chuyện rắc rối hơn nhiều bởi xe Ford được thiết lập chỉ để nói chuyện với server của Ford,
không phải với server của Honda, Audi, Mercedes hay BMW. Lý do cho việc giao tiếp thất
bại? Chúng ta thiếu đi một ngôn ngữ chung. Và để thiết lập cho các hệ thống này nói chuyện
được với nhau thì rất tốn kém, đắt tiền.

Có quá nhiều "ngôn ngữ địa phương"

Bây giờ giả sử như các nhà sản xuất xe ô tô nhận thấy rằng họ cần một giao thức chung
để xe của nhiều hãng có thể trao đổi dữ liệu cho nhau và họ đã phát triển thành công giao
thức đó. Thế nhưng vấn đề vẫn chưa được giải quyết. Nếu các trạm thu phí đường bộ, các
trạm bơm xăng muốn giao tiếp với xe thì sao? Mỗi một loại thiết bị lại sử dụng một "ngôn
ngữ địa phương" riêng thì mục đích của IoT vẫn chưa đạt được đến mức tối đa. Đồng ý rằng
chúng ta vẫn có thể có một trạm kiểm soát trung tâm, thế nhưng các thiết bị vẫn chưa thật sự
nói chuyện được với nhau.

2.7. IoT trong công nghệ nhà thông minh

Trong các ngôi nhà hiện đại ngày nay, số lượng trang thiết bị điện tử đang không ngừng
gia tăng. Tuy nhiên, do khác nhau về kiến trúc, việc điều khiển thiết bị đôi khi bất cập. Thêm
vào đó, việc điều khiển các thiết bị một cách thủ công với khoảng cách địa lý lớn không dễ.
Vì vậy, việc áp dụng các công nghệ điều khiển tự động nhằm giải quyết tương tác giữa môi
trường và các thiết bị trong nhà một cách linh hoạt, dễ dàng là điều tất yếu, từ đó khái niệm
nhà thông minh ra đời.

Nhà thông minh hiểu đơn giản là ngôi nhà mà các thiết bị gia dụng trong nó như: hệ
thống chiếu sáng, sưởi ấm, máy lạnh, TV, camera an ninh, …. Có khả năng tự động hóa và
giao tiếp với nhau theo một chương trình đã định sẵn. Nguyên lý hoạt động của các hệ thống
điều khiển tự động nói chung, hệ thống thông minh nói riêng tập trung chủ yếu vào việc giải
quyết tương tác giữa hệ thống với môi trường. Thông qua các cảm biến ta thu được tín hiệu,
các tín hiệu này được lưu trữ, xử lý và tùy theo từng yêu cầu đặt ra mà điều khiển thiết bị
theo mục đích cụ thể.

 Thiết kế hệ thống nhà thông minh:

- Khối cảm biến: thu thập thông tin từ môi trường ngoài như nhiệt độ, độ ẩm, lượng mưa,
….

- Khối vi điều khiển: điều khiển hoạt động của hệ thống, ngoài ra còn đóng vai trò máy chủ
SERVER, nhận và thực thi các yêu cầu từ CLIENT khi sử dụng công nghệ IoT.

- Khối xử lý dữ liệu mạng: tạo giao diện kết nối, chuyển đổi các gói dữ liệu đến và đi trên
hệ thống mạng.
- Máy tính cá nhân: truyền tín hiệu điều khiển thông qua câu lệnh, chương trình, xử lý tín
hiệu, điều khiển hệ thống.

- Khối phát và thu tín hiệu khi giao tiếp với các thiết bị có giao tiếp IoT với nhau.

- Khối máy chủ (SERVER): khối này được nhà sản xuất mua tên miền của các công ty uy
tín trên Internet để thay thế các con số của IP của SERVER và chuyển chúng thành một
phần mềm ứng dụng có hỗ trợ trên các hãng thiết bị điện thoại di động, tablet và máy
tính.

- Khối các thiết bị thực thi trực tiếp: các thiết bị trong khối giao tiếp với khối điều khiển
trung tâm bằng sóng RF. Mỗi thiết bị được nhà sản xuất định danh sẵn cho 1 địa chỉ IP và
thể hiện nhiệm vụ của chúng khi được kết nối với thiết bị trung tâm. Từ đó mà từ bất cứ
thiết bị di động có hỗ trợ kết nối với ứng dụng hoặc miền của SERVER thông qua
Internet đều có thể điều khiển dễ dàng các thiết bị này.

Hình 34: Hệ thống nhà thông minh


Thiết bị MCU đóng vai trò là trung tâm trong hệ thống giao tiếp không dây, MCU là
thiết bị duy nhất được cắm cáp mạng Internet để điều khiển từ xa. Các tính năng chính của
MCU:

- Hỗ trợ thiết lập trực tiếp trên thiết bị ngoại vi - Sử dụng công nghệ điện toán đám mây.

- Bảo mật hai chiều, 3 lớp theo biến số thời gian.

- Tích hợp công nghệ Repeater đảm bảo sóng giao tiếp giữ các thiết bị được tốt hơn.

- Có nhiều ứng dụng tự động nhận dạng kết nối giữa các thiết bị tùy theo nhà sản xuất.

- Công nghệ Plug & Play tự động nhận dạng kết nối Cloud.

- Tích hợp thời gian thực đặt lịch trình/hẹn giờ thiết bị.

- Công nghệ tự động đồng bộ trạng thái và cập nhật dữ liệu lên Cloud - Tự động cập nhật
thời gian.

- Tự động cập nhật trạng thái thiết bị.

- Công nghệ tự động kiểm tra lỗi và tự khởi động quy trình sửa chữa - Công nghệ đồng bộ
và xử lý song song cho phép mở rộng hệ thống.

2.8. Ứng dụng IoT cho camera giám sát

- Công nghệ Camera 3G:

Camera 3G được lắp đặt quan sát ở một nơi chưa kéo được ADSL hay Cáp quang, thậm
chí chưa có điện. Cần để quan sát từ xa với mục đích theo dõi, quản lý dữ liệu và chỉ cần có
sóng điện thoại là ở đó có mạng 3G.
Do sử dụng mạng 3G nên không thể mở Port để xem Camera từ xa thông qua 3G được,
bởi vì USB 3G đóng vai trò là một Client nằm sau một Router khác, địa chỉ IP được cấp khi
kết nối Internet 3G là một địa chỉ IP Private, địa chỉ này không thể nhìn thấy được từ
Internet. Do đó muốn truy cập dữ liệu phải sử dụng đường hầm VPN.
- Công nghệ mạng ngang hàng (mạng P2P) và Camera P2P:
Mạng ngang hàng là một kiểu mạng được thiết kế cho các thiết bị trong đó có chức năng
và khả năng của các thiết bị đó là như nhau. Mạng ngang hàng đơn giản cũng được biết đến
bằng việc so sánh với mạng Client/Server, mạng mà trong đó chứa các thiết bị chịu trách
nhiệm cung cấp hay phục vụ thông tin mạng và các thiết bị khác sẽ sử dụng các tài nguyên
mạng.
Giúp cho việc quan sát từ xa qua Internet thông qua điện thoại 3G, Laptop và các thiết bị
khác thì hết sức dễ dàng. Đây là một trong những công nghệ tiên tiến nhất dùng thuật toán
đám mây và máy chủ server đặt ở nước ngoài cho phép người dùng có thể truy cập dữ liệu từ
thiết bị này đến thiết bị kia ở bất cứ đâu có kết nối Internet.
Do sử dụng công nghệ P2P, nên không cần phải mở cổng (Port) thiết bị, không cần phải
cài đặt IP hoặc đường hầm VPN.
2.9. Kết luận
Internet of Things hứa hẹn sẽ mang đến một bước thay đổi lớn trong chất lượng cuộc
sống của con người và năng suất làm việc của doanh nghiệp. Thông qua sự phủ sóng của
mạng diện rộng, sự thông minh của mạng cục bộ được sử dụng trên các thiết bị. Thiết bị IoT
có tiềm năng cho phép mở rộng và cải tiến các dịch vụ vận tải, hậu cần, an ninh, tiện ích, y
tế, giáo dục và các lĩnh vực khác. Đồng thời cung cấp một hệ sinh thái mới cho sự phát triển
các ứng dụng IoT.

You might also like