You are on page 1of 42

Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

BÀI MỞ ĐẦU

Làm quen với sơ đồ nguyên lý của board thực hành (schematic)

Board mạch thực hành

1
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Chúng ta phải nhớ các bus lable này để khai báo khi lập trình, kết hợp với tra cứu tại địa chỉ
www.pinout.xyz để xem chức năng của từng chân; ví dụ trong trường hợp chúng ta tìm hiểu chân
số 12.

Chân kết nối vật lý là chân số 12, thứ tự trong thư viện GPIO/BCM là 18, thứ tự trong thư viện
Wiring Pi lại là chân 1 …..

2
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Chúng ta sẽ thực hành gồm 15 tuần, 13 bài, 25 câu gồm bài tập có lời giải và không có lời giải

Bài mở đầu. Nghiên cứu về schematic và các kết nối với Raspberry Pi

Bài mở đầu. Viết chương trình hiện dòng chữ “Hello World” hiện lên terminal.

Bài 1. Làm quen với GPIO (General Purpose Input Output) [P.1].

Bài 2. Giao tiếp màn hình LCD.

Bài 5. Giao tiếp với cảm biến 1-Wire.

Bài 6. Điều khiển ngoại vi (động cơ DC).

Bài 7. Điều khiển ngoại vi (động cơ RC-Servo).

Bài 9. Giao tiếp cảm biến đo khoảng cách.

Bài 10. Giao tiếp cảm biến ánh sáng.

Bài 11. Điều khiển LED matrix.

Bài 12. Giao tiếp cảm biến hình ảnh (camera).

Bài 13. Giải mã tín hiệu điều khiển hồng ngoại.

Cài phần mềm VNC Viewer vào máy

Hình 1. Giao diện phần mềm VNC Viewer


Sau đó gõ địa chỉ IP của rasperry Pi vào để kết nối (IP có định dạng 192.168.1.xxx)
Đề nghị: Không đổi IP sau khi kết nối
Để kết nối được vào Rasperry Pi cần kết nối vào SSID: DIY_HUS (pass: thayThaodepgiai)
Chú ý: User name: pi
Password: 12345678

3
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Hình 2. Kết nối vào Rasperry Pi

Bài mở đầu. Viết chương trình hiện dòng chữ “Hello World” hiện lên terminal
Bài tập kinh điển 
Chúng ta có 2 cách để thực hiện bài trên.
1. Các bạn mở teminal (tổ hợp phím Ctrl + Shift + T) trên bàn phím
Trên Teminal gõ “python” hoặc “python3” môi trường python sẽ hiện ra, các bạn gõ
dòng lệnh
print("Hello World")
2. Các bạn tạo 1 file có phần mở rộng là py. (ví dụ: hello.py)
Mở file vừa tạo bằng trình chỉnh chửa text (nano, cat, vi, hoặc notepad) gõ dòng lệnh
print("Hello World")
Sau đó lưu file lại, ra teminal gõ lệnh python hello.py
[Thảo luận]
Trong lúc lập trình với ngôn ngữ python, với những bài toán đơn giản, số lượng câu lệnh
ít, kết quả tính toán không nhiều ta có thể thực hiện luôn trên teminal. Với những bài toán lớn, để
dễ quản lý và debug, chúng ta nên chọn phương án tạo file và lưu file (Tùy các bạn)
Bài 1. Làm quen với GPIO (General Purpose Input Output)
1. Viết chương trình blinking LED theo chu kỳ 1s.
[Bài tập tự làm]
2. Viết chương trình điều khiển các đèn LED, đèn nền LCD sáng, tối theo các chu kỳ khác
nhau.

4
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Chúng ta tham khảo schematic để xem LED được


nối vào Bus nào trong Raspberry Pi, để chúng ta
tác động vào.
Có thể tham khảo các chức năng của các pin tại:
https://pinout.xyz/

Bài 1.1. Làm quen với GPIO (General Purpose Input Output) [P.2]
1. Viết chương trình đọc nút bấm, BT1 đèn sáng, BT2 đèn tắt, BT3 đèn nhấp nháy chu kỳ
1s, BT4 (lần 1 đèn sáng, lần 2 đèn tắt liên tục). hiển thị trạng thái của đèn lên terminal.
[Bài tập làm thêm]
2. Viết chương trình bấm BT_1 điều khiển role 1, role 2, đèn LED với các kịch bản khác
nhau
Trên board có 4 nút bấm khác nhau, xem các
màu này được nối vào Bus nào trong Raspberry
Pi, để chúng ta tác động vào.
Có thể tham khảo các chức năng của các pin tại:
https://pinout.xyz/

5
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code

6
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Bài 2. Giao tiếp LCD


1. Viết chương trình hiển thị dòng chữ “hello world” hiện lên màn hình LCD, các kịch bản
khác nhau với đèn nền màn hình, vị trí hiển thị…
2. Viết chương trình bấm BT_1 lần 1 cả dòng chữ “Hello-World” chạy từ trái sang phải
terminal; bấm BT_1 lần 2 cả dòng chữ trên chạy từ phải sang trái terminal, bấm BT_1 lần 3
thì xóa terminal.
3. Viết chương trình bấm BT_2 thì từng ký tự trong dòng chữ “Hello-World” chạy từ trái sang
phải terminal. Bấm BT_2 lần 2 thì từng ký tự trong dòng chữ trên chạy ngược lại từ phải sang
trái terminal. Bấm BT_2 lần 3 thì xóa terminal.
LCD (Liquid Crystal Display) là
một thiết bị ngoại vi dùng để
giao tiếp với người dùng một
cách trực quan, một vài trường
hợp muốn thể hiện sinh động
hơn các ứng dụng, người ta
cũng sử dụng màn hình graphic
để có thể tùy biến giao diện
Code bài 1

7
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

8
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

9
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 2

10
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

11
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

12
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Bài 3. Điều khiển LED matrix


1. Viết chương trình hiển thị chữ "hello worl" chạy trên màn hình LED matrix từ trái sang phải.
2. Viết chương trình hiển thị chữ "hello worl" hiển thị lộn ngược trên màn hình LED matrix.
3. Viết chương trình hiển thị các số từ 0-9 chạy liên tục trên LED matrix từ phải sang trái.
Thực chất là các đèn LED được liên kết với nhau thành dạng
ma trận, ở đó các K được nối chung với nhau và A được nối
chung nhau tạo thành hàng và cột. Khi điều khiển người ta sẽ
quét các hàng và cột tương ứng kết hợp với hiện tượng lưu ảnh
trên võng mạc của mắt người mà hình ảnh trên màn hình LED
matrix sẽ có cảm giác sáng đều trong nhận thức của con
người, thực tế thì các phần tử LED đơn đang sáng tối theo một
thời gian rất nhanh mà mắt người không cảm nhận được.
Đối với bài này chúng ta sử dụng thư viện Max7219, download tại đây (chú ý sau buổi thực hành
chúng ta phải xóa thư viện và gỡ cài đặt) https://github.com/diy-hus/max7219
Sau khi git về Raspberry, giải nén và sử dụng lệnh sau để cài đặt:
python3 -m pip install --upgrade luma.led_matrix
Khi thực hành xong, chúng ta xóa thư mục max7219 vừa download về và sử dụng lệnh sau để gỡ:
python3 -m pip uninstall --upgrade luma.led_matrix
Code bài 1

13
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 2:

Bài 4. Điều khiển ngoại vi [động cơ DC]

1. Viết chương trình điều khiển tốc độ động cơ DC bằng nút bấm. Mỗi lần bấm BT1 tốc độ
động cơ tăng thêm 20%, bấm BT2 giảm 20% và quay theo chiều kim đồng hồ. Bấm BT3
tốc độ động cơ tăng 20%, bấm BT4 giảm 20% và ngược chiều kim đồng hồ. Hiển thị tốc
độ (tương đối theo %) lên terminal mỗi lần bấm

[Bài tập làm thêm]

2. Giống bài 1 nhưng hiển thị lên LCD.


14
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Để điều khiển động cơ, chúng ta phải có thêm


driver (phần chịu đựng công suất), với máy
tính chúng ta chỉ có thể xuất ra tín hiệu, muốn
thay đổi công suất bắt buộc phải có mạch
phân phối công suất (thường gọi là driver)
Tìm hiểu thêm về phương pháp điều khiển
độ rộng xung PWM

Hiểu một cách đơn giản thì điều chế PWM là thay đổi duty cycle (khoảng thời gian tín hiệu ở
mức cao) trong một chu kỳ cố định, qua đó làm thay đổi điện áp trung bình cấp ra ngoại vi.

Nếu như đưa PWM vào S1 và đóng S4 chúng


ta sẽ thay đổi được tốc độ của động cơ khi thay
đổi duty cycle. Nếu đưa PWM vào S3 và đóng
S2 chúng ta sẽ thay đổi được tốc độ động cơ
đồng thời chiều quay cũng ngược lại.
Minh họa dạng xung vuông khi điều chế PWM
Bỏ module config, dùng lệnh sudo
Code bài 1

15
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 2

16
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

17
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

18
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Bài 5. Giao tiếp cảm biến ánh sáng

1. Viết chương trình đọc giá trị cảm biến ánh sáng, hiển thị trạng thái sáng-tối lên LCD (lấy tay
che cảm biến để mô phỏng hiện tượng trời tối)

2. Viết chương trình mô phỏng công tắc đèn đường, khi trời tối bật role 1, sau 2s bật tiếp role 2,
khi trời sáng thì tắt cả 2 role đồng thời (giải thích vì sao)
Cảm biến ánh sáng là các thiết bị quang điện chuyển đổi năng
lượng ánh sáng (photon) cho dù ánh sáng nhìn thấy được hay tia
hồng ngoại thành tín hiệu điện (electron).
Cảm biến ánh sáng loại CdS do sử dụng nguyên tố kim loại nặng
Cd nên hầu hết các nước châu Âu không cho phép sử dụng trong
các ứng dụng thương mại.
19
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 1:

20
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

21
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 2

Bài 6. Điều khiển ngoại vi [Động cơ DC servo]


Động cơ servo là một cơ hệ bao gồm động cơ DC, cảm biến vị trí, bộ truyền bánh răng và
mạch điều khiển. Sử dụng cơ chế phản hồi âm để chuyển đổi tín hiệu điện thành chuyển động có
kiểm soát một cách chính xác về vận tốc, gia tốc và vị trí góc.

Cấu tạo động cơ RC servo Timing diagram


22
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

1. Bấm BT1 servo quay góc 10, bấm BT2 quay góc 50, bấm BT3 quay góc 120.

[Bài tập làm thêm]

2. Viết chương trình điều khiển servo, quay từ 0-180 độ và quay ngược lại (liên tục).

3. Bấm BT4 thì servo quay 1 góc 10 độ, quay hết 180 thì quay về 0 và tiếp tục như thế
Code bài 1:

23
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 2:

24
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Bài 7. Giao tiếp cảm biến đo khoảng cách


Nguyên lý hoạt động của cảm biến siêu âm khá
đơn giản. Ta phát đi một sóng siêu âm và đo
thời gian từ khi sóng phát đến khi sóng phản
xạ. Do vận tốc sóng âm truyền trong một môi
trường đồng nhất là không thay đổi nên từ đó
ta tính được khoảng cách từ cảm biến đến đối
tượng cần đo.

25
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

1. Viết chương trình bấm BT1 thì đo khoảng cách từ cảm biến siêu âm (liên tục), hiển thị
khoảng cách đo được lên LCD (Không dùng thư viện có sẵn)
[Bài tập tự làm]
2. Viết chương trình bấm BT1 thì mô phỏng cảm biến lùi của oto, khi khoảng cách nhỏ hơn 4cm
thì bật role cảnh báo (cài số lùi)
Code bài 1:

26
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

27
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 2:

28
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Bài 8. Giải mã tín hiệu điều khiển hồng ngoại.


1. Viết chương trình giải mã tín hiệu điều khiển từ xa từ điều khiển hồng ngoại.
2. Viết chương trình hiển thị các ký tự nhận được từ điều khiển từ xa. Khi nhận được phím 8
trên điều khiển sẽ bật role 1, số 9 bật role 2
3. Viết chương trình khi nhận được phím 1 trên điều khiển sẽ bật role 1, nhả phím 1 thì tắt role 1
Giao tiếp hồng ngoại (IR) là một công nghệ điều khiển từ xa được sử dụng rộng rãi, rẻ tiền và
thực sự hữu dụng. Chúng ta thường thấy phương thức điều khiển này qua remote TV, đầu đĩa, cảm
biến chuyển động hoặc nhiệt kế hồng ngoại.

29
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Ánh sáng hồng ngoại được phát ra từ mọi vật liệu có nhiệt độ, từ mặt trời, bóng đèn cho đến các vật
dụng trong phòng. Điều đó có nghĩa là có rất nhiều ánh sáng hồng ngoại gây nhiễu xung quanh
chúng ta. Để ngăn tín hiệu nhiễu này ảnh hưởng đến tín hiệu IR (hồng ngoại), kỹ thuật điều chế tín
hiệu được sử dụng. Trong điều chế tín hiệu IR, bộ mã hóa trên bộ phát IR chuyển đổi tín hiệu nhị
phân thành tín hiệu điện. Tín hiệu điện này được gửi đến đèn LED truyền. Đèn LED truyền sẽ chuyển
đổi tín hiệu điện được điều chế thành ánh sáng hồng ngoại. Sau đó, bộ thu IR giải mã tín hiệu ánh
sáng hồng ngoại và chuyển đổi trở lại thành nhị phân trước khi truyền thông tin đến khối giải mã lệnh

Tín hiệu IR được điều chế thành một chuỗi các xung ánh sáng được bật và tắt ở tần số cao được gọi
là tần số sóng mang. Tần số sóng mang được sử dụng bởi hầu hết các remote phát hồng ngoại là 38
kHz, vì nó rất hiếm trong tự nhiên và do đó có thể loại bỏ được nhiễu từ môi trường xung quanh.
Bằng cách này, bộ thu IR sẽ biết rằng tín hiệu 38 kHz được gửi từ máy phát mà không phải là từ môi
trường xung quanh. Diode thu nhận được tất cả các tần số của ánh sáng hồng ngoại, nhưng thông
qua bộ lọc thông dải nó chỉ cho phép bước sóng có tần số 38 kHz đi qua. Cách chuyển đổi dữ liệu nhị
phân kết hợp với sóng mang được xác định bởi giao thức truyền tín hiệu tiêu chuẩn. Có nhiều giao
thức truyền dữ liệu IR. Trong đó: Sony, Matsushita, NEC và RC5 là những giao thức tương đối phổ
biến.
2 mức logic 0 và 1 trong giao thức NEC được định nghĩa như sau:
Mức logic 1: là một xung CAO có chu kỳ 562,5 us và một mức THẤP có chu kỳ 1.687,5 us.
Mức logic 0: là một xung CAO có chu kỳ 562,5 us và một mức THẤP có chu kỳ 562,5 us.
Khi xung ở mức cao, chúng được chia ra thành các xung nhỏ hơn có chu kỳ 26,3 us (38kHz).

Code bài 1:

30
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

31
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 2: Tương tự bài 1 nhưng trong main có thêm đoạn sau:

Code bài 3: Tương tự bài 1 nhưng trong main có thêm đoạn sau:
32
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Bài 9. Giao tiếp với cảm biến 1-Wire.

1.Viết chương trình đọc giá trị cảm biến DHT11 (Không dùng thư viện có sẵn) hiển thị nhiệt độ, độ
ẩm lên terminal

2. Viết chương trình mô phỏng điều hòa nhiệt độ, khi nhiệt độ cao thì bật quạt và role, nhiệt độ thấp
thì để mình quạt, thấp nữa thì tắt hết

Chuẩn giao tiếp 1 dây (1 wire) do hãng Dallas giới thiệu. Trong chuẩn giao tiếp này chỉ
cần 1 dây để truyền tín hiệu và làm nguồn nuôi, tuân thủ mối liên hệ giữa master và slave 1 cách
chặt chẽ.
Các bước giao tiếp:
- MCU thiết lập chân DATA là Output, kéo chân DATA xuống 0 trong khoảng thời gian
>18ms. Khi đó DHT11 sẽ hiểu MCU muốn đo giá trị nhiệt độ và độ ẩm.

33
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

- MCU đưa chân DATA lên 1, sau đó thiết lập lại là chân đầu vào.
- Sau khoảng 20-40us, DHT11 sẽ kéo chân DATA xuống thấp. Nếu >40us mà chân DATA
ko được kéo xuống thấp nghĩa là ko giao tiếp được với DHT11.
- Chân DATA sẽ ở mức thấp 80us sau đó nó được DHT11 kéo nên cao trong 80us. Bằng
việc giám sát chân DATA, MCU có thể biết được có giao tiếp được với DHT11 ko. Nếu
tín hiệu đo được DHT11 lên cao, khi đó hoàn thiện quá trình giao tiếp của MCU với
DHT.
- DHT11 sẽ trả giá trị nhiệt độ và độ ẩm về dưới dạng 5 byte. Trong đó:
 Byte 1: giá trị phần nguyên của độ ẩm (RH%)
 Byte 2: giá trị phần thập phân của độ ẩm (RH%)
 Byte 3: giá trị phần nguyên của nhiệt độ (T 0C)
 Byte 4 : giá trị phần thập phân của nhiệt độ (T 0C)
 Byte 5 : kiểm tra tổng.
- Nếu Byte 5 = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) thì giá trị độ ẩm và nhiệt độ là chính
xác, nếu sai thì kết quả đo không có nghĩa.
Code bài 1:

34
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

35
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 2: Giống bài 1 nhưng thêm phần sau

36
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Bài 10. Giao tiếp cảm biến hình ảnh (Camera 1)

1. Viết chương trình bấm BT1 chụp 1 ảnh từ camera và hiện ảnh lên màn hình.

2. Bấm BT2 quay lại video vào lưu tại thư mục video, khi không bấm nữa thì dừng quay; Bấm
BT3 lần 1 thì bắt đầu quay video và lưu, bấm lần 2 thì dừng quay

3. Bấm BT4 lần 1 thì stream camera (không lưu) bấm lần 2 thì dừng

4. Viết chương trình bấm BT1 thì stream camera đồng thời hiển thị các thanh trượt để điều chỉnh
ngưỡng màu của ảnh thu được trong không gian HSV.

5. Viết chương trình bấm BT1 thì 1 cửa sổ hiện stream camera, 1 cửa sổ khác lọc hết những đối
tượng khác, chỉ giữ lại những vật có màu đỏ; Bấm BT2 thì vẽ đường bao (màu đỏ) lên các đối
tượng màu đỏ.
37
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

6. Viết chương trình bấm BT1 thì hiện cửa số hiện stream camera, 1 cửa sổ khác lọc hết các đối
tượng khác, chỉ giữ lại vật có màu xanh và đỏ; Bấm BT2 thì vẽ đường bao màu đỏ lên đối
tượng màu đỏ, đườngbao màu xanh lên đối tượng màu xanh.
Với bài tập này chúng ta phải cài thêm gói thư viện xử lý ảnh của opencv-python, các bạn
download tại đây: https://github.com/diy-hus/opencv
Sau khi giải nén ta có tên: opencv_python-3.4.13.47-cp37-cp37m-linux_armv7l.whl
Dùng lệnh pip3 install opencv_python-3.4.13.47-cp37-cp37m-linux_armv7l.whl để cài đặt.
Nếu vẫn tiếp tục báo lỗi các bạn gõ dòng lệnh sudo apt-get install libatlas-base-dev trước rồi tiếp
tục cài lại sau.
CHÚ Ý: Sau buổi học các bạn phải xóa hết những gì các bạn đã download về và sử dụng dòng
lệnh pip3 uninstall opencv_python-3.4.13.47-cp37-cp37m-linux_armv7l.whl để gỡ gói thư
viện đã cài đặt (là một trong những yêu cầu lúc đi thi cuối kỳ)
Code bài 1:

Code bài 2:

38
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 3:

39
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 4:

Code bài 5:

40
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

Code bài 6:

41
Tài liệu hướng dẫn thực hành “kiến trúc máy tính” lưu hành nội bộ

42

You might also like