giÁo trÌnh mÔn hỌc: chuyÊn ĐỀ arduino vÀ truyỀn...

151
ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG CAO ĐẲNG KINH TẾ KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN THÔNG NGÀNH: CNKT ĐIỆN TỬ, TRUYỀN THÔNG TRÌNH ĐỘ: CAO ĐẲNG Thành phố Hồ Chí Minh, năm 2020

Upload: others

Post on 23-May-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG CAO ĐẲNG KINH TẾ KỸ THUẬT

THÀNH PHỐ HỒ CHÍ MINH

GIÁO TRÌNH

MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN THÔNG

NGÀNH: CNKT ĐIỆN TỬ, TRUYỀN THÔNG

TRÌNH ĐỘ: CAO ĐẲNG

Thành phố Hồ Chí Minh, năm 2020

Page 2: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG CAO ĐẲNG KINH TẾ KỸ THUẬT

THÀNH PHỐ HỒ CHÍ MINH

GIÁO TRÌNH

MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN THÔNG

NGÀNH: CNKT ĐIỆN TỬ, TRUYỀN THÔNG

TRÌNH ĐỘ: CAO ĐẲNG

THÔNG TIN CHỦ NHIỆM ĐỀ TÀI

Họ tên: Trần Vĩnh Thường

Học vị: Thạc sĩ Kỹ thuật Điện tử

Đơn vị: Khoa Điện – Tự động hóa

Email: [email protected]

TRƯỞNG KHOA TỔ TRƯỞNG

BỘ MÔN

CHỦ NHIỆM

ĐỀ TÀI

HIỆU TRƯỞNG

DUYỆT

Thành phố Hồ Chí Minh, năm 2020

Page 3: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

TUYÊN BỐ BẢN QUYỀN

Tài liệu này thuộc loại sách giáo trình nên các nguồn thông tin có thể được phép

dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo.

Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh doanh thiếu

lành mạnh sẽ bị nghiêm cấm.

Page 4: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

KHOA ĐIỆN – TỰ ĐỘNG HÓA 1

LỜI GIỚI THIỆU

Chuyên đề Arduino và truyền thông cũng như các môn học CNKT Điện tử -viễn

thông là môn học chuyên ngành trong chuyên ngành đào tạo ngành nghề CNKT Điện

tử, truyền thông và ngành CNKT Điện tử - viễn thông. Với những ưu điểm riêng của

mình, Arduino đã nhanh chóng nổi tiếng toàn thế giới và được giới học sinh, sinh viên,

giới nghiên cứu, những người yêu thích kỹ thuật, những người thích làm đồ tự chế sử

dụng rộng rãi. Tại Việt Nam, số lượng người sử dụng mạch Arduino ngày càng tăng.

Để đáp ứng nhu cầu tìm hiểu Arduino, tác giả đã thấy tầm quan trọng là phải có

giáo trình môn Chuyên đề Arduino và truyền thông để phục vụ cho mục đích ứng nhu

cầu học tập của sinh viên về môi trường nguồn mở. Ngoài ra giáo trình Chuyên đề

Arduino và truyền thông theo đề cương chi tiết của môn học.

Lời đầu tiên cho tôi gửi lời cảm ơn đến ban lãnh đạo Khoa Điện – Tự động hóa,

quý thầy cô trong tổ viễn thông và khoa đã tạo mọi điều kiện tốt nhất để tôi hoàn thành

giáo trình này. Do thời gian hạn chế nên giáo trình không thể tránh khỏi sai sót, rất mong

nhận được sự đóng góp ý kiến của quý thầy cô để giáo trình ngày càng hoàn thiện hơn.

Xin cảm ơn!

Thành phố Hồ Chí Minh, ngày 01 tháng 08 năm 2020

Chủ biên: Trần Vĩnh Thường

Page 5: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

KHOA ĐIỆN – TỰ ĐỘNG HÓA 2

MỤC LỤC

TUYÊN BỐ BẢN QUYỀN ......................................................................................... 3

LỜI GIỚI THIỆU ....................................................................................................... 1

MỤC LỤC .................................................................................................................... 2

Chương 1: Tổng quan về Arduino ............................................................................. 6

1.1. Tổng quan Arduino ............................................................................................ 6

Giới thiệu về Adruino ................................................................................. 6

Phần cứng của Adruino Uno R3 ................................................................ 6

1.2. Lịch sử phát triển của Arduino....................................................................... 11

Dòng Arduino USB ................................................................................... 11

Arduino MEGA......................................................................................... 21

1.3. Cài đặt IDE, driver cho Arduino .................................................................... 23

Vào trang chủ của Arduino ..................................................................... 23

Tải chương trình cài đặt ........................................................................... 24

Cài đặt trên máy tính ............................................................................... 25

1.4. Giới thiệu các loại kit thực hành Arduino ..................................................... 29

1.5. Ngôn ngữ lập trình cho Arduino..................................................................... 29

Cấu trúc (Structure) ................................................................................. 30

Biến số (variable) và Hằng số (Constant) ............................................... 31

Hàm và Thủ tục (Function) ..................................................................... 33

1.6. Nạp chương trình cho Arduino ....................................................................... 36

1.7. Sử dụng thư viện lập trình Arduino ............................................................... 42

1.8. Khởi tạo Project, thêm thư viện lập trình ..................................................... 42

Chương 2: Lập trình - mô phỏng dùng vi điều khiển Arduino ............................ 46

2.1. Lập trình - mô phỏng ứng dụng I/O ............................................................... 46

Điều khiển LED đơn ................................................................................. 46

Điều khiển LED 7 đoạn ............................................................................ 48

Điều khiển Matrix LED ............................................................................ 56

Giao tiếp LCD, phím nhấn và Matrix phím nhấn ................................. 63

Page 6: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

KHOA ĐIỆN – TỰ ĐỘNG HÓA 3

Giao tiếp ADC – DAC .............................................................................. 69

Điều khiển PWM ....................................................................................... 73

Truyền dữ liệu giao thức UART .............................................................. 75

Truyền dữ liệu giao thức SPI ................................................................... 76

Truyền dữ liệu giao thức I2C................................................................... 79

Truyền dữ liệu giao thức Bluetooth ...................................................... 82

Chương 3: Truyền thông vi điều khiển Arduino .................................................... 85

3.1. Tổng quan về truyền thông dùng Arduino .................................................... 85

3.2. Module ESP8266 .............................................................................................. 85

Mã nguồn mở của module ESP8266 ....................................................... 85

Lập trình code module ESP8266 ............................................................. 88

Phần mềm mã nguồn mở Blynk .............................................................. 91

Điều khiển thiết bị qua Wifi ................................................................... 102

Điều khiển thiết bị qua Cloud Server với MQTT ................................ 111

Thu thập dữ liệu với ESP8266 và Webserver ...................................... 120

3.3. Module Ethernet Shield ................................................................................. 122

Điều khiển thiết bị điện dùng module Ethernet Shield ....................... 122

Chương 4: Thực hiện đề tài .................................................................................... 130

4.1. Ứng dụng module ESP8266 ........................................................................... 130

Điều khiển thiết bị từ xa qua website (ESP8266 web server) ............. 130

Cập nhật Firmware từ xa cho ESP8266 (OTA) ................................... 130

Điều khiển bằng giọng nói sử dụng ESP8266 ....................................... 131

Điều khiển xe từ xa qua ESP8266 ......................................................... 132

Sử dụng ESP8266 hiển thị lên led ma trận ........................................... 132

4.2. Ứng dụng module Ethernet Shield ............................................................... 132

4.3. Hướng dẫn kỹ năng tìm kiếm tài liệu nâng cao trên Google ..................... 133

Tìm kiếm Cụm từ chính xác .................................................................. 133

Loại trừ Từ .............................................................................................. 133

This OR That ........................................................................................... 133

Các từ trong văn bản .............................................................................. 134

Các từ trong Text + Tiêu đề, URL ........................................................ 134

Tìm Các từ trong Title (Tiêu đề) ........................................................... 134

Page 7: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

KHOA ĐIỆN – TỰ ĐỘNG HÓA 4

Các từ trong Title + Text, URL ............................................................. 134

Tìm kiếm Các từ trong URL .................................................................. 134

Cách tìm kiếm trong một trang web ..................................................... 135

Tìm kiếm có liên quan .......................................................................... 135

Một Trang Kết Nối tới Trang Khác (Page that links to another page)

............................................................................................................................. 135

Các từ và từ đồng nghĩa ....................................................................... 136

Định nghĩa của từ .................................................................................. 136

Thiếu Từ (Missing word) ..................................................................... 136

Tin tức trong một Vị trí cụ thể ............................................................ 136

Tìm Loại file tài liệu cụ thể .................................................................. 137

4.4. Hướng dẫn kỹ năng viết một bài báo cáo khoa học .................................... 138

Lựa chọn đề tài ........................................................................................ 138

Nghiên cứu đề tài. ................................................................................... 139

Trước khi viết báo cáo ............................................................................ 140

Tiến hành viết báo cáo ............................................................................ 142

Hoàn thành Báo cáo ................................................................................ 143

Lời khuyên ............................................................................................... 144

4.5. Hướng dẫn kỹ năng soạn thảo Powerpoint và kỹ năng thuyết trình ........ 145

Kỹ năng soạn thảo Powerpoint .............................................................. 145

Kỹ năng thuyết trình .............................................................................. 145

4.6. Xây dựng đề cương đề tài .............................................................................. 146

Đề cương nghiên cứu là gì? .................................................................... 146

Vì sao cần viết đề cương nghiên cứu? ................................................... 146

Đề cương nghiên cứu dành cho ai và để làm gì? (Vai trò) .................. 146

Nội dung của đề cương ........................................................................... 147

4.7. Kế hoạch thực hiện ......................................................................................... 147

4.8. Hoàn chỉnh và báo cáo ................................................................................... 148

Page 8: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

KHOA ĐIỆN – TỰ ĐỘNG HÓA 5

GIÁO TRÌNH MÔN HỌC

Tên môn học: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN THÔNG

Mã môn học: MH3102239

Vị trí, tính chất, ý nghĩa và vai trò của môn học:

- Vị trí: Môn học chuyên ngành, Học kỳ 4

- Tính chất: Môn học tự chọn

- Ý nghĩa và vai trò của môn học: có ý nghĩa quan trọng trong việc định hướng nghề

nghiệp viễn thông trong tương lai, hình thành nên cơ sở yêu nghề và phấn đấu cho mục

tiêu nghề nghiệp.

Mục tiêu của môn học/mô đun:

- Về kiến thức:

+ Trình bày được các kiến thức cơ bản về Arduino

+ Trình bày được các ứng dụng dùng Arduino cơ bản trong mạng viễn thông

+ Giải thích được các cơ chế truyền thông vi điều khiển Arduino

+ Phân biệt được các cơ chế truyền thông vi điều khiển Arduino

- Về kỹ năng:

+ Soạn thảo và thuyết trình được một vấn đề khoa học

+ Mô phỏng được hệ thống mạng viễn thông dùng phần mềm Proteus

+ Thiết kế được hệ thống mạng viễn thông dùng vi điều khiển Arduino

+ Có kỹ năng trình bày một một vấn đề khoa học bằng văn bản và thuyết trình

- Về năng lực tự chủ và trách nhiệm:

+ Tích cực trong việc tìm hiểu truyền thông dùng vi điều khiển Arduino

+ Khả năng tự tìm hiểu nghiên cứu một vấn đề khoa học

+ Xây dựng môi trường xanh

Page 9: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 6

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

1.1. Tổng quan Arduino

Giới thiệu về Adruino

Arduino là một nền tảng nguyên mẫu (mã nguồn mở) dựa trên nền phần mềm và

phần cứng dễ sử dụng. Nó bao gồm một bo mạch - thứ mà có thể được lập trình (đang

đề cập đến vi điều khiển) và một phần mềm hỗ trợ gọi là Arduino IDE (Môi trường phát

triển tích hợp cho Arduino), được sử dụng để viết và nạp từ mã máy tính sang bo mạch

vật lý.

Những tính năng chính như:

Các bo mạch Arduino có khả năng đọc các tín hiệu tương tự (analog) hoặc

tín hiệu số (digital) làm đầu vào từ các cảm biến khác nhau và chuyển nó

thành đầu ra như kích hoạt mô-tơ quay, bật/tắt đèn LED, kế nối mạng

Internet hoặc nhiều hoạt động khác nữa.

Bạn có thể điều khiển các chức năng của bo mạch của mình bằng cách nạp

các tập lệnh đến vi điều khiển trên bo mạch. Thông qua phần mềm hỗ trợ

là Arduino IDE.

Không giống như bo mạch có khả năng lập trình trước kia, Arduino chỉ cần

bạn sử dụng cáp USB để nạp mã vào trong bo mạch.

Hơn nữa, phần mềm Arduino IDE sử dụng phiên bản giản thể của C++,

làm việc học lập trình nó trở nên dễ dàng hơn rất nhiều.

Phần cứng của Adruino Uno R3

Phần này nói về phần cứng của Arduino Uno R3, một bo mạch thông dụng hiện

nay. Tài liệu hướng dẫn này chỉ đưa ra những kiến thức cơ bản cần thiết cho việc sử

dụng board mạch này. Nếu người học cần những kiến thức chuyên sâu hơn thì có thể

tham khảo tại website chính thức của Arduino: “arduino.cc”.

Page 10: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 7

1. Cáp USB: Đây là dây cáp thường được bán kèm theo bo, dây cáp dùng

để cắm vào máy tính để nạp chương trình cho bo và dây đồng thời cũng lấy

nguồn từ nguồn usb của máy tính để cho bo hoạt động. Ngoài ra cáp USB

còn được dùng để truyền dữ liệu từ bo Arduino lên máy tính. Dây cáp có 2

đầu, đầu 1a được dùng để cắm vào cổng USB trên bo Arduino, đầu 1b dùng

để cắm vào cổng USB trên máy tính.

2. IC Atmega 16U2: IC này được lập trình như một bộ chuyển đổi USB -

to-Serial dùng để giao tiếp với máy tính thông qua giao thức Serial (dùng

cổng COM).

3. Cổng nguồn ngoài: Cổng nguồn ngoài nhằm sử dụng nguồn điện bên

ngoài như pin, bình acquy hay các adapter cho bo Arduino hoạt động.

Nguồn điện cấp vào cổng này là nguồn DC có hiệu điện thế từ 6V đến 20V,

tuy nhiên hiệu điện thế tốt nhất mà nhà sản xuất khuyên dùng là từ 7 đến

12V.

4. Cổng USB: Cổng USB trên bo Arduino dùng để kết nối với cáp USB.

5. Nút reset: Nút reset được sử dụng để reset lại chương trình đang chạy.

Đôi khi chương trình chạy gặp lỗi, người dùng có thể reset lại chương trình.

Page 11: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 8

6. ICSP của ATmega 16U2: ICSP là chữ viết tắt của In-Circuit Serial

Programming. Đây là các chân giao tiếp SPI của chip Atmega 16U2. Các

chân này thường ít được sử trong các dự án về Arduino.

7. Chân xuất tín hiệu ra: Có tất cả 14 chân xuất tín hiệu ra trong Arduino

Uno, những chân có dấu ~ là những chân có thể băm xung (PWM), tức có

thể điều khiển tốc độ động cơ hoặc độ sáng của đèn.

8. IC ATmega 328: IC Atmega 328 là linh hồn của bo mạch Arduino Uno,

IC này được sử dụng trong việc thu thập dữ liệu từ cảm biến, xử lý dữ liệu,

xuất tín hiệu ra,...

9. Chân ICSP của ATmega 328: Các chân ICSP của ATmega 328 được

sử dụng cho các giao tiếp SPI (Serial Peripheral Interface), một số ứng dụng

của Arduino có sử dụng chân này, ví dụ như sử dụng module RFID RC522

với Arduino hay Ethernet Shield với Arduino.

10. Chân lấy tín hiệu Analog: Các chân này lấy tín hiệu Analog (tín hiệu

tương tự) từ cảm biến để IC Atmega 328 xử lý. Có tất cả 6 chân lấy tín hiệu

Analog, từ A0 đến A5.

11. Chân cấp nguồn cho cảm biến: Các chân này dùng để cấp nguồn cho

các thiết bị bên ngoài như role, cảm biến, RC servo,.. .trên khu vực này có

sẵn các chân GND (chân nối đất, chân âm), chân 5V, chân 3.3V như được

thể hiện ở hình 2. Nhờ những chân này mà người sử dụng không cần thiết

bị biến đổi điện khi cấp nguồn cho cảm biến, role, rc servo,.. .Ngoài ra trên

khu vực này còn có chân Vin và chân reset, chân IOREF. Tuy nhiên các

chân này thường ít được sử dụng nên trong tài liệu này xin không đi sâu về

nó.

12. Các linh kiện khác trên board Arduino Uno: Ngoài các linh kiện đã

liệt kê bên trên, Arduino Uno còn 1 số linh kiện đáng chú ý khác. Trên bo

có tất cả 4 đèn led, bao gồm 1 led nguồn (led ON nhằm cho biết boa đã

được cấp nguồn), 2 led Tx và Rx, 1 led L. Các led Tx và Rx sẽ nhấp nháy

khi có dữ liệu truyền từ board lên máy tính hoặc ngược lại thông qua cổng

USB. Led L được được kết nối với chân số 13. Led này được gọi là led on

Page 12: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 9

board (tức led trên bo), led này giúp người dùng có thể thực hành các bài

đơn giản mà không cần dùng thêm led ngoài.

Trong 14 chân ra của bo còn có 2 chân 0 và 1 có thể truyền nhận dữ liệu nối tiếp

TTL. Có một số ứng dụng cần dùng đến tính năng này, ví dụ như ứng dụng điều khiển

mạch Arduino Uno qua điện thoại sử dụng bluetooth HC05.

Thêm vào đó, chân 2 và chân 3 cũng được sử dụng cho lập trình ngắt (interrupt),

đồng thời còn 1 vài chân khác có thể được sử dụng cho các chức năng khác, như được

thể hiện ở hình 3. Bảng 1 thể hiện thêm các thông số cho bo Arduino Uno R3.

Các chân vào ra của Arduino Uno

Vi điều khiển ATmega328 (họ 8bit)

Điện áp hoạt động 5V - DC (chỉ được cấp qua cổng USB)

Tần số hoạt động 16 MHz

Dòng tiêu thụ 30mA

Điện áp vào khuyên dùng 7-12V - DC

Điện áp vào giới hạn 6-20V - DC

Số chân Digital I/O 14 (6 chân PWM)

Số chân Analog 6 (độ phân giải 10bit)

Dòng tối đa trên mỗi chân I/O 30 mA

Dòng ra tối đa (5V) 500 mA

Dòng ra tối đa (3.3V) 50 mA

Bộ nhớ flash 32 KB (ATmega328) với 0.5KB dùng

bởi bootloader

Thông số của Arduino Uno R3

Page 13: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 10

Một số chức năng của các chân trên Arduino (PinOut).

Page 14: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 11

1.2. Lịch sử phát triển của Arduino

Arduino là một bo mạch vi điều khiển do một nhóm giáo sư và sinh viên Ý thiết

kế và đưa ra đầu tiên vào năm 2005.

Dòng Arduino USB

1.2.1.1. Mạch lập trình đầu tiên (2005)

Được đặt tên là Arduino Serial

Sử dụng cổng kết nối RS-232 (Serial) thay vì cổng USB (TTL)

Qua thời gian, dòng mạch Arduino Serial đã được thiết kế đơn giản hơn, và chỉ

cần dùng 1 mặt để mọi nhà phát triển có thể tự làm một cái cho bản thân mình bằng

cách rửa mạch PCB. Nổi bật trong số đó là dòng mạch có tên Severino (Aka S3V3).

Dòng sản phẩm này có tên là Arduino Signle-Sided Serial.

Severino (Aka S3V3)

Page 15: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 12

1.2.1.2. Mạch Arduino đầu tiên - Arduino USB (2005)

Dòng mạch Arduino USB được phát triển qua 2 phiên bản (Arduino USB và

Arduino USB v2.0).

Ở mỗi phiên bản cũng không có sự khác nhau lắm, chỉ khác nhau về địa chỉ trang

web và sửa một lỗi nhỏ ở phần pinout chỗ đầu USB.

Ở board mạch Arduino USB này, chúng ta đã thấy có sự xuất hiện của cồng USB

Type B, như vậy, nguồn điện nuôi Arduino không phải lúc nào cũng là 12V (thường

thường là 12V), vì khi gắn cổng USB Type B ta lại có thể 5V, như vậy nếu đi qua con

LM7805 thì sẽ không đủ điện nuôi cho con ATmega328. Điều đó khiến những nhà phát

triển phần cứng Arduino phải thích nghi với việc thay đổi header ext or usb mỗi khi

thay đổi từ lúc nạp chương trình sang dùng nguồn ngoài.

Page 16: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 13

1.2.1.3. Arduino Extreme (2006)

Ở phiên bản này, chúng ta đã có thêm đèn RX, TX ở 2 chân TX và RX của

Arduino. Các linh kiện trên Arduino phần lớn được thay thế bằng linh kiện dán

Ngoài ra, các chân header male đã được thay thế với chân header female.

Arduino Extreme version 1

Cũng trong năm đó, trang arduino.cc cũng chính thức được ra đời.

Arduino Extreme version 2 ra đời, các dây nối giữa các phần trong mạch cũng

được làm "âm" đất. đã cho thay thế phần lớn điện trở, tụ điện trở thành những linh kiện

dán, đẹp hơn, gọn hơn và hoạt động ổn định hơn nữa. Việc tích hợp bóng đèn LED vốn

dùng để chiếu sáng và đặt vào mạch Arduino để giúp người dùng biết máy tính đã kết

nối được với mạch Arduino và quá trình nạp chương trình có hoạt động được hay không.

Arduino Extreme version 2

Page 17: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 14

1.2.1.4. Arduino NG (Nuova Generazione) (2006)

Arduino NG

Ở phiên bàn này, Arduino NG đã thay thế chip FT232BM (chuẩn cũ USB to TTL)

bằng chíp FT232RL - FTDI ( chuẩn mới USB to Serial), điều đó làm cho thiết kế giao

diện phần cứng của Arduino trong thật sự rất tuyệt vời.

Trong board này, họ đã gắn thêm con LED màu xanh tại chân số 13. Đèn LED

này không những giúp ta debug được truyền dữ liệu SPI mà còn có "một công cụ" kiểm

thử mạch (vì khi được xuất bán, Arduino NG đã được upload chương trình Blink). Ta

chỉ cần gắn điện vào cổng USB hoặc nguồn ngoài là có thể kiểm thử được mạch NG.

Arduino NG Rev.C

Page 18: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 15

Vi điều khiển ATmega168 kể từ phiên bản Arduino NG Rev.C đã được thay thế

cho ATmega8 ở các phiên bản trước đó và có thể xem là phiên bản đệm tương tự

Arduino USB v2.

1.2.1.5. Arduino Diecimila (Diecimila = 1 vạn) (2007)

Arduino Diecimila

Thay đổi chính trong phiên bản này đó là việc đưa vào chức năng "tự động reset"

bằng máy tính khi upload chương trình, nghĩa là lúc bấy giờ chúng ta đã có thể lập trình

Arduino như thời điểm hiện tại (gắn cáp USB vào máy tính, viết chương trình, sau đó

tải chương trình lên và tận hưởng thành quả).

Với việc cải tiến nút reset cũng đã khiến những nhà lập trình thiết kế lại các chân

nguồn, và chân digital pin, cung cấp cho họ nhiều khả năng tùy biến hơn. Ví dụ: thêm

chân AREF, VIN, RESET,...

Trong phiên bản này, Arduino đã sử dụng một mạch "dropout voltage regulator"

(khi điện áp đổi thì điện áp so sánh ở Analog IN vẫn không bị nhiễu), đó là một dự kết

hợp hoàn hảo chúng ta không cần phải sử dụng tụ 103, 104 để lọc nhiễu cho các chân

Analog nữa.

Các chân nguồn 3.3V, 5V, GND, Vin đã được điều chỉnh lại và thực sự nó rất ổn

nên đến tận bây giờ chúng ta vẫn dùng thiết kế đó và thống nhất đến bây giờ (với các

mạch phát triển khác từ bên thứ 3). Ngoài ra, về vấn đề nguồn, chúng ta đã có một cầu

Page 19: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 16

chì dán (có thể sửa được). Nó giúp mạch được bảo vệ trước sự nguy hiểm của sự sơ xẩy

đoản mạch, đó là một sự thích nghi trước những sự hỏng hóc qua cổng USB.

1.2.1.6. Arduino Duemilanove (Duemilanove = 2009) (2008 - 2009)

Arduino Duemilanove

Mạch Arduino Duemilanove đã có khả tự động nhận biết mỗi khi sử dụng nguồn

tử cổng USB hay nguồn ngoài (không cần phải thay đổi jumper nữa). Ngoài ra, trong

phiên bản này, còn bổ sung một đường chì nhỏ được nối tắt nhằm giúp cho có thể hủy

chức năng auto-reset (tự động reset khi upload chương trình).

1.2.1.7. Arduino UNO (UNO = 1) 2010 - đến nay

Cái tên UNO nghĩa là "một" trong tiếng Ý, nó được đặt tên như vậy thì lúc này

Arduino IDE cũng đã gần chạm đến mốc 1.0. Nghĩa là, họ muốn nói rằng, UNO sẽ là

mạch tham khảo chính được dùng trong việc hướng dẫn Arduino cho người mới học.

Họ mất 5 năm để định hình một thứ mạch lập trình trở thành một thứ kỳ diệu trong giới

DIY (Do it yourself – tự tay làm lấy) và hơn thế nữa, giới nghiên cứu khoa học.

5 năm đủ để biến một bản mạch thô sơ, trở thành một thứ mạch "tuyệt đẹp" và "đa

năng" như hiện tại.

Page 20: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 17

Arduino UNO – chip chân cắm

Ở mạch này, ngoài việc thay đổi và cách đặt tên cho dễ xác định các chân I/O,

Arduino UNO còn thay con chip FT232RL - FTDI (chuẩn USB to Serial) bằng con chip

ATMega8U2 (chuẩn Serial TTL Converter) nhưng vẫn giữ được pinout cũ của mạch

trước đó. Điều đó làm cho những mạch kế thừa, các dòng phụ trợ cho Arduino USB

không bị lỗi thời và dễ hòa nhập với nhau.

Arduino UNO SMD – chip dán

Từ phiên bản Arduino UNO này, Arduino USB đã chính thức phân nhánh ra thành

2 nhánh con, đó là Arduino Ethernet và Arduino Leonardo nhằm tối ưu hóa cho các dự

án sử dụng Internet (Arduino Ethernet - cái này không phải là shield Ethernet cho

Arduino mà là một board Arduino tích hợp Internet trong một luôn).

Page 21: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 18

Arduino Ethernet

Ở các phiên bản Arduino Leonardo, chúng ta có thể được sử dụng như chuột và

bàn phím.

Arduino Leonardo

Cũng từ phiên bản này, Arduino Leonardo lại phân nhánh ra 2 phiên bản nhỏ hơn

là Arduino Micro và Arduino Yún.

Page 22: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 19

Arduino Micro

Arduino Yún

1.2.1.8. Những dòng Arduino khác

Ngoài dòng Arduino USB kinh điểm trên, chúng ta còn có những dòng Arduino

khác có thể được liệt kê bằng hình ảnh bên dưới.

Mỗi dòng lại có những điểm mạnh và điểm yếu riêng, tuy nhiên, đều là sự sáng

tạo của những con người sáng tạo nên mạch Arduino. Nhờ những sáng tạo này, họ đã

tạo nên một hệ sinh thái vô cùng lớn với Arduino. Chỉ cần một mạch Arduino Mega,

bạn đã có thể tự xây dựng cho mình những cổ máy sáng tạo như máy in 3d, máy khắc

laser,... tất cả đều là nguồn mở “open source” và bạn có thể tự làm cho mình một cái

ngay tại nhà. Hay là, với Arduino Pro mini, những dự án mạng cảm biến chưa bao giờ

dễ như thế, hoặc là những dự án mini robot,...

Page 23: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 20

Page 24: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 21

Arduino MEGA

1.2.2.1. Arduino Mega đầu tiên (2009 - 2010)

Arduino MEGA có rất nhiều chân I/O so với dòng Arduino UNO (54 digital I/O

và 16 analog I/O), đồng thời bộ nhớ flash của MEGA rất lớn, gấp 4 lần so với UNO

(128kb) với vi điều khiển ATmega1280. Rõ ràng, những dự án cần điều khiển nhiều

loại động cơ và xử lý nhiều luồng dữ liệu song song (3 timer), nhiều ngắt hơn (6 cổng

interrupt),... có thể được phát triển dễ dàng với Arduino MEGA, chẳng hạn như: máy

in 3d, quadcopter,...

Các chân digital từ 0 -> 13, analog từ 0 -> 5 và các chân nguồn được thiết kế tương

tự Arduino UNO.

Để có thể thêm được nhiều vùng nhớ hơn, thêm được nhiều chân I/O hơn, nhà

phát triển đã mạnh dạng thay đổi con vi điều khiển ATmega1280.

Cách thiết kế Arduino MEGA tương tự như mạch Arduino UNO nối dài.

Arduino MEGA 1280

Một năm sau đó, với những ý tưởng lớn hơn, hay hơn, nhưng cần phải có một

dung lượng flash lớn hơn... Vì vậy, họ đã thay con ATmega1280 (128kb) bằng con

ATmega2560 (256kb) và Arduino MEGA 2560 ra đời

Arduino MEGA 2560

Page 25: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 22

1.2.2.2. Arduino MEGA ADK (Android compatible) (2011)

Arduino MEGA ADK giúp bạn có thể giao tiếp với các thiết bị Android thông qua

cổng sạc (USB micro) của các thiết bị Android. Ở phiên bản này, Arduino MEGA có

thể giao tiếp được với điện thoại Android thông qua cổng micro usb (cổng sạc) của

Android (>=4.0)

Arduino MEGA ADK

1.2.2.3. Arduino DUE (2012)

Arduino DUE

Arduino DUE là phiên bản đầu tiên sử dụng một vi điều khiển 32 bit thay vì con

vi điều khiển 8 bit ATmega2560 trước đây. Nó có thể tính toán nhanh hơn 4 lần (nếu

so sánh với mạch 8 bit cùng xung nhịp). Xung nhịp của dòng sản phẩm này cũng cao

hơn (84MHz).

Page 26: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 23

1.2.2.4. Arduino Yún (Super mini computer) (2013)

Arduino Yún

Arduino Yún thực sự là một "super mini computer" vì nó cực kì nhỏ chạy hệ điều

hành linux (bản mod openwrt) và nó có sẵn Wifi, và đó chính là vì sao Intel đầu tư mạnh

vào Arduino và cho ra đời board mạch phát triển IoT Development Kit (códùng ngôn

ngữ Arduino để lập trình).

1.3. Cài đặt IDE, driver cho Arduino

Vào trang chủ của Arduino

Vào trang chủ của Arduino: https://www.arduino.cc/

Page 27: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 24

Tải chương trình cài đặt

Nhấn vào mục Software, chọn Download

Chọn phiên bản Hệ điều hành tùy thuộc vào máy tính cần cài đặt: Ví dụ hệ

điều hành là Windows. Tại đây có 2 tùy chọn cho hệ điều hành Windows

là Windows installer và Windows zip file for non admin install. Tùy chọn

thứ nhất dùng cho người là admin của máy, tùy chọn thứ 2 cho người không

phải admin của máy. Thông thường đa số chọn tùy chọn thứ nhất, tức

Windows installer.

Download phần mềm: Arduino có đưa ra 2 lựa chọn, bao gồm chỉ download

về (just download) và download về cùng quyên góp (contribute and

download). Arduino mong muốn người dùng nếu có điều kiện hãy quyên

góp ủng hộ hãng, mức quyên góp thấp nhất là 3USD.

Page 28: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 25

Cài đặt trên máy tính

Phiên bản được viết trong giáo trình này là phiên bản IDE 1.8.1.3. Hiện tại, đây là

phiên bản mới nhất của phần mềm IDE. Sau này có thể sẽ có những phiên bản kế tiếp,

tuy nhiên về cơ bản thì cách cài đặt giống nhau.

Bấm vào file tải về để tiến hành cài đặt, chọn “I Agree” để tiếp tục cài đặt

chương trình.

Page 29: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 26

Lựa chọn việc cài đặt các phần liên quan được hiện ra và chọn “Next” để

tiếp tục quá trình cài đặt.

Phần mềm sẽ yêu cầu bạn chọn vị trí cài đặt và chọn “Install” để tiếp tục

quá trình cài đặt.

Page 30: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 27

Quá trình cài đặt đang được thực hiện cài lên máy tính.

Trong quá trình cài đặt 1 số phiên bản sẽ hỏi có cài driver USB cho phần

mềm IDE không?

Tích chọn vào ô vuông “Always trust software from “Arduino LLC””, sau đó bấm

“Install” để cái đặt driver USB. Cần phải cài driver này thì chương trình mới nhận cổng

USB của mạch Arduino

Page 31: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 28

Hoàn tất cài đặt: bấm “Close” để hoàn tất cài đặt

Biểu tượng: tại màn hình chính “Desktop” sẽ xuất hiện icon Arduino

Khởi động chương trình: bấm chạy icon Arduino vừa cài đặt để khởi động

chương trình

Page 32: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 29

1.4. Giới thiệu các loại kit thực hành Arduino

Hiện tại trên thị trường, có rất nhiều sản phẩm được đóng gói trọn bộ được trang

bị sẵn mạch Arduino và các linh kiện, phụ kiện, cảm biến… dùng dành cho người mới

bắt đầu học Arduino từ cơ bản đến nâng cao.

Một Bộ Arduino Advance Kit bao gồm board mạch chính Arduino Uno R3 và các

thành phần Linh kiện điện tử, Module, Cảm biến nâng cao giúp bạn dễ dàng làm quen

với các chuẩn giao tiếp: SPI (Mạch RFID RC522), I2C (Mạch thời gian thực DS1307),

1 Wire (Cảm biến độ ẩm nhiệt độ DHT11), bộ kit gồm các thành phần như hình sau:

Bộ kit thực hành Arduino

1.5. Ngôn ngữ lập trình cho Arduino

Page 33: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 30

Chương trình Arduino có thể được chia làm 3 phần: cấu trúc (structure), biến số

(variable) và hằng số (constant), hàm và thủ tục (function). Phần này sẽ giúp bạn tìm

hiểu về 3 phần này qua sự diễn giải các khái niệm và mô tả các hàm thao tác/thủ tục.

Cấu trúc (Structure)

setup()

loop()

1.5.1.1. Cấu trúc điều khiển

if

if...else

switch / case

for

while

break

continue

return

goto

1.5.1.2. Cú pháp mở rộng

; (dấu chấm phẩy)

{} (dấu ngoặc nhọn)

// (single line comment)

/* */ (multi-line comment)

#define

#include

1.5.1.3. Toán tử số học

= (phép gán)

+ (phép cộng)

- (phép trừ)

* (phép nhân)

Page 34: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 31

/ (phép chia)

% (phép chia lấy dư)

1.5.1.4. Toán tử so sánh

== (so sánh bằng)

!= (khác bằng)

> (lớn hơn)

< (bé hơn)

>= (lớn hơn hoặc bằng)

<= (bé hơn hoặc bằng)

1.5.1.5. Toán tử logic

&& (và)

|| (hoặc)

! (phủ định)

^ (loại trừ)

1.5.1.6. Phép toán hợp nhất

++ (cộng thêm 1 đơn vị)

-- (trừ đi 1 đơn vị)

+= (phép rút gọn của phép cộng)

-= (phép rút gọn của phép trừ)

*= (phép rút gọn của phép nhân)

/= (phép rút gọn của phép chia)

Biến số (variable) và Hằng số (Constant)

1.5.2.1. Hằng số

HIGH | LOW

INPUT | INPUT_PULLUP | OUTPUT

LED_BUILTIN

true | false

Hằng số nguyên (integer constants)

Page 35: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 32

Hằng số thực (floating point constants)

1.5.2.2. Kiểu dữ liệu

void

boolean

char

unsigned char

byte

int

unsigned int

word

long

unsigned long

short

float

double

array

string (chuỗi kí tự biểu diễn bằng array)

String (object)

1.5.2.3. Chuyển đổi kiểu dữ liệu

char()

byte()

int()

word()

long()

float()

1.5.2.4. Phạm vi của biến và phân loại

static - biến tĩnh

const - biến hằng

volatile

Page 36: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 33

1.5.2.5. Hàm hỗ trợ

sizeof()

Hàm và Thủ tục (Function)

1.5.3.1. Nhập xuất Digital (Digital I/O)

pinMode()

digitalWrite()

digitalRead()

1.5.3.2. Nhập xuất Analog (Analog I/O)

analogReference()

analogRead()

analogWrite() - PWM - PPM

1.5.3.3. Hàm thời gian

millis()

micros()

delay()

delayMicroseconds()

1.5.3.4. Hàm toán học

min()

max()

abs()

map()

pow()

sqrt()

sq()

isnan()

constrain()

exp(x)

Page 37: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 34

frexp(x, int *exp)

ldexp(x, int exp)

log(x)

log10(x)

modf(x, *i)

ceil(x)

floor(x)

atoi(a[])

1.5.3.5. Hàm lượng giác

cos()

sin()

tan()

asin(x)

acos(x)

atan(x)

atan2(x, y)

cosh(x)

sinh(x)

tanh(x)

1.5.3.6. Sinh số ngẫu nhiên

randomSeed()

random()

1.5.3.7. Nhập xuất nâng cao (Advanced I/O)

tone()

noTone()

shiftOut()

shiftIn()

pulseIn()

Page 38: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 35

1.5.3.8. Xử lý chuỗi

isAscii()

isWhitespace()

isAlpha()

isAlphaNumeric()

isControl()

isDigit()

isGraph()

isLowerCase()

isPrintable()

isPunct()

isSpace()

isUpperCase()

isHexadecimalDigit()

tolower()

toupper()

1.5.3.9. Bits và Bytes

lowByte()

highByte()

bitRead()

bitWrite()

bitSet()

bitClear()

bit()

1.5.3.10. Ngắt (interrupt)

attachInterrupt()

detachInterrupt()

interrupts()

noInterrupts()

Page 39: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 36

1.5.3.11. Giao tiếp

Serial

1.6. Nạp chương trình cho Arduino

Trong phần này, sẽ hướng dẫn nạp chương trình đơn giản (điều khiển đèn LED

nhấp nháy theo chu kì 1 giây) cho Arduino Uno R3.

Bước 1: Kết nối Arduino UNO R3 vào máy tính

Bước 2: Xác định cổng kết nối của Arduino Uno R3 với máy tính

Khi Arduino Uno R3 kết nối với máy tính, nó sẽ sử dụng một cổng COM

(Communication port - cổng dữ liệu ảo) để máy tính và bo mạch có thể truyền tải dữ

liệu qua lại thông qua cổng này.

Để tìm được cổng COM đang được sử dụng để máy tính và mạch Arduino UNO

R3 giao tiếp với nhau, bạn phải mở chức năng Device Manager của Windows.

Bạn mở cửa sổ Run và gõ lệnh “mmc devmgmt.msc”.

Page 40: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 37

Sau đó bấm Enter, cửa sổ Device Manager sẽ hiện lên.

Page 41: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 38

Mở mục Ports (COM & LPT), bạn sẽ thấy cổng COM Arduino Uno R3 đang kết

nối

Cổng kết nối ở đây là COM3.

Thông thường, trong những lần kết nối tiếp theo, Windows sẽ sử dụng lại cổng

COM3 để kết nối nên bạn không cần thực hiện thêm thao tác tìm cổng COM này nữa.

Bước 3: Khởi động Arduino IDE

Bước 4: Cấu hình phiên làm việc cho Arduino IDE

Khi Arduino Uno R3 kết nối với máy tính, nó sẽ sử dụng một cổng COM

(Communication port - cổng dữ liệu ảo) để máy tính và bo mạch có thể truyền tải dữ

liệu qua lại thông qua cổng này.

Vào menu Tools -> Board -> chọn Arduino Uno

Page 42: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 39

Vào menu Tools -> Serial Port -> chọn cổng Arduino đang kết nối với máy tính.

Ở máy của mình là COM3.

Xác nhận cổng COM của Arduino IDE ở góc dưới cùng bên phải cửa sổ làm việc

Page 43: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 40

Vào menu Tools -> Programmer -> chọn AVR ISP

Bước 5: Nạp mã nguồn chương trình mẫu

Nạp một chương trình mẫu bằng cách vào menu File -> Examples -> 01.Basics -

> chọn Blink.

Page 44: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 41

Bạn sẽ thấy Arduino IDE mở một cửa sổ mới chứa mã nguồn Blink. Mã này có

chức năng là điều khiển đèn LED màu cam trên mạch Arduino Uno R3 nhấp nháy với

chu kì 1 giây.

Bấm tổ hợp phím Ctrl + U để tải chương trình lên mạch Arduino Uno R3. Bạn sẽ

thấy IDE xác nhận đã lập trình thành công như hình dưới.

Page 45: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 42

1.7. Sử dụng thư viện lập trình Arduino

Các thư viện Ardunio là những chương trình được sử dụng thường xuyên, có sẵn

để giúp bạn tìm hiểu về số lượng các sketch có giới hạn của IDE. Những code add-on

này có thể được cài đặt trong IDE hoặc tải xuống dưới dạng thư mục zip trên Arduino.cc

hoặc trang web khác.

Thế mạnh của Arduino nằm ở sự hỗ trợ mạnh mẽ của cộng đồng, đặc biệt là vô số

các thư viện được viết ra để chạy trên Arduino. Trong quá trình làm việc với Arduino,

bạn sẽ thường xuyên phải cài đặt thêm các thư viện để làm việc được với các phần cứng

mà chưa được hỗ trợ sẵn bởi các thư viện mặc định có trong Arduino IDE.

Thư viện cho Arduino thường chứa file nguồn là “.cpp” và file “.h”, và thư mục

examples để chứa các đoạn code ví dụ mô tả cách sử dụng thư viện đó, thường có đuôi

“.pde” hay “.ino”. Trong một số trường hợp có thể có các file khác.

1.8. Khởi tạo Project, thêm thư viện lập trình

Cách 1: Dùng Libraries Manager

Đây là cách đơn giản và tiện dụng nhất. Bạn vào Sketch > Include

Libraries > Manage Libraries… để mở cửa sổ Library Manager. Bạn gõ tên thư viện

muốn cài đặt và chọn Install.

Page 46: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 43

Sau khi thư viện được cài đặt, bạn có thể thấy thư viện được xuất hiện trong danh

sách các thư viện của Arduino.

Bạn có thể mở file code mẫu của thư viện để tham khảo cách sử dụng từ

menu FIle > Examples > Tên thư viện

Page 47: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 44

Cách 2: Cài đặt từ file .zip

Rất nhiều thư viện cho Arduino được chia sẻ ở trang web “github.com”. Đây là

trang web chứa các dự án mã nguồn mở cực kỳ phổ biến và bạn dễ dàng download toàn

bộ file về dưới dạng “.zip”.

Ví dụ thư viện làm việc với led 7 đoạn dùng IC TM1637 được chia sẻ ở

link “https://github.com/avishorp/TM1637”. Khi bạn vào trang này, bạn có thể click

vào nút Clone or download và chọn Download ZIP như hình dưới:

Sau khi tải file zip của thư viện về, bạn vào Sketch > Include Library > Add .ZIP

Library… sau đó chọn file vừa tải về để cài đặt.

Page 48: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 1: TỔNG QUAN VỀ ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 45

Cách 3: Cài đặt thủ công

Từ file zip bạn download về, đầu tiên giải nén ra thành 1 folder, sau đó copy thư

mục đó vào “My Documents\Arduino\libraries\”. Sau đó tắt và mở lại Arduino IDE để

cập nhật thư viện.

Trong một số trường hợp, trong My Documents không có thư mục Arduino, tại

Arduino IDE, các bạn chọn File > Preferences > Settings tại mục Sketchbook

location và copy thư mục đã giải nén vào đường dẫn đó.

Page 49: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 46

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

2.1. Lập trình - mô phỏng ứng dụng I/O

Điều khiển LED đơn

Chúng ta sẽ tìm hiểu cách để điều khiển một con đèn led nhấp nháy.

2.1.1.1. Chuẩn bị phần cứng

Thiết bị, linh kiện Số lượng

Board Arduino 01

Testboard 01

Dây cắm board 02

Led 5mm 01

Điện trở 220 Ohm 01

2.1.1.2. Lắp mạch

2.1.1.3. Mã lập trình

Trước tiên, cứ mỗi khi dùng một con LED, chúng ta phải khai báo chân Digital

mà ta sử dụng cho con đèn LED.

Page 50: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 47

Trong ví dụ ngày hôm nay, chúng ta sử dụng chân LED là chân digital 13. Nên

đoạn code cần nằm trong void setup():

Vd: pinMode(13,OUTPUT);

Để bật một con đèn LED, bạn phải digitalWrite HIGH cho chân số 13 (chân Digtal

được kết nối với con LED). Đoạn code này nằm trong void loop()

Vd: digitalWrite(13,HIGH);

Dòng lệnh trên sẽ cấp một điện thế là 5V vào chân số Digital 13. Điện thế sẽ đi

qua điện trở 220ohm rồi đến đèn LED (sẽ làm nó sáng mà không bị cháy, ngoài ra bạn

có thể các loại điện trở khác <= 10kOhm).

Để tắt một con đèn LED, bạn phải digitalWrite LOW cho chân số 13 (chân Digtal

được kết nối với con LED). Đoạn code này cũng nằm trong void loop()

Vd: digitalWrite(13,LOW);

Lúc này điện thế tại chân 13 sẽ là 0 V => đèn LED tắt. Và để thấy được trạng thái

bật và tắt của đèn LED bạn phải dừng chương trình trong một khoảng thời gian đủ lâu

để mắt cảm nhận được (chỉ cần dừng chương trình trong vài miligiây là thấy được rồi).

Vì vậy, hàm delay được tạo ra để làm việc này (Dừng hẳn chương trình bao nhiêu mili

giây).

Đoạn code lập trình

1. /*

2. Blink - Nhấp nháy

3. Đoạn code làm nhấp nháy một đèn LED cho trước

4. *

5. // chân digital 13 cần được kết nối với đèn LED

6. // và chân digital 13 này sẽ được đặt tên là 'led'. Biến 'led' này có kiểu dữ liệu

là int và có giá trị là 13

7. int led = 13;

8. // Hàm setup chạy một lần duy nhất khi khởi động chương trình

9. void setup() {

10. // đặt 'led' là OUTPUT

11. pinMode(led, OUTPUT);

12. }

13. // Hàm loop chạy mãi mãi sau khi kết thúc hàm setup()

14. void loop() {

15. digitalWrite(led, HIGH); // bật đèn led sáng

16. delay(1000); // dừng chương trình trong 1 giây => thấy đèn sáng 1 giây

17. digitalWrite(led, LOW); // tắt đèn led

18. delay(1000); // dừng chương trình trong 1 giây => thấy đèn tắt 1 giây

19. }

20.

Page 51: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 48

2.1.1.4. Bài tập ứng dụng

Điều khiển Led chớp tắt:

http://arduino.vn/bai-viet/77-bai-2-cach-lam-den-led-nhap-nhay-theo-yeu-cau

Điều khiển 8 Led:

http://arduino.vn/bai-viet/113-dieu-khien-8-den-led-sang-nhap-nhay-theo-y-muon-cua-ban-de-hay-kho

Điều khiển đèn Led bằng nút nhấn:

http://arduino.vn/bai-viet/153-bai-8-dung-button-nut-bam-de-dieu-khien-mot-den-led

Điều khiển LED 7 đoạn

Để điều khiển nhiều hơn 1 con LED 7 đoạn thì ta không thể sử dụng trực tiếp trên

1 board Arduino vì không đủ chân cho các con LED 7 đoạn thứ 2, 3,...

Trong phạm vi bài viết này, tớ có tham khảo một số hình ảnh, thông tin từ 2 bài

viết kia để các bạn dễ dàng nắm bắt. Đồng thời, trước khi bắt đầu, bạn bắt buộc phải

biết về “shiftOut”.

Phần này chúng ta sẽ tìm hiểu cách điều khiển 1 đèn LED 7 đoạn qua 1 IC HC595

được điều khiển bởi Arduino. Sau đó sẽ là 2 IC HC 595, và cứ như thế sẽ làm được

nhiều LED 7 đoạn hơn.

Nguyên lý căn bản của LED 7 đoạn đó là cấp nguồn là nó sáng. Để nó sáng theo

ý mình thì bạn cần phải nói ngôn ngữ Arduino cho mạch Arduino Uno hiểu, từ đó

Arduino Uno sẽ điều khiển IC HC 595 (chỉ tốn 3 chân điều khiển), từ đó IC HC595 sẽ

cấp nguồn cho các chân LED 7 đoạn theo yêu cầu của mình!

2.1.2.1. Chuẩn bị phần cứng

Thiết bị, linh kiện Số lượng Board Arduino 01 Testboard 01 Dây cắm board Led 7 đoạn (chung cực dương)

02

IC HC595 (dành cho việc ShiftOut)

02

Tụ điện 1uf (từ 6,3v trở lên) 01 Điện trở 560 Ohm (hoặc 220 ohm hoặc 1kohm)

01

Page 52: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 49

2.1.2.2. Giới thiệu led 7 đoạn

LED 7 đoạn có 2 loại:

Chung cực dương (Anode chung): Mỗi đèn LED có 2 chân (1 dương 1

âm). Ở loại LED 7 đoạn này tất cả cực dương sẽ được nối chung cực dương.

Để làm các đèn LED trong LED 7 đoạn sáng thì bạn chỉ cần cấp cực âm

vào các chân của đèn. Với loại LED 7 đoạn này bạn chỉ cần 1 điện trở là

đủ.

Chung cực âm (Cathode chung): Tương tự nhưng ngược lại và bạn cần

đến 8 điện trở cho các chân dương của LED.

Page 53: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 50

2.1.2.3. Lắp mạch

Sơ đồ lắp mạch

Page 54: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 51

Sơ đồ mô phỏng trên Protues

Page 55: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 52

2.1.2.4. Mã lập trình

Để điều khiển được LED 7 đoạn qua IC HC 595, chúng ta phải làm quen với một

kỹ thuật, được gọi là shiftOut.

ShiftOut là việc gửi tín hiệu cho 1 IC có hỗ trợ shiftOut (ví dụ IC HC595), cứ mỗi

lần gửi nó gửi 1 byte (không hơn không kém), mỗi 1 bit (có tổng cộng 8 bit trong 1

byte) sẽ quản lý giá trị điện tại chân tín hiệu của HC 595 (các chân có tên là Q0-Q7).

1. /* 2. shiftOut ra 1 Module LED 7 đoạn đơn 3. */ 4. //chân ST_CP của 74HC595 5. int latchPin = 8; 6. //chân SH_CP của 74HC595 7. int clockPin = 12; 8. //Chân DS của 74HC595 9. int dataPin = 11; 10. // Ta sẽ xây dựng mảng hằng số với các giá trị cho trước 11. // Các bit được đánh số thứ tự (0-7) từ phải qua trái (tương ứng với A-F,DP) 12. // Vì ta dùng LED 7 đoạn chung cực dương nên với các bit 0 13. // thì các đoạn của LED 7 đoạn sẽ sáng 14. // với các bit 1 thì đoạn ấy sẽ tắt 15. //mảng có 10 số (từ 0-9) và 16. const int Seg[10] = { 17. 0b11000000,//0 - các thanh từ a-f sáng 18. 0b11111001,//1 - chỉ có 2 thanh b,c sáng 19. 0b10100100,//2 20. 0b10110000,//3 21. 0b10011001,//4 22. 0b10010010,//5 23. 0b10000011,//6 24. 0b11111000,//7 25. 0b10000000,//8 26. 0b10010000,//9 27. }; 28. void setup() { 29. //Bạn BUỘC PHẢI pinMode các chân này là OUTPUT 30. pinMode(latchPin, OUTPUT); 31. pinMode(clockPin, OUTPUT); 32. pinMode(dataPin, OUTPUT); 33. } 34. void loop() { 35. static int point = 0; 36. //shiftout - start 37. digitalWrite(latchPin, LOW); 38. //Xuất bảng ký tự ra cho Module LED 39. shiftOut(dataPin, clockPin, MSBFIRST, Seg[point]); 40. digitalWrite(latchPin, HIGH); 41. //shiftout - end 42. point = (point + 1) % 10; // Vòng tuần hoàn từ 0--9 43. delay(500);//Đợi 0.5 s cho mỗi lần tăng số 44. } 45.

Page 56: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 53

2.1.2.5. Bài tập ứng dụng

2 Module LED 7 đoạn đơn và nhiều hơn.

Kể từ con IC HC595 thứ 2 trở đi, bạn sẽ lắp như thế này. Con thứ 2 thì mắc vào

con thứ 1, con thứ 3 thì mắc vào con thứ 2,... Sau đó xem phần lập trình để xây dựng

bảng số. Viết một hàm đơn giản để sau này bạn lắp bao nhiêu thì tùy ý. Con sau sẽ lắp

trước con liền kề nó.

Lắp LED 7 đoạn thứ 2 và IC HC595 như trên.

Lắp mạch IC HC595 thứ 1 và thứ 2 theo sơ đồ sau (con thứ 3 trở đi thì đấu dây

tương tự):

Sơ đồ lắp mạch

Page 57: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 54

Sơ đồ mô phỏng trên Protues

Page 58: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 55

1. /* 2. shiftOut ra 1 Module LED 7 đoạn đơn 3. */ 4. //chân ST_CP của 74HC595 5. int latchPin = 8; 6. //chân SH_CP của 74HC595 7. int clockPin = 12; 8. //Chân DS của 74HC595 9. int dataPin = 11; 10. 11. // Ta sẽ xây dựng mảng hằng số với các giá trị cho trước 12. // Các bit được đánh số thứ tự (0-7) từ phải qua trái (tương ứng với A-F,DP) 13. // Vì ta dùng LED 7 đoạn chung cực dương nên với các bit 0 14. // thì các đoạn của LED 7 đoạn sẽ sáng 15. // với các bit 1 thì đoạn ấy sẽ tắt 16. 17. //mảng có 10 số (từ 0-9) và 18. const byte Seg[10] = { 19. 0b11000000,//0 - các thanh từ a-f sáng 20. 0b11111001,//1 - chỉ có 2 thanh b,c sáng 21. 0b10100100,//2 22. 0b10110000,//3 23. 0b10011001,//4 24. 0b10010010,//5 25. 0b10000010,//6 26. 0b11111000,//7 27. 0b10000000,//8 28. 0b10010000,//9 29. }; 30. 31. void setup() { 32. //Bạn BUỘC PHẢI pinMode các chân này là OUTPUT 33. pinMode(latchPin, OUTPUT); 34. pinMode(clockPin, OUTPUT); 35. pinMode(dataPin, OUTPUT); 36. } 37. 38. void HienThiLED7doan(unsigned long Giatri, byte SoLed = 2) { 39. 40. byte *array= new byte[SoLed]; 41. for (byte i = 0; i < SoLed; i++) { 42. //Lấy các chữ số từ phải quá trái 43. array[i] = (byte)(Giatri % 10UL); 44. Giatri = (unsigned long)(Giatri /10UL); 45. } 46. digitalWrite(latchPin, LOW); 47. for (int i = SoLed - 1; i >= 0; i--) 48. shiftOut(dataPin, clockPin, MSBFIRST, Seg[array[i]]); 49. 50. digitalWrite(latchPin, HIGH); 51. free(array); 52. } 53. 54. 55. void loop() { 56. static unsigned long point = 0; 57. 58. HienThiLED7doan(point, 2); 59. 60. point = (point + 1) % 100UL; // Vòng tuần hoàn từ 0--99 61. delay(500);//Đợi 0.5 s cho mỗi lần tăng số 62. } 63.

Page 59: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 56

Điều khiển nhiều LED 7 đoạn:

http://arduino.vn/bai-viet/214-cach-lap-trinh-nhieu-con-led-7-doan-loai-don

Điều khiển Module 4 LED 7 đoạn

http://arduino.vn/result/1369-tong-quan-ve-cach-su-dung-module-4-led-7-doan-phan-1 http://arduino.vn/bai-viet/1413-tong-quan-ve-cach-su-dung-module-4-led-7-doan-phan-2 http://arduino.vn/bai-viet/1445-tong-quan-ve-cach-su-dung-module-4-led-7-doan-phan-3

Đếm số lần nhấn nút với Led 7 Đoạn:

http://arduino.vn/bai-viet/162-dem-so-lan-nhan-button-voi-led-7-doan

Điều khiển Matrix LED

2.1.3.1. Chuẩn bị phần cứng

Thiết bị, linh kiện Số lượng

Board Arduino 01

Testboard 02

Dây cắm board

Led ma trận 8x8 01

IC 74HC595 02

Điện trở 560 Ohm (hoặc

220 ohm hoặc 1kohm)

08

2.1.3.2. Giới thiệu LED MATRIX (Led ma trận)

LED MATRIX 8x8 đơn giản chỉ là 64 con LED được sắp xếp với nhau theo dạng

ma trận, thành 8 hàng và 8 cột, tức là 16 chân. Vì mỗi loại LED MATRIX có sơ đồ chân

riêng nên các bạn hãy tra cứu datasheet của nó để có thể lắp mạch chính xác.

Trong bài viết này sử dụng LED matrix "Row Anode", có nghĩa là các chân điều

khiển hàng của ma trận chính là cực dương của LED.

Page 60: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 57

Để LED MATRIX hoạt động, chúng ta chỉ cần cấp dòng điện vào các chân ROWs

và nối các chân COLUMNS với GND.

2.1.3.3. Lắp mạch

Sơ đồ lắp mạch

Để điều khiển LED matrix, mình sử dụng 2 con IC 74HC595, 1 để điều khiển 8

chân row, 1 để điều khiển 8 chân column.

Trước mỗi chân row, mình có gắn thêm 1 con trở 560 ohm để hạn dòng cho LED.

LED matrix gồm 8 chân row: từ row 0 --> row 7; 8 chân column: từ column 0 -->

column 7. Trong sơ đồ mạch phía trên, 8 chân ở top của LED matrix (từ trái qua phải)

gồm: column 0, column 1, row 1, column 7, row 3, column 2, column 4, row 0. 8 chân

ở bottom của LED matrix (từ trái qua phải) gồm: row 4, row 6, column 6, column 5,

row 7, column 3, row 5, row 2.

Ở đây lắp IC 74HC595 control columns nối tiếp theo sau IC 74HC595 control

rows, do đó, chân 14 của IC 74HC595 control columns sẽ nối với chân 9 của IC

74HC595 control rows.

Chân 11 (CLOCK), 12 (LATCH) của 2 IC nối với nhau, và nối với pin 10,11 của

Arduino.

Chân 14 của IC 74HC595 control rows sẽ nối với pin 12 của Arduino.

Chân số 10 và 16 của 2 IC sẽ nối VCC, chân số 8 và 13 sẽ nối GND.

Page 61: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 58

2.1.3.4. Mã lập trình

1. const int DATA = 12;// pin 12 của Arduino nối với pin DATA của 74HC595 2. const int CLOCK = 10;//pin 10 của Arduino nối với pin CLOCK của 74HC595 3. const int LATCH = 11;//pin 11 của Arduino nối với pin LATCH của 74HC595 4. /* hàng và cột của LED matrix*/ 5. int row[] = {1, 2, 4, 8, 16, 32, 64, 128}; 6. int column[] = {128, 64, 32, 16, 8, 4, 2, 1}; 7. /*biểu diễn các ký tự chữ và số ở dạng HEX*/ 8. unsigned int characterHEX[][8] = { 9. {0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x66},//A 10. {0x78,0x64,0x68,0x78,0x64,0x66,0x66,0x7C},//B 11. {0x3C,0x62,0x60,0x60,0x60,0x62,0x62,0x3C},//C 12. {0x78,0x64,0x66,0x66,0x66,0x66,0x64,0x78},//D 13. {0x7E,0x60,0x60,0x7C,0x60,0x60,0x60,0x7E},//E 14. {0x7E,0x60,0x60,0x7C,0x60,0x60,0x60,0x60},//F 15. {0x3C,0x62,0x60,0x60,0x66,0x62,0x62,0x3C},//G 16. {0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x66},//H 17. {0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x7E},//I 18. {0x7E,0x18,0x18,0x18,0x18,0x18,0x1A,0x0C},//J 19. {0x62,0x64,0x68,0x70,0x70,0x68,0x64,0x62},//K 20. {0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7E},//L 21. {0xC3,0xE7,0xDB,0xDB,0xC3,0xC3,0xC3,0xC3},//M 22. {0x62,0x62,0x52,0x52,0x4A,0x4A,0x46,0x46},//N 23. {0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x3C},//O 24. {0x7C,0x62,0x62,0x7C,0x60,0x60,0x60,0x60},//P 25. {0x38,0x64,0x64,0x64,0x64,0x6C,0x64,0x3A},//Q 26. {0x7C,0x62,0x62,0x7C,0x70,0x68,0x64,0x62},//R 27. {0x1C,0x22,0x30,0x18,0x0C,0x46,0x46,0x3C},//S 28. {0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18},//T 29. {0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C},//U 30. {0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x18},//V 31. {0x81,0x81,0x81,0x81,0x81,0x99,0x99,0x66},//W 32. {0x42,0x42,0x24,0x18,0x18,0x24,0x42,0x42},//X 33. {0xC3,0x66,0x3C,0x18,0x18,0x18,0x18,0x18},//Y 34. {0x7E,0x02,0x04,0x08,0x10,0x20,0x40,0x7E},//Z 35. {0x3C,0x66,0x66,0x6E,0x76,0x66,0x66,0x3C},//0 36. {0x18,0x38,0x58,0x18,0x18,0x18,0x18,0x7E},//1 37. {0x3C,0x66,0x66,0x0C,0x18,0x30,0x7E,0x7E},//2 38. {0x7E,0x0C,0x18,0x3C,0x06,0x06,0x46,0x3C},//3 39. {0x0C,0x18,0x30,0x6C,0x6C,0x7E,0x0C,0x0C},//4 40. {0x7E,0x60,0x60,0x7C,0x06,0x06,0x46,0x3C},//5 41. {0x04,0x08,0x10,0x38,0x6C,0x66,0x66,0x3C},//6 42. {0x7E,0x46,0x0C,0x18,0x18,0x18,0x18,0x18},//7 43. {0x3C,0x66,0x66,0x3C,0x66,0x66,0x66,0x3C},//8 44. {0x3C,0x66,0x66,0x36,0x1C,0x08,0x10,0x20},//9 45. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},// khoảng trắng 46. {0x00,0x66,0xFF,0xFF,0x7E,0x3C,0x18,0x00}// hình trái tim, kí hiệu là '&' 47. }; 48. /* ký tự đại diện để biểu diễn chữ và số trên matrix*/ 49. char character[] =

{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9',' ','&'};

50. void setup() 51. { 52. Serial.begin(9600);// Serial với baudrate 9600 53. /* 3 pins DATA, CLOCK, LATCH cần phải để OUTPUT*/ 54. pinMode(DATA,OUTPUT); 55. pinMode(CLOCK,OUTPUT); 56. pinMode(LATCH,OUTPUT); 57. /* in ra cổng Serial "ENTER A STRING"*/ 58. Serial.println("ENTER A STRING"); 59. } 60. /* hàm nhấp nháy chữ*/ 61. /* image là ký tự cần hiển thị, 62. times là số lần nhấp nháy,

Page 62: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 59

63. on, off là độ dài của hiệu ứng*/ 64. void blinkImage(unsigned int image[],int times,int on,int off) 65. { 66. for(int i=0;i<times;i++) 67. { 68. displayImage(image,on);// hiển thị 69. 70. clearImage(off);// xóa 71. } 72. } 73. /*hàm hiển thị chữ lên LED matrix*/ 74. /* image là ký tự cần hiển thị, 75. duration là độ dài của hiệu ứng*/ 76. void displayImage(unsigned int image[],int duration) 77. { 78. for(int hold=0;hold<duration;hold++) 79. { 80. for(int a=0;a<8;a++) 81. { 82. digitalWrite(LATCH, LOW); 83. shiftOut(DATA, CLOCK, MSBFIRST,~image[a]);//column 84. shiftOut(DATA, CLOCK, MSBFIRST,row[a]);//row 85. digitalWrite(LATCH, HIGH); 86. delay(1); 87. } 88. } 89. } 90. /* hàm clear LED matrix*/ 91. /* duration là độ dài của hiệu ứng clear*/ 92. void clearImage(int duration) 93. { 94. for(int hold=0;hold<duration;hold++) 95. { 96. for(int a=0;a<8;a++) 97. { 98. digitalWrite(LATCH, LOW); 99. shiftOut(DATA, CLOCK, MSBFIRST,B11111111);//column 100. shiftOut(DATA, CLOCK, MSBFIRST,row[a]);//row 101. digitalWrite(LATCH, HIGH); 102. delay(1); 103. } 104. } 105. } 106. /*hàm scroll image sang trái*/ 107. /* image là ký tự cần hiển thị*/ 108. void scrollImage(unsigned int image[]) 109. { 110. int shift, hold, a;//biến shift dùng để lưu số bit cần shiftOut 111. //biến hold dùng để điều chỉnh độ dài của hiệu ứng 112. //biến a dùng để lưu column và row hiện tại 113. for(shift = 0; shift < 9; shift++) 114. { 115. for(hold = 0; hold < 30; hold++) 116. { 117. for(a = 0; a < 8; a++) 118. { 119. digitalWrite(LATCH, 0); 120. /* dịch ký tự sang trái*/ 121. shiftOut(DATA,CLOCK,MSBFIRST,~(image[a]<<shift));//column 122. shiftOut(DATA,CLOCK,MSBFIRST,row[a]);//row 123. digitalWrite(LATCH, 1); 124. delay(1); 125. } 126. } 127. } 128. 129. } 130. void loop()

Page 63: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 60

131. { 132. String string;// khai báo biến String object 133. /* đọc dữ liệu từ cổng Serial */ 134. while(Serial.available() > 0) 135. { 136. char ch = Serial.read(); 137. string += ch;// lưu ký tự vừa nhận được vào biến string 138. delay(5);// delay để đợi ký tự tiếp theo, KHÔNG THỂ THIẾU 139. } 140. Serial.println(string);// in string ra Serial monitor 141. /* hiển thị ra LED matrix */ 142. while(Serial.available() == 0) 143. { 144. /*so sánh từng phần tử của string với 145. các ký tự đã được lưu trong mảng character[]. 146. Nếu ký tự xuất hiện trong string tồn tại 147. trong mảng character[] thì hiển thị ra LED matrix, 148. nếu không tồn tại thì báo "invalid character"*/ 149. for(int k = 0;k < string.length();k++) 150. { 151. for(int i=0;i < sizeof(character);i++) 152. { 153. if(string.charAt(k) == character[i]) 154. { 155. //bỏ "//" nếu muốn sử dụng hàm blinkImage() 156. //blinkImage(characterHEX[i],1,30,30); 157. scrollImage(characterHEX[i]); 158. break; 159. } 160. /* nếu ko tồn tại ký tự xuất hiện trong string*/ 161. if((i == (sizeof(character) - 1)) && (string.charAt(k) !=

character[i])) 162. { 163. Serial.print(string.charAt(k)); 164. Serial.println(":invalid character"); 165. } 166. } 167. /*kiểm tra xem có dữ liệu mới hay không*/ 168. if(Serial.available() > 0) 169. break; 170. } 171. delay(300); 172. } 173. }

2.1.3.5. Giải thích mạch

//hàng và cột của LED matrix

int row[] = {1, 2, 4, 8, 16, 32, 64, 128};

int column[] = {128, 64, 32, 16, 8, 4, 2, 1};

=> dùng để kiểm soát hàng và cột của matrix.

1 = B00000001 => hàng 0

2 = B00000010 => hàng 1

4 = B00000100 => hàng 2

....

128 = B10000000 => hàng 7

Page 64: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 61

tương tự đối với cột.

- Tạo ký tự. Để biểu diễn chữ 'I' ra LED matrix, ta sẽ tạo 1 mảng sau:

I[] = {

B01111110,

B00011000,

B00011000,

B00011000,

B00011000,

B00011000,

B00011000,

B01111110};

những vị trí có số 1 sẽ là những điểm sẽ sáng trên LED matrix. Để ngắn gọn, ta có

thể chuyển mảng trên về dạng số HEX: B0111 1110 => 0111 = 7 (DEC) = 7 (HEX);

1110 = 14 (DEC) = E (HEX); ==> B01111110 = 0x7E;

tương tự ta sẽ được: I[] = {0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x7E};

==> trong đoạn code trên chỉ mới tạo 26 chữ cái và 10 chữ số, các bạn có thể chỉnh

sửa cho nó đẹp hơn và sáng tạo ra những hình ảnh khác nhé!

- hàm displayImage()

/*hàm hiển thị chữ lên LED matrix*/

/* image là ký tự cần hiển thị,

duration là độ dài của hiệu ứng*/

void displayImage(unsigned int image[],int duration)

{

for(int hold=0;hold<duration;hold++)

{

for(int a=0;a<8;a++)

{

digitalWrite(LATCH, LOW);

shiftOut(DATA, CLOCK, MSBFIRST,~image[a]);//column

shiftOut(DATA, CLOCK, MSBFIRST,row[a]);//row

digitalWrite(LATCH, HIGH);

Page 65: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 62

delay(1);

}

}

}

=> Tại 1 thời điểm, chúng ta chỉ có thể điều khiển các LEDs của 1 row, do đó,

trong thực tế, hình ảnh ta thấy được trên LED matrix là do "hiện tượng lưu ảnh" của

mắt, khi chúng ta quét các hàng của matrix với tốc độ rất nhanh. Để làm được việc này,

sau mỗi lần shiftOut, ta chỉ delay 1/1000 giây, và lặp lại "duration" lần sau khi đã

shiftOut hết 8 bit. Giá trị của biến duration càng lớn thì thời gian của hiệu ứng càng dài.

==> Ta sử dụng bitwise NOT (~) khi shiftOut columns, vì để bật 1 LED, row cần

được nối VCC (set 1), column cần được nối GND (set 0).

==> Nếu sử dụng LSBFIRST, ta có thể lật ngược ký tự so với ban đầu.

/*hàm scroll image sang trái*/

/* image là ký tự cần hiển thị*/

void scrollImage(unsigned int image[])

{

int shift, hold, a;//biến shift dùng để lưu số bit cần shiftOut

//biến hold dùng để điều chỉnh độ dài của hiệu ứng

//biến a dùng để lưu column và row hiện tại

for(shift = 0; shift < 9; shift++)

{

for(hold = 0; hold < 30; hold++)

{

for(a = 0; a < 8; a++)

{

digitalWrite(LATCH, 0);

/* dịch ký tự sang trái*/

shiftOut(DATA,CLOCK,MSBFIRST,~(image[a]<<shift));//column

shiftOut(DATA,CLOCK,MSBFIRST,row[a]);//row

digitalWrite(LATCH, 1);

delay(1);

Page 66: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 63

}

}

}

}

==> Chúng ta sử dụng "<<" và ">>" để dịch ký tự sang trái và phải. Khi dịch phải,

cần đặt biến ở dạng unsigned để tránh tình trạng "sign extension". Các bạn có thể tham

khảo thêm ở BIT MATH - Các phép toán thao tác trên bit.

==> Biến shift sẽ lưu giữ số bit cần dịch trái (phải).

2.1.3.6. Bài tập ứng dụng

Hiển thị hình ảnh với LED MATRIX 8x8:

http://arduino.vn/bai-viet/256-hien-thi-hinh-anh-voi-led-matrix-8x8

Module LED L10 với Arduino

http://arduino.vn/bai-viet/6485-matrix-led-arduino-lam-led-matrix-voi-arduino

Giao tiếp LCD, phím nhấn và Matrix phím nhấn

2.1.4.1. Chuẩn bị phần cứng

Thiết bị, linh kiện Số lượng

Board Arduino 01

Testboard 02

Dây cắm board

Module LCD 16x02 01

Biến trở (1k, 4.7K, 10K…) 01

Module ma trận phím 4x4 01

2.1.4.2. Giao tiếp LCD

2.1.4.2.1. Sơ lược về LCD và thư viện điều khiển LCD của Arduino

Thư viện điều khiển LCD của Arduino

Thư viện LiquidCrystal là thư viện điều khiển LCD trên Arduino, nó được xây

dựng để cho các bạn có thể lập trình điều khiển các module LCD ô vuông một cách

nhanh chóng mà không cần phải lập trình nhiều. Thư viện này được viết để phù hợp với

Page 67: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 64

con IC HD44780 (con điều khiển module LCD), tuy nhiên, trên thị trường mình toàn

thấy các con LCD của Trung Quốc và thư viện này vẫn hoạt động tốt. Nghĩa là, bạn chỉ

cần mua module LCD về và gắn vào Arduino, nạp code là chạy được, không cần quan

tâm đến IC điều khiển LCD.

LCD pinout - sơ đồ chân của LCD

1. VSS: tương đương với GND - cực âm

2. VDD: tương đương với VCC - cực dương (5V)

3. Constrast Voltage (Vo): điều khiển độ sáng màn hình

4. Register Select (RS): điều khiển địa chỉ nào sẽ được ghi dữ liệu

5. Read/Write (RW): Bạn sẽ đọc (read mode) hay ghi (write mode) dữ liệu? Nó sẽ

phụ thuộc vào bạn gửi giá trị gì vào.

6. Enable pin: Cho phép ghi vào LCD

7. D0 - D7: 8 chân dư liệu, mỗi chân sẽ có giá trị HIGH hoặc LOW nếu bạn đang

ở chế độ đọc (read mode) và nó sẽ nhận giá trị HIGH hoặc LOW nếu đang ở chế

độ ghi (write mode)

8. Backlight (Backlight Anode (+) và Backlight Cathode (-)): Tắt bật đèn màn hình

LCD.

Page 68: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 65

Cách dùng thư viện với LCD

Module LCD có thể được điều khiển ở chế độ: 4-bit điều khiển và 8-bit điều khiển.

Với cách dùng ở chế độ 4-bit, bạn cần 7 chân ở Arduino, và nếu muốn dùng hết khả

năng của LCD thì bạn cần 7 + 4 = 11 chân ở Arduino (không nên tí nào). Ngoài ra, các

hàm trong thư viện LiquidCrystal của Arudino ở chế độ 4-bit thì mọi thứ đều hoạt động

tốt cả. Vì vậy, phần này sẽ mắc mạch ở chế độ 4-bit điều khiển và hướng dẫn theo hướng

này.

2.1.4.2.2. Lắp mạch

Sơ đồ lắp mạch

Page 69: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 66

2.1.4.2.3. Mã lập trình

2.1.4.3. Giao tiếp Ma trận phím 4x4

2.1.4.3.1. Giới thiệu bàn phím ma trận 4x4 (matrix keypad 4x4)

Dưới đây là hình ảnh sơ đồ nguyên lý của module bàn phím 4x4. Tuy có đến 16

nút nhấn, nghĩa là nếu làm một cách thông thường (dùng chân digital) thì chúng ta phải

cần đến 16 chân Arduino để đọc. Nhưng với bàn phím này, chúng ta chỉ cần dùng 8

chân (4 chân hàng ngang (row) và 4 chân cột dọc (column)).

Để kiểm tra một nút có được nhấn hay không? Họ sẽ sử dụng phương pháp quét

được mô tả bằng đoạn mã giả như sau:

Với mỗi hàng (R1 đến R4), Chọn ra hàng Ri

Cấp cực âm (0v) cho hàng Ri

1. //Thêm thư viện LiquitCrystal - nó có sẵn vì vậy bạn không cần cài thêm gì cả 2. #include <LiquidCrystal.h> 3. 4. //Khởi tạo với các chân 5. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 6. 7. void setup() { 8. //Thông báo đây là LCD 1602 9. lcd.begin(16, 2); 10. //In ra màn hình lcd dòng chữ Toi yeu Arduino 11. lcd.print("Toi yeu Arduino!"); 12. } 13. 14. void loop() { 15. // đặt con trỏ vào cột 0, dòng 1 16. // Lưu ý: dòng 1 là dòng thứ 2, lòng 0 là dòng thứ 1. Nôm na, nó đếm từ 0 từ

không phải từ 1 17. lcd.setCursor(0, 1); 18. // In ra dong chu 19. lcd.print(" Arduino.VN"); 20. } 21.

Page 70: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 67

Nếu điện áp ở chân Cj bất kì là dương (INPUT PULLUP) => chưa nhấn

Nếu điện áp ở chân Cj bất kì là âm (INPUT PULLUP) => đang nhấn

2.1.4.3.2. Hướng dẫn sử dụng module này với board Arduino

Hoàn toàn có thể tự làm một chương trình để sử dụng theo thuật toán trên. Tuy

nhiên, sẽ rất khó cho một newbie để làm các hiệu ứng trên nút nhấn khác như: nhấn giữ,

nhấn double click,... Nên phần này hướng dẫn các bạn sử dụng một thư viện khá phổ

biến trong Arduino, đó là thư viện Keypad.

Link tải thư viện: “https://github.com/Chris--A/Keypad/archive/master.zip”

Bảng nối dây giữ Arduino và Keypad

Arduino Keypad 2 R1 3 R2 4 R3 5 R4 6 C1 7 C2 8 C3 9 C4

Page 71: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 68

2.1.4.3.3. Mã lập trình

2.1.4.4. Bài tập ứng dụng

Điều khiển LCD1602 bằng Arduino UNO

http://arduino.vn/bai-viet/531-dieu-khien-lcd-bang-arduino-uno

1. #include Keypad.h 2. 3. //Bạn có thể tham khảo thêm tại: https://github.com/Chris--

A/Keypad/blob/master/examples/HelloKeypad/HelloKeypad.ino 4. 5. const byte rows = 4; //số hàng 6. const byte columns = 4; //số cột 7. 8. int holdDelay = 700; //Thời gian trễ để xem là nhấn 1 nút nhằm tránh nhiễu 9. int n = 3; // 10. int state = 0; //nếu state =0 ko nhấn,state =1 nhấn thời gian nhỏ , state = 2

nhấn giữ lâu 11. char key = 0; 12. 13. //Định nghĩa các giá trị trả về 14. char keys[rows][columns] = 15. { 16. {'1', '2', '3', 'A'}, 17. {'4', '5', '6', 'B'}, 18. {'7', '8', '9', 'C'}, 19. {'*', '0', '#', 'D'}, 20. }; 21. 22. byte rowPins[rows] = {2, 3, 4, 5}; //Cách nối chân với Arduino 23. byte columnPins[columns] = {6, 7, 8, 9}; 24. 25. //cài đặt thư viện keypad 26. Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rows, columns); 27. void setup() { 28. Serial.begin(9600);//bật serial, baudrate 9600 29. 30. } 31. void loop() { 32. char temp = keypad.getKey(); 33.

34. if ((int)keypad.getState() == PRESSED) { 35. if (temp != 0) { 36. key = temp; 37. } 38. } 39. if ((int)keypad.getState() == HOLD) { 40. state++; 41. state = constrain(state, 1, n-1); 42. delay(holdDelay); 43. } 44. 45. if ((int)keypad.getState() == RELEASED) { 46. key += state; 47. state = 0; 48. //Xuất lên Máy tính để xem kết quả 49. Serial.println(key); 50. 51. } 52. delay(100); 53. } 54.

Page 72: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 69

Lập trình LCD 1602 với chip 74HC595

http://arduino.vn/bai-viet/536-lap-trinh-lcd-1602-voi-chip-74hc595

Giao tiếp I2C LCD

https://arduinokit.vn/giao-tiep-i2c-lcd-arduino

Giao tiếp ma trận phím 4x4

http://arduino.vn/bai-viet/915-huong-dan-su-dung-module-ban-phim-4x4-voi-

arduino

Giao tiếp ADC – DAC

2.1.5.1. ADC (Chuyển đổi tín hiệu tương tự sang tín hiệu số)

2.1.5.1.1. analogRead()

Nhiệm vụ của analogRead() là đọc giá trị điện áp từ một chân Analog (ADC).

Trên mạch Arduino UNO có 6 chân Analog In, được kí hiệu từ A0 đến A5. Trên các

mạch khác cũng có những chân tương tự như vậy với tiền tố "A" đứng đầu, sau đó là số

hiệu của chân.

analogRead() luôn trả về 1 số nguyên nằm trong khoảng từ 0 đến 1023 tương ứng

với thang điện áp (mặc định) từ 0 đến 5V. Bạn có thể điều chỉnh thang điện áp này bằng

hàm analogReference().

Hàm analogRead() cần 100 micro giây để thực hiện.

2.1.5.1.2. Cú pháp

analogRead([chân đọc điện áp]);

vd: int voltage = analogRead(A0);

Trong đó A0 là chân dùng để đọc điện áp.

Nếu bạn chưa kết nối chân đọc điện áp, hàm analogRead() sẽ trả về một giá trị

ngẫu nhiên trong khoảng từ 0 đến 1023. Để khắc phục điều này, bạn phải mắc thêm một

điện trở có trị số lớn (khoảng 10k ohm trở lên) hoặc một tụ điện 104 từ chân đọc điện

áp xuống GND.

Khi người ta nói "đọc tín hiệu analog", bạn có thể hiểu đó chính là việc đọc giá trị

điện áp.

Page 73: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 70

2.1.5.2. DAC (chuyển đổi tín hiệu số sang tín hiệu tương tự)

2.1.5.2.1. MCP4725

DAC MCP4725 là bộ chuyển đổi kỹ thuật số sang tương tự 12 bit với bộ nhớ

EEPROM, vi mạch này sử dụng công suất thấp và cho đầu ra có độ chính xác cao.

Chúng có thể nhận được điện áp Analog từ bảng Arduino phụ thuộc vào đầu vào kỹ

thuật số qua giao tiếp I2C.

IC này có độ phân giải 12 bit và trên bo mạch Bộ nhớ EEPROM. Nó có thể được

định địa chỉ bằng chân địa chỉ A0 bên ngoài và hoạt động ở Chế độ Bình thường hoặc

Tắt nguồn. Nó có nhiều loại điện áp cung cấp đầu vào như 2,7V đến 5,5V từ nguồn

cung cấp duy nhất. IC này cung cấp tám địa chỉ thông qua I2C và có Dải nhiệt độ mở

rộng: -40 ° C đến + 125 ° C.

Các ứng dụng: Hiệu chuẩn cảm biến, Thiết bị ngoại vi PC, Hệ thống thu thập dữ

liệu, Thiết bị đo di động công suất thấp

Link tải thư viện: “https://github.com/adafruit/Adafruit_MCP4725”

Page 74: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 71

2.1.5.2.2. Lắp mạch

Sơ đồ lắp mạch

Page 75: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 72

2.1.5.2.3. Mã lập trình

2.1.5.3. Bài tập ứng dụng

Giao tiếp ADC

http://arduino.vn/reference/analogread

https://learn.sparkfun.com/tutorials/analog-to-digital-conversion/all

https://mcavn.vn/threads/arduino-c%C6%A1-b%E1%BA%A3n-b%E1%BB%99-chuy%E1%BB%83n-

%C4%91%E1%BB%95i-adc.42/

http://arduino.vn/bai-viet/87-bai-4-doc-dien-ap-dieu-chinh-boi-bien-tro

Giao tiếp DAC

https://theorycircuit.com/arduino-dac-tutorial/

Nhấn giữ nút nhấn để hoán vị trạng thái:

http://arduino.vn/bai-viet/154-bai-9-nhan-giu-mot-button-de-hoan-vi-toogle-trang-thai-cua-mot-den-led-debounce

1. /* 2. * Arduino Digital to Analog Coverter MCP4725 Interface code 3. * Library from Adafruit-MCP4725 4. * see text at www.theorycircuit.com 5. */ 6. #include <Wire.h> //wire library 7. #include <Adafruit_MCP4725.h> // MCP4725 library from adafruit 8. #define analogVin A0 // Analog voltage input to A0 9. 10. Adafruit_MCP4725 MCP4725; 11. 12. void setup(void) { 13. Serial.begin(9600); 14. MCP4725.begin(0x60); // Default I2C Address of MCP4725 breakout board (sparkfun) 15. 16. } 17. 18. void loop(void) { 19. 20. uint32_t MCP4725_value; 21. int adcValueRead = 0; 22. float voltageRead = 0; 23. 24. float MCP4725_expected_output; 25. 26. 27. for (MCP4725_value = 0; MCP4725_value < 4096; MCP4725_value = MCP4725_value + 15) 28. { 29. MCP4725_expected_output = (5.0/4096.0) * MCP4725_value; 30. MCP4725.setVoltage(MCP4725_value, false); 31. delay(250); 32. adcValueRead = analogRead(analogVin); 33. voltageRead = (adcValueRead * 5.0 )/ 1024.0; 34. 35. Serial.print("MCP4725 Value: "); 36. Serial.print(MCP4725_value); 37. 38. Serial.print("\tExpected Voltage: "); 39. Serial.print(MCP4725_expected_output,3); 40. 41. Serial.print("\tArduino ADC Value: "); 42. Serial.print(adcValueRead); 43. 44. Serial.print("\tArduino Voltage: "); 45. Serial.println(voltageRead,3); 46. } 47. }

Page 76: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 73

Điều khiển PWM

2.1.6.1. Kiến thức cơ bản về xung PWM

Xung là các trạng thái cao / thấp (HIGH/LOW) về mức điện áp được lặp đi lặp lại.

Đại lượng đặc trưng cho 1 xung PWM (Pulse Width Modulation) bao gồm tần số

(frequency) và chu kì xung (duty cycle).

Tần số là gì? Tần số là số lần lặp lại trong 1 đơn vị thời gian. Đơn vị tần số là Hz,

tức là số lần lặp lại dao động trong 1 giây.

Lấy ví dụ, 1Hz = 1 dao động trong 1 giây. 2Hz = 2 dao động trong 1 giây. 16MHz

= 16 triệu dao động trong 1 giây.

Như vậy theo quy tắc tam suất: 16 triệu dao động - 1 giây --> 1 dao động tốn

1/16.000.000 (giây) = 0,0625 (micro giây)

Cách xác định 1 dao động như thế nào? Đa phần các bạn mới nghiên cứu điện

tử thường mắc sai lầm ở việc xác định 1 dao động. Dao động được xác định từ trạng

thái bắt đầu và kết thúc ngay trước khi trạng thái bắt đầu được lặp lại.

Như vậy thông thường, 1 dao động sẽ bao gồm 2 trạng thái điện: mức cao (x giây)

và mức thấp (y giây). Tỉ lệ phần trăm thời gian giữa 2 trạng thái điện này chính là chu

kì xung.

Với x/y = 0% ta có xung chứa toàn bộ điện áp thấp (khái niệm xung nên hiểu mở

rộng)

Với x/y = 50% thì 50% thời gian đầu, xung có điện áp cao, 50% sau xung có điện

áp thấp.

Với x/y=100% ta có xung chứa toàn bộ điện áp cao.

Tóm lại, với 1 xung ta có:

Tần số: để tính toán ra được thời gian của 1 xung

Page 77: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 74

Chu kì xung: bao nhiêu thời gian xung có mức áp cao, bao nhiêu thời gian

xung có mức áp thấp.

2.1.6.2. Liên hệ với Arduino

Với kiến thức cơ bản về xung, sẽ hiểu rõ hơn về xung trong thực tế như thế nào.

Giữa 2 vạch là 1 xung.

analogWrite tỉ lệ chu kì xung analogWrite(0) 0/255 0% analogWrite(64) 64/255 25% analogWrite(127) 127/255 50% analogWrite(191) 191/255 75% analogWrite(255) 255/255 100%

Hàm analogWrite() trong Arduino giúp việc tạo 1 xung dễ dàng hơn. Hàm này

truyền vào tham số cho phép thay đổi chu kì xung, bạn có thể tính toán ra được chu kì

xung như ở bảng trên. Tần số xung được Arduino thiết lập mặc định.

Đối với board Arduino Uno, xung trên các chân 3,9,10,11 có tần số là 490Hz,

xung trên chân 5,6 có tần số 980Hz.

2.1.6.3. Bài tập ứng dụng

Điều chỉnh độ sáng của LED bằng độ rộng xung

http://arduino.vn/bai-viet/144-dieu-chinh-do-sang-cua-led-qua-giao-tiep-serial

Tìm hiểu về xung PWM

http://arduino.vn/reference/xung-pwm

Page 78: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 75

2.1.6.3.1. Lập trình - mô phỏng ứng dụng truyền dữ liệu

Truyền dữ liệu giao thức UART

2.1.7.1. Giao diện Serial Monitor

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, nếu bạn đang sử dụng các hàm của thư viện Serial này, bạn không thể sử dụng

các chân digital 0 và digital 1 để làm việc khác được.

Bạn có thể sử dụng bảng “Serial monitor” có sẵn trong Arduino IDE để giao tiếp

với Arduino qua giao thức Serial hoặc bấm vào biểu tượng “Serial Monitor ” hoặc

nhấn tổ hợp phím “Ctrl+Shift+M” để mở bảng Serial Monitor, sau đó bạn kích chuột

vào bảng chọn như hình dưới để chọn baudrate giống với baudrate được dùng trong quá

trình lập trình của bạn. Mặc định là 9600.

Giao diện Serial Monitor

2.1.7.2. Sơ đồ giao tiếp Serial (UART)

Page 79: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 76

Giao tiếp PC và Arduino

Giao tiếp 2 mạch Arduino

2.1.7.3. Bài tập ứng dụng

Đọc giá trị điện áp qua Serial Monitor

http://arduino.vn/bai-viet/87-bai-4-doc-dien-ap-dieu-chinh-boi-bien-tro

Truyền nhận Serial (UART)

http://arduino.vn/tutorial/1471-truyen-cac-so-kieu-long-int-float-trong-giao-tiep-serial-uart http://arduino.vn/tutorial/5897-thu-vien-truyen-du-lieu-bat-ky-byte-long-float-double-theo-goi-tin-cho-arduino

Giao tiếp giữa máy tính và Arduino qua

http://arduino.vn/bai-viet/364-giao-tiep-giua-may-tinh-va-arduino-thong-qua-serial-kham-pha-processing

Truyền nhận dữ liệu với giao tiếp Serial (UART) trên Arduino

https://tapit.vn/truyen-nhan-du-lieu-voi-giao-tiep-serial-uart-tren-arduino/

Truyền dữ liệu giao thức SPI

2.1.8.1. Giao tiếp SPI là gì?

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. SPI đôi khi được gọi là chuẩn truyền thông “4 dây” vì có 4 đường giao tiếp trong

Page 80: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 77

chuẩn này đó là SCK (Serial Clock), MISO (Master Input Slave Output), MOSI (Master

Ouput Slave Input) và SS (Slave Select).

Sơ đồ chân giao tiếp SPI

SCK (dòng đồng bộ): Xung giữ nhịp cho giao tiếp SPI, vì SPI là chuẩn

truyền đồng bộ nên cần 1 đường giữ nhịp, mỗi nhịp trên chân SCK báo 1

bit dữ liệu đến hoặc đi. Đây là điểm khác biệt với truyền thông không đồng

bộ mà chúng ta đã biết trong chuẩn UART. Sự tồn tại của chân SCK giúp

quá trình tuyền ít bị lỗi và vì thế tốc độ truyền của SPI có thể đạt rất cao.

Xung nhịp chỉ được tạo ra bởi chip Master.

MISO– Master Input / Slave Output (Mang các dữ liệu từ các thiết bị

SPI về arduino): nếu là chip Master thì đây là đường Input còn nếu là chip

Slave thì MISO lại là Output. MISO của Master và các Slaves được nối

trực tiếp với nhau…

MOSI – Master Output / Slave Input (Mang các dữ liệu từ Arduino

đến các thiết bị SPI): nếu là chip Master thì đây là đường Output còn nếu

là chip Slave thì MOSI là Input. MOSI của Master và các Slaves được nối

trực tiếp với nhau.

SS – Slave Select (Chọn thiết bị SPI cần làm việc): SS là đường chọn

Slave cần giap tiếp, trên các chip Slave đường SS sẽ ở mức cao khi không

Page 81: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 78

làm việc. Nếu chip Master kéo đường SS của một Slave nào đó xuống mức

thấp thì việc giao tiếp sẽ xảy ra giữa Master và Slave đó. Chỉ có 1 đường

SS trên mỗi Slave nhưng có thể có nhiều đường điều khiển SS trên Master,

tùy thuộc vào thiết kế của người dùng.

2.1.8.2. Sơ đồ giao tiếp SPI

có thể kiểm soát 1 hoặc nhiều thiết bị sử dụng SPI.

Giao tiếp SPI - Module SD Card với Arduino

Ví dụ 1: dưới đây là 1 thiết bị

Giao tiếp SPI với 1 thiết bị

Dữ liệu được truyền qua lại dữa 2 đường MISO và MOSI. Để giao tiếp với một

thiết bị SPI chúng ta cần thiết lập các dòng SS với thiết bị ở mức thấp LOW, sau đó

giao tiếp với nó, sau đó thiết lập các dòng SS trở lại mức cao HIGH.

Page 82: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 79

Ví dụ 2: có hai hoặc nhiều thiết bị SPI trên cùng 1 bus, chúng sẽ được kết nối như

sau:

Giao tiếp SPI với nhiều thiết bị

Ở đây có hai dòng SS - với mỗi 1 thiết bị chỉ sử dụng 1 dòng SS. Bạn có thể sử

dụng bất kỳ chân digital nào trên Arduino của bạn cho dòng SS. Chỉ cần nhớ là để tất

cả các dòng SS ở mức cao HIGH , "ngoại trừ" dòng SS mà bạn muốn kết nối với các

thiết bị SPI vào thời điểm đó. Điều này tương tự như việc rất nhiều cánh cổng trước mặt

nhưng chỉ cho phép 1 người đi vào. Ta mở 1 cổng và cho 1 người duy nhất vào, rồi sau

đó đóng cánh cổng đó và mở cánh cổng khác và lựa chọn người khác.

2.1.8.3. Bài tập ứng dụng

Arduino và giao tiếp SPI

http://arduino.vn/bai-viet/1081-arduino-va-giao-tiep-spi

Kết nối Module SD Card với Arduino giao tiếp qua SPI

http://arduino.vn/bai-viet/541-sdcard-breakout-board-cach-dung-mach-doc-ghi-trong-du-su-dung-am-thanh

Truyền dữ liệu giao thức I2C

2.1.9.1. Giao tiếp I2C là gì?

Đầu năm 1980 Phillips đã phát triển một chuẩn giao tiếp nối tiếp 2 dây được gọi

là I2C. I2C là tên viết tắt của cụm từ Inter-Intergrated Circuit. Đây là đường Bus giao

tiếp giữa các IC với nhau. I2C mặc dù được phát triển bới Philips, nhưng nó đã được

Page 83: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 80

rất nhiều nhà sản xuất IC trên thế giới sử dụng. I2C trở thành một chuẩn công nghiệp

cho các giao tiếp điều khiển, có thể kể ra đây một vài tên tuổi ngoài Philips như: Texas

Intrument(TI), MaximDallas, analog Device, National Semiconductor... Bus I2C được

sử dụng làm bus giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như các loại Vi điều

khiển 8051, PIC, AVR, ARM... chip nhớ như: RAM tĩnh (Static Ram), EEPROM, bộ

chuyển đổi tương tự số (ADC), số tương tự (DAC), IC điểu khiển LCD, LED...

2.1.9.2. Cấu tạo và nguyên lý hoạt động

I2C sử dụng hai đường truyền tín hiệu:

Một đường xung nhịp đồng hồ (SCL) chỉ do Master phát đi (thông thường

ở 100kHz và 400kHz. Mức cao nhất là 1Mhz và 3.4MHz).

Một đường dữ liệu (SDA) theo 2 hướng.

Có rất nhiều thiết bị có thể cùng được kết nối vào một bus I2C, tuy nhiên sẽ không

xảy ra chuyện nhầm lẫn giữa các thiết bị, bởi mỗi thiết bị sẽ được nhận ra bởỉ một địa

chỉ duy nhất với một quan hệ chủ/tớ tồn tại trong suốt thời gian kết nối. Mỗi thiết bị có

thể hoạt động như là thiết bị nhận hoặc truyền dữ liệu hay có thể vừa truyền vừa nhận.

Hoạt động truyền hay nhận còn tùy thuộc vào việc thiết bị đó là chủ (master) hay tớ

(slave).

Một thiết bị hay một IC khi kết nối với bus I2C, ngoài một địa chỉ (duy nhất) để

phân biệt, nó còn được cấu hình là thiết bị chủ hay tớ. Tại sao lại có sự phân biệt này?

Đó là vì trên một bus I2C thì quyền điều khiển thuộc về thiết bị chủ. Thiết bị chủ nắm

vai trò tạo xung đồng hồ cho toàn hệ thống, khi giữa hai thiết bị chủ/tớ giao tiếp thì thiết

bị chủ có nhiệm vụ tạo xung đồng hồ và quản lý địa chỉ của thiết bị tớ trong suốt quá

trình giao tiếp. Thiết bị chủ giữ vai trò chủ động, còn thiết bị tớ giữ vai trò bị động trong

việc giao tiếp.

Về lý thuyết lẫn thực tế I2C sử dụng 7 bit để định địa chỉ, do đó trên một bus có

thể có tới 27 địa chỉ tương ứng với 128 thiết bị có thể kết nối, nhưng chỉ có 112, 16 địa

chỉ còn lại được sử dụng vào mục đích riêng. Bit còn lại quy định việc đọc hay ghi dữ

liệu (1 là write, 0 là read)

Điểm mạnh của I2C chính là hiệu suất và sự đơn giản của nó: một khối điều khiển

trung tâm có thể điều khiển cả một mạng thiết bị mà chỉ cần hai lối ra điều khiển.

Page 84: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 81

Ngoài ra I2C còn có chế độ 10bit địa chỉ tương đương với 1024 địa chỉ, tương tự

như 7 bit, chỉ có 1008 thiết bị có thể kết nối, còn lại 16 địa chỉ sẽ dùng để sử dụng mục

đích riêng.

2.1.9.3. Sơ đồ giao tiếp I2C

Sơ đồ giao tiếp I2C của các thiết bị

Giao tiếp I2C giữ Arduino với các Module cảm biến khác

2.1.9.4. Bài tập ứng dụng

Giao tiếp I2C với nhiều Module

http://arduino.vn/bai-viet/1053-giao-tiep-i2c-voi-nhieu-module

Giao tiếp I2C với Module LCD

Page 85: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 82

https://arduinokit.vn/giao-tiep-i2c-lcd-arduino

Giao tiếp I2C với Module Realtime Clock

http://arduino.vn/bai-viet/369-giao-tiep-i2c-va-su-dung-module-realtime-clock-ds1307

Truyền dữ liệu giao thức Bluetooth

2.1.10.1. Nguồn gốc Bluetooth

Bluetooth ra đời vào năm 1989 tại công ty Ericsson ở Lund, Thụy Điển. Tên

"bluetooth" là phiên bản ăng-lô hóa của vị vua Harald Bluetooth, người thống nhất các

bộ tộc Đan Mạch thành một vương quốc vùng Scandinavia. Ký hiệu bluetooth mà các

bạn thấy là tên viết tắt (Harald Bluetooth) của vị vua này theo cổ ngữ Rune:

Bluetooth ra đời với mục đích "không dây hóa" chuẩn serial RS-232 thịnh hành

vào những năm 80-90 của thế kỷ trước và chuẩn hóa các giao tiếp serial.

Chuẩn serial RS-232

Bluetooth về cơ bản là một giao tiếp bằng sóng radio ở băng tần 2.4 đến 2.480

GHz, rất gần với chuẩn Wifi 2.4GHz hiện nay. Tuy nhiên, khác với Wifi hay các sóng

radio khác hoạt động ở 1 băng tầng cố định, Bluetooth triển khai theo khái niệm "nhảy

tần trải phổ" (Frequency Hopping Spread Spectrum), có nghĩa là băng tần hoạt động

của Bluetooth thay đổi liên tục với 79 kênh (từ 2.400 GHz đên 2.480 GHz). Điều này,

về mặt lý thuyết, đảm bảo bluetooth chống lại việc nghe lén rất hiệu quả vì hacker phải

Page 86: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 83

biết chính xác được kênh nào để nghe, mà kênh này lại thay đổi liên tục (khoảng 800

lần mỗi giây) tùy vào sự đồng ý giữa 2 thiết bị đang giao tiếp với nhau.

Bước sóng của bluetooth là khoảng 12cm. Đây cũng là chiều dài thường thấy của

ăn-ten mà các bạn thấy trên các module:

Bluetooth thực hiện giao tiếp với nhau theo kiểu chủ-tớ (Master-Slave), và thông

thường 1 chủ có thể nối với 7 thiết bị tớ cùng 1 lúc thành một hệ thống mạng mini. Dĩ

nhiên các thiết bị có thể đổi vai trò, tùy vào điều kiện tiếp nối. Ví dụ: 1 cái tai nghe khởi

đầu kết nối với điện thoại bắt buộc phải đóng vai chủ Master, nhưng sau đó sẽ hoạt động

như là 1 tớ Slave sau khi kết nối hoàn tất. Sau đó thông tin được truyền đi theo phương

thức giao chuyển gói (Packet Switching).

2.1.10.2. Sơ đồ kết nối Arduino và Bluetooth

Kết nối Arduino với các thiết bị module Bluetooth và điều khiển nó thông qua

điện thoại Android. Các bạn có thể ứng dụng để điều khiển các thiết bị điện trong nhà

như bật tắt đèn, quạt, bật tắt bình nóng lạnh,... hoặc tự làm một chiếc ô tô điều khiển từ

xa bằng Bluetooth...

Sơ đồ kết nối Arduino với Module Bluetooth

Page 87: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 2: LẬP TRÌNH - MÔ PHỎNG DÙNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 84

Mô hình điều khiển thiết bị qua điện thoại

2.1.10.3. Bài tập ứng dụng

Điều khiển Arduino qua giao tiếp Bluetooth

http://arduino.vn/bai-viet/333-dieu-khien-arduino-thong-qua-bluetooth-bang-dien-thoai-android

Giao tiếp 2 Board Arduino bằng Module Bluetooth

http://arduino.vn/bai-viet/929-giao-tiep-2-board-arduino-bang-module-bluetooth

Điều khiển LED bằng Bluetooth

Phần 1: https://www.youtube.com/watch?v=U6pCsZplQRw

Phần 2: https://www.youtube.com/watch?v=oLGu2hjFjcg

Page 88: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 85

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

3.1. Tổng quan về truyền thông dùng Arduino

Internet Of Things (IoT) – Internet vạn vật dường như đang đứng trước một bước

ngoặt để đi đến giai đoạn tiếp theo cho một thế giới hiện đại, văn minh. Đó là viễn cảnh

mà mọi vật đều có thể kết nối với nhau thông qua Internet không dây.

Lập trình ứng dụng IoT sử dụng Chip WiFi phổ biến hiện này là ESP8266 để kết

nối với Server, gởi, nhận dữ liệu và thực thi các lệnh từ Server. Internet Of Things dựa

và các kết nối Internet khá nhiều, do vậy các nội dung cũng tập trung nhiều vào các giao

thức (prototcol), các phương pháp quản lý cũng như cấu hình kết nối.

Phần cứng sử dụng chính là System On Chip (SoC) ESP8266 - có khả năng kết

nối WiFi và lập trình được với giá thành rẻ và phổ biến trên thế giới. Board mạch sử

dụng là board phần cứng mở. IoT WiFi Uno có sơ đồ chân tương thích với các board

Arduino Uno.

Phần mềm sử dụng lập trên máy tính cho Chip ESP8266 là Arduino, ngôn ngữ lập

trình C/C++.

Các phần liên quan đến Server chạy trên máy tính sử dụng NodeJS với ngôn ngữ

lập trình Javascript.

3.2. Module ESP8266

Mã nguồn mở của module ESP8266

Page 89: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 86

ESP8266 là dòng chip tích hợp Wi-Fi 2.4Ghz có thể lập trình được, rẻ tiền được

sản xuất bởi một công ty bán dẫn Trung Quốc: Espressif Systems.

Được phát hành đầu tiên vào tháng 8 năm 2014, đóng gói đưa ra thị trường dạng

Module ESP-01, được sản xuất bởi bên thứ 3: AI-Thinker. Có khả năng kết nối Internet

qua mạng Wi-Fi một cách nhanh chóng và sử dụng rất ít linh kiện đi kèm. Với giá cả

có thể nói là rất rẻ so với tính năng và khả năng ESP8266 có thể làm được.

ESP8266 có một cộng đồng các nhà phát triển trên thế giới rất lớn, cung cấp nhiều

Module lập trình mã mở giúp nhiều người có thể tiếp cận và xây dựng ứng dụng rất

nhanh.

Hiện nay tất cả các dòng chip ESP8266 trên thị trường đều mang nhãn

ESP8266EX, là phiên bản nâng cấp của ESP8266

Page 90: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 87

Sơ đồ chân và sơ đồ khối ESP8266

Thông số phần cứng:

32-bit RISC CPU : Tensilica Xtensa LX106 running at 80 MHz

Hổ trợ Flash ngoài từ 512KiB đến 4MiB

64KBytes RAM thực thi lệnh

96KBytes RAM dữ liệu

64KBytes boot ROM

Chuẩn wifi EEE 802.11 b/g/n, Wi-Fi 2.4 GHz Tích hợp TR switch, balun,

LNA, khuếch đại công suất và matching network Hổ trợ WEP,

WPA/WPA2, Open network

Tích hợp giao thức TCP/IP

Hổ trợ nhiều loại anten

16 chân GPIO

Hổ trợ SDIO 2.0, UART, SPI, I²C, PWM,I²S với DMA

Page 91: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 88

1 ADC 10-bit

Dải nhiệt độ hoạt động rộng : -40C ~ 125C

Lập trình code module ESP8266

Để bắt đầu với những dự án Wifi với Arduino các bạn cần ESP8266 với giá thành

rẻ, và dễ dàng sử dụng. Đặc biệt, ESP8266 có thể được lập trình bằng Arduino IDE.

Trước khi bắt đầu những chuỗi dự án với ESP8266, ở phần này, sẽ hướng dẫn cách cài

đặt thư viện và chức năng nạp code cho IDEArduino IDE để nạp code cho ESP8266.

Sau khi down bản mới nhất của Arduino IDE, các bạn tiến hành cài đặt như bình

thường và mở chương trình

Để tiến hành cài đặt thư viện và chức năng nạp code cho IDE các bạn làm như

sau: Vào File→ Preferences, vào textbox Additional Board Manager URLs thêm đường

link sau vào http://arduino.esp8266.com/stable/package_esp8266com_index.json,

xong Click OK để chấp nhận.

Page 92: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 89

Tiếp theo vào Tool→Board→Boards Manager

Đợi một lát để chương trình tìm kiếm. Ta kéo xuống và click vào ESP8266 by

ESP8266 Community, click vào Install. Chờ phần mềm tự động download và cài đặt.

Page 93: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 90

Chọn Board để lập trình cho ESP8266

Kết nối mudule USB-to-UART vào máy tính. Vào Tool→Board→Generic

ESP8266 Module, chọn cổng COM tương ứng với module USB-to-UART tương ứng.

Chọn chế độ nạp Arduino as ISP. Vậy là ta đã có môi trường lập trình cho esp8266

rất thân thiện.

Page 94: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 91

Sau khi kết nối UART vs ESP8266. các bạn có thể test code ESP8266 ở đây:

Link tham khảo:

http://arduino.vn/bai-viet/1172-lap-trinh-esp8266-bang-arduino-ide

https://www.makerlab.vn/huong-dan-lap-trinh-esp8266-voi-arduino-ide/

Phần mềm mã nguồn mở Blynk

Blynk là một phần mềm mã nguồn mở được thiết kế cho các ứng dụng IoT

(Internet of Things). Ứng dụng giúp người dùng điều khiển phần cứng từ xa, có thể hiển

thị dữ liệu cảm biến, lưu trữ dữ liệu, biến đổi dữ liệu hoặc làm nhiều việc khác.

Bạn hãy thử tưởng tượng khi bạn ấn vào một nút nhấn trên phần mềm lập tức bóng

đèn sáng lên và ngược lại !

1. int pin = 2; 2. 3. void setup() { 4. 5. pinMode(pin, OUTPUT) 6. } 7. 8. 9. void loop() { 10. digitalWrite(pin, HIGH); //bật le 11. delay(1000); //dừng 1 12. digitalWrite(pin, LOW); //tắt le 13. delay(1000); //dừng 1 14. }

Page 95: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 92

Nền tảng Blynk có ba phần chính:

Blynk App – Ứng dụng Blynk cho phép khởi tạo giao diện cho các dự án

của mình

Blynk Server – Chịu trách nhiệm giao tiếp qua lại hai chiều giữa điện thoại

và phần cứng. Bạn có thể sử dụng server của Blynk nhưng sẽ bị giới hạn

điểm Enegry.

Blynk Library – Thư viện chứa các nền tảng phổ biến , giúp việc giao tiếp

phần cứng với Server dễ dàng hơn

Một chiếc điện thoại thông minh IOS hay Android đều được. Bạn hãy tải về ứng

dụng Blynk.

3.2.3.1. Cài đặt và cấu hình Blynk App

Để có thể sử dụng App Blynk chúng ta cần phải đăng ký một tài khoản mới. Ở

đây có 2 cách đăng ký bằng Facebook hoặc tạo một tài khoản mới (Create New

Account). Mình sẽ hướng dẫn bằng cách đăng ký bằng Account.

Page 96: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 93

Nhập thông tin tài khoản Gmail của các bạn. Rồi nhấn Sign Up để tiến hành đăng

ký.

Page 97: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 94

Sau khi đăng ký hoàn thành, chúng ta sẽ tiến hành tạo một Project mới.

Mình sẽ hướng dẫn các bạn tạo một dự án Bật/Tắt LED trên Blynk.

Các bạn Click vào dấu cộng (+) trên thanh công cụ để tiến hành tạo Project mới.

Click vào Create để hoàn tất việc tạo mới.

Page 98: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 95

Blynk sẽ cấp cho các bạn một mã Token, mã này sẽ gửi trực tiếp vào Gmail mà

lúc nãy bạn đăng ký. Mã Token này dùng để chèn vào code Example của Blynk.

Page 99: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 96

Để Bật/Tắt Led chúng ta cần có một nút bấm để điều khiển. Vào Widget Box (+)

> Click vào Button để lấy nút nhấn ra.

Page 100: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 97

Click vào Button để tiến hành cài đặt thông số.

Ở mục Button: Đặt tên cho nút nhấn.

OUTPUT: Cấu hình cho PIN cần kết nối, ở đây mình chọn Digital > gp16

(chân này có LED được tích hợp trên board mạch sẵn).

MODE: có 2 chế độ PUSH (nhấn thả) và SWITCH (nhấn giữ).

Page 101: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 98

ON/OFF LABELS: Thay đổi chế đọ hiển thị cho nút nhấn (Vd: Các bạn

không thích để ON/OFF có thể thay bằng BẬT/TẮT hoặc một cái tên nào

mà bạn muốn).

DESIGN: Ở phần này các bạn có thể điều chỉnh màu sắc của nút nhấn.

Page 102: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 99

Page 103: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 100

3.2.3.2. Nạp code vào NodeMCU ESP8266

Nhấn vào đường Link để Copy ví dụ nhé:

“https://examples.blynk.cc/?board=NodeMCU&shield=ESP8266%20WiFi&exa

mple=GettingStarted%2FBlynkBlink&auth=c2a162bafaf744009a19df8063a2abee”

Ở phía tay trái vùng mình đã khoanh đỏ các bạn chọn đúng các thông số như trên

màn hình nhé.

Các bạn lấy mã Token lúc nãy gửi về Gmail paste vào mục Auth Token nhé.

Sau khi đã cấu hình xong các thông số các bạn nhấn vào Copy example bên phía

tay phải để bỏ vào Arduino IDE.

Tiếp hành nạp code: Khởi động Arduino IDE lên và paste ví dụ vừa rồi vào trong

shetch trong Arduino.

Ở vùng mình khoanh đỏ các bạn thêm thông tin WIFI của mình vào nhé.

ssid: Tên WIFI.

pass: Mật khẩu WIFI nhé.

Page 104: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 101

Các bạn chọn tên cho Board NodeMCU 1.0 (ESP-12E Module).

Các bạn nhớ chọn cổng COM nhé.

Upload chương trình và chờ đợi kiểm tra kết quả.

Lưu ý: Trong quá trình Upload mà bị báo lỗi #include <BlynkSimpleEsp8266.h>

thì các bạn làm như sau: Các bạn vào đường dẫn.

C:\Users\Administrator\Documents\Arduino\libraries\Blynk_Release_v0.6.1\libr

aries

Sau đó các bạn Copy toàn bộ thư viện ra bỏ vào mục này nhé:

C:\Users\Administrator\Documents\Arduino\libraries

Vì qua nhiều lớp nên Arduino IDE không nhận được thư viện các bạn cài vào lúc

trước.

Link tham khảo:

https://mechasolution.vn/Blog/blynk-la-gi

https://arduinokit.vn/cai-dat-esp8266-voi-blynk

Page 105: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 102

Điều khiển thiết bị qua Wifi

Cài đặt board ESP8266: Tools / Board / Board Manager

Cài đặt Board Blynk: Tools / Board / Board Manager

Tools / Board / Generic ESP8266 Module

Page 106: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 103

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

****

Mã lập trình:

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

****

1. #include <ESP8266WiFi.h> 2. #include <ESP8266WebServer.h> 3. #include "EEPROM.h" 4. #define BLYNK_PRINT Serial // Comment this out to disable prints

and save space 5. #include <BlynkSimpleEsp8266.h> 6. //12: Green 7. //13: Blue 8. //15: Red 9. 10. ESP8266WebServer server(80); 11. 12. const char* ssid = "XSwitch"; 13. const char* passphrase = "000000000"; 14. String blynk = "a4c47feas2e542f7ad7d5b2d5a4300a5"; 15. int inRelay1 = 14; //Chan GPIO14 gắn vào relay 16. String st; 17. String content; 18. int statusCode; 19. 20. 21. void setup() 22. { 23. Serial.begin(115200);

Page 107: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 104

24. pinMode(inRelay1, OUTPUT); 25. //Delay 5m, Red blink 26. pinMode(13, OUTPUT); 27. pinMode(15, OUTPUT); 28. for (int i = 1; i < 3; i++) 29. { 30. digitalWrite(15, HIGH); 31. delay(500); 32. digitalWrite(15, LOW); 33. delay(500); 34. } 35. 36. EEPROM.begin(512); 37. delay(10); 38. Serial.println("Startup"); 39. // read eeprom for ssid, pass and blynk 40. Serial.println("Reading EEPROM ssid"); 41. String esid; 42. for (int i = 0; i < 32; ++i) 43. { 44. esid += char(EEPROM.read(i)); 45. } 46. Serial.print("SSID: "); 47. Serial.println(esid.c_str()); 48. esid.trim(); 49. 50. Serial.println("Reading EEPROM pass"); 51. String epass = ""; 52. for (int i = 32; i < 96; ++i) 53. { 54. epass += char(EEPROM.read(i)); 55. } 56. Serial.print("PASS: "); 57. Serial.println(epass.c_str()); 58. epass.trim(); 59. 60. Serial.println("Reading EEPROM blynk"); 61. String eblynk = ""; 62. for (int i = 96; i < 128; ++i) 63. { 64. eblynk += char(EEPROM.read(i)); 65. } 66. Serial.print("BLYNK: "); 67. Serial.println(eblynk.c_str()); 68. eblynk.trim(); 69. 70. if ( esid.length() > 1 ) 71. { 72. WiFi.begin(esid.c_str(), epass.c_str()); 73. if (testWifi()) 74. { 75. launchWeb(0); 76. WiFi.disconnect(); 77. 78. char * auth_ = new char[eblynk.length() + 1]; 79. eblynk.toCharArray(auth_, eblynk.length() + 1); 80. Blynk.begin(auth_, esid.c_str(), epass.c_str()); 81. EEPROM.end();

Page 108: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 105

82. return; 83. } 84. } 85. setupAP(); 86. EEPROM.end(); 87. } 88. 89. bool testWifi(void) 90. { 91. int c = 0; 92. Serial.println("Xin vui long doi ket noi WIFI"); 93. while ( c < 20 ) 94. { 95. if (WiFi.status() == WL_CONNECTED) 96. { 97. return true; 98. } 99. delay(1000); 100. Serial.print(WiFi.status()); 101. c++; 102. } 103. Serial.println(""); 104. Serial.println("Thoi gian ket noi cham, Mo AP"); 105. return false; 106. } 107. 108. void launchWeb(int webtype) 109. { 110. Serial.println(""); 111. Serial.println("WiFi ket noi"); 112. Serial.print("Dia chi IP: "); 113. Serial.println(WiFi.localIP()); 114. Serial.print("SoftAP IP: "); 115. Serial.println(WiFi.softAPIP()); 116. createWebServer(webtype); 117. // Start the server 118. server.begin(); 119. Serial.println("May chu bat dau"); 120. } 121. 122. void setupAP(void) 123. { 124. WiFi.mode(WIFI_STA); 125. WiFi.disconnect(); 126. delay(100); 127. int n = WiFi.scanNetworks(); 128. Serial.println("Tim hoan tat"); 129. if (n == 0) 130. { 131. Serial.println("no networks found"); 132. } 133. else 134. { 135. Serial.print(n); 136. Serial.println(" networks found"); 137. for (int i = 0; i < n; ++i) 138. { 139. // Print SSID and RSSI for each network found

Page 109: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 106

140. Serial.print(i + 1); 141. Serial.print(": "); 142. Serial.print(WiFi.SSID(i)); 143. Serial.print(" ("); 144. Serial.print(WiFi.RSSI(i)); 145. Serial.print(")"); 146. Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? "

" : "*"); 147. delay(10); 148. } 149. } 150. Serial.println(""); 151. st = "<ol>"; 152. for (int i = 0; i < n; ++i) 153. { 154. // Print SSID and RSSI for each network found 155. st += "<li>"; 156. st += WiFi.SSID(i); 157. st += " ("; 158. st += WiFi.RSSI(i); 159. st += ")"; 160. st += (WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*"; 161. st += "</li>"; 162. } 163. st += "</ol>"; 164. delay(100); 165. Serial.println("softap"); 166. Serial.println(ssid); 167. Serial.println(passphrase); 168. WiFi.softAP(ssid, passphrase, 6); 169. 170. launchWeb(1); 171. Serial.println("over"); 172. } 173. 174. void createWebServer(int webtype) 175. { 176. if ( webtype == 1 ) 177. { 178. server.on("/", []() 179. { 180. IPAddress ip = WiFi.softAPIP(); 181. String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' +

String(ip[2]) + '.' + String(ip[3]); 182. content = "<!DOCTYPE HTML>\r\n<html><h2>XSwitch</h2>"; 183. //content += ipStr; 184. //content += "<form method='get' action='setting'><table

width='100%' border='1'><tr><td width=\"30%\"><label>Wifi</label></td><td width=\"70%\><input name='ssid' length=32 width='500'></td></tr><tr><td><label>Password</label></td><td><input name='pass' length=64 width='500'></td></tr><tr><td><label>Blynk</label></td><td><input name='blynk' length=32 width='500'></td></tr><tr><td></td><td><input type='submit'></tr></tr></table></form>";

185. content += "<form method=\"get\" action=\"setting\">"; 186. content += "<div>Wifi</div>";

Page 110: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 107

187. content += "<div><input name=\"ssid\" size=\"40\"></div>"; 188. content += "<div>Mat Khau</div>"; 189. content += "<div><input name=\"pass\" size=\"40\"></div>"; 190. content += "<div>Blynk</div>"; 191. content += "<div><input name=\"blynk\" size=\"40\"></div>"; 192. content += "<div><input type='submit'></div>"; 193. 194. content += "<p>"; 195. content += st; 196. content += "</p>"; 197. content += "</html>"; 198. server.send(200, "text/html", content); 199. }); 200. server.on("/setting", []() 201. { 202. String qsid = server.arg("ssid"); 203. String qpass = server.arg("pass"); 204. String qblynk = server.arg("blynk"); 205. if (qsid.length() > 0 && qpass.length() > 0) 206. { 207. EEPROM.begin(512); 208. Serial.println("clearing eeprom"); 209. for (int i = 0; i < 128; ++i) 210. { 211. EEPROM.write(i, 0); 212. } 213. EEPROM.commit(); 214. Serial.println(qsid); 215. Serial.println(""); 216. Serial.println(qpass); 217. Serial.println(""); 218. Serial.println(qblynk); 219. Serial.println(""); 220. 221. Serial.println("writing eeprom ssid:"); 222. for (int i = 0; i < qsid.length(); ++i) 223. { 224. EEPROM.write(i, qsid[i]); 225. Serial.print("Wrote: "); 226. Serial.println(qsid[i]); 227. } 228. 229. Serial.println("writing eeprom pass:"); 230. for (int i = 0; i < qpass.length(); ++i) 231. { 232. EEPROM.write(32 + i, qpass[i]); 233. Serial.print("Wrote: "); 234. Serial.println(qpass[i]); 235. } 236. 237. Serial.println("writing eeprom blynk:"); 238. for (int i = 0; i < qblynk.length(); ++i) 239. { 240. EEPROM.write(96 + i, qblynk[i]); 241. Serial.print("Wrote: "); 242. Serial.println(qblynk[i]); 243. } 244. EEPROM.commit();

Page 111: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 108

245. EEPROM.end(); 246. //Chop den xanh sau khu lam xong 247. pinMode(13, OUTPUT); 248. digitalWrite(13, LOW); 249. digitalWrite(13, HIGH); 250. delay(500); 251. digitalWrite(13, LOW); 252. content = "{\"Success\":\"Luu vao he thong. Khoi dong lai

ten wifi moi\"}"; 253. statusCode = 200; 254. } 255. else 256. { 257. content = "{\"Error\":\"404 not found\"}"; 258. statusCode = 404; 259. Serial.println("Sending 404"); 260. } 261. server.send(statusCode, "application/json", content); 262. }); 263. } 264. else if (webtype == 0) 265. { 266. server.on("/", []() 267. { 268. IPAddress ip = WiFi.localIP(); 269. String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' +

String(ip[2]) + '.' + String(ip[3]); 270. server.send(200, "application/json", "{\"IP\":\"" + ipStr +

"\"}"); 271. }); 272. server.on("/cleareeprom", []() 273. { 274. content = "<!DOCTYPE HTML>\r\n<html>"; 275. content += "<h2>XSwitch</h2><p>Clearing the

EEPROM</p></html>"; 276. server.send(200, "text/html", content); 277. Serial.println("clearing eeprom"); 278. for (int i = 0; i < 128; ++i) 279. { 280. EEPROM.write(i, 0); 281. } 282. //Chop den xanh sau khu lam xong 283. pinMode(13, OUTPUT); 284. digitalWrite(13, LOW); 285. digitalWrite(13, HIGH); 286. delay(500); 287. digitalWrite(13, LOW); 288. EEPROM.commit(); 289. }); 290. } 291. } 292. void loop() 293. { 294. server.handleClient(); 295. Blynk.run(); 296. }

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

Page 112: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 109

Thiết kế Blynk để giao tiếp: Trên mobile, Tải và mở ứng dụng Blynk ra và

tạo một nút nhấn nhớ chọn là:

Cấu hình hệ thống: Ở chế độ này, xSwitch trở thành 1 webserver có: Bạn

vào cài đặt wifi trên điện thoại chọn wifi

XSWITCH

Mật khẩu: 000000000 (9 số 0)

IP: 192.168.4.1

Page 113: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 110

Dùng thiết bị di động hay máy tính, kết nối vào access point này và mở trang

web http://192.168.4.1 sau đó điền thông tin mạng WIFI chính nhà bạn và mật khẩu vào.

Wifi: nhập tên access point mà xSwitch sẽ kết nối

Password: nhập mật khẩu của wifi

Blynk: nhập vào mã xác thực của Bkynk

Nhớ nhấn submit để lưu lại. Và khởi động lại xSwitch.

Page 114: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 111

Điều khiển thiết bị qua Cloud Server với MQTT

Trong phần này sẽ trình bày một số khái niệm và các bước thực hiện MQTT với

ví dụ minh họa cơ bản trên ESP8266.

Với hình ảnh trên thì ta có thể thấy MQTT Broker là một trạm trung chuyển, nói

đơn giản dễ hiểu thì coi như nó là một trung tâm thông tin, có nhiệm vụ nhận thông tin

từ rất nhiều các thiết bị khác nhau và chuyển các thông tin này tới từng thiết bị riêng

biệt.

Broker MQTT này sẽ lấy ở đâu ra? Chúng ta sẽ có 2 cách:

Tự tạo Broker MQTT trên máy tính, raspberry, server,.. tùy vào điều kiện

hiện có: cách này tốn kém thêm chi phí, phức tạp, không dành cho người

mới bắt đầu.

Sử dụng các dịch vụ MQTT broker có sẵn: cách này dễ thở hơn chút, sử

dụng cái sẵn có, thao tác cấu hình lấy thông tin để sử dụng, phù hợp với

những người muốn thử nghiệm, tham khảo, tận dụng cái có sẵn. Trong bài

viết này mình sẽ sử dụng cách này.

Để hiểu hơn một chút về cách thức hoạt động của MQTT Broker và ESP8266 ta

sẽ đi vào ví dụ cụ thể:

Chuẩn bị:

Phần cứng: ESP8266 (NodeMCU)

Page 115: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 112

Phần mềm: Arduino IDE; Thư viện Pubsubclient; MQTTlens cho Chrome

Ví dụ 1: Dùng ESP8266 (NodeMCU) làm Client để kết nối lên một dịch vụ MQTT

Broker là CloudMQTT với 2 nhiệm vụ chính:

Nhiệm vụ 1: Gửi (publish) dữ liệu lên broker, và nhận thông tin (subcribe)

từ broker, mục đích chính là kiểm tra publish và subcribe giữa ESP8266 và

MQTT Broker.

Nhiệm vụ 2: Nhận (subcribe) thông tin từ broker, kiểm tra dữ liệu và thực

hiện bật tắt LED

Tạo tài khoản và cấu hình CloudMQTT:

Bước 1: Bạn vào trực tiếp trang CloudMQTT để tạo một tài khoản cho

mình, sẽ có một đường dẫn để kích hoạt thông tin và cấu hình cho tài khoản

của bạn, trừ email và mật khẩu ra thì các ô còn lại các bạn nhập gì tùy thích.

Bước 2: Tạo MQTT Broker bằng cách ấn vào nút Create màu xanh, nhập

các thông tin vào như hình.

Page 116: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 113

Bước 3: Chọn Details để cấu hình thông tin

Trong manage User điền tên user là esp8266, password là 123456, sau đó Save

Trong New Rule chọn user như hình, tên topic đặt demo, tick chọn Read,Write

Vậy là xong bước cấu hình broker, kết quả, ta sẽ quan tâm tới 3 ô khoanh đỏ

Lập trình ESP8266

Publish thông tin lên topic: Để ESP8266 có thể publish và subcribe dữ

liệu lên MQTT broker thì cần phải có thư viện MQTT, ở đây mình dùng

thư viện sẵn có là PubSubClient để thử nghiệm cho nhanh.

Chương trình này sẽ thực hiện kết nối với mạng wifi trước để có kết nối tới

internet, sau đó thực hiện gửi thông tin lên broker bằng lệnh publish, sau đó lắng nghe

Page 117: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 114

thông tin có trên Broker (ở đây là thông tin do chính nó gửi lên) và in thông tin này ra

terminal của Arduino thông qua hàm callback.

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

Mã lập trình:

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

1. #include <ESP8266WiFi.h> 2. #include <PubSubClient.h> 3. // Cập nhật thông tin 4. // Thông tin về wifi 5. #define ssid "ten_wifi" 6. #define password "password" 7. // Thông tin về MQTT Broker 8. #define mqtt_server "m12.cloudmqtt.com" // Thay bằng thông tin của bạn 9. #define mqtt_topic_pub "demo" //Giữ nguyên nếu bạn tạo topic tên là

demo 10. #define mqtt_topic_sub "demo" 11. #define mqtt_user "esp8266" //Giữ nguyên nếu bạn tạo user là esp8266

và pass là 123456 12. #define mqtt_pwd "123456" 13. 14. const uint16_t mqtt_port = 10769; //Port của CloudMQTT 15. 16. WiFiClient espClient; 17. PubSubClient client(espClient); 18. 19. long lastMsg = 0; 20. char msg[50]; 21. int value = 0; 22. 23. void setup() { 24. Serial.begin(115200); 25. setup_wifi(); 26. client.setServer(mqtt_server, mqtt_port); 27. client.setCallback(callback); 28. } 29. // Hàm kết nối wifi 30. void setup_wifi() { 31. delay(10); 32. Serial.println(); 33. Serial.print("Connecting to "); 34. Serial.println(ssid); 35. WiFi.begin(ssid, password); 36. while (WiFi.status() != WL_CONNECTED) {

Page 118: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 115

37. delay(500); 38. Serial.print("."); 39. } 40. Serial.println(""); 41. Serial.println("WiFi connected"); 42. Serial.println("IP address: "); 43. Serial.println(WiFi.localIP()); 44. } 45. // Hàm call back để nhận dữ liệu 46. void callback(char* topic, byte* payload, unsigned int length) { 47. Serial.print("Message arrived ["); 48. Serial.print(topic); 49. Serial.print("] "); 50. for (int i = 0; i < length; i++) { 51. Serial.print((char)payload[i]); 52. } 53. Serial.println(); 54. } 55. // Hàm reconnect thực hiện kết nối lại khi mất kết nối với MQTT Broker 56. void reconnect() { 57. // Chờ tới khi kết nối 58. while (!client.connected()) { 59. Serial.print("Attempting MQTT connection..."); 60. // Thực hiện kết nối với mqtt user và pass 61. if (client.connect("ESP8266Client",mqtt_user, mqtt_pwd)) { 62. Serial.println("connected"); 63. // Khi kết nối sẽ publish thông báo 64. client.publish(mqtt_topic_pub, "ESP_reconnected"); 65. // ... và nhận lại thông tin này 66. client.subscribe(mqtt_topic_sub); 67. } else { 68. Serial.print("failed, rc="); 69. Serial.print(client.state()); 70. Serial.println(" try again in 5 seconds"); 71. // Đợi 5s 72. delay(5000); 73. } 74. } 75. } 76. void loop() { 77. // Kiểm tra kết nối 78. if (!client.connected()) { 79. reconnect(); 80. } 81. client.loop(); 82. // Sau mỗi 2s sẽ thực hiện publish dòng hello world lên MQTT broker

Page 119: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 116

83. long now = millis(); 84. if (now - lastMsg > 2000) { 85. lastMsg = now; 86. ++value; 87. snprintf (msg, 75, "hello world #%ld", value); 88. Serial.print("Publish message: "); 89. Serial.println(msg); 90. client.publish(mqtt_topic_pub, msg); 91. } 92. }

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

Kết quả:

Log Arduino

Log Websocket UI

Page 120: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 117

Ví dụ 2: Bật tắt LED

Như vậy ta đã giao tiếp thực hiện publish và subcribe trên MQTT Broker. Giờ

thực hiện cải tiến thêm một chút, là từ giao diện Websocket UI Send message xuống,

ở dưới khi nhận được message thì ESP8266 thực hiện bật/tắt LED có sẵn trên kit.

Với chương trình này mình sẽ thay đổi và thực hiện kiểm tra gói tin từ Broker gửi

về để điều khiển LED trong hàm callback

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

Mã lập trình:

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

1. #include <ESP8266WiFi.h> 2. #include <PubSubClient.h> 3. // Cập nhật thông tin 4. // Thông tin về wifi 5. #define ssid "ten_wifi" 6. #define password "password" 7. // Thông tin về MQTT Broker 8. #define mqtt_server "m12.cloudmqtt.com" // Thay bằng thông tin của bạn 9. #define mqtt_topic_pub "demo" //Giữ nguyên nếu bạn tạo topic tên là

demo 10. #define mqtt_topic_sub "demo" 11. #define mqtt_user "esp8266" //Giữ nguyên nếu bạn tạo user là esp8266

và pass là 123456 12. #define mqtt_pwd "123456" 13. 14. const uint16_t mqtt_port = 10769; //Port của CloudMQTT 15. const byte ledPin = D0;

Page 121: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 118

16. 17. WiFiClient espClient; 18. PubSubClient client(espClient); 19. 20. long lastMsg = 0; 21. char msg[50]; 22. int value = 0; 23. 24. void setup() { 25. Serial.begin(115200); 26. setup_wifi(); 27. client.setServer(mqtt_server, mqtt_port); 28. client.setCallback(callback); 29. pinMode(ledPin, OUTPUT); 30. } 31. // Hàm kết nối wifi 32. void setup_wifi() { 33. delay(10); 34. Serial.println(); 35. Serial.print("Connecting to "); 36. Serial.println(ssid); 37. WiFi.begin(ssid, password); 38. while (WiFi.status() != WL_CONNECTED) { 39. delay(500); 40. Serial.print("."); 41. } 42. Serial.println(""); 43. Serial.println("WiFi connected"); 44. Serial.println("IP address: "); 45. Serial.println(WiFi.localIP()); 46. } 47. // Hàm call back để nhận dữ liệu 48. void callback(char* topic, byte* payload, unsigned int length) { 49. Serial.print("Message arrived ["); 50. Serial.print(topic); 51. Serial.print("] "); 52. for (int i = 0; i < length; i++) { 53. char receivedChar = (char)payload[i]; 54. Serial.print(receivedChar); 55. if (receivedChar == '1') 56. // Kiểm tra nếu tin nhận được là 1 thì bật LED và ngược lại 57. digitalWrite(ledPin, HIGH); 58. if (receivedChar == '0') 59. digitalWrite(ledPin, LOW); 60. } 61. Serial.println();

Page 122: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 119

62. } 63. // Hàm reconnect thực hiện kết nối lại khi mất kết nối với MQTT Broker 64. void reconnect() { 65. // Chờ tới khi kết nối 66. while (!client.connected()) { 67. Serial.print("Attempting MQTT connection..."); 68. // Thực hiện kết nối với mqtt user và pass 69. if (client.connect("ESP8266Client",mqtt_user, mqtt_pwd)) { 70. Serial.println("connected"); 71. // Khi kết nối sẽ publish thông báo 72. client.publish(mqtt_topic_pub, "ESP_reconnected"); 73. // ... và nhận lại thông tin này 74. client.subscribe(mqtt_topic_sub); 75. } else { 76. Serial.print("failed, rc="); 77. Serial.print(client.state()); 78. Serial.println(" try again in 5 seconds"); 79. // Đợi 5s 80. delay(5000); 81. } 82. } 83. } 84. void loop() { 85. // Kiểm tra kết nối 86. if (!client.connected()) { 87. reconnect(); 88. } 89. client.loop(); 90. }

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

Kết quả

Link tham khảo:

https://hocarm.org/mqtt-va-esp8266/

Page 123: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 120

Thu thập dữ liệu với ESP8266 và Webserver

Tính đến thời điểm hiện tại, chúng ta đã có rất nhiều các giao thức và nền tảng hỗ

trợ cho các ứng dụng IoT như điều khiển từ xa, thu thập dữ liệu cảm biến. Những giao

thức phổ biến hiện nay gồm mqtt, websocket,...Tuy nhiên, để sử dụng được đa nền tảng,

và dễ dàng thao tác với dữ liệu cũng như hiển thị trực quan, http vẫn là một lựa chọn

tốt.

Có thể nói để xây dựng được thành công một mini webserver, thu thập dữ liệu

cũng như điều khiển các cơ cấu chấp hành từ xa cần làm rất nhiều công việc. Chúng ta

sẽ bắt đầu với những vấn đề cơ bản về giao tiếp qua http trước, sau đó bắt tay xây dựng

giao diện.

Phần này sẽ sử dụng các ngôn ngữ lập trình và board sau:

Ngôn ngữ: php, mysql, html, bootstrap cho giao diện và xử lý tại server,

c++ cho client đọc dữ liệu cảm biến và giao tiếp với server.

Board: Raspberry Pi làm miniserver, ESP8266 làm client

Cơ chế làm việc của mô hình thu thập dữ liệu, điều khiển qua http.

Nhìn trên sơ đồ trên, ta thấy việc giao tiếp truyền nhận dữ liệu của esp với server

cơ bản dựa trên bản tin request và response của giao thức http.

Vậy giao thức http hoạt động thế nào?

HTTP là chữ viết tắt từ HyperText Transfer Protocol (giao thức truyền tải

siêu văn bản). Đây là giao thức cơ bản mà World Wide Web sử dụng để

truyền tải nội dung các trang web. HTTP xác định cách các thông điệp (các

file văn bản, hình ảnh đồ hoạ, âm thanh, video, và các file multimedia khác

Page 124: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 121

được định dạng và truyền tải ra sao, và hoạt động của Web Server và các

trình duyệt Web).

Trong mô hình của HTTP, Webserver đồng thời cũng là TCP Server, mở

sẵn port mặc định dành cho dịch vụ HTTP là TCP 80 (ở chế độ listen), sẵn

sàng đợi yêu cầu kết nối từ các Client.

Các Client sẽ khởi tạo kết nối TCP thông qua port này, sau khi Webserver

chấp nhận kết nối, Client sẽ gửi một bản tin HTTP (HTTP message) gọi là

HTTP request tới Server trên kết nối TCP vừa thiết lập.

Server sẽ trả lời lại bằng một bản tin HTTP khác là HTTP response. Bản

tin này sẽ chứa nội dung trang Web yêu cầu (được viết bằng ngôn ngữ

HTML).

Với các đặc điểm được nói đến ngắn gọn ở trên, công việc để sử dụng webserver

cho việc thu thập dữ liệu và điều khiển có thể dễ dàng nhận thấy bằng việc nhúng các

trường dữ liệu cảm biến vào trong các request và response của http.

Ví dụ về nhúng các trường dữ liệu vào bản tin request:

Giả sử chúng ta gõ đường dẫn sau https://luuvachiase.net?LED=1

Khi chúng ta truy cập vào đường dẫn này, nghĩa là đã thực hiện việc gửi đi một

request theo phương thức GET đến server, lúc này tại server nếu chúng ta sử dụng hàm

để tách giá trị của bản tin GET, ở đây là biến LED có giá trị là 1, có nghĩa, ta đã bước

đầu giao tiếp giữa client và server thông qua http. Việc này dễ dàng được thực hiện trên

nền tảng ESP8266.

VD: client.print (String(“POST “) + “/up_load_data.php?temp=20” +

“HTTP/1.1\r\n” + “Host: ” + 192.168.1.1+ “\r\n” + “Connection:close\r\n\r\n”);

Trên đây là đoạn code dùng trên nền tảng Arduino cho Esp8266. Đoạn mã này

dùng cho việc gửi đi một bản tin request đến một server có địa chỉ 192.168.1.1, bằng

phương thức POST. ( với phương thức GET, dữ liệu có thể dễ dàng được quan sát trên

đường dẫn, nhưng với POST tất cả sẽ được ẩn đi). Lúc này đường dẫn sẽ gửi tới file

up_load_data.php biến temp có giá trị bằng 20.

Và dưới đây là ví dụ về đoạn mã tại server, nhận request và tách trường dữ liệu

temp từ request.

Page 125: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 122

if (isset($_POST[‘temp’]))

{

$temp_php = $_POST[“temp”];

}

Đoạn mã trên là một đoạn mã PHP, có ý nghĩa là nếu tồn tại bản tin POST, đi kèm

biến temp, thì gán giá trị biến temp và biến của PHP là $temp_php

Công việc sau đó là lưu giá trị biến $temp_php này vào cơ sở dữ liệu để sẳn sàng

cho xử lý hiển thị.

$sql=”UPDATE sensor SET values_sensor =’$temp_php’ WHERE user_id =

$user_find[user_id]”;

Đoạn mã trên là thực hiện lưu giá trị temp_php vào cột values_sensor trong mysql,

nơi mà có user_id= user_id

Trên đây là bài viết tổng quát và bước đầu cho người đọc biết cách thức sử dụng

bản tin request và response trong việc upload dữ liệu từ esp8266.

3.3. Module Ethernet Shield

Điều khiển thiết bị điện dùng module Ethernet Shield

Ethernet shield là một mạch mở rộng cho arduino, giúp arduino có thể kết nối với

thế giới internet rộng lớn. Ứng dụng của shield này là truyền nhận thông tin giữa arduino

với thiết bị bên ngoài sử dụng internet, shield này đặc biệt hữu ích cho các ứng dụng

IoT, điều khiển và kiểm soát hệ thống vì internet luôn liên tục, dữ liệu truyền đi nhanh,

khoảng cách là vô tận( trong Trái Đất thôi, với phải có mạng nữa) ăn đứt sóng RF , rẻ

hơn với cách truyền từ xa bằng tin nhắn. Hôm nay mình sẽ hướng dẫn mọi người cách

sử dụng nó để điều khiển thiết bị bằng đường truyền internet.

3.3.1.1. Phần Cứng

1 mạch arduino uno hoặc mega

1 shield ethernet

1 dây mạng RJ45

3 led

3 trở 220 hoặc 1K để bảo vệ led

Page 126: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 123

3.3.1.2. Thực hiện

Chụp shield ethernet lên uno hoặc mega như hình:

Bước 1: Tạo code Web để hiển thị thông tin khi bạn truy cập vào Web, khi

đó bạn có thể nhận các tín hiệu và điều khiển thiết bị bằng giao diện web,

nó giống như lập trình một trang Web vậy, code ở dưới đây. Bạn tùy biến

theo cách của mình và nạp nó vào arduino như bình thường nhé.

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

Mã lập trình:

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

1. #include<SPI.h> // thư viện để kết nối shield 2. #include<Ethernet.h> // thư viện cho dự án 3. 4. byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // địa chỉ MAC( địa

chỉ phần cứng của shield ethernet), cứ để nguyên 5. IPAddress ip(192, 168, 1, 9); // địa chỉ IP của shield, có thể thay

đổi tùy ý.

Page 127: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 124

6. 7. EthernetServer server = EthernetServer(80); // giá trị port là 80 8. String readString; // khai báo chuỗi có tên readString 9. int AN1, AN2, AN3, AN4, AN5; // khai báo biến để đọc giá trị

analog, đọc xuống dưới sẽ hiểu 10. void setup() { 11. 12. Serial.begin(9600); 13. while (!Serial) { 14. ; 15. } 16. pinMode(7, OUTPUT); 17. pinMode(8, OUTPUT); 18. pinMode(9, OUTPUT); 19. 20. digitalWrite(7, LOW); 21. digitalWrite(8, LOW); 22. digitalWrite(9, LOW); 23. 24. Ethernet.begin(mac, ip); // viết ít thôi nhé, cái này cober đọc

sẽ tự hiểu 25. server.begin(); 26. Serial.print("Dia chi server la: "); 27. Serial.println(Ethernet.localIP()); 28. Serial.println("Ban da ket noi thanh cong mang ethernet..."); 29. 30. } 31. 32. void loop() { 33. 34. AN1 = analogRead(A1); 35. AN2 = analogRead(A2); 36. AN3 = analogRead(A3); 37. AN4 = analogRead(A4); 38. AN5 = analogRead(A5); 39. 40. EthernetClient client = server.available(); 41. delay(2000); 42. 43. if (client = true) { //if client: 44. 45. while (client.connected()) { 46. if (client.available()) { 47. char c = client.read(); //Đọc char bởi yêu cầu HTTP 48. 49. if (readString.length() < 100) { //Lưu trữ các ký tự vào chuỗi

Page 128: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 125

50. 51. readString += c; 52. } 53. 54. if (c == '\n') { 55. Serial.println(readString); //In ra serial monitor 56. client.println("HTTP/1.1 200 OK"); //Tạo 1 trang mới 57. client.println("Content-Type: text/html"); 58. client.println("Refresh: 5"); // lệnh để tự động tải lại trang, cứ 5

giây 1 lần tải lại. 59. // vì giá trị analog thay đổi liên tục nên luôn phải tải lại, nếu kho có dòng

này thì 60. // phải tải lại trang bằng cách kích chuột để đọc giá trị analog mới => rất

mệt. 61. client.println(); 62. client.println("<HTML>"); // câu lệnh của web để trình duyệt

hiểu mà hiển thị các phần đầu, thân, cuối,...mình chưa học lập trình web nên chưa hiểu lắm

63. client.println("<HEAD>"); 64. client.println("<TITLE>He Thong Dieu Khien Thiet Bi Bang Arduino

Uno - Ethernet Shield Arduino</TITLE>"); 65. // tên tiêu đề ở mác của tab trình duyệt đó, cái này ít quan trọng. có thể

thay đổi tùy ý 66. client.println("</HEAD>"); 67. client.println("<BODY>"); 68. client.println("<CENTER>"); 69. client.println("<h1>HE THONG DIEU KHIEN THIET BI QUA

INTERNET BANG ARDUINO UNO VA MODULE ETHERNET SHIELD</h1>");

70. client.println("<h3>************************************************************</h3>");

71. client.println("<h3>DIEU KHIEN BANG NUT LENH</h3>"); 72.

//===========================================================================

73. client.println("<br/>"); // lệnh để cách xuống dòng

74. client.println("<a href='button1on'>MO THIET BI 1</a>"); // tạo một nút (button) trên web( nút bật thiết bị 1), khi bấm nút tức là ta đã gửi 1 lệnh về shield( arduino sẽ sử lí tín hiệu này)

75. client.println("<br/>"); 76. client.println("<a href='button1off'>TAT THIET BI 1</a>"); // nút

dùng để tắt thiết bị 1 77. client.println("<br/>"); 78.

Page 129: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 126

79. client.println("<br/>"); 80. client.println("<a href='button2on'>MO THIET BI 2</a>"); // tương

tự nút bật trên nhưng là tb 2 81. client.println("<br/>"); 82. client.println("<a href='button2off'>TAT THIET BI 2</a>"); // tương

tự nút tắt trên nhưng là thiết bị 2 83. client.println("<br/>"); 84. 85. client.println("<br/>"); 86. client.println("<a href='button3on'>MO THIET BI 3</a>"); // tương

tự nút bật trên nhưng là tb 3 87. client.println("<br/>"); 88. client.println("<a href='button3off'>TAT THIET BI 3</a>"); // tương

tự nút tắt trên nhưng là thiết bị 3 89. client.println("<br/>"); 90. 91.

client.println("<h3>***********************************************************</h3>"); // dấu sao để ngăn cách

92. client.println("<h3>**********************************************</h3>");

93. client.println("<h3>******************************</h3>"); 94. 95. client.println("<br/>"); 96. client.print(" Gia tri cong analog 1 la: "); // in ra màn hình

trình duyệt thông báo " Gia tri cong analog 1 la: " 97. client.print( AN1); // in ra giá trị analog 98. client.println("<br/>"); 99. client.println("<br/>"); // xuống 2 dòng 100. client.print(" Gia tri cong analog 2 la: "); // tương tự

như trên 101. client.print( AN2); 102. client.println("<br/>"); 103. client.println("<br/>"); 104. client.print(" Gia tri cong analog 3 la: "); 105. client.print( AN3); 106. client.println("<br/>"); 107. client.println("<br/>"); 108. client.print(" Gia tri cong analog 4 la: "); 109. client.print( AN4); 110. client.println("<br/>"); 111. client.println("<br/>"); 112. client.print(" Gia tri cong analog 5 la: "); 113. client.print( AN5); 114.

Page 130: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 127

115. client.println("<br/>"); 116. client.println("</BODY>"); 117. client.println("</HTML>"); 118. delay(1); 119. //Stop Client: 120. client.stop(); 121. Serial.println("client disconnected"); 122. 123. if (readString.indexOf("button1on") > 0) { // nút bấm thiết bị 1(

button1) được bấm thì 124. digitalWrite(9, HIGH); // xuất ra tín hiệu điện

dương ra cổng 9 125. } // các phần dưới hiểu tương tự 126. 127. if (readString.indexOf("button1off") > 0) { 128. digitalWrite(9 , LOW); 129. } 130. 131. if (readString.indexOf("button2on") > 0) { 132. digitalWrite(8, HIGH); 133. } 134. 135. if (readString.indexOf("button2off") > 0) { 136. digitalWrite(8 , LOW); 137. } 138. 139. if (readString.indexOf("button3on") > 0) { 140. digitalWrite(7, HIGH); 141. } 142. 143. if (readString.indexOf("button3off") > 0) { 144. digitalWrite(7 , LOW); 145. } 146. 147. readString = ""; // đặt lại chuỗi thành không có giá

trị nào 148. } 149. 150. } 151. } 152. } 153. 154. 155. }

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

Page 131: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 128

Sau khi nạp xong các bạn dùng máy tính, truy cập vào địa chỉ ip mà bạn vùa cài

đặt( trong code thì truy cập vào 192.168.1.9), nếu hiện ra 1 trang giống này thì là ok rồi.

thử điều khiển xem các led có bật tắt theo yêu cầu không, đợi 5s xem có có tự tải lại

trang không. nếu ok hết là ngon.

Bước 2: Tạo một Domain và gán ip modem vào đó

Đầu tiên, truy cập: www.no-ip.com (chọn ngôn ngữ tiếng Việt cho dễ đọc, phần

language ở góc phải màn hình đó) => tạo một tài khoản trên đó: bấm Sign up và làm

theo hướng dẫn (nó yêu cầu gmail nên chưa có gmail thì phải tạo một cái gmail trước

đã nhé.) nhận email, tên tài khoản, mật khẩu, và cái cuối là( host name) tên miền.

Nên nhớ, tên miền là cái mình sau này sẽ truy cập, vì thế nên hãy đặt cái tên dễ

nhớ đấy. Ví dụ như tên bạn, biệt danh, các kiều,... nếu bị trùng thì phải làm cái khác

nhé. khi truy cập bạn phải gõ tên bạn vừa nhập vào và thêm mấy cái đuôi của nó vào

đấy. khuyên dùng đuôi “.ddns.net” vì nó dễ nhớ.

Tiếp theo, làm theo hướng dẫn của nó là xác minh tài khoản bằng email, truy cập

email để lấy link kích hoạt. sau khi kích hoạt nó bắt tải cái app tên DUC.exe, ae tải về

rồi cài đặt vào máy, app nó yêu cầu đợi hơn 4 phút để cập nhật ip lên noip.com. Các

bạn cứ đợi hết 4 phút là được, nó làm lại lần 2 thì thoát nó ra, lúc này cũng cập nhật

xong rồi.

Ta đăng nhập lại vào https://my.noip.com/#!/ và sẽ thấy có hình "1 active" to đùng

vào đấy, nhấp chuột vào ta sẽ thấy tên miền và bên cạnh là cái ip modem nhà bạn.

Page 132: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 3: TRUYỀN THÔNG VI ĐIỀU KHIỂN ARDUINO

KHOA ĐIỆN – TỰ ĐỘNG HÓA 129

Lúc này ta truy cập vào cái tên miền đó, nếu thấy xuất hiện một hình đăng nhập

vào là ok rồi. (hình đăng nhập này là tài khoản và mật khẩu để đăng nhập vào để thay

đổi cài đặt modem).

Lúc này, chúng ta có thể truy cập mạng ở ngoài để vào được mạng ở nhà bằng tên

miền vừa tạo rồi, như nó lại không truy cập đúng vào cái shield để điều khiển thiết bị

mà lại truy cập vào đăng nhập của modem, vậy bước tiếp theo là chúng ta phải "NAT

PORT" cho shield để có thể truy cập từ tên miền vừa tạo vào shield chứ không phải vào

modem,… và điều khiển thiết bị từ khắp nơi trên trái đất, miễn là có mạng.

Bước 3: NAT PORT

Phần này là phần quan trọng nhất, việc NAT PORT này tùy thuộc vào từng modem

mạng, mỗi loại khác nhau sẽ có cách NAT khác nhau mặc dù cùng mạng. Có thể các

modem cùng hãng nhưng sau mỗi năm thì họ lại cập nhật lại phần mềm hoặc phần cứng

mới nên cách NAT cũng khác nhau, vì vậy nên mình sẽ không hướng dẫn các bạn NAT

PORT một cách chung chung, việc NAT PORT các bạn phải tự tìm hiểu . Sau đây mình

sẽ đăng các link hướng dẫn các bạn NAT PORT.

Lưu ý:

Khi NAT các bạn ghi ip của shield (ở code trên là 192.168.1.9);

Số port của shield là 80, nên các bạn điền là 80 cho " External port start" và cũng

80 cho " External port start", do các clip hướng dẫn chủ yếu là cho camera mà camera

lại có nhiều số port nên các bạn đừng hoang mang,họ dùng camera thì mình dùng shield(

tức là làm giống camera vậy, chỉ là thay thông số của camera bằng shield thôi) , chỉ cần

ghi 1 số port là 80 cho cả port start và port end là được

Khi NAT một số modem yêu cầu có bước viết tên miền, tài khoản, mật khẩu thì

các bạn đăng nhập y như khi đăng kí ở noip.com đó.( như modem của mình chẳng hạn)

Thông số port của shield là 80, nên các bạn điền là 80 cho " External port start" và

cũng 80 cho " External port start"

Link tham khảo:

http://arduino.vn/bai-viet/951-gioi-thieu-ethernet-shield-ung-dung-dieu-khien-thiet-bi-o-moi-

noi-tren-gioi-khi-co

http://arduino.vn/tutorial/5953-dieu-khien-tu-xa-voi-arduino-va-ethernet-shield

http://arduino.vn/bai-viet/1171-dieu-khien-thiet-bi-qua-web-sever-voi-esp8266-khong-can-arduino

Page 133: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 130

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

4.1. Ứng dụng module ESP8266

Điều khiển thiết bị từ xa qua website (ESP8266 web server)

Ứng dụng này sẽ giúp bạn điều khiển thiết bị như: Đèn, quạt, cửa,… sau đó qua

môi trường Internet, bạn có thể dùng trình duyệt bất kỳ trên điện thoại hoặc máy tính

để thao tác với thiết bị thông qua Esp8266.

Đây là một ví dụ điển hình của ứng dụng ESP8266, các bạn có thể tùy biến các

thiết bị điều khiển sao cho phù hợp với nhu cầu của bạn. Có thể tìm hiểu và làm theo

hướng dẫn

Cập nhật Firmware từ xa cho ESP8266 (OTA)

Có thể hiểu đây là công việc nạp code từ xa mà không cần phải kết nối trực tiếp

đến ESP8266 NodeMCU. ứng dụng này của ESP8266 khá hay và thực sự cần thiết, bạn

Page 134: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 131

thử nghĩ nếu làm một sản phẩm giao cho khách hàng mà muốn Update gì cứ phải chạy

đến để nạp code thì thốn đến nào.

Ứng dụng này có thể sử dụng cho các dự án điều khiển, giám sát tại các nông trại,

hoặc sau khi đóng hộp bạn không muốn mở ra thì hoàn toàn có thể chỉnh sửa lại code

sau đó nạp trực tiếp thông qua trình duyệt, Arduino IDE miễn sao bạn đã cấu hình cho

ESP8266 có khả năng Update code từ xa (OTA).

Điều khiển bằng giọng nói sử dụng ESP8266

bạn hoàn toàn có thể sử dụng Google Assistant trên điện thoại của mình để nói

chuyện với ESP8266.

Esp8266 và Google Assistant

Tiên tiến hơn các ứng dụng phía trên của ESP8266, tại đây bạn có thể sử dụng

chính cô em google để điều khiển thiết bị có kết nối với ESP8266.

Chỉ cần điện thoại của bạn là SmartPhone và có kết nối Internet thì bạn hoàn toàn

có thể làm việc đó một cách đơn giản.

Page 135: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 132

Điều khiển xe từ xa qua ESP8266

Bạn muốn có một chiếc xe có thể điều khiển qua điện thoại, đây là ứng dụng tuyệt

vời cho bạn.

Sử dụng ESP8266 hiển thị lên led ma trận

Một cách đơn giản để bạn tạo một chiếc đồng hồ, hay một khung led để biểu thị

các đoạn văn bản mà bạn muốn.

Có thể áp dụng ứng dụng ESP8266 web server để áp dụng vào ứng dụng này, bạn

sẽ sử dụng trình duyệt web hoặc điện thoại để gửi đoạn văn bản đến led ma trận.

4.2. Ứng dụng module Ethernet Shield

Ethernet shield là một mạch mở rộng cho arduino, giúp arduino có thể kết nối với

thế giới internet rộng lớn. Ứng dụng của shield này là truyền nhận thông tin giữa arduino

với thiết bị bên ngoài sử dụng internet, shield này đặc biệt hữu ích cho các ứng dụng

Page 136: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 133

IoT, điều khiển và kiểm soát hệ thống vì internet luôn liên tục, dữ liệu truyền đi nhanh,

khoảng cách là vô tận( trong Trái Đất thôi, với phải có mạng nữa) ăn đứt sóng RF , rẻ

hơn với cách truyền từ xa bằng tin nhắn. Hôm nay mình sẽ hướng dẫn mọi người cách

sử dụng nó để điều khiển thiết bị bằng đường truyền internet.

4.3. Hướng dẫn kỹ năng tìm kiếm tài liệu nâng cao trên Google

Tìm kiếm Cụm từ chính xác

Giả sử bạn đang tìm kiếm trên Google về nội dung về hướng dẫn làm seo

web. Thay vì chỉ gõ hướng dẫn làm seo web vào hộp tìm kiếm của Google, có thể sẽ tốt

hơn khi tìm kiếm một cách rõ ràng với cụm từ. Để thực hiện việc này, chỉ cần đưa cụm

từ tìm kiếm vào dấu nháy kép “”.

Ví dụ tìm kiếm: "hướng dẫn làm seo web "

Tìm kiếm cụm từ chính xác

Loại trừ Từ

Giả sử bạn muốn tìm kiếm nội dung về inbound marketing, nhưng bạn muốn loại

trừ bất kỳ kết quả nào có chứa advertising theo cụm từ. Để làm điều này, bạn chỉ cần

sử dụng dấu - ở phía trước của từ mà bạn muốn loại trừ.

Ví dụ tìm kiếm: inbound marketing -advertising

This OR That

Mặc định, khi bạn thực hiện tìm kiếm, Google sẽ bao gồm tất cả các điều kiện

(terms) được chỉ định trong tìm kiếm. Nếu bạn đang tìm kiếm bất kỳ từ nào trong một

Page 137: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 134

hoặc nhiều cụm từ cần khớp (match), thì bạn có thể sử dụng toán tử OR. (Lưu ý: OR

phải được viết hoa).

Ví dụ tìm kiếm: inbound marketing OR advertising

Các từ trong văn bản

Nếu bạn muốn tìm một trang web nơi mà tất cả các cụm từ bạn đang tìm kiếm

xuất hiện trong văn bản của trang đó (nhưng không nhất thiết cạnh nhau), nhập

vào allintext: theo sau ngay bằng từ hoặc cụm từ.

Ví dụ Tìm kiếm: allintext:Quy trình SEO

Các từ trong Text + Tiêu đề, URL

Nếu bạn muốn tìm một trang web có một cụm từ xuất hiện trong văn bản của trang

đó và một thuật ngữ khác xuất hiện ở nơi khác trên trang, như Title hoặc URL, sau đó

nhập cụm từ đầu tiên đó theo sau bởi intext: theo sau ngay bằng từ khác.

Ví dụ Tìm kiếm: neil diamond intext:red sox

Tìm Các từ trong Title (Tiêu đề)

Bạn muốn tìm một trang web với những từ nhất định có trong tiêu đề (nhưng

không nhất thiết phải cạnh nhau)? Nhập allintitle: ngay sau đó bằng từ hoặc cụm từ.

Ví dụ Tìm kiếm: allintitle:wine club

Các từ trong Title + Text, URL

Bạn muốn tìm một trang web có một từ xuất hiện trong tiêu đề của trang đó và

một thuật ngữ khác xuất hiện ở nơi khác trên trang, như trong văn bản hoặc URL? Nhập

từ đầu tiên đó theo sau bởi intitle: ngay sau đó là từ khác.

Ví dụ tìm kiếm: flu shot intitle:advise

Tìm kiếm Các từ trong URL

Nếu bạn muốn tìm các trang có truy vấn tìm kiếm được đề cập trong URL, hãy

nhập allinurl: ngay sau đó là truy vấn tìm kiếm của bạn.

Tìm kiếm ví dụ: allinurl:blog hubspot

Page 138: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 135

Cách tìm kiếm trong một trang web

Thông thường, bạn muốn tìm kiếm một trang web cụ thể cho nội dung phù hợp

với cụm từ nhất định. Ngay cả khi trang web không hỗ trợ tính năng tìm kiếm, bạn có

thể sử dụng Google để tìm kiếm trang web cho cụm từ của bạn. Đơn giản chỉ cần sử

dụng site: somesite.com.

Ví dụ Tìm kiếm: site:seothetop.com "tài liệu học seo"

Tìm kiếm có liên quan

Nếu bạn muốn tìm các trang web mới có nội dung tương tự với một trang web bạn

đã biết, hãy sử dụng related: somesite.com. Tìm những trang liên quan để xác định

những trang cùng lĩnh vực để có kế hoạch SEO như tìm hiểu cách làm, liên hệ viết bài

trên mục blog để xây dựng backlink.

Ví dụ tìm kiếm: related: lichngaytot.com

Một Trang Kết Nối tới Trang Khác (Page that links to another page)

Giả sử bạn muốn tìm kiếm mọi trang web trích dẫn BuzzFeed Trên trang web

của họ. Để làm điều này, sử dụng link: command, ngay sau đó là tên của một

trang. Google sẽ cung cấp cho bạn tất cả các trang liên kết tới trang web chính thức của

BuzzFeed. Địa chỉ URL cụ thể hơn, bạn sẽ nhận được ít kết quả hơn.

Ví dụ Tìm kiếm: link:buzzfeed

Page 139: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 136

Các từ và từ đồng nghĩa

Giả sử bạn muốn bao gồm một từ trong tìm kiếm của mình nhưng cũng muốn bao

gồm các kết quả có chứa các từ tương tự hoặc từ đồng nghĩa. Để làm điều này, sử

dụng ~ ở phía trước của từ.

Ví dụ Tìm kiếm: "inbound marketing" ~ professional

Định nghĩa của từ

Nếu bạn cần phải nhanh chóng tìm kiếm định nghĩa của từ hoặc cụm từ, chỉ cần

sử dụng lệnh define: command. Bạn có thể nghe phát âm của từ bằng cách nhấn vào

biểu tượng megaphone.

Ví dụ Tìm kiếm: define: plethora

Định nghĩa cụm từ

Thiếu Từ (Missing word)

Khi nào quên một hoặc hai từ cụm từ cụ thể, bài hát lyric, trích dẫn phim, hay cái

gì khác? Bạn có thể sử dụng dấu hoa thị * làm ký tự đại diện, có thể giúp bạn tìm thấy

từ thiếu trong một cụm từ.

Ví dụ Tìm kiếm: much * about nothing

Tin tức trong một Vị trí cụ thể

Nếu bạn đang tìm kiếm tin tức liên quan đến một vị trí cụ thể, bạn có thể sử

dụng location:command để tìm kiếm Google Tin tức cho những câu chuyện đến từ vị

trí đó.

Page 140: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 137

Tìm kiếm Ví dụ: star wars location:london

Tìm Loại file tài liệu cụ thể

Nếu bạn đang tìm kiếm để tìm kết quả thuộc loại file cụ thể, bạn có thể sử dụng

filetype:. Ví dụ: bạn có thể chỉ muốn tìm các bài thuyết trình PowerPoint có liên quan

inbound marketing.

Ví dụ tìm kiếm: "inbound marketing" filetype: ppt

Tìm kiếm nâng cao trên GG mang lại hiệu quả cao

Bài viết trên đây Nhanh.vn đã gửi đến bạn đọc cách để tìm kiếm nâng cao trên

Google, giúp cho mọi mong muốn của các bạn được giải đáp nhanh chóng và chính

xác nhấ có thể. Chúc cho bạn đọc có thể áp dụng nó vào cuộc sống cũng như công việc,

chúc các bạn thành công.

Hiện nay, Nhanh.vn cung cấp một phần mềm quản lý bán hàng đa kênh giúp chủ

cửa hàng và người bán hàng quản lý một cách xuyên suốt các hoạt động bán hàng của

mình. Các đơn hàng từ website, Facebook, sàn thương mại điện tử sẽ được chuyển về

phần mềm bán hàng của Nhanh rồi lựa chọn hãng vận chuyển để giao hàng đến cho

khách hàng. Chính vì thế mà Nhanh đang là lựa chọn của rất nhiều shop trên địa bàn cả

nước.

Vậy bạn còn chần chừ gi mà không nhanh tay liên lạc với chúng tôi để cuộc sống

dễ dàng hơn mỗi ngày nhỉ? Hãy nắm bắt cơ hội của mình để giành lấy vị trí cao nhất

trong lòng khách hàng nào!!! Nhanh.vn rất vui vì bạn đọc đã dành thời gian cho chúng

mình.

Page 141: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 138

4.4. Hướng dẫn kỹ năng viết một bài báo cáo khoa học

Lựa chọn đề tài

4.4.1.1. Hiểu công việc được giao.

Nếu giáo viên, chuyên gia, hay cấp trên đưa cho bạn một bài hướng dẫn viết báo

cáo, hãy đọc chúng thật kỹ. Công việc yêu cầu điều gì? Bạn có cần thông báo đến người

đọc về đề tài không? Nhìn chung, nếu đang viết báo cáo cho cấp học tiểu học và trung

học, bạn sẽ được yêu cầu phải trình bày đề tài mà không được đưa ý kiến chủ quan vào.

Các công việc còn lại yêu cầu bạn phải thuyết phục người đọc về cách nhận thức đề tài,

hoặc là phân tích nó. Hãy hỏi giáo viên bất cứ câu hỏi nào phát sinh càng sớm càng tốt.

Nhớ là nếu mục đích của bạn chỉ để gửi thông báo đến người đọc, thì không nên

đưa ý kiến cá nhân hay các yếu tố mang tính thuyết phục vào báo cáo.

4.4.1.2. Chọn đề tài yêu thích.

Cảm thấy say mê với một đề tài nào đó sẽ khiến bạn viết tốt nhất có thể. Tất nhiên,

đôi lúc bạn không có quyền chọn đề tài. Nếu rơi vào trường hợp này, hãy cố gắng tìm

vài thứ liên quan đến đề tài được giao mà gây được cảm hứng cho bạn. Luôn phải đảm

bảo rằng các ý tưởng của bạn được viết theo yêu cầu của giáo viên để báo cáo đi đúng

hướng.

Nếu báo cáo yêu cầu viết về một sự kiện cụ thể của những năm 1965 tại Việt Nam,

và bạn không thích lịch sử cho lắm nhưng bù lại bạn thị lại thích âm nhạc và điện ảnh,

hãy tập trung báo cáo theo hướng âm nhạc-điện ảnh của những năm 1965 và lồng vào

các sự kiện xảy ra vào thời điểm đó. Nhưng hãy nhớ là phải đưa vào thật nhiều chi tiết

khác mà đề tài yêu cầu.

4.4.1.3. Chọn đề tài gốc.

Nếu đang phải viết báo cáo để trình bày trước lớp, hãy chọn đề tài nguyên bản và

thu hút. Nếu là người thứ 3 phải báo cáo về "Khi hậu Sapa" vào ngày hôm đó, có khả

năng bạn sẽ không còn được mọi người chú ý nữa. Để tránh tình trạng lặp lại, hãy hỏi

giáo viên xem đề tài nào đã được chọn.

Page 142: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 139

Nếu đề tài bạn muốn đã được người khác chọn, hãy cố gắng tìm một khía cạnh

khác về nó để trình bày. Lấy ví dụ như, nếu bạn muốn làm báo cáo về "Khí hậu Sapa",

nhưng ai đó đã chọn đề tài đó rồi, thì bạn có thể tập trung vào mảng du lịch hay thiên

nhiên của Sapa. Có thể tranh luận khí hậu đặc biệt của Sapa đã góp phần như thế nào

vào du lịch nơi đây, những điều khác biệt mà bạn cảm nhận được ở nơi này, hay bất cứ

thay đổi gần đây diễn ra ở đó.

4.4.1.4. Hãy nhớ là bạn có thể thay đổi đề tài.

Nếu lúc bắt đầu nghiên cứu đề tài đã chọn và nhận ra mình không thể tìm được

bất cứ thông tin nào về nó cả, hay là đề tài quá rộng, thì bạn luôn luôn có thể thay đổi

đề tài, miễn là chưa hết hết hạn nộp đề tài.

Nếu thấy đề tài quá rộng hãy chọn lấy một phần cụ thể trong đề tài đó để tập trung

vào nó. Ví dụ, bạn muốn làm báo cáo về Các hội chợ trên thế giới, nhưng rồi nhận ra là

có quá nhiều thứ để nói, và có quá nhiều sự đổi thay để có thể gói gọn trong một đề tài,

hãy chọn lấy một hội chợ cụ thể, ví dụ như Triển lãm Hàng hóa Quốc tế Thái Bình

Dương-Panama, và tập trung vào nó.

Nghiên cứu đề tài.

4.4.2.1. Nghiên cứu đề tài.

Đảm bảo rằng bạn đã có đủ nguồn thông tin cho bài viết của mình (bài hướng dẫn

của bạn nên bao quát số lượng nguồn thông tin nên có theo yêu cầu của giáo viên).

Nếu viết báo cáo về một nhân vật cụ thể, hãy nghiên cứu cuộc đời của nhân vật

đó – thời thơ ấu của họ như thế nào? Điều quan trọng mà họ đã làm? Cuộc sống gia

đình của họ ra sao?

Nếu viết báo cáo về một sự kiện, hãy tìm hiểu những sự kiện khác đã dẫn đến sự

kiện đó, điều gì đã thực sự xảy ra trong sự kiện đó, và hậu quả của nó là gì.

4.4.2.2. Đến thư viện.

Thư viện là một nơi rất tốt để tìm thông tin. Tìm cơ sở dữ liệu của thư viện để xem

có sách hay tài liệu liên quan đến đề tài của bạn không. Nếu gặp khó khăn, hãy nhờ thủ

thư giúp đỡ.

Page 143: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 140

Nếu tìm thấy một quyển sách hay có thể gói gọn đề tài của bạn, hãy nhìn vào phần

tài liệu tham khảo (thường được liệt kê phía cuối cuốn sách). Những nguồn này thường

dẫn bạn đến nhiều thông tin hữu ích hơn.

4.4.2.3. Chắc chắn các nguồn bạn lấy trên mạng được nhiều người biết đến.

dụng internet để tìm kiếm thông tin cho đề tài, luôn luôn phải đảm bảo phải kiểm

chứng thông tin tìm được. Chọn lấy các thông tin được thu thập bởi chuyên gia nổi tiếng

trong lĩnh vực bạn đang nghiên cứu, các trang mạng của cơ quan chính phủ, và tờ báo

giàu thông tin. Tránh các diễn đàn và những nguồn không đáng tin cậy.[5]

Nếu đang viết báo cáo về một nhân vật cụ thể, một công ty, hay một nơi nào đó,

hãy tìm vào các trang mạng của họ.

4.4.2.4. Lưu lại tất cả các thông tin bạn tìm.

Viết mỗi nguồn vào một thẻ thông tin (flashcard). Viết tất cả thông tin bạn có thể

tìm được trên nguồn đó (ví dụ như tác giả, ngày xuất bản, nhà xuất bản/trang mạng, nơi

xuất bản, số trang nơi bạn tìm thấy thông tin, và những thứ tương tự) để có thể dễ dàng

viết phần tài liệu tham khảo sau này.

Trước khi viết báo cáo

4.4.3.1. Bắt đầu với các luận điểm.

Các câu luận điểm là ý chính trong báo cáo của bạn. Luận điểm sẽ tóm tắt những

gì bạn muốn chứng minh trong bài với người đọc. Tất cả các câu sau trong phần thân

bài phải liên kết với luận điểm, vì thế hãy đảm bảo rằng nó đủ rộng để bao quát toàn bộ

bài viết của bạn. Nếu chỉ đơn giản là báo cáo trên một đề tài cụ thể, hãy viết câu luận

điểm không chứa thông tin dựa trên ý kiến. Nếu viết báo cáo với mục đích thuyết phục

ai đó về đề tài, hoặc để phân tích sâu vào đề tài, câu luận điểm nên bao hàm vấn đề

tranh luận mà bạn định chứng minh trong báo cáo.[6]

Ví dụ về luận điểm báo cáo đi thẳng vào vấn đề (Luận điểm 1): Ba hội trường

chính của Triễn lãm Hàng hóa Quốc tế Thái Bình Dương-Panama chứa đầy các tác

phẩm hiện đại ngày nay và là đại diện tiêu biểu cho tinh thần đổi mới của thời đại Cấp

tiến.

Page 144: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 141

Ví dụ về luận điểm thuyết phục hoặc phân tích (Luận điểm 2): Triễn Lãm Hàng

hóa Quốc tế Thái Bình Dương-Panama lúc đầu với mục đích là để tán dương tinh thần

Cấp tiến, nhưng thực chất nó ẩn chứa sự phân biệt chủng tộc sâu đậm và nguyên tắc

cầm quyền thuộc về người da trắng, khiến hầu hết khách đến xem lựa chọn cách làm

ngơ hoặc là tán dương nó.

4.4.3.2. Lập dàn ý.

Dàn ý sẽ giúp bạn hình dung ra bài viết của mình sẽ như thế nào. Dàn ý có thể viết

ở dạng liệt kê thẳng, lưới thông tin hay sơ đồ khái niệm. Hãy bắt đầu với luận điểm và

rồi chọn ra ba ý lớn liên quan đến câu luận điểm bạn muốn đưa vào bài. Viết các chi

tiết cho mỗi ý lớn đó.

Các ý lớn của bạn phải bổ trợ được cho luận điểm. Chúng nên là chứng cứ hỗ trợ

cho tranh luận của bạn.

Ví dụ về ý chính cho Luận điểm 1: Triển lãm tại tòa nhà Court of the Universe,

Triễn lãm tại tòa nhà Court of the Four Seasons, Triển lãm tại tòa nhà Court of

Abundance.

Ví dụ về ý chính cho Luận điểm 2:Phân biệt chủng tộc ở ‘Joy Zone’ (khu vui

chơi), bức tượng ‘The End of the Trail’ (Phía cuối Con đường), và sự hiện diện của bài

giảng ‘Race Betterment’ (Cải tiến Giống loài) tại hội chợ.

4.4.3.3. Quyết định xem bạn sẽ định dạng bài viết như thế nào.

Cấu trúc của bài viết phụ thuộc vào đề tài bạn chọn. Nếu viết báo cáo về một nhân

vật, sẽ hợp lý hơn nếu cấu trúc bài báo cáo theo thứ tự thời gian.

Đối với Luận điểm 1, bài báo cáo sẽ được cấu trúc dưới dạng một bài hướng dẫn

về hội chợ theo không gian--báo cáo sẽ thảo luận cách trưng bày chính của mỗi toà nhà

lớn tại hội chợ (tòa nhà Court of the Universe, tòa nhà Court of the Four Seasons, và

tòa nhà Court of Abundance.)

Page 145: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 142

Tiến hành viết báo cáo

4.4.4.1. Viết phần giới thiệu.

Lời mở đầu là nơi bạn giới thiệu đề tài và đặt luận điểm. Lời mở đầu của bạn nên

gây thu hút nhưng cũng không quá ủy mị, mục tiêu của nó là lôi kéo người đọc sao cho

họ muốn đọc hết bài báo cáo của bạn. Bạn nên cung cấp một số thông tin nền cho đề tài

và sau đó đặt luận điểm để người đọc hiểu bài báo cáo nói về cái gì. Khi đọc lại bài hãy

để ý các chữ đầu câu và cố gắng không để chúng bị lặp lại.

Ví dụ Mở đầu của Luận điểm 1: Triễn lãm Hàng hóa Quốc tế Thái Bình Dương-

Panama (PPIE) năm 1915 lập ra với mục đích chúc mừng sự thành lập của kênh đào

Panama và sự cải tiến kỹ thuật đạt được tại bước ngoặt của thế kỷ. Ba hội trường chính

của PPIE chứa đầy các tác phẩm hiện đại ngày nay và là đại diện tiêu biểu cho tinh thần

đổi mới của thời đại Cấp tiến.

4.4.4.2. Viết phân thân bài.

Thân bài là nơi bạn đưa ra các chứng cứ hỗ trợ luận điểm. Mỗi phần của thân bài

phải chứa một câu chủ đề và các chứng cứ hỗ trợ câu chủ đề đó. Câu chủ đề giới thiệu

ý lớn của thân bài cũng như liên kết ngược lên luận điểm.

Ví dụ cho câu chủ đề của Luận điểm 1: Tại PPIE, tòa nhà Court of the Universe

là tâm điểm của buổi triễn lãm và là đại diện cho các thành tựu to lớn nhất mà con người

đạt được, cũng như sự hội tụ văn hóa Đông Tây

Đối với báo cáo về một nhân vật nào đó, câu chủ đề có thể như sau: “John Doe đã

có một tuổi thơ khắc nghiệt và nó đã góp phần định hướng cuộc đời ông.” Hiển nhiên

bạn cần phải thêm vào các thông tin cụ thể liên quan tới nhân vật đang đề cập.

4.4.4.3. Hỗ trợ câu chủ đề.

Sau khi đã viết câu chủ đề trong phần thân bài, hãy cung cấp các chứng cứ tìm

thấy trong nghiên cứu của bạn có thể hỗ trợ câu chủ đề. Chứng cứ có thể diễn tả các thứ

được nêu ra trong câu chủ đề, dẫn lời các chuyên gia về nó, hay nêu ra nhiều thông tin

hơn nữa về các chủ đề đã nêu.

Page 146: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 143

Với câu chủ đề liệt kê ở trên về toà nhà Court of the Universe, phần thân bài nên

tiếp tục liệt kê các trưng bày có tại triễn lãm, cũng như giải thích Tòa Nhà đó đã đại

diện cho sự hội tụ Đông Tây như thế nào

Với báo cáo viết về một nhân vật, hãy cung cấp các chứng cứ chứng minh John

Doe đã có một tuổi thơ đầy khó khăn và các trải nghiệm đó đã dẫn dắt ông trở thành

một người nổi tiếng như thế nào.

4.4.4.4. Viết kết luận.

Phần này sẽ tóm tắt luận điểm một lần nữa, và cung cấp cảm nghĩ cuối cùng của

bạn về đề tài. Phần này nên nhắc lại người đọc về những gì nên rút ra được từ bài báo

cáo của bạn.

4.4.4.5. Trích dẫn nguồn.

Giáo viên hoặc chuyên gia sẽ cho bạn biết nên trích dẫn theo kiểu MLA, APA hay

Chicago khi viết bài. Hãy định dạng bất kỳ trích dẫn nào bạn dùng, cũng như các thư

mục theo đó.

4.4.4.6. Định dạng báo cáo.

Cố gắng làm theo các hướng dẫn định dạng bài viết. Nếu không có hướng dẫn,

hãy theo hướng rõ ràng và cổ điển. Định dạng chuẩn của báo cáo học thuật ở Mỹ là cỡ

chữ 12, font chữ Times New Roman hoặc Arial, các dòng cách nhau khoảng đôi, và

cách các lề 2.54 cm.

Hoàn thành Báo cáo

4.4.5.1. Đọc qua báo cáo từ góc độ của người ngoài.

Các ý bạn đã viết đã rõ ràng xuyên suốt chưa? Chứng cứ bạn nêu ra đã hỗ trợ cho

luận điểm chưa? Nếu bạn là một ai khác lần đầu tiên đọc bài này, thì liệu có hiểu được

đề tài sau khi đọc báo cáo không?

4.4.5.2. Nhờ người khác đọc báo cáo.

Có thêm các cặp mắt khác sẽ rất hữu ích trong việc đảm bảo các ý của bạn đã rõ

ràng và bạn viết không hề vụng về. Hãy nhờ người khác giúp đỡ, hỏi họ có hiểu những

Page 147: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 144

gì mình nói trong báo cáo không? Có thứ gì cần bổ sung hãy loại trừ không? Có thứ gì

cần thay đổi không?

4.4.5.3. Đọc ra soát lại bài báo cáo.

Kiểm tra các lỗi chính ta, ngữ pháp và dấu câu. Có câu nào vụng về cần viết lại

hay không?

4.4.5.4. Đọc to bài báo cáo.

Việc đọc to sẽ giúp bạn xác định được các phần bị viết lủng củng trong bài (như

tính liền mạch trong các câu.)

4.4.5.5. Để bài viết qua một bên trong vài ngày.

Nếu có thời gian để cho bài viết sang một bên cũng như giải phóng đầu óc trước

khi đọc lại, thì đây là một việc nên làm. Nghỉ ngơi sau khi viết sẽ giúp phát hiện nhiều

hơn các lỗi sai và các phần vô nghĩa khi đọc lại.

Lời khuyên

Trong khi viết, hãy giả định rằng người đọc chỉ biết một ít hoặc là không

biết gì đến đề tài của bạn. Bổ sung các chi tiết và định nghĩa về đề tài vào

bài viết.

Không được sao chép bài người khác. Điều này không chỉ nói lên bạn lười

biếng, nó còn được gọi là đạo văn, là bất hợp pháp.

Hãy dựa trên nhiều hơn một nguồn thông tin mà bạn có.

Tập trung vào ý chính bạn muốn chuyền tải. Đảm bảo rằng ý tưởng đã được

thiết lập tốt ngay từ ban đầu.

Đừng trì hoãn nghiên cứu cho tới phút cuối. Việc viết báo cáo sẽ mất nhiều

thời gian hơn bạn nghĩ, đặc biệt là khi bạn bắt đầu thêm màu sắc, tranh ảnh,

tạo khung, viết đề mục… sau khi thông tin đã được viết hoàn chỉnh.

Chọn đề tài mà bạn nắm rõ.

Page 148: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 145

4.5. Hướng dẫn kỹ năng soạn thảo Powerpoint và kỹ năng thuyết trình

Kỹ năng soạn thảo Powerpoint

Trang chiếu phải có tiêu đề, tiêu đề cần được gắn vào layout

Một trang chiếu không nên quá một chủ đề, Số nội dung không quá 6 ND

trong 1 chủ đề

Một nội dung thường không quá 2 dòng

Ngôn từ nhất quá, màu sắc nhất quán, phong cách nhất quán

Dùng gam màu và hình ảnh thích hợp, template phù hợp

Thiết kế trang chiếu cân đối, phù hợp với các loại màn hình

Viết chữ cỡ tối thiểu 5mm (font khoảng 20-25px)

Nên hiển thị thanh thời gian để dễ quản lý tốc độ trình bày

Một số phím tắt cần nhớ trong khi trình chiếu

Kỹ năng thuyết trình

Tổ chức nội dung cho buổi thuyết trình: Người trình bày phải trình bày một cách

logic, giữ vững kết cấu ND thống nhất xuyên suốt bài trình bày, hạn chế ngắt quãn ND

trong các slide. Giúp ích người đọc tiếp thu ND một cách nhất quán và dễ dàng

Hiểu biết về chủ đề: Người trình bày cần có sự hiểu biết sâu sắc về vấn đề đang

trình bày hơn là chỉ trình chiếu như máy

Đồ họa, bố cục trình bày: Cần có tiêu đề trong slide, mỗi chủ đề nên chỉ trong 1

slide. Người thuyết trình cần sử dụng các biểu đồ, các hình ảnh, video,... để mô tả ND

hơn là sử dụng chữ đơn thuần. Sử dụng đồ họa bắt mắt, cố gắn theo một template thống

nhất trong suốt bài trình bày cho bố cục, màu chữ, màu link, kích thước hình ảnh, màu

nền, hình ảnh trang trí,... Đồ họa cần tránh làm cho khán giả trở nên chú ý tập trung vào

các hình ảnh trang trí hơn là ND bài trình bày

Các lỗi cơ học trong thuyết trình: Hạn chế các lỗi chính tả, văn phạm. Hạn chế các

lỗi khi thao tác chuột, làm chia trí khán giả. Khắc phục các lỗi ngẫu nhiên một cách

khéo léo

Định hướng tiếp xúc mắt: Hạn chế nhìn màn hình và đọc lại, nguyên tắc là những

gì có trên slide thì không nên đọc lại, lúc đó sẽ gây chia trí và khán giả vừa phải đọc,

Page 149: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 146

vùa phải nghe, mà hiếm khi 2 hành động này cùng pha. Hạn chế nhìn vào sổ ghi chép

mà nên nhìn thẳng vào các khán giả

Phong cách nói: Người trình bày nói chuẩn xác, ít sai lỗi chính tả, sử dụng kết hợp

tốt kỹ năng giao tiếp không lời là ngôn ngữ cơ thể. Phong cách thuyết trình bằng

powerpoint cần phù hợp với ND trình bày (phong cách trẻ trung, sang trọng, lịch sự,

năng động,...)

4.6. Xây dựng đề cương đề tài

Đề cương nghiên cứu là gì?

Đề cương nghiên cứu (Research Proposal) là một văn bản mô tả những thông tin

quan trọng về đồ án mà SV dự định thực hiện, mô tả chi tiết những gì định làm, cách

thức thực hiện (phương pháp, thời gian) và kết quả dự kiến đạt được

Vì sao cần viết đề cương nghiên cứu?

Trong công việc và cuộc sống, chúng ta sẽ khó lòng đạt được những gì mình mong

muốn nếu không có những kế hoạch cụ thể. Chính vì vậy, để hoàn thành đồ án tốt

nghiệp, ngay trong giai đoạn đầu tiên, cần phải có đề cương nghiên cứu cho đồ án, để

trả lời những câu hỏi quan trọng như: Vấn đề nghiên cứu là gì? Kế hoạch nghiên cứu ra

sao? Tại sao cần tiến hành như vậy? Làm thế nào để thực hiện kế hoạch đó?

Khi bước vào giai đoạn phải làm đồ án tốt nghiệp, mỗi sinh viên đều bắt đầu lo

lắng và suy nghĩ và ít nhiều trong đầu cũng đã định hình về đề tài mình sẽ thực hiện.

Mọi thứ đều có vẻ và có thể không rõ ràng khi chỉ nằm trong “đầu” của mình, vì thế, ta

cần viết ra.

Đề cương nghiên cứu dành cho ai và để làm gì? (Vai trò)

Trước hết, như đã nói ở trên, đề cương nghiên cứu giúp cho chính sinh viên hiểu

rõ nhiệm vụ và cách thực hiện đồ án của mình.

Tiếp theo, đề cương nghiên cứu là văn bản để giúp Hội đồng khoa học hiểu rõ về

dự định của sinh viên. Hội đồng khoa học sẽ xem xét, đánh giá nhằm đảm bảo:

Vấn đề bạn nghiên cứu có ý nghĩa, phù hợp trình độ

Phương pháp bạn sử dụng phù hợp, khả thi

Page 150: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 147

Kết quả bạn đạt được đúng yêu cầu và tiến độ

Nếu những điều này không đạt thì hội đồng sẽ góp ý để sinh viên chỉnh sửa sao

cho đạt.

Sau khi được Hội đồng thông qua, đề cương nghiên cứu sẽ là một bản kế hoạch

cho việc thực hiện đồ án trong tương lai. Đề cương sẽ là một “hợp đồng” để sinh viên

với sự hướng dẫn của giảng viên hướng dẫn sẽ dựa vào đó mà thực hiện đồ án và Hội

đồng sẽ căn cứ vào đó để “nghiệm thu” sản phẩm.

Như vậy, đề cương nghiên cứu là một tài liệu cần thiết cho cả sinh viên, giảng

viên hướng dẫn và cả Hội đồng để đảm bảo đồ án được hoàn thành đúng hạn và đạt yêu

cầu. Chính vì vậy, đề cương cần được chuẩn bị kỹ và trình bày rõ ràng, chi tiết nhất ở

mức có thể.

Nội dung của đề cương

Đề cương có thể có nhiều nội dung khác nhau, nhưng sẽ phải gồm những mục

chính sau đây, mức độ chi tiết của từng mục có thể thay đổi tùy theo đặc điểm từng đồ

án:

Tên

Đặt vấn đề

Mục tiêu

Giới hạn đề tài

Tổng quan vấn đề nghiên cứu

Nội dung và Phương pháp thực hiện

Sản phẩm dự kiến

Kế hoạch thực hiện

Tài liệu tham khảo

4.7. Kế hoạch thực hiện

Sinh viên kế hoạch và thực hiện báo cáo cho phù hợp với thời gian mục tiêu đặt

ra để hoàn thành báo cáo

Page 151: GIÁO TRÌNH MÔN HỌC: CHUYÊN ĐỀ ARDUINO VÀ TRUYỀN …ktkthcm.edu.vn/uploads/tailieudientu/file/NB091.pdf · Không giống như bo mạch có khả năng lập trình trước

CHƯƠNG 4: THỰC HIỆN ĐỀ TÀI

KHOA ĐIỆN – TỰ ĐỘNG HÓA 148

4.8. Hoàn chỉnh và báo cáo

Sau khi được giảng viên hướng dẫn và góp ý, sinh viên thực hiện chỉnh sửa theo

góp ý và hoàn chỉnh và báo cáo chuyên đề.