You are on page 1of 149

TRƯỜNG ĐẠI HỌC THỦY LỢI

KHOA CƠ KHÍ
Mục tiêu môn học
o Trang bị cho sinh viên các kiến thức cơ bản về vi xử lý, vi điều
khiển bao gồm: định nghĩa, cấu trúc, các thành phần quan
trọng, cách xử lý và biểu diễn thông tin trong hệ vi xử lý – vi
điều khiển.
o Trang bị các kiến thức cơ bản về board mạch phát triển Arduino
bao gồm: cấu hình phần cứng, cách lập trình nhập xuất tín hiệu
số, tương tự, xử lý ngắt, các truyền thông cơ bản UART, I2C,
SPI, các ứng dụng phổ biến như điều khiển động cơ Servo,
động cơ DC, …
o Sau khi học xong kiến thức lý thuyết, sinh viên có khả năng lập
trình xử lý các bài toán cơ bản sử dụng vi điều khiển, tạo tiền
đề cho việc tiếp cận bài toán phức tạp hơn.
Bộ môn Kỹ thuật Cơ điện tử
Nội dung môn học

 Chương 1: Tổng quan về vi xử lý – vi điều


khiển & Arduino.

 Chương 2: Arduino Uno và Arduino IDE.

 Chương 3: Nhập xuất tín hiệu và xử lý ngắt


cho Arduino.

 Chương 4: Lập trình ứng dụng cho Arduino.

Bộ môn Kỹ thuật Cơ điện tử


Giáo trình, tài liệu tham khảo
 Giáo trình:
o Ngô, Diên Tập : Kỹ thuật vi điều khiển với AVR //Ngô Diên
Tập. - Hà Nội. ::Khoa học và kỹ thuật,,2003. (#000013206).
o Ngô, Diên Tập : Vi xử lý trong đo lường và điều khiển/Ngô
Diên Tập - Hà Nội:Khoa học và kỹ thuật,2004 (#000008908).
 Tài liệu tham khảo:
 Arduino dành cho người mới bắt đầu [Available online]. Link:
Arduino dành cho người mới bắt đầu
 Cộng đồng Arduino Việt Nam: http://arduino.vn/
 Trang chủ Arduino: https://www.arduino.cc/

Bộ môn Kỹ thuật Cơ điện tử


Chương 1: Tổng quan về vi xử lý –
vi điều khiển & Arduino

 1.1. Giới thiệu về vi xử lý - vi điều khiển

 1.2. Cấu trúc chung vi xử lý - vi điều khiển

 1.3. Giới thiệu Arduino và vi điều khiển


ATmega328P

 1.4. Định dạng dữ liệu và biểu diễn thông


tin trong hệ vi xử lý – vi điều khiển
Bộ môn Kỹ thuật Cơ điện tử
1.1. Giới thiệu chung về vi xử lý
– vi điều khiển
1.1.1. Vi xử lý

o Vi xử lý (micro – processor / 𝝁𝑷 / 𝒖𝑷), đôi khi


còn được gọi là bộ vi xử lý, là một linh kiện điện
tử được chế tạo từ các transistor thu nhỏ tích
hợp lên trên một vi mạch tích hợp. Bộ vi xử lý Intel
80486DX2

Intel Core i9 – 11900K


16M Cache, 3.50 GHz up to
5.30 GHz, 8C16T, Socket
Intel 4004, vi xử lý 4 bit thương 1200, Cores 8 Threads 16
mại đầu tiên năm 1971 Ngày ra mắt: 17 / 03 / 2021
Bộ môn Kỹ thuật Cơ điện tử 1.1. Giới thiệu chung về vi xử lý – vi điều khiển
1.1. Giới thiệu chung về vi xử lý
– vi điều khiển
o Chức năng chính của vi xử lý: xử lý dữ liệu, chẳng hạn như cộng,
trừ, nhân, chia, so sánh.....

o Vi xử lý có các khối chức năng cần thiết để lấy dữ liệu, xử lý dữ liệu


và xuất dữ liệu ra ngoài sau khi đã xử lý.

o Vi xử lý không có khả năng giao tiếp trực tiếp với các thiết bị ngoại vi,
nó chỉ có khả năng nhận và xử lý dữ liệu.

Bộ môn Kỹ thuật Cơ điện tử 1.1. Giới thiệu chung về vi xử lý – vi điều khiển


1.1. Giới thiệu chung về vi xử lý
– vi điều khiển
o Vi xử lý xuất hiện ở trong rất nhiều lĩnh vực, đặc biệt là trong các
phần cứng máy tính:
 CPU (Central Processing Unit) của bo mạch máy tính, điện thoại
thông minh.
 Card đồ họa GPU (Graphics Processing Unit), ….

o Vi xử lý kết hợp với các thiết bị khác được sử trong các hệ thống lớn,
phức tạp đòi hỏi phải xử lý một lượng lớn các phép tính phức tạp, có
tốc độ nhanh: các hệ thống sản xuất tự động trong công nghiệp, các
tổng đài điện thoại, hoặc ở các robot có khả năng hoạt động phức
tạp v.v...

Bộ môn Kỹ thuật Cơ điện tử 1.1. Giới thiệu chung về vi xử lý – vi điều khiển


1.1. Giới thiệu chung về vi xử lý
– vi điều khiển

o Các hãng công nghệ: Intel, AMD, Apple, TSMC, Samsung …


đang gấp rút chạy đua để thu nhỏ dần kích thước của của các
bóng bán dẫn; tiêu biểu là các tiến trình 22𝑛𝑚 → 14𝑛𝑚 →
10𝑛𝑚 → 7𝑛𝑚 → 5𝑛𝑚 do đó một CPU hiện tay có thể chứa
nhiều vi mạch tích hợp cỡ lớn, mỗi vi mạch tích hợp này có thể
chứa đến hàng triệu transistor.

o Hãng Apple đã công bố chip A12 Bionic 7nm chứa đến 6.9 tỷ
bóng bán dẫn.

Bộ môn Kỹ thuật Cơ điện tử 1.1. Giới thiệu chung về vi xử lý – vi điều khiển


Các CPU desktop hiện tại

Intel Core i5 – 3570 AMD Athlon II X4 638 AMD Ryzen 9 5900X


3.4 GHz Upto 3.8 GHz LGA
2.7 GHz Quad-Core CPU 3.7 GHz Upto 4.8GHz 70MB
1155 Socket 4 Cores 4
Socket FM1 905-pin 12 Cores, 24 Threads
Threads 6
Thời điểm ra mắt: 2012 Thời điểm ra mắt: 2012 Ngày ra mắt: 05 / 11 / 2020

Bộ môn Kỹ thuật Cơ điện tử 1.1. Giới thiệu chung về vi xử lý – vi điều khiển


Các chip xử lý trên SmartPhone

iPhone X sử dụng chip


A11 Bionic
Bphone sử dụng chip
SnapDragon 801 của Qualcomm
Bộ môn Kỹ thuật Cơ điện tử 1.1. Giới thiệu chung về vi xử lý – vi điều khiển
1.1. Giới thiệu chung về vi xử lý
– vi điều khiển
Từ vi xử lý đến vi điều khiển
o Bộ Vi xử lý có khả năng vượt bậc so về khả năng tính toán, xử lý, và
thay đổi chương trình linh hoạt theo mục đích người dùng, đặc biệt
hiệu quả đối với các bài toán và hệ thống lớn.
o Câu hỏi:
 Với các ứng dụng nhỏ, không đòi hỏi khả năng tính toán lớn thì
việc ứng dụng vi xử lý còn có phù hợp?
 Nếu sử dụng vi xử lý thì có yêu cầu gì? Ưu / nhược điểm ?
 Giải pháp thay thế?

Bộ môn Kỹ thuật Cơ điện tử 1.1. Giới thiệu chung về vi xử lý – vi điều khiển


1.1. Giới thiệu chung về vi xử lý
– vi điều khiển

1.1.2. Vi điều khiển


o Vi điều khiển (microcontroller/𝝁𝑪/𝑴𝑪𝑼)
là một máy tính nhỏ, trong đó CPU, bộ
nhớ (ROM/ RAM), I / O thiết bị ngoại vi,
timers, counters, … được nhúng vào
trong một mạch tích hợp IC nơi mà các
bộ vi xử lý và tất cả các khối này được
kết hợp vào trong một board thông qua
hệ thống bus.

Bộ môn Kỹ thuật Cơ điện tử 1.1. Giới thiệu chung về vi xử lý – vi điều khiển


1.1.2 Vi điều khiển
o Vi điều khiển có thể dễ dàng giao tiếp
thiết bị ngoại vi bên ngoài như cổng nối
tiếp, ADC, DAC, Bluetooth, Wi – Fi, ….
o Vi điều khiển thường được dùng để xây
dựng hệ thống nhúng.
o Vi điều khiển được ứng dụng trong các
dây chuyền tự động loại nhỏ, các robot
có chức năng đơn giản, các dụng cụ
thiết bi điện, điện tử, lò vi sóng, máy

Kit phát triển EK-TM4C123G


giặt, ôtô v.v..
Bộ môn Kỹ thuật Cơ điện tử 1.1. Giới thiệu chung về vi xử lý – vi điều khiển
Một số loại vi điều khiển phổ biến

o Intel 8051
o Atmel AVR (8 bit), AVR32 (32 bit), AT91SAM (32 bit)
o PIC (8 bit PIC16, PIC18, 16-bit dsPIC/ PIC24)
o STMicroelectronics STM8S (8 bit), ST10 (16 bit), STM32 (32 bit)
o Texas Instruments Microcontrollers MSP430 (16 bit), C2000 (32 bit)
Bộ môn Kỹ thuật Cơ điện tử 1.1. Giới thiệu chung về vi xử lý – vi điều khiển
Một số loại vi điều khiển phổ biến

o Freescale ColdFire (32 bit) và S08 (8 bit)


o Hitachi H8 (8 bit), Hitachi SuperH (32 bit)
o Toshiba TLCS-870 (8-bit/16-bit)
o Zilog eZ8 (16-bit), eZ80 (8-bit)
o Philips Semiconductors LPC2000, LPC900, LPC700
Bộ môn Kỹ thuật Cơ điện tử 1.1. Giới thiệu chung về vi xử lý – vi điều khiển
1.2. Cấu trúc chung của hệ vi xử lý
– vi điều khiển
o Các khối chức năng chính của hệ vi xử lý gồm:

 Khối xử lý trung tâm (Central Processing Unit, CPU)

 Bộ nhớ bán dẫn (ROM – RAM)

 Hệ thống vào ra(Input / Output – I / O)

 Các bus truyền thông tin.

Bộ môn Kỹ thuật Cơ điện tử 1.2. Cấu trúc chung của hệ vi xử lý – vi điều khiển
1.2.1. Sơ đồ khối hệ vi xử lý

Data Bus
Control Bus

Input
Memory Devices
I/O
CPU ROM
Interfacing Output
RAM
Devices

Address Bus
Sơ đồ khối hệ vi xử lý
Bộ môn Kỹ thuật Cơ điện tử 1.2. Cấu trúc chung của hệ vi xử lý – vi điều khiển
1.2.2. Sơ đồ khối vi điều khiển
Interrupt Timers
Control
Registers RAM ROM Counter

CPU

Bus Serial
Oscillator
Control I/O Port
Port

Sơ đồ khối của Vi điều khiển 8051


Cấu trúc của vi điều khiển là không giống nhau và tùy thuộc và
nhà sản xuất, tuy nhiên vẫn có một số thành phần chủ chốt: CPU,
đường dây Bus, Timer/Counter, bộ dao động, ...
Bộ môn Kỹ thuật Cơ điện tử 1.2. Cấu trúc chung của hệ vi xử lý – vi điều khiển
CPU Central Processing Unit

Đơn vị số
Các
học và Bus
thanh
logic nội
ghi nội
ALU

Đơn vị điều khiển


CU
Sơ đồ khối của CPU

Bộ môn Kỹ thuật Cơ điện tử 1.2. Cấu trúc chung của hệ vi xử lý – vi điều khiển
So sánh Vi xử lý và Vi điều khiển

Câu hỏi 1: Tìm hiểu cấu trúc CISC, Von – Neumann, RISC,
Harvard
Câu hỏi 2: Sự khác biệt giữa Vi xử lý và vi điều khiển?

Bộ môn Kỹ thuật Cơ điện tử 1.2. Cấu trúc chung của hệ vi xử lý – vi điều khiển
1.3. Giới thiệu về Arduino
và vi điều khiển ATmega328p
1.3.1. Giới thiệu Arduino

o Arduino là một nền tảng mã nguồn mở open – source, bao gồm:


 Bo mạch vật lý được thiết kế trên nền tảng vi xử lý AVR Atmel 8 -
bit, hoặc ARM Atmel 32-bit.
 Phần mềm hỗ trợ Arduino IDE – môi trường phát triển tích hợp
cho Arduino.
Bộ môn Kỹ thuật Cơ điện tử 1.3. Giới thiệu về Arduino và vi điều khiển ATmega328P
1.3. Giới thiệu về Arduino
và vi điều khiển ATmega328p
1.3.1. Giới thiệu Arduino

o Giá rẻ: các bo mạch Arduino khá rẻ so với các nền tảng vi điều
khiển khác.
o Đa nền tảng: phần mềm Arduino IDE có thể chạy trên các hệ điều
hành Windows, Macintosh OSX và Linux.
o Môi trường lập trình đơn giản: phần mềm Arduino IDE khá dễ tiếp
cận cho người mới bắt đầu cũng như các người dùng nâng cao.
Bộ môn Kỹ thuật Cơ điện tử 1.3. Giới thiệu về Arduino và vi điều khiển ATmega328P
1.3. Giới thiệu về Arduino
và vi điều khiển ATmega328p
1.3.1. Giới thiệu Arduino

o Phần mềm mã nguồn mở và có thể mở rộng: ngôn ngữ của phần


mềm Arduino IDE được mở rộng bởi ngôn ngữ C++, ngoài ra người
lập trình cũng có thể sử đụng ngôn ngữ lập trình AVR – C trực tiếp
chương trình.
o Phần cứng mã nguồn mở và có thể mở rộng: Người dùng có thể
tự tạo mạch Arduino nhờ các thiết kế được công bố miễn phí.
Bộ môn Kỹ thuật Cơ điện tử 1.3. Giới thiệu về Arduino và vi điều khiển ATmega328P
Một số board mạch Arduino

Arduino Uno Rev3 Arduino Mega 2560 Rev3

Arduino Nano Arduino Pro Mini


Bộ môn Kỹ thuật Cơ điện tử 1.3. Giới thiệu về Arduino và vi điều khiển ATmega328P
Một số board mạch Arduino

Arduino Leonardo Arduino Due Arduino LilyPad

Arduino Ethernet Arduino Micro Arduino Yun


Bộ môn Kỹ thuật Cơ điện tử 1.3. Giới thiệu về Arduino và vi điều khiển ATmega328P
Một số shield Arduino

2.4 inch TFT


LCD Keypad Shield L293D Motor Control Shield
Touch Shield

CAN BUS Shield JoyStick Shield USB Host Shield


Bộ môn Kỹ thuật Cơ điện tử 1.3. Giới thiệu về Arduino và vi điều khiển ATmega328P
Một số shield cho Arduino

CCNC GRBL V4 Shield

CNC GRBL V3 Shield


Bộ môn Kỹ thuật Cơ điện tử 1.3. Giới thiệu về Arduino và vi điều khiển ATmega328P
1.3.2 Vi điều khiển Atmega 328P

Thông số chính ATmega 328P:


 Kiến trúc: AVR 8bit
 Xung nhịp lớn nhất: 20Mhz
 Bộ nhớ chương trình (FLASH): 32KB
 Bộ nhớ EEPROM: 1KB
 Bộ nhớ RAM: 2KB
 Điện áp hoạt động rộng: 1.8V – 5.5V
 Số timer: 3 timer gồm 2 timer 8-bit
(timer 0 và timer 2) và 1 timer 16-bit
(timer 1)
 Số kênh xung PWM: 6 kênh (1 timer 2
kênh)
Arduino Uno R3
Bộ môn Kỹ thuật Cơ điện tử 1.3. Giới thiệu về Arduino và vi điều khiển ATmega328P
1.4. Định dạng dữ liệu và biểu diễn
thông tin trong hệ vi xử lý – vi điều khiển
1.4.1. Khái niệm cơ bản về thông tin và dữ liệu
o Thông tin là những hiểu biết có được về một thực thể nào đó.
o Dữ liệu là những thông tin được đưa vào máy tính.
o Các đơn vi đo lường thông tin:
 bit (Binary digIT) là đơn vị nhỏ nhất để đo lượng thông tin,
Một bit chỉ nhận 2 giá trị: đúng/sai, bật/tắt, có/không, 1/0.
 Các đơn vị lớn hơn bit: byte, KB, MB, GB, TB, PB trong đó:
• 1 byte = 8 bit • 1 GB = 1024 MB
• 1 KB = 1024 byte • 1 TB = 1024 GB
• 1 MB = 1024 KB • 1 PB = 1024 TB
Bộ môn Kỹ thuật Cơ điện tử 1.4. Định dạng dữ liệu và biểu diễn thông tin trong hệ vi xử lý – vi điều khiển
1.4. Định dạng dữ liệu và biểu diễn
thông tin trong hệ vi xử lý – vi điều khiển
o Có thể phân loại thông tin thành hai loại:
 Số: số nguyên, số thực, ….
 Phi số: có ba dạng
• Văn bản: báo, sách, vở, …
• Âm thanh: nhạc, tiếng nói, …
• Hình ảnh: tranh vẽ, ảnh chụp, bản đồ, …
o Để máy tính xử lý được, thông tin cần phải được biến đổi thành dãy
bit – mã hóa thông tin.
o Một số ví dụ về mã hóa thông tin:
 Bảng mã ASCII (8 bit) gồm 256 kí tự dùng để mã hóa văn bản
 Bảng mã Unicode (16 bit) có thể mã hóa 65536 ký tự cho phép
mã hóa văn bản của tất cả các ngôn ngữ trên thế giới
Bộ môn Kỹ thuật Cơ điện tử 1.4. Định dạng dữ liệu và biểu diễn thông tin trong hệ vi xử lý – vi điều khiển
1.4. Định dạng dữ liệu và biểu diễn
thông tin trong hệ vi xử lý – vi điều khiển
1.4.2. Hệ đếm
Các hệ đếm thường gặp trong máy tính:
 Hệ nhị phân (2)
 Hệ bát phân (8)
 Hệ thập phân (10)
 Hệ thập lục phân (16)

Bộ môn Kỹ thuật Cơ điện tử 1.4. Định dạng dữ liệu và biểu diễn thông tin trong hệ vi xử lý – vi điều khiển
1.4. Định dạng dữ liệu và biểu diễn
thông tin trong hệ vi xử lý – vi điều khiển
1.4.2. Hệ đếm
 Hệ thập phân
o Là hệ đếm dùng số 10 làm hệ số
o Đây là hệ đếm được sử dụng rộng rãi nhất trong cuộc sống
ngày nay
o Hệ sử dụng các chữ số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 để biểu diễn
giá trị của số.
o Ngoài ra còn sử dụng với dấu “+” và “−” để biểu đạt giá trị
dương hoặc âm.

Bộ môn Kỹ thuật Cơ điện tử 1.4. Định dạng dữ liệu và biểu diễn thông tin trong hệ vi xử lý – vi điều khiển
1.4. Định dạng dữ liệu và biểu diễn
thông tin trong hệ vi xử lý – vi điều khiển
1.4.2. Hệ đếm
 Hệ nhị phân
o Là hệ đếm dùng số 2 làm hệ số
o Hệ đếm được sử dụng rộng rãi trong máy tính, các bộ xử lý.
o Hệ sử dụng hai chữ số 0 và 1 để biểu diễn giá trị của số,
o Các giá trị 0 và 1 còn mang ý nghĩa về mặt logic điện áp:
 điện áp mức cao (3.3𝑉, 5𝑉, 24𝑉) ~ mức logic 1
 điện áp mức thấp (0𝑉) ~ mức logic 0.
o Khi biểu diễn trong C/C++, các biểu diễn nhị phân sẽ được thêm
tiền tố “0𝑏” để được nhận dạng. Ví dụ: 0𝑏1010, 0𝑏1111.

Bộ môn Kỹ thuật Cơ điện tử 1.4. Định dạng dữ liệu và biểu diễn thông tin trong hệ vi xử lý – vi điều khiển
1.4. Định dạng dữ liệu và biểu diễn
thông tin trong hệ vi xử lý – vi điều khiển

1.4.2. Hệ đếm
 Hệ bát phân
o Là hệ đếm dùng số 8 làm hệ số
o Hệ sử dụng các chữ số 0, 1, 2, 3, 4, 5, 6, 7 để biểu diễn giá
trị của số,
o Khi biểu diễn trong C/ C++, các biểu diện bát phân sẽ được
thêm tiền tố “0” để được nhận dạng.
Ví dụ: 045, 076, 06210.

Bộ môn Kỹ thuật Cơ điện tử 1.4. Định dạng dữ liệu và biểu diễn thông tin trong hệ vi xử lý – vi điều khiển
1.4. Định dạng dữ liệu và biểu diễn
thông tin trong hệ vi xử lý – vi điều khiển
1.4.2. Hệ đếm

 Hệ thập lục phân

o Là hệ đếm dùng số 16 làm hệ số.

o Hệ cũng sử dụng các chữ số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 như


hệ thập phân để biểu diễn giá trị của số.

o Với các chỉ số lớn 10, hệ sử dụng các chữ cái để thay thế:
𝐴 ↔ 10, 𝐵 ↔ 11, 𝐶 ↔ 12, 𝐷 ↔ 13, 𝐸 ↔ 14, 𝐹 ↔ 15.

o Khi biểu diễn trong C/ C++, các biểu diễn thập lục phân sẽ
được thêm tiền tố “0𝑥” để được nhận dạng.

Ví dụ: 0𝑥𝐹𝐹, 0𝑥𝐴𝐴𝐴𝐴, 0𝑥𝐴12345.


Bộ môn Kỹ thuật Cơ điện tử 1.4. Định dạng dữ liệu và biểu diễn thông tin trong hệ vi xử lý – vi điều khiển
1.4. Định dạng dữ liệu và biểu diễn
thông tin trong hệ vi xử lý – vi điều khiển
1.4.3. Một số phép toán logic
o Một số toán tử logic hay được sử dụng trong lập trình
 Toán tử & thực hiện phép AND giữa các bit của hai giá trị.

 Toán tử | thực hiện phép toán OR giữa các bit của hai giá trị

 Toán tử ~ thực hiện phép đảo giá trị logic các bit của giá trị.

 Toán tử ^ thực hiện phép toán XOR giữa các bit của hai giá trị.

 Toán tử << thực hiện phép dịch trái.

 Toán tử >> thực hiện phép dịch phải

Bộ môn Kỹ thuật Cơ điện tử 1.4. Định dạng dữ liệu và biểu diễn thông tin trong hệ vi xử lý – vi điều khiển
1.4. Định dạng dữ liệu và biểu diễn
thông tin trong hệ vi xử lý – vi điều khiển

Bài tập
1) Chuyển các số sau sang hệ nhị phân: 10D, 105D, 213D,
1234D, 16H
2) Chuyển các số sau sang hệ thập phân: 111011B, 15H, 120H.
3) Tính giá trị c, d, e, f, g, h trong đoạn code sau, giải thích:
int a, b, c, d, e, f, g;
a = 0x7B; b = 255;
c = a & b; d = a | b; e = a ^ b;
f = a << 2; g = b >> 2; h = ~a;
Bộ môn Kỹ thuật Cơ điện tử 1.4. Định dạng dữ liệu và biểu diễn thông tin trong hệ vi xử lý – vi điều khiển
Chương 2: Arduino Uno
và Arduino IDE

 2.1. Phần cứng Arduino Uno R3

 2.2. Phần mềm Arduino IDE

 2.3. Cấu trúc chương trình trên IDE

 2.4. Ngôn ngữ lập trình trên Arduino IDE

 2.5. Mô phỏng Arduino trên Proteus

Bộ môn Kỹ thuật Cơ điện tử


2.1. Phần cứng Arduino Uno R3

Các chân tín hiệu digital:


 Có 14 chân tín hiệu digital dùng để
đọc hoặc xuất tín hiệu.
 Có 02 mức điện áp là 0 𝑉 (logic 𝟎) và
5 𝑉 (logic 𝟏) với dòng vào/ra tối đa
trên mỗi chân là 40 𝑚𝐴 .
 Ở mỗi chân đều có các điện trở pull –
up từ được cài đặt ngay trong vi điều
khiển ATmega328 (mặc định thì các
điện trở này không được kết nối).

Bộ môn Kỹ thuật Cơ điện tử 2.1. Phần cứng của Arduino Uno R3


2.1. Phần cứng Arduino Uno R3

Một số chân digital đặc biệt :


 2 chân Serial: pin ‘0’ – RX và pin ‘1’ –
TX dùng để gửi (transmit – TX) và nhận
(receive – RX) dữ liệu TTL Serial.
 Chân PWM (~): các pin 3, 5, 6, 9, 10, và
11: cho phép xuất ra xung PWM với độ
phân giải 8 bit (giá trị từ 0 → 28 − 1
tương ứng với 0𝑉 → 5𝑉 ) bằng hàm
analogWrite().
 Chân giao tiếp SPI: pin 10 – SS, pin 11 –
MOSI,pin 12 – MISO, pin 13 – SCK.
 LED 13: kí hiệu chữ L, được nối với pin
13. Khi xuất tín hiệu HIGH (5𝑉) lên chân
này, led này sẽ sáng.
Bộ môn Kỹ thuật Cơ điện tử 2.1. Phần cứng của Arduino Uno R3
2.1. Phần cứng Arduino Uno R3
Các chân tín hiệu analog (ADC):
 Có 6 chân analog (A0 → A5) cung cấp
độ phân giải tín hiệu 10 bit (0 → 210 −
1) để đọc giá trị điện áp trong khoảng
0𝑉 → 5𝑉 (mặc định).
 Chân AREF được sử dụng để cấp
điện áp tham chiếu cho các chân
analog, nếu cấp điện áp 2.5𝑉 vào chân
này thì có thể dùng các chân analog
để đo điện áp trong khoảng từ 0𝑉 →
2.5𝑉 với độ phân giải vẫn là 10 bit.
 2 chân A4 – SDA và A5 – SCL hỗ trợ
giao tiếp 𝐈 𝟐 𝐂/𝐓𝐖𝐈 với các thiết bị
khác.
Bộ môn Kỹ thuật Cơ điện tử 2.1. Phần cứng của Arduino Uno R3
2.2. Phần mềm Arduino IDE
2.2.1. Giao diện phần mềm IDE
Link: https://www.arduino.cc/en/software/
 Chọn phiên bản phù hợp với cấu hình máy, ở đây máy đang sử
dụng HĐH Windows nên chọn ‘Windows ZIP file’ để tải về máy.

Bộ môn Kỹ thuật Cơ điện tử 2.2. Phần mềm Arduino IDE


2.2.1. Giao diện phần mềm IDE

Thanh công cụ

Vùng soạn thảo


chương trình

Vùng thông báo

Bộ môn Kỹ thuật Cơ điện tử 2.2. Phần mềm Arduino IDE


2.2.2. Thanh công cụ
Các lệnh Menu

Lưu các chương trình đang soạn

Mở các chương trình đã lưu

Tạo một trang soạn thảo mới


Biên dịch & Nạp chương trình
(Ctrl + U)
Biên dịch chương trình (Ctrl + R)

Bộ môn Kỹ thuật Cơ điện tử 2.2. Phần mềm Arduino IDE


2.3. Cấu trúc chương trình
2.3.1. Chương trình ví dụ
Chương trình Blink trong
File/ Examples/ 01.Basics
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Khi đó, LED gắn với chân 13 sẽ sáng
trong 1 giây và tắt trong 1 giây luân phiên
nhau.
Bộ môn Kỹ thuật Cơ điện tử 2.3. Cấu trúc chương trình
2.3. Cấu trúc chương trình
2.3.2. Hàm setup() và loop()
Một chương trình hiển thị trên cửa sổ giao diện được gọi là sketch.
Sketch được tạo từ hai hàm cơ bản là setup() và loop():
 Hàm setup():
o Hàm setup() được gọi khi một sketch khởi động, được sử dụng
để khởi tạo biến, đặt các chế độ chân (nhận hay xuất tín hiệu),
khởi động một thư viện …
 Hàm loop():
o Hàm loop() sẽ được khởi tạo và thiết lập các giá trị ban đầu sau
khi khởi tạo hàm setup().

Bộ môn Kỹ thuật Cơ điện tử 2.3. Cấu trúc chương trình


2.4. Ngôn ngữ lập trình trên
Arduino IDE
 Mặc dù không có hàm main() như trong ngôn ngữ C/C++ nguyên
bản nhưng thư viện, chương trình, hàm đều có thể xây dựng và biên
dịch trên C/C++.
 Ngôn ngữ lập trình trên Arduino IDE có thể được chia thành ba thành
phần:
o Cấu trúc (Structure)
o Biến số và hằng số (Variables and Constants)
o Hàm và thủ tục (Functions)

Bộ môn Kỹ thuật Cơ điện tử 2.4. Ngôn ngữ lập trình trên Arduino IDE
2.4.1. Biến, hằng số, kiểu dữ liệu
Các giá trị hằng số hay gặp:
 Giá trị điện áp: HIGH / LOW: giá trị điện áp mức cao và mức thấp,
phụ thuộc vào board được sử dụng. Ví dụ, ở trên Arduino Uno, HIGH
≈ 5𝑉, LOW ≈ 0𝑉.
 Cấu hình chân cho lệnh pinMode():
o INPUT: cấu hình chân đang sử dụng là đầu vào
o OUTPUT: cấu hình chân đang sử dụng là đầu ra
o INPUT_PULLUP: cấu hình chân đang sử dụng là đầu vào có điện
trở kéo lên.

Bộ môn Kỹ thuật Cơ điện tử 2.4. Ngôn ngữ lập trình trên Arduino IDE
2.4.1. Biến, hằng số, kiểu dữ liệu

Kiểu dữ liệu Độ lớn Ý nghĩa


Được sử dụng trong khái báo hàm, trường hợp này sẽ
void
không trả về dữ liệu nào khi được gọi
boolean 1 byte Chỉ nhận một trong hai giá trị true hoặc false
+) Biểu diễn cho một ký tự, chỉ nhận các giá trị trong
char 1 byte bảng mã ASCII.
+) Biểu diễn một số byte có số âm (−𝟏𝟐𝟖 → 𝟏𝟐𝟕)
unsigned char 1 byte Biểu diễn một số nguyên byte không âm (𝟎 → 𝟐𝟓𝟓)
byte 1 byte Biểu diễn một số nguyên trong khoảng 𝟎 → 𝟐𝟓𝟓
Biểu diễn số nguyên, trên Arduino Uno nó biểu diễn giá
int 2 byte
trị trong khoảng −𝟐𝟏𝟓 → 𝟐𝟏𝟓 − 𝟏
unsigned int 2 byte Biểu diễn số nguyên nằm trong khoảng 𝟎 → 𝟐𝟏𝟔 − 𝟏
word 2 byte Giống như kiểu unsigned int

Bộ môn Kỹ thuật Cơ điện tử 2.4. Ngôn ngữ lập trình trên Arduino IDE
2.4.1. Biến, hằng số, kiểu dữ liệu

Kiểu dữ liệu Độ lớn Ý nghĩa


Kiểu dữ liệu mở rộng của int, có giá trị trong khoảng
long 4 byte
− 231 → 231 − 1
unsigned long 4 byte Kiểu số nguyên nằm trong khoảng 0 → 232 − 1
Giống kiểu int, trên mọi mạch Arduino đều chiểm 4 byte
short 4 byte
bộ nhớ, giá trị trong khoảng −231 → 231 − 1
Kiểu số thực, giá trị nằm trong khoảng −3.4028235𝐸 +
float 4 byte
38 → 3.4028235E+38
double 4 byte Giống kiểu dữ liệu float
array Kiểu mảng dữ liệu
string Chuỗi ký tự kiểu mảng
String Đối tượng ở trong C/C++

Bộ môn Kỹ thuật Cơ điện tử 2.4. Ngôn ngữ lập trình trên Arduino IDE
2.4.2. Cấu trúc
Các cấu trúc điều khiển thường gặp trong lập trình cho Arduino IDE
 if
 if...else
 switch / case
 for
 while
 break
 continue
 return
 goto

Bộ môn Kỹ thuật Cơ điện tử 2.4. Ngôn ngữ lập trình trên Arduino IDE
2.4.2. Cấu trúc
Các cú pháp mở rộng thường gặp trong lập trình cho Arduino IDE
 ; (dấu chấm phẩy): kết thúc một dòng lệnh
 {} (dấu ngoặc nhọn): giới hạn một nhóm lệnh
 //: tạo dòng chú thích
 /* */: tạo nhiều dòng chú thích
 #define: khai báo macro, gần giống với việc khai báo hằng
 #include: khai báo thư viện có sẵn

Bộ môn Kỹ thuật Cơ điện tử 2.4. Ngôn ngữ lập trình trên Arduino IDE
2.4.2. Cấu trúc
Các toán tử thường gặp trong lập trình cho Arduino IDE

Toán tử Toán tử Toán tử


Ý nghĩa Ý nghĩa Ý nghĩa
số hoc so sánh logic
= Phép gán == So sánh bằng && và
+ Phép cộng != Không bằng || hoặc
– Phép trừ > Lớn hơn ! phủ định
* Phép nhân < Nhỏ hơn ^ loại trừ
/ Phép chia >= Lớn hơn hoặc bằng
% Phép lấy dư <= Nhỏ hơn hoặc bằng

Bộ môn Kỹ thuật Cơ điện tử 2.4. Ngôn ngữ lập trình trên Arduino IDE
2.4.2. Cấu trúc
Các phép toán hợp nhất thường gặp trong lập trình cho Arduino IDE

Phép toán Ý nghĩa


++ Cộng thêm một đơn vị
-- Trừ đi một đơ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

Bộ môn Kỹ thuật Cơ điện tử 2.4. Ngôn ngữ lập trình trên Arduino IDE
2.4.3. Hàm và thủ tục
Một số hàm được sử dụng phổ biến trong Arduino IDE
o pinMode(pin, mode)
o digitalWrite(pin, value)
o digitalRead(pin)
o analogReference(type)
o analogRead(pin)
o analogWrite(pin, value)
o millis()
o delay(x)

Bộ môn Kỹ thuật Cơ điện tử 2.4. Ngôn ngữ lập trình trên Arduino IDE
2.4.3. Hàm và thủ tục
Một số hàm được sử dụng phổ biến trong Arduino IDE
o Serial.begin(speed, config)
o Serial.print(val, format)
o Serial.read()
o exp(x)
o log(x)
o ceil(x)
o floor(x)
o sin(x)
o cos(x)

Bộ môn Kỹ thuật Cơ điện tử 2.4. Ngôn ngữ lập trình trên Arduino IDE
2.5. Mô phỏng Arduino trên Proteus
2.5.1. Phần mềm Proteus
 Proteus là một phần mềm được sử dụng
để mô phỏng hoạt động của các mạch
điện tử bao gồm phần thiết kế mạch và
viết chương trình điều khiển cho các họ vi
điều khiển như MCS-51, PIC, AVR, …
 Phần mềm bao gồm 2 chương trình: ISIS
(Intelligent Schematic Input System) cho
phép mô phỏng mạch và ARES
(Advanced Routing and Editing Software)
dùng để vẽ mạch in.
Bộ môn Kỹ thuật Cơ điện tử 2.5. Mô phỏng Arduino
2.5. Mô phỏng Arduino trên Proteus
2.5.1. Phần mềm Proteus

Bộ môn Kỹ thuật Cơ điện tử 2.5. Mô phỏng Arduino


2.5. Mô phỏng Arduino trên Proteus
2.5.1. Phần mềm Proteus

Chức năng mô phỏng mạch nguyên lý


Bộ môn Kỹ thuật Cơ điện tử 2.5. Mô phỏng Arduino
2.5. Mô phỏng Arduino trên Proteus
2.5.1. Phần mềm Proteus

Chức năng thiết kế mạch PCB


Bộ môn Kỹ thuật Cơ điện tử 2.5. Mô phỏng Arduino
2.5. Mô phỏng Arduino trên Proteus
2.5.1. Phần mềm Proteus

Chức năng thiết kế mạch PCB


Bộ môn Kỹ thuật Cơ điện tử 2.5. Mô phỏng Arduino
2.5. Mô phỏng Arduino trên Proteus
2.5.2. Mô phỏng Arduino
 Proteus không có sẵn thư viện phục vụ cho việc mô phỏng Arduino do đó
chúng ta cần phải thêm file thư viện.
Link tải file thư viện: Arduino-Library
 Sau khi tải xong và giải nén, copy hai file này vào thư mục sau:
C:\ProgramData\Labcenter Electronics\Proteus 8 Professional\LIBRARY

Bộ môn Kỹ thuật Cơ điện tử 2.5. Mô phỏng Arduino


2.5. Mô phỏng Arduino trên Proteus
2.5.2. Mô phỏng Arduino

Các mô hình Arduino có trong thư viên mô phỏng


Bộ môn Kỹ thuật Cơ điện tử 2.5. Mô phỏng Arduino
Chương 3: Nhập xuất tín hiệu
và xử lý ngắt cho Arduino

 3.1. Nhập xuất tín hiệu số

 3.2. Nhập xuất tín hiệu tương tự

 3.3. Giới thiệu về ngắt trên Arduino

 3.4. Ngắt ngoài trên Arduino

 3.5. Ngắt bởi Timer trong Arduino


Bộ môn Kỹ thuật Cơ điện tử
3.1. Nhập xuất tín hiệu số
3.1.1. Giới thiệu về tín hiệu số

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1. Nhập xuất tín hiệu số
3.1.1. Giới thiệu về tín hiệu số
o Tín hiệu số (digital) là tín hiệu được sử dụng để biểu diễn dữ liệu
dưới dạng một chuỗi các giá trị rời rạc, tại bất kì thời điểm nào, nó
chỉ có thể nhận một trong hai giá trị “𝟎” hoặc “𝟏”.
o Tín hiệu logic thông thường liên quan đến mức điện áp:
 Tín hiệu logic “𝟏” sẽ tương ứng với điện áp mức cao.
 Tín hiệu logic “𝟎” sẽ tương ứng với điện áp mức thấp.
o Điện áp mức thấp trong hầu hết các thiết bị thường là 𝟎𝑽 − 𝑮𝑵𝑫,
điện áp mức cao tùy thuộc vào thiết bị và nguồn điên sử dụng, phổ
biến nhất là 𝟑. 𝟑𝑽, 𝟓𝑽, 𝟏𝟐𝑽, 𝟐𝟒𝑽.
o Với board Arduino Uno, tín hiệu điện áp mức cao là 𝟓𝑽.

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1. Nhập xuất tín hiệu số
3.1.1. Giới thiệu về tín hiệu số
o Trong Arduino Uno, sử dụng các chân
digital từ 0 - 13 để có thể nhập xuất tín
hiệu số, tuy nhiên chân 0 và chân 1
thông thường được sử dụng cho việc
truyền thông dữ liệu nối tiếp nên sẽ
không sử dụng các chân này.
o Các chân tương tự A0 – A5 cũng có
thể được sử dụng như là chân đầu
vào số.
Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số
3.1. Nhập xuất tín hiệu số
3.1.2. Xuất tín hiệu số trên Arduino
o Điều kiện tiên quyết để có thể xuất tín hiệu điện áp trên chân
digital bất kì, cần phải cấu hình chân đó là chân đầu ra.
o Cú pháp:
pinMode(pin, mode)
Trong đó:
 pin -> chân digital của Arduino muốn set làm chân đầu ra
 mode -> chế độ cấu hình của chân. Để sử dụng là chân
xuất điện áp đầu ra, mode ở đây là OUTPUT.

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1. Nhập xuất tín hiệu số
3.1.2. Xuất tín hiệu số trên Arduino
o Sau khi cấu hình chân xuất tín hiệu điện áp, có thể sử dụng
lệnh xuất tín hiệu điện áp như sau:
digitalWrite(pin, value)
Trong đó:
 pin -> chân digital mà Arduino muốn xuất tín hiệu
 value -> giá trị điện áp muốn xuất ra, ở đây là HIGH / LOW,
hoặc là 1 / 0.
• Nếu value là HIGH / 1, tín hiệu điện áp là 𝟓𝑽.
• Nếu value là LOW / 0, tín hiệu điện áp là 𝟎𝑽.
Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số
3.1.2 Xuất tín hiệu số trên Arduino
Ví dụ: Chương trình xuất tín hiệu điều khiển led đơn
nhấp nháy
const int ledPin = 10; Khai báo sử dụng chân
void setup() số 10 của Arduino
{
Cấu hình chân sử dụng
pinMode(ledPin, OUTPUT);
là chân đầu ra
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000); Xuất tín hiệu điện áp
digitalWrite(ledLed, LOW);
delay(1000);
}

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.2 Xuất tín hiệu số trên Arduino
Bài tập 1: Lập trình 2 LED nhấp nháy liền nhau
Bài tập này hướng dẫn sinh viên điều khiển 2 led với yêu
cầu sau: Hai LED này sáng tắt ngược nhau, thời gian sáng
và tắt mỗi đèn đều bằng nhau và bằng 500 𝑚𝑠 .

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.2 Xuất tín hiệu số trên Arduino

Hướng dẫn
o Các linh kiện phần cứng: 02 LED (đỏ và xanh), 02 điện trở 220 Ω, bo
mạch test board, board Arduino Uno R3, dây nối.
o Sơ đồ mạch:
 LED màu đỏ gắn vào chân số 13.
 LED màu xanh được gắn vào chân số 12.
 Hai LED này sẽ được gắn thêm điện trở để hạn chế dòng điện
qua LED.
o Gợi ý: sử dụng lệnh digitalWrite() và delay().

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.2 Xuất tín hiệu số trên Arduino
Mục tiêu của bài tập
o Sinh viên hiểu sơ đồ nguyên lý mạch điện và sơ đồ đấu nối dây
điện trước khi thực hành.
o Nắm vững các linh kiện điện tử sử dụng cho phần cứng.
o Viết và giải thích được chương trình điều khiển.
o Chạy kết quả mô phỏng trên phần mềm trước khi thực hành.

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.2 Xuất tín hiệu số trên Arduino
Bài tập 2: Lập trình 08 LED với hiệu ứng “đuổi” nhau
o Yêu cầu điều khiển: Các bóng LED sáng dần từ LED số 1 đến LED
số 8 rồi sáng theo thứ tự ngược lại.
LED 8
LED 7
LED 6
LED 5
LED 4
LED 3
LED 2
LED 1

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.2 Xuất tín hiệu số trên Arduino
Hướng dẫn:
o Các linh kiện phần cứng: 08 LED, 08 điện trở 220 Ω, bo mạch test
board, board Arduino Uno R3, dây nối.
o Sơ đồ mạch:
 08 LED được gắn vào các chân từ chân 2 đến chân 9
 Các LED này sẽ được gắn thêm điện trở.
o Gợi ý chương trình điều khiển: sử dụng lệnh dịch trái bit: << và các
phép toán logic bit trong C++. Mỗi vòng lặp sẽ dịch đi một bit và đưa
giá trị này xuất ra ngoài các chân điều khiển.

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.2 Xuất tín hiệu số trên Arduino
Bài tập về nhà:
1) Lập trình điều khiển 6 led sáng từ trái sang phải rồi từ
phải sang trái.

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.2 Xuất tín hiệu số trên Arduino
Bài tập 3: Lập trình hiển thị led 7 thanh các số lần lượt tăng dần
từ 0 đến đến 9 rồi ngược lại

o Sơ đồ mạch:
 LED 7 thanh được sử dụng là loại cathode chung.
 Các chân của LED 7 thanh: a, b, c, d, e, f, g, h sẽ nối vào
các chân từ chân 2 đến chân 9 của Arduino.
 Các chân này sẽ được gắn thêm điện trở hạn dòng 220 Ω để
hạn dòng điện qua LED.

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.2 Xuất tín hiệu số trên Arduino
Câu hỏi: Nếu LED 7 thanh sử dụng là loại anode chung, thì cần
phải điều chỉnh những gì:
o Mạch điện?
o Chương trình? Hãy tìm cách sửa đổi chương trình mà không
cần phải làm lại bảng mã hiển thị!

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.2 Xuất tín hiệu số trên Arduino
Bài tập về nhà: Lập trình hiển thị lần lượt các số từ 0 → 99 trên
02 led 7 thanh

Yêu cầu: Hai LED được nối chung các chân điều khiển vào
Arduino, sử dụng phương pháp quét LED để lập trình.

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.2 Xuất tín hiệu số trên Arduino
o Nhận xét: Việc xuất tín hiệu ra hệ thống LED 7 thanh có nhiều
phương pháp:
 Quét led: Đấu nối như trường hợp trên, tuy nhiên cũng chỉ
có thể hiển thị được 4 LED 7 thanh.
 Sử dụng IC giải mã: sử dụng một IC giải mã (CD4511, …)
để kết nối với LED 7 thanh, tín hiệu điều khiển lúc này sẽ
được mã hóa thành tín hiệu 4 bit. Kết hợp với phương pháp
quét LED, ta có thể điều khiển 8 LED 7 thanh.
 Sử dụng IC mở rộng vào ra: không hạn chế số lượng.

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1. Nhập xuất tín hiệu số
3.1.3. Đọc tín hiệu số trên Arduino
o Sau khi cấu hình là chân đọc tín hiệu điện áp, có thể sử dụng
lệnh sau để đọc tín hiệu điện áp:
digitalRead(pin)
Trong đó: pin -> chân digital mà Arduino muốn đọc tín hiệu
o Giá trị trả về là trạng thái điện áp, HIGH hoặc LOW.
o Nếu chân đầu vào không kết nối với tín hiệu nào, lệnh trên sẽ
trả về một giá trị ngẫu nhiên.
o Lệnh này cũng áp dụng được với chân analog đầu vào, ví dụ
như là 𝐴0, 𝐴1.
Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số
3.1.3 Đọc tín hiệu số trên Arduino
Bài tập 4: Nhấn nút thì Led sáng, nhả nút thì Led tắt
Yêu cầu điều khiển: Nút bấm bên trái được nhấn thì LED bên trái sáng,
nút bấm bên phải được nhấn thì LED bên phải sáng.

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.3 Đọc tín hiệu số trên Arduino
Bài tập về nhà: Khi nhấn nút, Led đang sáng sẽ tắt
và ngược lại
o Gợi ý: Bắt sự thay đổi trạng thái nút bấm từ: không
có tác động -> có tác động, khi bắt được sự thay
đổi này liền thay đổi trạng thái của LED.

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.1.3 Đọc tín hiệu số trên Arduino
Bài tập về nhà: Lập trình hiển thị theo yêu cầu sau:
o Kết nối Arduino với 01 LED 7 thanh và 02 nút bấm.
o Khi mới khởi động lên thì LED 7 thanh hiển thị số 0.
o Bấm nút nhấn thì giá trị trên LED 7 thanh tăng một đơn vị.
o Bấm nút nhấn còn lại thì giá trị trên LED 7 thanh giảm một
đơn vị.
o LED 7 thanh hiển thị số từ 0 đến 9, có thể mở rộng thêm nếu
coi như: A = 10, b = 11, C = 12, d = 13, E = 14, F = 15 (mã
HEXA)

Bộ môn Kỹ thuật Cơ điện tử 3.1. Nhập xuất tín hiệu số


3.2. Nhập xuất tín hiệu tương tự
3.2.1. Giới thiệu về tín hiệu tương tự

Bộ môn Kỹ thuật Cơ điện tử 3.2. Nhập xuất tín hiệu tương tự


3.2. Nhập xuất tín hiệu tương tự
3.2.1. Giới thiệu về tín hiệu tương tự
o Tín hiệu tương tự (analog) là một tín hiệu liên tục và có đồ thị biểu
diễn tín hiệu chính là một đường liên tục.
o Tín hiệu analog tức là các giá trị của nó sẽ tương tự nhau về mặt bản
chất, tuy nhiên sẽ khác nhau về mặt cường độ tín hiệu giữa các thời
điểm với nhau.
o Có các loại tín hiệu tương tự hay được sử dụng:
 Tín hiệu điện áp: 𝟎 − 𝟓𝑽, 𝟎 − 𝟏𝟎𝑽
 Tín hiệu dòng điện: 𝟎 − 𝟐𝟎𝒎𝑨, 𝟒 − 𝟐𝟎𝒎𝑨
Trong các ứng dụng với vi điều khiển, tín hiệu 𝟎 − 𝟓𝑽 là phổ biến,
còn đối với các ứng dụng công nghiệp, tín hiệu 𝟒 − 𝟐𝟎𝒎𝑨 được sử
dụng rộng rãi do tính ổn định, kháng nhiễu.
Bộ môn Kỹ thuật Cơ điện tử 3.2. Nhập xuất tín hiệu tương tự
3.2. Nhập xuất tín hiệu tương tự
3.2.2. Đọc tín hiệu tương tự trên Arduino
o Để đọc tín hiệu tương tự, chúng ta có thể sử dụng các chân
analog A0 – A5 trên Arduino Uno đọc tín hiệu điện áp này.
o Câu lệnh để đọc tín hiệu điện áp trên chân analog:
analogRead(pin)
Trong đó: pin -> chân analog đầu vào.
o Giá trị trả về của hàm này chính là giá trị ADC chuyển đổi từ
điện áp. Với Arduino Uno, độ phân giải của bộ chuyển đổi ADC
này là 𝑛 = 10 𝑏𝑖𝑡.

Bộ môn Kỹ thuật Cơ điện tử 3.2. Nhập xuất tín hiệu tương tự


3.2. Nhập xuất tín hiệu tương tự
Bài tập 5: Đọc tín hiệu điện áp trên biến trở và hiển thị kết quả so
sánh với điện áp 2.5𝑉.
Yêu cầu điều khiển: Khi tín hiệu điện áp trên biến trở nhỏ hơn 2.5𝑉
thì bật LED xanh, khi lớn hơn 2.5𝑉 thì bật LED màu đỏ.

Bộ môn Kỹ thuật Cơ điện tử 3.2. Nhập xuất tín hiệu tương tự


3.2. Nhập xuất tín hiệu tương tự
3.2.2. Xuất tín hiệu tương tự trên Arduino
o Arduino không thể xuất tín hiệu tương tự một cách trực tiếp từ các
chân của nó, mà sử dụng tín hiệu PWM thay thế.
o Không cần cấu hình chân phát xung PWM là chân OUTPUT.
o Cú pháp:
analogWrite(pin, value)
Trong đó:
 pin -> chân muốn phát xung PWM, trên Arduino Uno có 6 chân
có thể phát được xung PWM: 3, 5, 6, 9, 10, 11
 value -> giá trị nằm trong khoảng từ 0 đến 255.
Bộ môn Kỹ thuật Cơ điện tử 3.2. Nhập xuất tín hiệu tương tự
0V 3.2. Nhập xuất tín hiệu tương tự
3.2.2. Xuất tín hiệu tương tự trên Arduino

5V
T on T off

0V
T period

o PWM (Pulse Width Modulation) hay còn gọi là phương pháp điều chế
độ rộng xung là một kỹ thuật thường được dùng để điều chế điệp áp
với một mức xác định.
o Chúng thường được dùng trong các bộ điều khiển tốc độ đông cơ,
điều áp, cách mạch boost, buck, nghịch lưu, điều khiển công suất, …

Bộ môn Kỹ thuật Cơ điện tử 3.2. Nhập xuất tín hiệu tương tự


3.2. Nhập xuất tín hiệu tương tự
Bài tập 6: Xuất tín hiệu điều khiển để bóng đèn sáng dần rồi tắt dần.

Bộ môn Kỹ thuật Cơ điện tử 3.2. Nhập xuất tín hiệu tương tự


3.3. Giới thiệu
về ngắt trên Arduino
void setup()
o Chương trình trong hàm loop của Arduino
sẽ thực thi lần lượt từ câu lệnh đầu tiên

void loop() đến câu lệnh cuối cùng ra được lặp lại.
{ o Phương pháp này gọi là phương pháp
Task_1();
Task_2(); thăm dò – hỏi vòng (Polling)
…  Ưu điểm: đơn giản, dễ thực hiện
Task_N();
}  Nhược điểm: tốn thời gian, gây ra chậm
trễ trong xử lý công việc.

Bộ môn Kỹ thuật Cơ điện tử 3.3. Giới thiệu về ngắt trên Arduino


3.3. Giới thiệu
về ngắt trên Arduino
void setup() o Giả sử hàm Task_N() có thông tin cần xử
lý ngay lập tức nhưng vẫn có thể không
được thực thi vì chương trình vẫn đang xử
void loop() lý những hàm trên, đến khi thực hiện xong
{
Task_1(); các hàm này thì thông tin cần xử lý đã
Task_2(); không còn quan trọng nữa rồi.

Task_N(); o Để có thể kịp thời xử lý nhưng thông tin
} như này, có thể sử dụng phương pháp
ngắt (Interrupts)

Bộ môn Kỹ thuật Cơ điện tử 3.3. Giới thiệu về ngắt trên Arduino


3.3. Giới thiệu
về ngắt trên Arduino

Bảng vector ngắt


trong vi điều khiển
Atmega 328 P

Bộ môn Kỹ thuật Cơ điện tử 3.3. Giới thiệu về ngắt trên Arduino


3.3. Giới thiệu
về ngắt trên Arduino
o Có nhiều ngắt có thể sử dụng trên vi điều khiển Atmega 328P, bao
gồm:
 Ngắt ngoài INT0, INT1
 Ngắt bộ định thời watch – dog
 Ngắt bộ định thời Timer0, Timer1, Timer2
 Ngắt truyền thông UART, SPI, I2C
 Ngắt do chuyển đổi ADC được thực hiện xong.
 EEPROM đã sẵn sàng làm việc.
o Khi lập trình Arduino thường hay sử dụng trường hợp ngắt ngoài và
ngắt do timer.

Bộ môn Kỹ thuật Cơ điện tử 3.3. Giới thiệu về ngắt trên Arduino


3.4. Ngắt ngoài trên Arduino

o Ngắt ngoài – External Interrupts là sự


kiện ngắt gây ra do thiết bị bên ngoài có
tương tác với Arduino.
o Trên Arduino Uno/ Nano/ Pro Mini, có
02 chân được sử dụng làm chân ngắt
ngoài là chân số 2 (INT0) và chân số 3
(INT1).

Bộ môn Kỹ thuật Cơ điện tử 3.4. Ngắt ngoài trên Arduino


3.4. Ngắt ngoài trên Arduino
Cú pháp:
attachInterrupt(interrupt, ISR, mode)
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)

trong đó:
o interrupt, digitalPinToInterrupt(pin) -> số thứ tự của ngắt
tương ứng với chân sử dụng.
 Với Arduino Uno, chân số 2 giá trị này là INT0, chân số 3 là
INT1.
 Để tránh nhầm lẫn khi sử dụng các Arduino có nhiều chân ngắt
hơn → sử dụng hàm: digitalPinToInterrupt(pin)
o ISR -> hàm được gọi khi có sự kiện ngắt

Bộ môn Kỹ thuật Cơ điện tử 3.4. Ngắt ngoài trên Arduino


3.4. Ngắt ngoài trên Arduino
Bài tập 7: Viết chương trình thực hiện đồng thời hai chức năng:
o Nhấp nháy 01 LED: sáng trong khoảng thời gian 500ms, tối trong
khoảng thời gian 500ms
o Sử dụng một nút bấm để bật/tắt 01 LED:
 LED đang sáng, bấm nút thì led sẽ tắt.
 LED đang tắt bấm bút thì led sẽ sáng.
o Yêu cầu: Chương trình được viết theo hai cách:
 Cách 1: Không sử dụng ngắt
 Cách 2: Sử dụng ngắt ngoài trên Arduino

Bộ môn Kỹ thuật Cơ điện tử


3.5. Ngắt bởi Timer trên Arduino
3.5.1. Giới thiệu về Timer / Counter
o Bộ định thời/ Bộ đếm – Timer/Counter là module hoạt động độc lập
và không thể thiếu của bất kỳ vi điều khiển nào.
o Chức năng của Timer/Counter gồm: định thời, đếm sự kiện, tạo xung
PWM,....
o Chức năng ngắt định thời là: khi bộ đếm của timer đếm đến một giá
trị đã được cấu hình sẵn sẽ tạo ra một sự kiện ngắt và thông báo đến
vi điều khiển.
⇔ cứ sau một khoảng thời gian đều đặn nào đó, sẽ có một sự kiện
ngắt xảy ra.

Bộ môn Kỹ thuật Cơ điện tử 3.5. Ngắt bởi Timer trong Arduino


3.5. Ngắt bởi Timer trên Arduino
3.5.2. Thư viện Timer của Arduino
Trong VĐK Atmega 328P (Arduino Uno/ Nano/ ProMini) có 03 timer:

o Timer/Counter 0: bộ đếm 8 bit, chỉ có một chế độ hoạt động và hai


chức năng cơ bản là tạo ra một khoảng thời gian và đếm sự kiện.

o Timer/Counter 1: bộ đếm 16 bit, có 5 chế độ hoạt động chính. Ngoài


các chức năng thông thường, nó còn được dùng để tạo ra xung điều
rộng PWM dùng cho các mục đích điều khiển.

o Timer/Counter 2: bộ đếm 8 bit, có đến 4 chế độ hoạt động như


Timer/Counter1, ngoài ra nó nó còn được sử dụng như một module
canh chỉnh thời gian cho các ứng dụng thời gian thực (chế độ
asynchronous)

Bộ môn Kỹ thuật Cơ điện tử 3.5. Ngắt bởi Timer trong Arduino


3.5. Ngắt bởi Timer trên Arduino
3.5.2. Thư viện Timer cho Arduino
o Một số thư viện cho Timer hay được sử dụng là:
 TimerOne -> sử dụng timer 1 để cấu hình PWM hoặc là thực thi
các hàm tại các thời điểm tuần tự theo thời gian. Link cài đặt:
https://github.com/PaulStoffregen/TimerOne.
 MsTimer2 -> sử dụng timer 2 để thực thi các hàm tại các thời
điểm tuần tự theo thời gian. Link cài đặt:
https://github.com/PaulStoffregen/MsTimer2

Bộ môn Kỹ thuật Cơ điện tử 3.5. Ngắt bởi Timer trong Arduino


3.5. Ngắt bởi Timer trên Arduino
Bài tập 8: Nháy led trên hai chân khác nhau sử dụng Timer 1 với
o LED trên chân 9 được bật tắt với chu kì 50ms, duty cycle là 50%.
o LED trên chân 10 bật tắt với chu kì 100ms, duty cycle là 50%.

Bộ môn Kỹ thuật Cơ điện tử 3.5. Ngắt bởi Timer trong Arduino


Chương 4: Lập trình ứng dụng
cho Arduino

 4.1. Điều khiển động cơ Servo

 4.2. Điều khiển động cơ DC

 4.3. Truyền thông UART, I2C, SPI

Bộ môn Kỹ thuật Cơ điện tử


4.1. Điều khiển động cơ Servo
4.1.1. Giới thiệu về động cơ RC Servo

RC Servo
VS Servo System
/ Hobby Servo

Bộ môn Kỹ thuật Cơ điện tử 4.1. Điều khiển động cơ Servo


4.1. Điều khiển động cơ Servo
4.1.1. Giới thiệu về động cơ RC Servo

Servo SG 90
o Điện áp hoạt động: 4.8 – 5 VDC
o Moment xoắn: 1.6 kgf.cm
o Kích thước: 21x12x22mm
o Trọng lượng: 9g.

Bộ môn Kỹ thuật Cơ điện tử 4.1. Điều khiển động cơ Servo


4.1. Điều khiển động cơ Servo
4.1.1. Giới thiệu về động cơ RC Servo

Cánh tay
robot

Bộ môn Kỹ thuật Cơ điện tử 4.1. Điều khiển động cơ Servo


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

o Dây kết nối với động cơ Servo


thường có ba dây.
o Trong trường hợp của động cơ
SR90, dây kết nối như sau:
 Dây màu đỏ: nguồn dương 5V
 Dây màu nâu: nguồn âm
 Dây màu cam: tín hiệu điều
khiển

Bộ môn Kỹ thuật Cơ điện tử 4.1. Điều khiển động cơ Servo


4.1.2. Điều khiển động cơ Servo
o Trong Arduino, có thể điều khiển động cơ servo thông qua thư
viện Servo.h.
o Động cơ được điều khiển bởi thư viện này thông thường là loại
có góc quay từ 0 đến 180 độ.
o Thư viện này có thể điều khiển đến 12 động cơ RC Servo trên
Arduino Uno, tuy nhiên việc sử dụng thư viện này cũng đồng
thời sẽ không sử dụng được chức năng analogWrite() trên
chân số 9 và chân số 10, kể cả khi hai chân này có kết nối với
động cơ Servo hay không.

Bộ môn Kỹ thuật Cơ điện tử 4.1. Điều khiển động cơ Servo


4.1.2. Điều khiển động cơ Servo
o Một số hàm quan trọng của thư viện này:
servo.attach(pin)
servo.attach(pin, min, max)
Hàm này khai báo chân kết nối với động cơ Servo, trong đó:
 servo -> đối tượng servo cần được khai báo trước
 pin –> chân kết nối với động cơ Servo.
 min -> giá trị độ rộng xung (đơn vị là 𝜇𝑠) tương đương với
góc 0 độ, giá trị mặc định là 544.
 max -> giá trị độ rộng xung (đơn vị là 𝜇𝑠) tương đương với
góc 180 độ, giá trị mặc định là 2400.
Bộ môn Kỹ thuật Cơ điện tử 4.1. Điều khiển động cơ Servo
4.1.2. Điều khiển động cơ Servo
Bài tập 1: Điều khiển hai động cơ Servo
Yêu cầu: hai động cơ servo quay từ góc 0 đến góc 180 độ, chú ý rằng
chiều quay của hai động cơ này ngược chiều nhau.

Bộ môn Kỹ thuật Cơ điện tử 4.1. Điều khiển động cơ Servo


4.2. Điều khiển động cơ DC
4.2.1. Giới thiệu về động cơ DC

Bộ môn Kỹ thuật Cơ điện tử 4.2. Điều khiển động cơ DC


4.2.1 Giới thiêu về động cơ DC
o Động cơ một chiều DC (Direct Current Motors) là động cơ
được điều khiển bằng dòng có hướng xác định hay nói cách
khác thì đây là loại động cơ chạy bằng nguồn điện áp DC -
điện áp 1 chiều.
o Ứng dụng:
 Dân dụng: sử dụng trong các công cụ, đồ chơi và các thiết bị
gia dụng khác nhau.
 Công nghiệp: sử dụng trong băng tải và bàn xoay, các ứng
dụng phanh và đảo chiều, …

Bộ môn Kỹ thuật Cơ điện tử 4.2. Điều khiển động cơ DC


4.2.1 Giới thiêu về động cơ DC

Cấu tạo của động cơ một chiều:


o Stator: thường là 1 hay nhiều cặp nam châm vĩnh cửu hoặc
nam châm điện
o Rotor: là phần lõi có quấn các cuộn dây để tạo thành nam
châm điện
Bộ môn Kỹ thuật Cơ điện tử 4.2. Điều khiển động cơ DC
4.2.1 Giới thiêu về động cơ DC

Cấu tạo của động cơ một chiều:


o Chổi than (brushes): nhiệm vụ tiếp xúc và tiếp điện cho cổ góp
o Cổ góp (commutator): nhiệm vụ tiếp xúc và chia điện cho các
cuộn dây trên rotor. Số lượng các điểm tiếp xúc tương ứng với
số cuộn trên rotor.
Bộ môn Kỹ thuật Cơ điện tử 4.2. Điều khiển động cơ DC
4.2.1 Giới thiêu về động cơ DC
o Ưu điểm:
 Dễ dàng thay đổi tốc độ của động cơ,
 Chịu được quá tải cao.
 Kéo được tải nặng khi khởi động do có moment xoắn lớn. Độ
bền tương đối cao.
o Nhược điểm : Do có cấu tạo cổ góp nên khi hoạt động phát ra
tiếng ồn. Cổ góp này phải được bảo dưỡng thường xuyên. Ma sát
trong quá trình vận hành => mài mòn. Ngoài ra cổ góp này trong
quá trình hoạt động phát sinh ra tia lửa điện, nên không dùng
được trong các môi trường dễ gây cháy nổ.
Bộ môn Kỹ thuật Cơ điện tử 4.2. Điều khiển động cơ DC
4.2.2 Điều khiển động cơ DC

Bộ môn Kỹ thuật Cơ điện tử 4.2. Điều khiển động cơ DC


4.2.2 Điều khiển động cơ DC
o Trong phần này sẽ giới thiệu về cách điều khiển động cơ DC
công suất nhỏ, hay được sử dụng trong mô hình.
o Các động cơ này thông thường được điều khiển bởi các
module điều khiển riêng biệt: module L298, module L293,
module TB6612FNG, module BTS7960, module HG7881, …
o Trong phần này, sẽ tập trung vào việc sử dụng module L298 để
điều khiển động cơ một chiều.

Bộ môn Kỹ thuật Cơ điện tử 4.2. Điều khiển động cơ DC


4.2.2 Điều khiển động cơ DC

Module L298
o Driver: L298N tích hợp hai mạch cầu H.
o Điện áp điều khiển: +5 V ~ +12 V
o Dòng tối đa cho mỗi cầu H là: 2A
o Điện áp của tín hiệu điều khiển: +5 V ~
+7 V
o Dòng của tín hiệu điều khiển: 0 ~ 36mA
o Công suất hao phí: 20W (khi nhiệt độ T
= 75 ℃)

Bộ môn Kỹ thuật Cơ điện tử 4.2. Điều khiển động cơ DC


4.2.2 Điều khiển động cơ DC

Bài tập 2: Sử dụng biến trở để điều khiển tốc độ của động cơ,
nhấn nút bấm để đảo chiều động cơ.
Yêu cầu điều khiển:
o Xoay biến trở thì tốc độ của động cơ thay đổi theo, ví dụ xoay
ngược chiều kim đồng hồ thì tốc độ giảm dần, xoay theo chiều
kim đồng hồ thì tốc độ động cơ tăng dần.
o Nhấn nút thì chiều quay của động cơ bị đảo ngược lại.

Bộ môn Kỹ thuật Cơ điện tử 4.2. Điều khiển động cơ DC


4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.1. Giới thiệu về truyền thông dữ liệu
o Việc chuyển dữ liệu số (Digital Data) từ thiết bị này sang thiết bị khác
có thể thực hiện được bằng 2 cách: Giao tiếp song song, giao tiếp
nối tiếp.

D7 D7
D6 D6
D5 D5
D4 D4
SENDER D3 D3 RECEIVER
D2 D2
D1 D1
D0 D0

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.1. Giới thiệu về truyền thông dữ liệu

D7 D6 D5 D4 D3 D2 D1 D0

SENDER RECEIVER

Truyền thông dữ liệu nối tiếp

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.1. Giới thiệu về truyền thông dữ liệu
o Truyền thông dữ liệu song song (Paralle Communication) tuy
nhanh nhưng tốn kém vì chúng cần nhiều phần cứng và dây dẫn
hơn.
o Truyền thông song song được sử dụng trong máy in kiểu cũ, giao
tiếp RAM, PCI, …
o Truyền thông dữ liệu nối tiếp (Serial Communication) tuy tốc độ
chậm hơn nhưng cần ít mạch và dây hơn dẫn đến chi phí ít hơn.
o Với sự phát triển của công nghiệp bán dẫn, các IC này ngày càng trở
nên nhanh hơn do đó truyền thông song song trở thành nút thắt cổ
chai trong quá trình giao tiếp giữa các thiết bị.

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.1. Giới thiệu về truyền thông nối tiếp
o Truyền dữ liệu nối tiếp có nhiều tiện ích trong vi điều khiển nên hầu
hết các loại vi điều khiển đều tích hợp.
o Có nhiều kiểu truyền dữ liệu phổ biến tích hợp trong các họ vi điều
khiển, bao gồm:
 Truyền dữ liệu nối tiếp bất đồng bộ UART (Universal
Asynchronous Receiver Transmitter).
 Truyền dữ liệu giữa các vi điều khiển với các thiết bị ngoại vi SPI
(Serial Peripheral Interface)
 Truyền dữ liệu 2 dây I2C hoặc 𝐈 𝟐 𝐂 (Inter – Integrated Circuit).

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.2. Chuẩn giao tiếp UART

TX TX

RX RX

GND GND

UART UART

o Chuẩn giao tiếp UART (Universal Asynchronous Receiver


Transmitter): đây là chuẩn giao tiếp truyền thông dữ liệu nối tiếp bất
đồng bộ với sự hỗ trợ của phần cứng.
o Hai đường dây mà mỗi thiết bị UART sử dụng để truyền dữ liệu:
Transmitter (Tx) và Receiver (Rx)
Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.2. Chuẩn giao tiếp UART
o Cả hai thiết bị sử dụng truyền thông UART phải sử dụng cùng
tốc độ truyền.
o Một số tốc độ truyền thông UART hay được sử dụng (bit/s):
 9600  115200
 19200  230400
 38400  460800
 57600

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.2. Chuẩn giao tiếp UART

Arduino UNO (chủ) gửi lệnh đến Arduino Nano (tớ) để điều khiển các đèn LED
(thiết bị ngoại vi).
Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.2. Chuẩn giao tiếp UART

Sơ đồ kết nối Arduino giao tiếp Module Bluetooth HC05


Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.2. Chuẩn giao tiếp UART

Sơ đồ kết nối Arduino giao tiếp Module ESP8266


Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.3. Các hàm xử lý truyền thông UART
Để khởi động và cấu hình cho truyền thông UART trên Arduino Uno, sử
dụng một trong hai cú pháp sau:
Serial.begin(speed)
Serial.begin(speed, config)
trong đó:
 Serial -> đối tượng truyền thông nối tiếp
 speed -> tốc độ baudrate.
 config -> cấu hình khung truyền, bao gồm số bit dữ liệu, bit kiểm
tra chẵn lẻ và stop bit. Giá trị mặc định là SERIAL_8N1, tức là 8 bit
dữ liệu, không dùng bit parity, 1 bit stop. Các giá trị khác có thể
xem ở đây:
https://www.arduino.cc/reference/en/language/functions/communication/serial/print/
Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.3. Các hàm xử lý truyền thông UART
Các hàm truyền dữ liệu:
o Serial.print() -> xuất dữ liệu ra cổng Serial dưới dạng
chuỗi con người có thể đọc được.
o Serial.println() -> tương tự như Serial.print() nhưng
có gửi kèm theo một kí tự xuống dòng.
o Serial.write() -> xuất dữ liệu ra cổng Serial dưới dạng
byte hoặc một dãy các byte.

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.3. Các hàm xử lý truyền thông UART
Các hàm đọc dữ liệu:
o Serial.read() -> đọc dữ liệu truyền đến.
o Serial.readBytes() -> đọc dữ liệu từ cổng Serial vào trong một
bộ nhớ đệm.
o Serial.readBytesUntil() -> đọc dữ liệu từ bộ nhớ đệm vào một
mảng.
o Serial.readString() -> đọc dữ liệu từ bộ nhớ đệm vào đối tượng
String.
o Serial.readStringUntil() -> tương tự Serial.readString()

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
Bài tập 3: Xuất bảng mã ASCII đọc được, ví dụ Examples/
04.Communication/ ASCIITable

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
Bài tập 4: Vẽ đồ thị trên Serial Plotter

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
Bài tập về nhà: Vẽ nhiều đồ thị trên Serial Plotter

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
Bài tập 5: Bật tắt đèn theo lệnh gửi từ Serial Monitor
Yêu cầu điều khiển: Gửi lệnh đến Arduino bật tắt đèn theo cấu
trúc:
<kí tự 1> <dấu cách/dấu phẩy> <kí tự 2>
 kí tự 1 -> thứ tự của đèn muốn tác động
 kí tự 2 -> tác động lên đèn: 1 -> bật đèn, 0 -> tắt đèn
 Nếu kí tự 1 là chữ ‘a’ thì tất cả các đèn đều có chung một
tác động từ lệnh gửi từ Serial Monitor
 Gửi lại lên màn hình trạng thái đèn nào vừa được tác động.

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.4. Chuẩn giao tiếp I2C
VCC

Rp Rp

SDA
SCL
GND

Master Slave 1 Slave 2 … Slave N

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.4. Chuẩn giao tiếp I2C
o I2C (Inter – Integrated Circuit): là chuẩn giao tiếp truyền thông
dữ liệu nối tiếp đồng bộ, được phát triển bởi hãng điện tử
Philips Semiconductors cho phép giao tiếp một thiết bị chủ với
nhiều thiết bị tớ.
o Sử dụng rộng rãi cho giao tiếp giữa vi điều khiển và mảng cảm
biến, các thiết bị hiển thị, thiết bị IoT, EEPROMs, v.v …

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3.4 Chuẩn giao tiếp I2C

o Board Arduino Uno/Nano/Mini chỉ


có một cổng truyền thông I2C.
o Trên Arduino Uno/Nano/Mini,
chân được sử dụng cho việc truyền
thông I2C là chân A4 (SDA) và
chân A5 (SCL)

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3.4 Chuẩn giao tiếp I2C

Hiển thị nhiệt độ, độ ẩm lên LCD sử dụng I2C


Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3.4 Chuẩn giao tiếp I2C

Hiển thị thời gian thực lên LCD sử dụng I2C


Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
4.3.5. Các hàm xử lý truyền thông I2C
o Có rất nhiều thư viên phục vụ cho việc truyền thông I2C, thông
thường các thư viện này được viết riêng cho các thiết bị Slave để có
thể giao tiếp hiệu quả hơn với Master (Arduino).
o Thư viện chuẩn giao tiếp I2C trong Arduino là “Wire.h”, đây là thư
viên built-in trong Arduino IDE. Cú pháp:
#include <Wire.h>
o Một số hàm hay được sử dụng trong thư viện:
 Wire.begin()  Wire.write()
 Wire.beginTransmission()  Wire.read()
 Wire.endTransmission()  Wire.requestFrom()
Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3. Truyền dữ liệu chuẩn
UART, I2C và SPI
Bài tập 6: Đọc tín hiệu điện áp trên biến trở rồi hiển thị lên trên
LCD 16x02 theo 2 cách:
o Cách 1: Kết nối trực tiếp theo kiểu 4 bit.
o Cách 2: Kết nối sử dụng truyền thông nối tiếp I2C.
Gợi ý:
o Cách 1: Sử dụng thư viện LiquidCrystal.h
o Cách 2: Sử dụng thư viện LiquidCrystal_I2C.h
Hai thư viện này tuy khác nhau nhưng có cùng một cách sử
dụng các hàm hiển thị ra màn hình.

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3.6 Chuẩn giao tiếp SPI

SCLK
MISO
MOSI
SCLK

SCLK
MISO

MISO
MOSI

MOSI
MOSI
MISO
SCLK

SS
SS1
SS2
SS3

SS

SS
Master Slave Slave Slave

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3.6 Chuẩn giao tiếp SPI
o 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.
o Đây là kiểu truyền thông Master – Slave, trong đó có 1 chip Master
điều phối quá trình truyền thông và các chip Slave được điều khiển
bởi Master vì thế truyền thông chỉ xảy ra giữa Master và Slave.
o Bus giao tiếp SPI thường được sử dụng để giao tiếp vi xử lý hoặc vi
điều khiển với bộ nhớ như EEPROM, RTC (Real–Time Clock), ADC,
DAC, màn hình LCD, IC âm thanh, các loại cảm biến như nhiệt độ và
áp suất, thẻ nhớ như MMC hoặc thẻ SD hoặc thậm chí các bộ vi điều
khiển khác.

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3.6 Chuẩn giao tiếp SPI
o 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.
o SPI đôi khi được gọi là chuẩn truyền thông “4 dây” vì có 4 đường
giao tiếp trong chuẩn này đó:
 SCK – Serial Clock
 MISO – Master Input Slave Output
 MOSI – Master Ouput Slave Input
 SS – Slave Select.

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3.7 Các hàm xử lý
truyền thông SPI
o Có rất nhiều thư viện phục vụ cho việc truyền thông SPI, thông
thường các thư viên này được viết riêng cho các thiết bị Slave để
có thể giao tiếp hiệu quả hơn với Master (Arduino).
o Thư viên chuẩn giao tiếp SPI trong Arduino là “SPI.h”, đây là thư
viên built-in trong Arduino IDE. Cú pháp:
#include <SPI.h>
o Một số hàm hay được sử dụng trong thư viện:
 SPI.beginTransaction()
 SPI.endTransaction()
 SPI.transfer() hoặc SPI.transfer16()

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3.7 Các hàm xử lý
truyền thông SPI

Test hiển thị lên màn hình Oled 0.96 SPI


Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI
4.3.7 Các hàm xử lý
truyền thông SPI
o Câu hỏi:
 Nêu sự khác biệt chuẩn UART và 2 chuẩn SPI, I2C
 Nêu sự khác biệt chuẩn SPI VÀ I2C.

Bộ môn Kỹ thuật Cơ điện tử 4.3. Truyền thông dữ liệu chuẩn UART, I2C và SPI

You might also like