Raspberry Pi được phát triển đầu tiên vào năm 2012. Raspberry Pi ban đầu là như một thẻ card được cắm trên bo mạch máy tính được phát triển bởi các nhà phát triển ở Anh. Sau đó Raspberry Pi đã được phát triển thành một bo mạch đơn có chức năng như một máy tính mini dùng để giảng dạy ở các trường trung học. Được phát triển bởi Raspberry Pi Foundation – là tổ chức phi lợi nhuận với tiêu chí xây dựng hệ thống mà nhiều người có thể sử dụng được trong những công việc tùy biến khác nhau. Raspberry Pi sản xuất bởi 3 OEM: Sony,Qsida, Egoman. Và được phân phối chính bởiElement14, RS Components và Egoman.
Mặc dù chậm hơn so với các dòng laptop, máy tính hiện đại nhưng Raspberry Pi vẫn được xem là máy tính Linux hoàn chỉnh và có thể cung cấp tất cả các khả năng mà người dùng mong đợi, với mức tiêu thụ năng lượng thấp.
Hình 3.2. Bo mạch Raspberry Pi 3 3.2.2. Cấu tạo phần cứng của kit Raspberry Pi 3
Raspberry Pi 3 Model B là thế hệ thứ 3 và mới nhất tính đến thời điểm hiện tại của gia đình Raspberry Pi, nó ra đời vào tháng 2 năm 2016. Cấu hình Raspberry Pi 3có khá nhiều thay đổi. Raspberry Pi 3 gồm 10 phần chính:
Chip SOC (System On Chip) Broadcom BCM 2837: chạy ở tốc độ 1.2 GHz, được nâng cấp hơn rất nhiều so với các thế hệ trước. Chip này tương đương với
nhiều loại được sử dụng trong smartphone phổ thông hiện nay, và có thể chạy được hệ điều hành Linux. Tích hợp trên chip này là nhân đồ họa (GPU) Broadcom VideoCore IV Dual Core. GPU này đủ mạnh để có thể chơi một số game phổ thông và phát videochuẩn full HD.
Có 40 ngõ GPIO (General Purpose Input Output): Giống như các chân của vi điều khiển, các IO này của Raspberry Pi cũng được sử dụng để xuất tín hiệu ra led, thiết bị… hoặc đọc tín hiệu vào từ các nút nhấn, công tắc, cảm biến… Ngoài ra còn có cácIO tích hợp các chuẩn truyền dữ liệu UART, I2C và SPI.
Ngõ HDMI: dùng để kết nối Pi với màn hình máy tính hay tivi có hỗ trợ cổngHDMI.
Cổng DSI (Display Serial Interface): Cổng này dùng để kết nối với LCD hoặcmàn hình OLED.
Ngõ audio 3.5mm: Kết nối dễ dàng với loa ngoài hay headphone. Đối với tivi có cổng HDMI, ngõ âm thanh được tích hợp theo đường tín hiệu HDMI nên không cầnsử dụng ngõ audio này.
Cổng USB: Một điểm mạnh nữa của Pi là tích hợp 4 cổng USB 2.0. Đủ để cắmcác ngoại vi cần thiết như chuột, bàn phím và usb wifi.
Cổng Ethernet: Cho phép kết nối Internet dễ dàng. Cắm dây mạng vào Pi, kết nối với màn hình máy tính hay tivi và bàn phím, chuột là bạn có thể lướt web dễ dàng.
Khe cắm thẻ nhớ SD: Raspberry Pi không tích hợp ổ cứng. Thay vào đó nó có thể dùng thẻ SD để lưu trư dữ liệu. Toàn bộ hệ điều hành Linux sẽ hoạt động trên thẻ SD này vì vậy nó cần kích thước thẻ nhớ tối thiểu 4GB và dung lượng hỗ trợ tối đa là32 GB.
Cổng CSI (Camera Serial Interface): Cổng này dùng để kết nối với module camera riêng của Raspberry Pi. Module này thu được hình ảnh chất lượng lên đến 1080p.
Ngoài ra, Raspberry Pi 3 có đặc điểm nổi trội hơn các phiên bản trước là có tíchhợp thêm wifi để có thể kết nối mạng internet không dây và bluetooth 4.1.
Hình 3.3. Các cổng giao tiếp ngoại vi
3.2.3 Module giao tiếp I2C [2]
Thông thường, để điều khiển và hiển thị được kí tự từ vi điều khiển xuất ra màn hình 16x02 bạn cần tới 7-8 dây nối đến chân vi điều khiển. Điều này gây ra rất nhiều phiền toái: đi sai dây, mạch rườm ra, khó viết code...
Những điều này được mạch điều khiển màn hình khắc phục hoàn toàn vì số lượng dây tín hiệu giảm còn duy nhất 2 dây. Bằng việc sử dụng giao tiếp I2C, việc điều khiển trực tiếp màn hình được chuyển sang cho IC xử lý nằm trên mạch. Bạn chỉ việc gửi các mã lệnh cùng nội dung hiển thị, do vậy giúp vi điều khiển có nhiều thời gian để xử lý các tiến trình phức tạp khác.
I2C, viết tắt của từ tiếng Anh “Inter-Integrated Circuit”, là một loại bus nối tiếp được phát triển bởi hãng sản xuất linh kiện điện tử Philips. Ban đầu, loại bus này chỉ được dùng trong các linh kiện điện tử của Philips. Sau đó, do tính ưu việt và đơn giản của nó, I2C đã được chuẩn hóa và được dùng rộng rãi trong các mô đun truyền thông nối tiếp của vi mạch tích hợp ngày nay.
Hình 3.5. Kết nối thiết bị vào bus I2C ở chế độ chuẩn (Standard mode) và
chế độ nhanh (Fast mode)
Một giao tiếp I2C gồm có 2 dây: Serial Data (SDA) và Serial Clock (SCL). SDA là đường truyền dữ liệu 2 hướng, còn SCL là đường truyền xung đồng hồ để đồng bộ và chỉ theo một hướng. Như ta thấy trên hình vẽ trên, khi một thiết bị ngoại vi kết nối vào đường bus I2C thì chân SDA của nó sẽ nối với dây SDA của bus, chân SCL sẽ nối với dây SC Mỗi dây SDA hãy SCL đều được nối với điện áp dương của nguồn cấp thông qua một điện trở kéo lên (pullup resistor). Sự cần thiết của các điện trở kéo này là vì chân giao tiếp I2C của các thiết bị ngoại vi thường là dạng cực máng hở (opendrain hay opencollector). Giá trị của các điện trở này khác nhau tùy vào từng thiết bị và chuẩn giao tiếp, thường dao động trong khoảng 1K đến 4.7k
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ớ. 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.L.
Thông số kỹ thuật:
Kích thước: 41.5mm (L) x 19mm (W) x 15.3mm (H).
Trọng lượng: 5g.
Điện áp hoạt động: 2.5-6V.
Giao tiếp I2C.
Jump Chốt: Cung cấp đèn cho LCD hoặc ngắt.
Biến trở xoay độ tương phản cho LCD.
Giao tiếp I2C chỉ sử dụng duy nhất 2 dây tín hiệu: SDA và SCL giúp tiết kiệm chân trên vi điều khiển.
Dữ liệu truyền nhận đảm bảo tính toàn vẹn vì sử dụng cơ chế phản hồi (ACK) trên mỗi byte dữ liệu.
Có khả năng kết nối nhiều thiết bị với nhau: trên mạch có sẵn các mối hàn A0, A1, A2 để thay đổi địa chỉ của module.
Địa chỉ mặc định: 0x27, có thể mắc vào I2C bus tối đa 8 module (3bit address set)
Để điều khiển độ tương phản của màn hình, bạn xoay biến trở màu xanh.
Trong đề tài này, vì dữ liệu xuất ra đơn giản chỉ là số lượng người đếm được trong ảnh nên nhóm chọn LCD 16x2 làm khối hiển thị sử dụng chuẩn truyền I2C.
Hình 3.7. Module I2C
Cấu tạo Module I2C có 16 chân kết nối LCD tương ứng với 16 chân trên LCD 16x2 dễ dàng kết nối. Có 4 chân kết nối trực tiếp với các cổng GPIO tương ứng của Raspberry Pi giúp tiết kiệm được các chân GPIO và dễ dàng kết nối.
Bảng 3.1. Kết nối phần cứng Module I2C với Raspberry Pi
5V Pi 5V
GND Pi GND
SDA Pi SDA
Hình 3.8. Sơ đồ kết nối giữa I2C với kit Raspberry Pi
Để sử dụng chuẩn I2C cần phải cài đặt giao tiếp I2C cho Raspberry trong phần Setup Option. Và để lập trình I2C trên Pi ta phải cài smbus và i2c-tools.
Để cài đặt I2C cho Raspberry vào “Interfacing Option” “ I2C” “Yes”
“Finish” “Reboot”. [15]
Hình 3.9. Cài đặt I2C cho Raspberry
Để lập trình I2C trên Pi bạn cài smbus và i2c-tools bằng lệnh:
sudo apt-get install –y python-smbus i2c-tools
lsmod | grep i2c_
Để kiểm tra có thiết bị nào đã được kết nối với Pi hay chưa sử dụng lệnh:
sudo i2cdetect –y 1
Ta sẽ thấy kết qủa sau (có một thiết bị có địa chỉ 3f đang kết nối trên cổng I2C)
pi@raspberrypi:~/lcd $ sudo i2cdetect -y 1
3 1 2 3 4 5 6 7 8 9 a b c d e f 00: — — — — — — — — — — — — — — — 10: — — — — — — — — — — — — — — — 3f 20: — — — — — — — — — — — — — — — — 30: — — — — — — — — — — — — — — — — 40: — — — — — — — — — — — — — — — — 50: — — — — — — — — — — — — — — — — 60: — — — — — — — — — — — — — — — — 3.2.4 LCD 16x2
LCD 16x02 một sản phẩm quen thuộc với những người mới học và muốn thực hiện các dự án về điện tử, lập trình. Với khả hiển thị 2 dòng với mỗi dòng 16 ký tự, đồng thời có rất nhiều ví dụ mẫu được cộng đồng Arduino xây dựng sẵn sẽ giúp người mới sử dụng làm quen nhanh hơn cũng như tiết kiệm được thời gian trong việc phát triển ứng dụng của mình.
Thông số kỹ thuật:
Điện áp hoạt động: 5V.
Kích thước: 80 x 36 x 12.5 mm.
Chữ trắng, nền xanh.
Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối với Breadboard.
Đèn led nền có thể dùng biến trở hoặc PWM điều chình độ sáng thích hợp.
VSS: cực âm nguồn cho LCD - GND: 0V.
VDD: cực dương nguồn LCD - 5V.
Constrast Voltage (Vo): điều khiển độ sáng màn hình.
Register Select (RS): lựa chọn thanh ghi.
RS = 0 chọn thanh ghi lệnh.
RS = 1 chọn thanh ghi dữ liệu.
Read/Write (R/W)
R/W = 0 ghi dữ liệu.
R/W = 1 đọc dữ liệu.
Enable: Cho phép ghi vào LCD.
D0 - D7: 8 chân trao đổi dữ liệu với các vi điều khiển, với 2 chế độ sử dụng.
Chế độ 8 bit: Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7.
Chế độ 4 bit: Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7.
Backlight (Backlight Anode (+) và Backlight Cathode (-)): Tắt bật đèn màn hình LCD.
Hình 3.10. LCD 16x2
Để hiển thị trên LCD16x2 theo cách thông thường phải mất rất nhiều GPIO trên Pi (tối thiểu 4 GPIO cho các chân dữ liệu và 3 chân GPIO điều khiển LCD). Với module I2C ta chỉ cần dùng 2 chân SDA và SCL trên Pi để giao tiếp với LCD. Mạch LCM1602 sẽ đứng trung gian chuyển đổi tín hiệu dữ liệu gửi từ Pi qua I2C
Trong module LCD có 1 con chip để điều khiển LCD, do đó muốn hiển thị nội dung lên LCD bạn cần biết cách “ra lệnh” (như hiển thị dòng nào, nội dung gì, back light như thế nào) cho con chip này. Bạn chỉ cần gửi lệnh điều khiển và dữ liệu cho chip, phần còn lại chip sẽ thực hiện.
Để kết nối với chip điều khiển trên LCD bạn chú ý những chân sau:
RS: thiết lập dữ liệu truyền là dữ liệu kí tự hay lệnh. Khi gửi lệnh hay cần đọc trạng thái của LCD chân này được kéo mức thấp. Chân này được kéo mức cao khi cần truyền hay đọc dữ liệu kí tự từ LCD.
R/W: điều khiển hướng dữ liệu được truyền, khi ở mức thấp dữ liệu sẽ được truyền tới LCD. Ngược lại, khi cần đọc dữ liệu từ LCD chân này sẽ được kéo lên mức cao.
E: dữ liệu chỉ được truyền khi có sự chuyển mức từ cao sang thấp trên chân này.
D0-D7: là các chân truyền dữ liệu, có 2 kiểu truyền dữ liệu 8bits (D0-D7) và 4bits. Nếu dùng 8bits sẽ mất 8GPIO nên để tiết kiệm người ta thường dùng chế độ 4bits (D4-D7) nhưng phải truyền 2 lần.
Hình 3.11. Module I2C kết nối với LCD 16x2
3.2.5 Nguồn
Apdapter 5V-2.5A cung cấp nguồn cho Raspberry thông qua cổng micro và sử dụng ngõ ra 5V từ chân I/O của raspberry để cấp cho Module I2C và quạt tản
nhiệt. Máy tính kết nối với Raspberry thông qua cổng ethernet để gõ lệnh, liên kết lập trình cho raspberry và xem kết quả xử lý ảnh.
Hình 3.12. Adapter 5V-2.5A
3.3. HỆ ĐIỀU HÀNH CHO KIT RASPBERRY PI 3 3.3.1. Giới thiệu hệ điều hành cho kit Raspberry Pi 3 3.3.1. Giới thiệu hệ điều hành cho kit Raspberry Pi 3
Có 5 phiên bản hệ điều hành được cung cấp chính thức cho Raspberry Pi:
Raspbian "wheezy": Đây là distro dựa trên Debian wheezy, sử dụng hard- float ABI (tính toán dấu chấm động bằng phần cứng) cho thời gian chạy các ứng dụng nhanh hơn với giao diện LXDE (thay vì GNOME). Có đầy đủ web browser, media player, tools, etc … Nói chung này dành cho những người muốn dùng Raspberry Pinhư một cái PC.
Soft-float "wheezy": Vẫn được xây dựng dựa trên Debian wheezy nhưng việc xử lý dấu chấm động được thực hiện bằng phần mềm. Việc này giúp bạn có thể sửdụng máy ảo Java (Oracle JVM) trên Raspberry.
Arch Linux: Phiên bản giành cho ARM. Đảm bảo thời gian khởi động trong vòng 10 giây. Chỉ khởi động và load các gói cần thiết. Để sử dụng được Arch Linux bạn cần có kiến thức cơ bản về Linux.
phát triển ARM thiết kế riêng. Đây không phải là một phiên bản Linux, do vậy bạn cần làm quen với cấu trúc và câu lệnh đặctrưng cho hệ điều hành này.
Ngoài ra còn nhiều hệ điều hành khác bạn có thể cài đặt: Raspbmc, Android...
Trong đề tài nhóm chúng em đã lựa chọn hệ điều hành Raspbian là hệ điều hành cho kit Raspberry Pi 3.
3.3.2. CÀI ĐẶT HỆ ĐIỀU HÀNH CHO KIT RASPBERRY PI 3 [4] 3.3.2.1 Thiết bị cần dùng để cài đặt
Thẻ nhớ SD dung lượng tối thiểu là 8GB, Class 4.
Máy tính cá nhân để điều khiển từ xa.
Dây mạng.
Nguồn điện 5V, 2.5A (tối thiểu là 1A).
3.3.2.2 Cài đặt hệ điều hành Raspbian
Bước 1: Tải bản cài đặt về máy tính và giải nén.
Chúng ta sẽ vào trang www.raspberrypi.org và tải phiên bản mới nhất đó là hệ điều hành Raspbian Stretch with desktop.
Hình 3.13. Hệ điều hành Raspbian Stretch. Bước 2: Tải phần mềm SD Card Formatter và cài đặt.
Chúng ta dùng phần mềm này để định dạng thẻ nhớ SD. Sau khi đã cài đặt hoànthành, ta mở phần mềm và định dạng thẻ.
Hình 3.14. Phần mềm SD Card Formatter Bước 3: Tải phần mềm Win32 Disk Imager và cài đặt.
Khi cài đặt xong. Chúng ta mở phần mềm, chọn đường dẫn đến file chứa hệ điều hành Raspbian Stretch và chọn Write. Chờ báo hoàn thành là đã xong bước cài hệđiều hành vào thẻ nhớ.
Hình 3.15. Phần mềm Win32 Disk Imager. 3.3.2.3. Điều khiển Raspberry Pi 3 từ xa bằng cách remote máy tính
Bước 1: Gắn thẻ nhớ vào máy tính sẽ xuất hiện ổ đĩa SD tên là Boot, vào Boot và
đây 192.168.137.2 là địa chỉ của Raspberry Pi (có thể đặt số khác với yêu cầu khác số 1).
Hình 3.16. Vào ổ đĩa Boot
Hình 3.17. Thêm địa chỉ IP của Raspberry vào file cmdline.text
Bước 2: Gắn thẻ nhớ vào kit Raspberry Pi 3, kết nối dây mạng Ethernet giữa máy tínhvới kit và cấp nguồn.
Bước 3: Tải phần mềm Putty vào máy tính và cài đặt:
Hình 3.18. Nhập địa chỉ ip của Raspberry Pi
Sau đó, cho phép chuyển tiếp X11
Hình 3.19. Chuyển tiếp X11
Bước 4: Sau khi nhấn Open, ta sẽ truy cập được vào màn hình command line của Raspberry Pi, sau đó nhập username và password (mặc định là pi và raspberry). Sau đó cài đặt xrdp bằng lệnh : sudo apt-get install xrdp
Hình 3.20. Cài đặt xrdp thành công.
Bước 5: Sau khi cài đặt xong, chúng ta mở Remote Desktop và nhập địa chỉ ip của
Raspberry và kết nối.
Hình 3.21. Mở Remote Desktop và kết nối với Raspberry.
Bước 6: Sau khi đã kết nối, chúng ta đăng nhập bằng cách nhập usename và passwordnhư bình thường.
Hình 3.22. Nhập usename và password
Bước 7: Cuối cùng ta đã kết nối được màn hình Raspberry và làm việc bình thường.
Hình 3.23. Giao diện của hệ điều hành Raspbian Stretch. 3.3.3. CÀI ĐẶT THƯ VIỆN CHO RASPBERRY PI3 [4] 3.3.3.1. Cài đặt OpenCV
Bước 1: Mở rộng hệ thống tập tin
$ sudo raspi-config
$ sudo reboot
Sau khi khởi động lại, hệ thống tập tin cần được mở rộng bao gồm tất cả các không gian có sẵn trên thẻ nhớ micro-SD. Chúng ta xác minh rằng đĩa đã được mở rộng bằng cách thực hiện df-h và kiểm tra đầu ra.