Chức năng Lepton Pin Pi Pin
GND Pin 1 Pin 6
Power 3 – 5.5V Pin 2 Pin 4
I2C SDA Pin 5 Pin 3
I2C SCL Pin 8 Pin 5
SPI CS Pin 10 Pin 24
SPI CLK Pin 7 Pin 23
SPI MOSI Pin 9 Pin 19
SPI MISO Pin 12 Pin 21
VSYNC Pin 15 Pin 11
GND Pin 19 Pin 25
Sau khi đã thực hiện kết nối xong, ta thực hiện kích hoạt 2 giao tiếp SPI và I2C trên Raspberry Pi 4.
Tại giao diện màn hình chính của Raspberry Pi 4, chọn Menu > Preferences >
Raspberry Pi Configuration - Hình 3.7.
Hình 3.7: Mở giao diện cấu hình Raspberry Pi 4
Tại mục Interfaces, ta thực hiện kích hoạt các giao tiếp SPI, I2C bằng cách chọn
37
Hình 3.8: Kích hoạt giao tiếp SPI và I2C
Ngồi ra, ta kích hoạt thêm giao tiếp SSH để phục vụ kết đối điều khiển
Raspberry Pi 4 qua đường mạng từ máy tính cá nhân, giúp thuận tiện hơn cho
việc phát triển phần mềm.
Nhấn chọn OK và thực hiện khởi động lại Raspberry Pi 4 để hồn thành kích hoạt các giao tiếp - Hình 3.9.
Hình 3.9: Khởi động lại Raspberry Pi 4
Sau khi đã thực hiện thiết lập kết nối xong, dữ liệu thô từ camera sẽđược gửi đến Raspberry Pi 4 thông qua giao tiếp SPI, để điều khiển hay cấu hình các thơng số
cho camera ta thực hiện gửi dữ liệu qua giao tiếp I2C. Chi tiết về các hàm điều khiển qua I2C được mô tả trong tài liệu [19].
Dữ liệu thô của 1 khung hình camera 160 x 120 pixel được chia thành 4 Segment, mỗi Segment sẽ gồm 60 Packet (Hình 3.11), mỗi Packet có cấu trúc gói
tin như Hình 3.10.
ID CRC Payload
2 bytes 2 bytes 160 bytes
Hình 3.10: Cấu trúc một SPI Packet
Ta sẽ thực hiện đọc toàn bộ các Packet của bốn Segment trong một khung hình từ
camera để tiến hành tổng hợp dữ liệu và tạo ra một khung hình 160 x 120 pixel nhằm phục vụ cho việc tính tốn nhiệt độ và hiển thị hình ảnh.
38 Tái tạo ma trận dữ liệu 160 x 120
Hình 3.11: Cấu trúc dữ liệu một khung hình
Với mỗi Packet, phần đầu của gói tin sẽ bao gồm hai trường thơng tin là ID có
kích thước 2 bytes và CRC cũng có kích thước 2 bytes (Hình 3.10). Hai bytes
trường ID mã hóa cho số thứ tự Segment (1, 2, 3 hoặc 4) và số thứ tựPacket để
quyết định vị trí của Packet khi người lập trình tổng hợp dữ liệu và hình thành khung hình 160 x 120 pixel.
Mỗi khung hình 160 x 120 pixel thu được từ camera bao gồm 4 Segment, mỗi Segment gồm 60 Packet. Như vậy, tổng cộng có 240 Packet được sắp xếp lần
lượt từSegment 1 đến Segment 4 với mỗi hàng sẽ gồm 2 Packet như Hình 3.11.
Hình 3.12: Thơng tin được mà hóa ở phần đầu một Packet [18]
Hình 3.12 biểu diễn thơng tin được mã hóa ở phần đầu mỗi Packet với tổng cộng 32 bits. Bit đầu tiên ln ln có giá trị bằng khơng, ba bit tiếp theo được gọi là TTT bits, và theo sau là 12 bits biểu diễn số thứ tự Packet. Lưu ý rằng số thứ
Packet sẽđược đếm từ0 đến 59 cho một Segment và quay lại 0 khi đến Segment tiếp theo. Với tất cả Packet ngoại trừ Packet có số thứ tự 20 thì có thể bỏ qua
TTT bits. Cịn riêng đối với Packet có số thứ tự 20, TTT bits biểu diễn số thứ tự
của Segment (1, 2, 3 hoặc 4) đang được camera truyền đi. Trong một vài trường hợp, camera có thể truyền đi một Segment có số thứ tựlà khơng, điều này này có
nghĩa là Segment này khơng có ý nghĩa, người lập trình hồn tồn có thể bỏ qua Segment này. Theo sau 16 bits mã hóa cho số thứ tự Segment và số thứ tự Packet là 16 bits cho phần CRC, tuy nhiên trong đồ án này, phần tính tốn và kiểm tra
CRC này được bỏqua để giảm khối lượng tính tốn cho Raspberry Pi 4.
Theo quy ước của FLIR Lepton thì dữ liệu cho mỗi pixel là một số 2 bytes (16 bits) lưu giá trị nhiệt độởđơn vị Kelvin và được nhân lên 100 lần, do đó để hình
thành được một hàng 160 pixel ta cần lấy ra phần payload của 2 Packet với tổng cộng 320 bytes dữ liệu rồi ghép lại. Cứnhư vậy, từ 240 Packet cho 4 Segment ta
39 tổng hợp được 120 hàng và tạo được một ma trận dữ liệu 160 x 120 tương ứng với một khung hình.
Lưu ý: Tại những thời điểm camera khởi động và thời điểm nghỉ giữa các khung hình, camera vẫn sẽ truyền đi những Packet, nhưng những Packet này không mang thông tin cần đọc và được bỏ qua. Để cho người lập trình có thể nhận ra những Packet bỏ qua này, FLIR Lepton sẽ mã hóa 2 bytes đầu của các Packet này ở dạng xFxx (trong đó ‘x’ là những dữ liệu “don’t care”) (Hình 3.13).
Hình 3.13: Định dạng một Packet bỏ qua [18]
Đọc dữ liệu cảm biến DHT22
Hình 3.14: Cảm biến nhiệt độ, độ ẩm DHT22
Cảm biến nhiệt độ, độ ẩm DHT22 sử dụng giao tiếp 1-wire để giao tiếp với các thiết bịkhác. Để có thể giao tiếp được với DHT22, ta thực hiện kết nối cảm biến với Raspberry Pi 4 theo thứ tự chân như Bảng 3.5.